本文设计是基于STM32开发板,设计的一个简易的汽车防碰撞系统。该系统分为高速和低速两个挡位,通过判断按键操作进行档位转换。测量障碍物距离是使用HC-SR04超声波模块;使用HC-SR501热释电模块来检测是否有人体靠近。该防碰撞系统通过对模块返回的数据分析然后通过无源蜂鸣器进行报警提示,提示车主障碍物的出现以及时地做出反应。
关键词:STM32 双模式 超声波 热释电 报警
车辆的增多使得交通事故频频发生,全球每年由交通事故造成的人员和财产
车辆的增多使得交通事故频频发生,全球每年由交通事故造成的人员和财产损失的数目是惊人的,因此,车辆安全问题已引起人们的高度重视。对大量交通事故的分析表明,80%以上的车祸是由于驾驶员反应不及时引起的,超过65%的车辆相撞属于追尾相撞,其余则属于侧面相撞和正面相撞。有关研究表明,若驾驶员能够提早1s意识到有事故危险并采取相应的措施,则90%的追尾事故和60%的正面碰撞事故都可以避免。为了减少交通事故,个人在车载系统的功能将得到改善。最起码的信息和预警系统,已经在市场上出现的,而驾驶辅助和自动化技术在地平线上的进一步定位。在驾驶员信息系统的关键技术挑战是降低生产成本,同时提供动态的路线引导能力。例如,目前大多数系统提供基于“静态”地图交通的考虑,不论路由。动态路径诱导系统基础上,当时的“实时”条件下的巷道,如事故或施工造成的瓶颈的位置,可确定最佳路线。防撞系统开发技术的主要挑战是降低成本的同时,也提高了感应功能,以提高准确性和可靠性。自动车将共享许多防撞系统的传感元件,还必须具备的情报,可以不断地评估不断变化的环境和驾驶环境的情况下。
汽车发生碰撞的主要原因是由于汽车距其前方物体(如汽车、行人或其他障碍物)的距离与汽车本身的车速不相称造成的,即距离近而相对速度又太高。为了防止汽车与前方物体发生碰撞,汽车的车速就要根据与前方物体的距离变化由执行机构进行控制,使汽车始终在安全车速下行驶。这样就会大大提高汽车行驶的安全性,减少车祸的发生。发展汽车防撞技术,对提高汽车智能化水平有重要意义。
在不同的车速情况下通过按键选择不同的档位。内部超声波模块检测车辆前后障碍物的距离,通过代码分析确定是否鸣警提示车主。车后装有热释电模块检测是靠近人体以提示车主。蜂鸣器根据不同情况发出不同频率的震动响声提示车主做出相应的操作。大致框架流程如图
报警条件:
高速模式:前后车距小于3m,蜂鸣器报警。
低速模式:前后车距小于0.5m或检测到有人靠近,蜂鸣器报警
图1 框架流程
STM32属于一个微控制器,自带了各种常用通信接口,功能非常强大。
1、串口—USART,用于跟跟串口接口的设备通信,比如: USB转串口模块、 ESP8266、WIFI、 GPS模块, GSM 模块,串口屏、指纹识别模块。
2、内部集成电路—I2C,用于跟I2C接口的设备通信,比如: EEPROM、电容屏、陀螺仪MPU6050、 0.96寸OLED模块。
3、串行通信接口—SPI,用于跟SPI接口的设备通信,比如:串行FLASH、以太网W5500、音频模块VS1053。
4、 SDIO、 FSMC的超级、 I2S、 ADC、 GPIO。
本防碰撞系统的电路主要由6大部分电路组成:供电电路,按键电路、stm32最小系统电路、超声波电路、热释电电路和蜂鸣器警报电路。下面具体介绍相关电路。
供电电路由USB接口引入5V电源,分别给HC-SR04、HC-SR501、蜂鸣器供电,5V电压再通过asm117电路转换成3.3v电压给STM32最小系统供电如图所示。
图2 供电电路
按键电路通过一个按键来进行模式选择。此外按键上并联了一个100uF的电容对按键进行消抖。电路如图3所示。
图3 按键输入电路
最小系统电路由stm32芯片,外部晶振电路,复位电路,下载电路组成是控制电路的核心如下图4所示。
图4 STM32最小系统电路
此部分电路是通过IO口外接HC-SR04模块如图5所示。
图5 HC-SR04显示电路及实物图
此部分电路是通过IO口外接HC-SR501模块如图6所示。
图6 HC-SR501电路及实物图
此部分电路同样外接蜂鸣器模块,如图7所示。
图7 蜂鸣器电路及实物图
MDK5软件,程序使用C语言,并引用官方库进行编写。程序流程图如图8示,程序如附录二所示。程序进入MAIN函数后,模式选择配置、串口配置、前超声波配置、后超声波配置 、蜂鸣器配置,初始化这些配置后进入while函数。然后通过IO置位和延时函数使前后超声波模块开始工作。判断当前为高速还是低速模式,进入相应的模式后,对数据进行判断,最后通过IO口输出不同频率的PWM波来是蜂鸣器工作。
图8整体程序流程图
此次设计立足于课程设计的实验运用,在实践操作过程中体会到了开发项目中遇到的各种问题,开拓了思维,实践出真知,这次学习让我感受颇深,体会到了我们专业学习过程中理论与实践相结合的重要性,同时帮助复习专业中的一些模糊知识点。
本次设计在同学和老师的安排和帮助下完成,实现了课题中的基本需求。同时在查找资料过程中学到了很多延伸的东西。经过几天和同学共同的研究,最终完成了本次课题设计的需求,也发现了自己知识的浅陋以及考虑问题时的不严谨,还需要多加磨砺,积累项目经验。
参考文献
[1] 宋保林 周汽一.汽车主动防撞系统的规避控制研究[A].
[2] 朱承高.STM32从入门到精通[M].北京:高等教育出版社,3990
附录一:整体电路图
附录二:程序
#include "stm32f10x.h"
#include "bsp_advanced_tim.h"
#include "bsp_advanced_tim1.h"
#include "bsp_systick.h"
#include "bsp_usart.h"
#include "bsp_gpio.h"
#include "bsp_Tim_PWM.h"
#include "bsp_exti.h"
extern uint16_t flag,k,k1;
uint16_t u=0;
int main(void)
{
EXTI_KEY_Config(); //模式选择配置
USART_Config(); //串口配置
Advanced_Tim_Config(); //前超声波配置
Advanced_Tim1_Config(); //后超声波配置
TIM_PWM_Config(35,999,500); //蜂鸣器配置
GPIO_OUT_Config(GPIOA,RCC_APB2Periph_GPIOA,GPIO_Pin_6,GPIO_Mode_Out_PP);//前超声波
GPIO_OUT_Config(GPIOA,RCC_APB2Periph_GPIOA,GPIO_Pin_7,GPIO_Mode_Out_PP);//后超声波
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_6); //前超声波工作
SysTick_Delay_us(10);
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
SysTick_Delay_ms(1000);
GPIO_SetBits(GPIOA,GPIO_Pin_7); //后超声波工作
SysTick_Delay_us(10);
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
if(flag==0) //低速模式
{
u=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2);
if(u==1) //检测到人
{
TIM_PWM_Config(17,999,500);
TIM_Cmd(TIM2,ENABLE); //警报响
SysTick_Delay_ms(2000);
TIM_Cmd(TIM2,DISABLE); //警报停
u=0;
}
if(k<=0.5|k1<=0.5)
{
TIM_PWM_Config(35,999,500);
TIM_Cmd(TIM2,ENABLE); //警报响
SysTick_Delay_ms(2000);
TIM_Cmd(TIM2,DISABLE); //警报停
}
}
if(flag==1) //高速模式
{
if(k<=3|k1<=3)
{
TIM_Cmd(TIM2,ENABLE); //警报响
SysTick_Delay_ms(2000);
TIM_Cmd(TIM2,DISABLE); //警报停
}
}
}
}