1. 项目概述与核心需求
在各类建筑环境中,火灾始终是威胁生命财产安全的主要隐患之一。传统火灾报警系统普遍存在响应滞后、误报率高、功能单一等问题。针对这些痛点,我们基于STM32F103C8T6微控制器设计了一套智能火灾监测系统,实现了多参数采集、实时预警和远程监控的完整解决方案。
系统核心功能模块包括:
- 环境参数采集(温度/烟雾/火焰)
- OLED实时数据显示
- 声光报警装置
- WiFi远程通信
- 手机APP交互界面
- 可扩展接口设计
关键设计指标:温度检测精度±0.5℃(0-100℃范围)、烟雾检测范围0-1000ppm、火焰检测距离0.1-3m、报警响应时间≤1秒、WiFi通信距离≥10m
2. 硬件系统设计详解
2.1 主控模块选型
经过多方案对比,最终选定STM32F103C8T6作为主控芯片,主要基于以下考量:
- 性能参数:72MHz主频的Cortex-M3内核,完全满足实时数据处理需求
- 外设资源:
- 3个USART接口(WiFi+扩展)
- 2个I2C接口(OLED+备用)
- 12位ADC(烟雾传感器采集)
- 开发生态:完善的HAL库支持和丰富的社区资源
- 成本控制:10元以内的单价极具性价比
2.2 传感器模块设计
2.2.1 温度检测方案
选用DS18B20数字温度传感器,其优势在于:
- 单总线通信节省IO资源
- ±0.5℃的测量精度
- 防水封装适合复杂环境
- 实测中发现需注意:总线必须加上拉电阻(4.7KΩ),且每次读取间隔应≥750ms
2.2.2 烟雾检测实现
采用MQ-2模拟输出型传感器,关键设计要点:
- 预热电路设计:增加LED指示灯,预热时红灯常亮(约1分钟)
- ADC采样优化:
c复制// 均值滤波算法示例 #define SAMPLE_TIMES 5 uint16_t Get_ADC_Value(ADC_HandleTypeDef* hadc) { uint32_t sum = 0; for(uint8_t i=0; i<SAMPLE_TIMES; i++){ sum += HAL_ADC_GetValue(hadc); HAL_Delay(2); } return sum/SAMPLE_TIMES; } - 标定方法:使用标准烟雾源在0/500/1000ppm三点校准
2.2.3 火焰检测电路
IR230火焰传感器的接口设计中:
- 增加比较器电路(LM393)提高抗干扰能力
- 检测角度通过遮光罩限制在60°以内
- 实际测试时发现需避开日光直射环境
2.3 通信模块设计
采用ESP-01S WiFi模块,其硬件连接需要注意:
- 电平转换:必须使用电平转换芯片(如TXS0108E)
- 天线设计:保留IPEX接口并预留PCB天线位置
- 供电隔离:单独LDO供电并加装100μF钽电容
通信协议采用自定义精简格式:
code复制[起始符][数据长度][命令字][数据][校验和]
示例:0xAA 0x05 0x01 0x64 0xC8 0xXX
(设置温度阈值100℃)
3. 软件系统实现
3.1 系统架构设计
采用分层架构:
- 硬件抽象层(HAL):STM32CubeMX生成
- 驱动层:传感器/显示/通信驱动
- 应用层:主业务逻辑
任务调度方案:
- 关键任务(报警处理)采用中断触发
- 常规任务(数据采集/显示更新)采用时间片轮询
3.2 核心算法实现
3.2.1 多传感器数据融合
c复制typedef struct {
float temperature;
uint16_t smoke;
uint8_t flame;
uint8_t alarm_status;
} EnvData_t;
void Sensor_Fusion(EnvData_t* data) {
// 温度补偿算法
if(data->smoke > 300) {
data->temperature += 0.5f; // 烟雾环境下温度补偿
}
// 多条件报警判断
if((data->temperature > temp_threshold) ||
(data->smoke > smoke_threshold) ||
(data->flame == 1)) {
data->alarm_status = 1;
}
}
3.2.2 报警延时策略
采用状态机实现分级报警:
- 初级预警:参数超阈值但未持续 → OLED提示
- 中级报警:持续超阈值3秒 → 本地声光报警
- 紧急报警:持续超阈值10秒 → APP推送+最大音量报警
3.3 低功耗优化
通过以下措施将待机功耗降至0.8W:
- 传感器间歇工作模式(采集后立即休眠)
- OLED动态刷新(非全屏刷新时关闭VCOM)
- WiFi模块智能心跳(30秒间隔)
4. 系统测试与问题排查
4.1 功能测试案例
| 测试项目 | 测试方法 | 预期结果 | 实际结果 |
|---|---|---|---|
| 温度报警 | 热风枪加热至阈值+5℃ | 60秒内触发报警 | 52秒触发 |
| WiFi断连恢复 | 手动关闭路由器 | 30秒内自动重连 | 28秒恢复 |
| 多报警优先级 | 同时触发温度和烟雾报警 | 执行最高级报警策略 | 符合预期 |
4.2 典型问题解决方案
问题1:MQ-2传感器初期误报率高
- 原因分析:厨房油烟导致误触发
- 解决方案:
- 增加软件滤波算法
- 设置每日凌晨3点自动基线校准
- 物理上加装防油污滤网
问题2:OLED显示残影
- 修复步骤:
- 修改刷新函数:
c复制void OLED_Refresh() { SSD1306_SetDisplayOff(); // 刷新代码... SSD1306_SetDisplayOn(); }- 增加间隔1秒的全屏清屏操作
5. 应用扩展与升级
5.1 硬件扩展接口
预留的3个USART接口可扩展:
- 蓝牙模块(HC-05):实现近距离调试
- LoRa模块(SX1278):构建远距离监测网络
- 语音模块(SYN6288):增加语音报警功能
5.2 软件功能升级
- 历史数据记录:
- 外接SPI Flash存储
- 实现7天数据循环存储
- 智能学习算法:
c复制void Threshold_AutoAdjust() { // 基于周数据自动优化阈值 static float temp_history[7]; // ...统计算法实现 } - 多设备组网:通过MQTT协议接入物联网平台
6. 项目总结与心得
在实际部署中,有几个值得注意的经验:
- 电磁兼容处理:所有传感器线缆必须加磁环,电源入口处放置TVS二极管
- 安装位置选择:温度传感器应远离空调出风口,烟雾传感器需避开通风死角
- 维护建议:每半年进行一次传感器标定,每周检查报警器发声状况
系统成本核算(单台):
- 主控单元:¥9.8
- 传感器组:¥22.5
- 通信模块:¥8.3
- 结构件/PCB:¥15
- 总成本:≈¥55.6
这套系统经过3个月的实际环境测试,误报率控制在0.5%以下,报警响应时间稳定在0.8-1.2秒区间。后续计划增加NB-IoT通信模块,实现无需路由器的直接云端连接。