当前位置:   article > 正文

【单片机毕业设计】【mcuclub-cl-006】基于单片机的汽车驾驶的设计_基于单片机的汽车自动驾驶转向控制系统设计

基于单片机的汽车自动驾驶转向控制系统设计

最近设计了一个项目基于单片机的汽车驾驶系统,与大家分享一下:

一、基本介绍

项目名:汽车驾驶
项目编号:mcuclub-cl-006
单片机类型:STC89C52、STM32F103C8T6
具体功能:
1、通超声波检测前方障碍物,当检测到障碍物距离小于100cm大于50cm,语音提醒(请注意,前方有障碍物),当检测到障碍物距离小于等于50cm时自动停车(继电器控制车轮停止)
2、通过MQ-3检测酒精浓度,当酒精浓度大于设置最大值,语音提醒(请注意,酒精浓度超标),无法启动汽车
3、通过MQ-7检测CO浓度,当CO浓度大于设置最大值,语音提醒(请注意,CO浓度超标)并通过继电器控制风扇通风
4、设定驾车时长,当超时时,语音提醒(请注意,已疲劳驾驶)
5、通过按键设置各阈值、启动汽车
6、通过显示屏显示数据
扩展功能:通过蓝牙将测量数据发送到手机端

二、51实物图

单片机型号:STC89C52

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C

三、51仿真图

仿真软件版本:proteus8.9

电路连线方式:网络标号连线方式

注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样

 四、32实物图

单片机型号:STM32F103C8T6

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C

 五、原理图

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

 六、PCB图

由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

七、系统框图

该技术基于STC89C52智能汽车驾驶以STC89C52单片机为核心控制器,加上其他的模块一起组成该控制系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STC89C52单片机,其主要作用是获取输入部分数据,经过内部处理,控制输出部分。输入由六部分组成,第一部分是超声波测距模块,通过该模块对汽车前方的障碍物进行检测;第二部分是CO浓度检测模块,通过该模块对汽车内的CO浓度进行检测;第三部分是酒驾检测模块,通过该模块对汽车内的酒精进行检测:第四部分时独立按键模块,通过该模块乘客可以对当车内环境威胁本身时进行报警,更好的进行人机交换:第五部分是供电模块,通过该模块,给整个系统进行供电;输出由五部分组成,第一部分是显示模块, 通过该模块可以显示当前时间、距离、CO浓度,酒精浓度;第二部分是报警模块,通过该模块顾客可以通过按键对所处环境的危险程度进行报警;第三部分为继电器控制通风系统,当检测到汽车内的CO浓度超过安全值进行通风吹里:第四部分为继电器控制引擎系统,当汽车检测到车前有障碍物超过安全值是致使汽车停止运行,第五部分是语音播报,通过该模块可对驾驶员长时间驾驶进行语音提醒;除此之外还有蓝牙模块,可以将监测的数据发送到用户的手机上,系统框图如图所示。

 八、软件设计流程

系统的主流程图如图所示;在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,比如切换界面、距离、CO、驾车时间、车辆状态、按键标志位等;紧接着进入第二个函数监测函数,每隔100ms检测一次,该函数主要获取距离值、酒精浓度值、CO浓度值,并通过蓝牙发送到用户的手机上;紧接着进入第三个函数显示函数,该函数通过不同的界面标志位显示不同的界面;紧接着进入第四个函数处理函数,倒计时结束,语音提醒,一氧化碳超标,通风、语音提醒,酒精超标,语音提醒、汽车无法通过按键启动,距离小于100,语音提醒;小于五十,停车。

 九、部分程序展示

软件版本:keil5

逻辑程序和驱动程序分开,分布于main.c和其他.c文件

  1. void Manage_function(void)
  2. {
  3. if(flag_display == 0) //测量界面
  4. {
  5. if(countdown_hour != 0 || countdown_minute != 0 || countdown_second != 0) //通风倒计时不为0
  6. flag_countdown_begin = 1;
  7. if(flag_1s == 1) //1s到达
  8. {
  9. flag_1s = 0;
  10. if(countdown_second > 0) //倒计时秒>0
  11. countdown_second--; //倒计时秒-1
  12. else //倒计时秒=0
  13. {
  14. if(countdown_minute > 0) //如果倒计时分>0
  15. {
  16. countdown_minute--; //倒计时分-1
  17. countdown_second = 59; //倒计时秒=59
  18. }
  19. else //如果倒计时分=0
  20. {
  21. if(countdown_hour > 0) //如果倒计时时>0
  22. {
  23. countdown_hour--; //倒计时时-1
  24. countdown_minute = 59; //倒计时分=59
  25. countdown_second = 59; //倒计时秒=59
  26. }
  27. else //如果倒计时时=0,倒计时结束
  28. {
  29. flag_countdown_begin = 0;
  30. flag_countdown_end = 1;
  31. }
  32. }
  33. }
  34. }
  35. if(flag_countdown_end == 1) //倒计时结束,语音提醒
  36. {
  37. flag_countdown_end = 0;
  38. printf("请注意,已疲劳驾驶");
  39. }
  40. if(co_value > co_max) //一氧化碳超标,通风、语音提醒
  41. {
  42. RELAY_TF = 0;
  43. if(co_remind == 0)
  44. {
  45. printf("请注意,一氧化碳浓度超标");
  46. co_remind = 1;
  47. }
  48. }
  49. else
  50. {
  51. RELAY_TF = 1;
  52. co_remind = 0;
  53. }
  54. if(alcohol_value > alcohol_max) //酒精超标,语音提醒、汽车无法通过按键启动
  55. {
  56. if(alcohol_remind == 0)
  57. {
  58. printf("请注意,酒精浓度超标");
  59. alcohol_remind = 1;
  60. sprintf(display_buf,"\r\nA:%dppm",alcohol_value);
  61. Uart1_Sent_Str(display_buf);
  62. }
  63. }
  64. else
  65. {
  66. alcohol_remind = 0;
  67. }
  68. if(distance_value < 100 && RELAY_CL == 0) //距离小于100,语音提醒;小于五十,停车
  69. {
  70. if(distance_remind == 0)
  71. {
  72. printf("请注意,前方有障碍物");
  73. distance_remind = 1;
  74. }
  75. if(distance_value <= 50)
  76. {
  77. RELAY_CL = 1;
  78. }
  79. }
  80. else
  81. {
  82. distance_remind = 0;
  83. }
  84. }
  85. else //设置界面
  86. {
  87. RELAY_CL = 1;
  88. RELAY_TF = 1;
  89. }
  90. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/588137
推荐阅读
相关标签
  

闽ICP备14008679号