功能介绍:采用stm32单片机作为主控CPU,采用MQ3传感器采集酒精浓度,采用红外接触传感器感应驾驶员上车时间,OLED显示酒精浓度和驾驶时间,当酒精浓度超过阈值(程序可调),蜂鸣器报警,当驾驶时间大于设置值(程序可调),蜂鸣器进行提醒,用来提醒疲劳驾驶,程序中文注释,新手容易看懂,文末有分享链接;
下面是实物演示视频和相关实物图片
79-基于stm32单片机酒精浓度测量疲劳驾驶检测系统(程序+原理图+元件清单全套资料)
下面是程序部分展示(程序有中文注释,新手容易看懂)
程序部分展示:(有中文注释,新手容易看懂)
void GPIOB_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIO B 时钟打开
//==PB5 输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//指定管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;// 做PWM
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//做led控制
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;//指定管脚LED背光
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 做输出
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
}
int main()
{
TIMER2_init(999,71);
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
USART1_Init(9600);
LED_Init();
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
OLED_Clear();
DHT11_Init ();
KEY_Init();
beep1=1;
Adc_Init();
while(1)
{
OLED_Refresh();
adcx=Get_Adc_Average(ADC_Channel_0,10);//读取酒精值
temp=(float)adcx/4096*3.3;
temp=temp*100-100;
if(temp<0) temp=0;
temp1=temp;
OLED_ShowString(1,20,"MQ3:",8,1);//显示酒精值
OLED_ShowNum(35,20,temp,3,8,1);
OLED_ShowString(60,20,"mg/L",8,1);
if(DHT11_Data .temp_int>29||DHT11_Data .humi_int>90||temp>20||num>60) beep1=0;//超过阈值蜂鸣器报警
else beep1=1;
if(K1==0) num++;//检测驾驶时间
OLED_ShowString(0,40,"TIME:",8,1);//显示时间
OLED_ShowNum(35,40,num,4,8,1);
}
}
程序打开办法:特别注意:下载资料包以后一定要先解压!!!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。
原理图采用【AD】altium designer打开,文件中有安装包
下面是资料包里面包含的相关文件展示