基于STM32汽车儿童安全预警系统设计 - 实践

若该文为原创文章,转载请注明原文出处。

一、 系统概述

本项目旨在设计一个基于STM32微控制器的智能车载系统,用于防止儿童被误锁在车内并因此发生高温窒息事故。系统通过多传感器(温度、人体感应)实时监测车内环境与生命体征,一旦判定为“儿童遗留”危险状态,将通过CAT1模块主动向家长手机发送报警短信,并同时启动本地声光报警(OLED显示、蜂鸣器),车内儿童也可通过“一键求助”按钮主动触发报警。系统包含误触发处理机制,以提高实用性。

二、 系统核心功能

  1. 环境监测:通过温度传感器实时监测车内温度。

  2. 生命探测:通过热释电红外传感器(PIR)感知车内是否有活体(儿童)。

  3. 远程报警:通过CAT1通信模块,以短信形式将报警信息(温度、状态)发送到预设的手机号码。

  4. 人机交互

    • OLED显示:实时显示车内温度、系统状态(正常、报警、求助)、信号强度等。

    • 按键交互:用于系统功能设置(如报警温度阈值设置)、测试、复位等。

    • 一键报警:独立的紧急求助按键,供车内儿童主动触发。

  5. 声光预警:蜂鸣器(或语音模块)在报警状态下鸣响,引起车外人员注意。

  6. 误触发处理:加入延迟判断与手动取消机制,防止车辆短暂熄火、人员临时下车等正常情况触发误报警。

三、 系统硬件设计

1. 主控制器 (MCU)
  • 芯片选型STM32F103C8T6 (核心板俗称Blue Pill)

    • 理由:性价比极高,资源丰富,拥有足够的GPIO、UART、I2C、ADC等外设来连接所有模块,社区支持好,资料丰富。

2. 传感器模块
  • 温度传感器DS18B20

    • 接口:单总线 (One-Wire)

    • 理由:数字输出,精度较高(±0.5°C),无需额外ADC,防水探头可选。

  • 人体感应传感器HC-SR501 热释电红外传感器 (PIR)

    • 接口:数字输出 (GPIO)

    • 理由:成本低,使用简单,可调节灵敏度和延时时间。

3. 通信模块
  • CAT1模块移远EC200S AIR780E

    • 接口:UART (AT指令集)

    • 功能:支持LTE Cat1网络,提供短信(SMS)和数据传输能力。本项目主要使用其短信功能。

4. 显示与交互模块
  • OLED显示屏0.96寸 SSD1306 I2C接口

    • 理由:低功耗,高对比度,显示信息直观,I2C接口节省IO口。

  • 按键

    • 功能按键:1个,用于设置/切换/确认。

    • 紧急求助按键:1个,独立大按键,颜色鲜艳,供儿童使用。

    • 取消报警按键:1个,用于在误报警时手动取消。

5. 声学模块
  • 有源蜂鸣器:用于发出尖锐的警报声。

  • 语音模块:可选配(如SYN6288语音合成模块),在报警时播放“救命!车内好热!”等预录语音,效果更佳。

6. 电源模块
  • 输入:从车辆点烟器接口(12V)或OBD-II接口取电。

  • 转换:使用LM2596等DC-DC降压模块将12V转换为稳定的5V,再通过AMS1117-3.3V LDO为STM32及其他3.3V模块供电。

四、 系统软件设计 (逻辑流程图与关键代码思路)

1、核心判断逻辑

触发报警的条件需要同时满足,并持续一段时间(例如2分钟)以防止误报:

// 伪代码
if ( (CurrentTemperature > ALARM_TEMP_THRESHOLD) && (PIR_Detects_Human == TRUE) ) {
    Alarm_Delay_Timer++;
    if (Alarm_Delay_Timer > 120) { // 2分钟 * 60秒 / 假设1秒检测一次
        Trigger_Alarm(); // 确认为危险状态,触发报警
    }
} else {
    Alarm_Delay_Timer = 0; // 条件不满足,清零计时
}
2. 误触发处理机制
  • 延时触发:如上所述,条件必须持续满足一段时间才报警。

  • 手动取消:提供物理按键,在报警触发后(或触发前)允许车主手动取消。

  • 车辆状态判断(进阶):可以增加检测车辆ACC(点火开关)状态的电平检测电路。系统只在ACC关闭(车辆熄火)后才开始进入监控判断逻辑,从根本上避免行驶中的误报。

3. 短信内容示例
  • 报警短信【儿童安全警报】您的车辆内检测到儿童遗留!当前温度:38.5°C,请立即处理!位置信息:XXX(可集成GPS模块扩展)

  • 求助短信【紧急求助】车内人员主动求助!当前温度:36.2°C,请立即查看!

五、 关键代码片段 (思路)

// 1. CAT1 发送短信函数 (基于AT指令)
void CAT1_Send_SMS(char *phone_number, char *message) {
printf("AT+CMGF=1\r\n");        // 设置短信为文本模式
HAL_Delay(500);
printf("AT+CMGS=\"%s\"\r\n", phone_number); // 设置目标号码
HAL_Delay(500);
printf("%s%c", message, 0x1A);  // 发送内容,并以Ctrl+Z(0x1A)结束
HAL_Delay(1000);
}
// 2. 主循环中的判断逻辑
while (1) {
// ... 读取温度值 temp, 读取PIR状态 pir_status ...
// 显示到OLED
OLED_ShowString(0, 0, "Temp: ");
OLED_ShowNum(40, 0, temp, 2);
// 核心判断
if ((temp > TEMP_THRESHOLD) && (pir_status == 1)) {
alarm_pending_counter++; // 预警计数器增加
OLED_ShowString(0, 3, "DANGER! Waiting...");
} else {
alarm_pending_counter = 0; // 条件不满足,清零
OLED_ShowString(0, 3, "Status: Normal    ");
}
// 判断是否达到延时阈值
if (alarm_pending_counter > ALARM_DELAY) {
Do_Alarm(); // 执行报警动作
}
HAL_Delay(1000); // 每秒检测一次
}
// 3. 报警执行函数
void Do_Alarm(void) {
// 1. 启动蜂鸣器
BUZZER_ON();
// 2. OLED显示报警信息
OLED_Clear();
OLED_ShowString(0, 0, "!!! ALARM !!!");
OLED_ShowString(0, 2, "Child in Car!");
OLED_ShowString(0, 4, "SMS Sent...");
// 3. 发送短信
CAT1_Send_SMS("13800138000", "【儿童安全警报】您的车辆内检测到儿童遗留!当前温度:38.5°C,请立即处理!");
// 4. 等待取消按键
while(HAL_GPIO_ReadPin(CANCEL_KEY_GPIO_Port, CANCEL_KEY_Pin) == GPIO_PIN_RESET) {
// 循环等待,直到用户按下取消键
}
// 5. 取消报警
BUZZER_OFF();
system_reset(); // 系统状态复位
}

六、 系统优化与扩展方向

  1. 增加GPS/GNSS模块:在报警短信中附加车辆的经纬度位置信息,方便家长快速定位。

  2. 使用车载电池供电:加入低压检测功能,当车辆电瓶电压过低时自动进入休眠,防止车辆无法启动。

  3. 云平台与APP:通过CAT1的数据传输功能,将数据上报到云平台,家长可以通过手机APP实时查看车内温度和状态历史曲线。

  4. 双模通信:增加蓝牙功能,方便车主上车时通过手机蓝牙自动连接并禁用报警系统。

  5. 机械结构设计:设计3D打印外壳,将整个系统集成,便于安装和固定。

如有侵权,或需要完整代码,请及时联系博主。

posted @ 2025-09-05 17:57  wzzkaifa  阅读(27)  评论(0)    收藏  举报