基于STM32单片机汽车防碰控制系统

基于STM32单片机汽车防碰控制系统
一、系统方案

随着汽车保有量的增加,交通安全问题也越来越受到关注。汽车防碰撞技术成为当前汽车安全领域的研究热点之一。汽车防碰撞系统是一种主动安全技术,可以帮助驾驶员在驾驶过程中及时发现并避免潜在的碰撞危险。
基于此,本文基于STM32单片机所设计的汽车防碰撞报警器系统使用了超声波对车后距离进行检测,使用OLED对检测距离进行可视化显示,并根据检测距离进行异常判断,并配备蜂鸣器警报提示。该系统通过传感器等设备采集车辆周围环境信息,通过自动化处理和分析,判断车辆与周围物体的距离和速度,当发现潜在碰撞风险时,通过警告或自动制动等方式提醒驾驶员采取相应的措施,从而降低交通事故发生的概率。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化:
u8 num=0;
float length;
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
Hcsr04Init();
printf(“串口测试\r\n”);

Hcsr04Init();
printf(“超声波初始化成功!\n”);
OLED_Init(); //初始化OLED
OLED_Clear() ;

 	ShowCHinese(0,0,0);//
			ShowCHinese(18,0,1);//
	ShowCHinese(36,0,2);//
	ShowCHinese(54,0,3);//
	ShowCHinese(72,0,4);//
	ShowCHinese(90,0,5);//
LED_Init();
 	KEY_Init();          	//初始化与按键连接的硬件接口

2、中断服务程序

//定时器4终中断
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
msHcCount++;
}
}

3、OLED显示程序
//初始化SSD1306
void OLED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 //使能A端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;	 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);	  //初始化GPIOD3,6
GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6);	

delay_ms(800);
OLED_WR_Byte(0xAE,OLED_CMD);//–display off
OLED_WR_Byte(0x00,OLED_CMD);//—set low column address
OLED_WR_Byte(0x10,OLED_CMD);//—set high column address
OLED_WR_Byte(0x40,OLED_CMD);//–set start line address
OLED_WR_Byte(0xB0,OLED_CMD);//–set page address
OLED_WR_Byte(0x81,OLED_CMD); // contract control
OLED_WR_Byte(0xFF,OLED_CMD);//–128
OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
OLED_WR_Byte(0xA6,OLED_CMD);//–normal / reverse
OLED_WR_Byte(0xA8,OLED_CMD);//–set multiplex ratio(1 to 64)
OLED_WR_Byte(0x3F,OLED_CMD);//–1/32 duty
OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
OLED_WR_Byte(0x00,OLED_CMD);//

OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
OLED_WR_Byte(0x80,OLED_CMD);//

OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
OLED_WR_Byte(0x05,OLED_CMD);//

OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
OLED_WR_Byte(0xF1,OLED_CMD);//

OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
OLED_WR_Byte(0x12,OLED_CMD);//

OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
OLED_WR_Byte(0x30,OLED_CMD);//

OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
OLED_WR_Byte(0x14,OLED_CMD);//

OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel

}
//显示2个数字
//x,y :起点坐标
//len :数字的位数
//size:字体大小
//mode:模式 0,填充模式;1,叠加模式
//num:数值(0~4294967295);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;
if(enshow0&&t<(len-1))
{
if(temp
0)
{
OLED_ShowChar(x+(size2/2)*t,y,’ ',size2);
continue;
}else enshow=1;

	}
 	OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 
}

}
//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 chr,u8 Char_Size)
{
unsigned char j=0;
while (chr[j]!=‘\0’)
{ OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
//显示汉字
void ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2
no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}

4、核心算法程序
//通过定时器4计数器值推算距离
float Hcsr04GetLength(void )
{
u32 t = 0;
int i = 0;
float lengthTemp = 0;
float sum = 0;
while(i!=5)
{
TRIG_Send = 1;
delay_us(20);
TRIG_Send = 0;
while(ECHO_Reci == 0);
OpenTimerForHc();
i = i + 1;
while(ECHO_Reci == 1);
CloseTimerForHc();
t = GetEchoTimer();
lengthTemp = ((float)t/58.0);//cm
sum = lengthTemp + sum ;

}
lengthTemp = sum/5.0;
return lengthTemp;

}
四、实物调试
根据原理图,将硬件一一焊接上去,在硬件焊接的过程中,必须时刻注意板后的焊点是否存在虚焊、正负极是否焊反、短路和断路等情况出现,以上这些情况都容易出现给单片机送电后单片机不工作,或者单片机烧坏。
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbxyliyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值