STM32单片机设计防儿童人员误锁/滞留车内警报系统
目录
目录
前言
一、本设计主要实现哪些很“开门”功能?
二、电路设计原理图
1.电路图采用Altium Designer进行设计:
2.实物展示图片
三、程序源代码设计
四、获取资料内容
前言
近年来在车辆逐渐普及的情况下,由于家长的疏忽,将儿童误锁车内导致悲剧发生情况时有发生。儿童被锁车内因高温,缺氧而窒息死亡的事件也屡见不鲜。近年儿童被锁车内死亡的新闻逐渐增多,我们在一边提高注意力的同时,是不是可以通过一种预警器来避免这种情况。
因此,基于这种情况,我们以STM32F103芯片为控制核心设计的误锁车内的主动式报警装置便应运而生。本装置解决的最大问题就是一旦发现有孩童被遗忘在车里会立即打电话给车主报警。本装置由STM32F103c8t6芯片、红外遥控、GSM模块、温度监测模块、CO检测模块、WIFI模块等其他硬件设计而成的误锁车内的主动式报警装置,通过红外遥控模拟车钥匙关闭车门后立即上电各个模块立即开始工作,红外如果检测到人,GSM模块立即拨打电话给车主报警,而车主知道后可在赶回去车里时可用过APP实时了解车内温度高低和车内有害气体浓度,确保能在第一时间保障车内人员安全。
一、本设计主要实现哪些很“开门”功能?
1、APP远程开关控制车辆
2、APP远程读取车辆智能传感器数据信息
3、APP上显示数据弹窗信息警告功能,温度弹窗,有害气体弹窗
4、系统WIFI智能联网,数据双向交互,APP WIFI连接
5、无线遥控,可控制车辆开关门
6、红外热释式人体红外检测,一旦检测触发警报
7、车内有害气体检测,并不上传到手机APP显示
8、车内温度检测,温度数据上传到APP显示
9、报警装置的的人体红外检测到车上有人立即启动拨打电话进行警报
10、测内温度系统自动判别,立即开启风扇进行降温
二、电路设计原理图
1.电路图采用Altium Designer进行设计:
1、通过STM32F103C8T6单片机作为系统主控,最小系统电路是整个电路的核心。
2、通过红外热释模块实现的人体检测,模块与单片机之间通过数字引脚进行连接。
3、 使用无线433HZ射频遥控,模块与单片机进行数据引脚协议解析。
4、通过DS18B20进行测内温度检测,模块与单进行单总线连接。
5、使用GSMSIM900A短信模块发送短信打电话,模块与单片机使用串口连接。
6、通过STM32F103C8T6单片机作为系统主控,最小系统电路是整个电路的核心。
7、使用ESP8266 WIFI模块进行联网,模块与单片机串口连接。
8、使用MQ-9有害气体检测车内一氧化碳浓度,模块与单片机使用模拟引脚连接。
2.实物展示图片
三、程序源代码设计
代码如下(示例):
/* 用户区当前设备状态结构体*/
dataPoint_t currentDataPoint;
u8 wifi_sta=0;//WIFI连接状态 0: 断??: 已连接
//协议初始化
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);//1MS系统定时
usart3_init(9600);//WIFI初始化
memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化
gizwitsInit();//缓冲区初始化
}
//数据采集
void userHandle(void)
{
//判断当前LED1开关量
if(LED0==1&&aa==1)
{
currentDataPoint.valueAlarm_switch = 1;
}
else
{
currentDataPoint.valueAlarm_switch = 0;
}
if(wifi_sta)//判断wifi 是否连接
{
temp=DS18B20_Get_Temp();//读取DS18B20温度值赋给temp
currentDataPoint.valueCar_temp = temp ;//温度数据
if(temp>=Temp_alarm)//温度值>温度上限值
{
temp_num++;
FAN=0;//继电器0触发
if(temp_num>=alarm_num)//警报次数达到一定次数
{
temp_num=0;
currentDataPoint.valueTemp_Alarm=1;//APP出现警报提示
}
}
else
{
FAN=1;
currentDataPoint.valueTemp_Alarm=0;
}
adcx=Get_Adc_Average(ADC_Channel_1,10);
voltoge_2=(float)adcx*(3.3/4596);
if(voltoge_2>0.35&&voltoge_2<=0.75)
{gas = gas_chu;}
else
{
voltoge_2=voltoge_2-voltoge_1;
gas=voltoge_2*450+gas_chu;
}
currentDataPoint.valueGas_con = gas; //有害气体数据
if(gas>=gas_alarm)//有害气体浓度>浓度上限值
{
gas_num++;
if(gas_num>=alarm_num)//警报次数达到一定次数
{
gas_num=0;
currentDataPoint.valueGas_Alarm=1;//APP出现警报提示
}
}
else
{
currentDataPoint.valueGas_Alarm=0;
}
}
else
{
//没连接wifi,将警报次数清零 保险
if(temp_num!=0||gas_num!=0)
{
temp_num=0;gas_num=0;
}
}
}
//主函数
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
KEY_Init(); //按键初始化
EXTIX_Init(); //外部中断初始化
Gizwits_Init(); //协议初始化
DS18B20_Init(); //温度初始化
Adc_Init(); //ADC初始化
LED_Init(); //LED端口初始化
uart_init(115200); //串口初始化为115200
printf("ATS7=30\r");//从拨打电那一刻起到自动挂断30秒
delay_ms(200);
while(1)
{
userHandle();//用户采集
gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理
}
}