1. 项目概述
作为一名嵌入式系统开发者,我最近完成了一个极具实用价值的毕业设计项目——基于STM32的智能厨房防火预警系统。这个系统源于我亲眼目睹邻居家因厨房燃气泄漏引发的火灾事故,让我深刻意识到家庭防火预警的重要性。
传统厨房防火设备往往功能单一,要么只有烟雾报警,要么只有燃气检测,很难全面覆盖厨房火灾隐患。而市面上所谓的"智能防火系统"价格昂贵,动辄上千元,普通家庭难以承受。这套系统正是为了解决这些痛点而设计的,它整合了四大检测模块,成本控制在200元以内,真正实现了高性价比的智能防火方案。
系统采用模块化设计思路,核心控制器选用STM32F103C8T6,这是STM32家族中性价比极高的型号,具有丰富的外设接口和足够的处理能力。围绕这个核心,我们构建了完整的传感器网络和报警机制,后面我会详细拆解每个模块的设计考量和技术细节。
2. 系统架构设计
2.1 整体框架解析
系统的整体架构遵循"感知-决策-执行"的经典物联网三层模型。感知层由各类传感器组成,负责采集厨房环境数据;决策层是STM32主控,负责数据处理和逻辑判断;执行层包括本地报警装置和远程通知模块。
这种架构的优势在于:
- 各层功能明确,便于单独调试和维护
- 传感器节点可以灵活增减,系统扩展性强
- 本地处理确保在网络中断时仍能正常工作
- 远程通知提供了额外的安全保障
2.2 核心控制器选型
选择STM32F103C8T6作为主控芯片主要基于以下考虑:
- 72MHz主频,性能足够处理多传感器数据
- 64KB Flash + 20KB RAM,满足程序存储和运行需求
- 丰富的外设接口:3个USART、2个SPI、2个I2C
- 多达37个GPIO,方便连接各类传感器
- 低功耗设计,适合24小时运行
- 成熟的生态系统,开发资料丰富
提示:对于预算更紧张的项目,可以考虑STM32F030系列,但需要注意其外设资源和性能的缩减。
3. 传感器模块详解
3.1 烟雾检测模块
采用MQ-2烟雾传感器,这是半导体气敏元件,对液化气、丙烷、氢气等有良好灵敏度。其工作原理是:当检测到可燃气体时,传感器内部SnO2材料的电导率会随气体浓度升高而增加。
技术参数:
- 检测浓度:300-10000ppm
- 响应时间:<10s
- 加热电压:5V±0.1V
- 工作电流:约150mA
电路设计要点:
- 需要给传感器提供稳定的5V加热电压
- 输出信号需通过分压电路适配STM32的3.3V ADC输入
- 传感器需要2-3分钟的预热时间才能稳定工作
3.2 火焰检测模块
使用远红外火焰传感器,检测波长在760nm-1100nm范围内的红外光。这种传感器对打火机、蜡烛等明火特别敏感,但对日光灯、白炽灯等光源不敏感,有效避免了误报。
安装注意事项:
- 传感器应朝向可能发生明火的区域
- 安装高度建议在1.5-2米之间
- 避免正对窗户,防止阳光直射干扰
- 检测角度约60°,需要合理规划覆盖范围
3.3 温度检测模块
采用DS18B20数字温度传感器,其优势在于:
- 数字输出,抗干扰能力强
- 精度达±0.5℃(-10℃至+85℃范围内)
- 单总线接口,节省IO资源
- 防水封装可直接接触被测物体
实际部署中发现的问题及解决方案:
- 问题:初期将传感器安装在抽油烟机附近,受油烟影响读数波动大
- 解决:改为安装在距灶台30cm的侧壁上,既不影响测量又避免油烟干扰
3.4 燃气检测模块
使用MQ-5燃气传感器,专门针对天然气和液化石油气优化。与MQ-2相比,MQ-5对烷烃类气体选择性更好,交叉干扰更少。
校准技巧:
- 在洁净空气中通电预热24小时
- 使用标准浓度气体(如1000ppm异丁烷)进行校准
- 记录传感器在不同浓度下的输出值,建立浓度-电压对应表
- 在程序中实现分段线性插值算法,提高检测精度
4. 报警策略设计
4.1 多级报警机制
系统采用三级报警策略,兼顾灵敏度和可靠性:
-
初级预警(黄色):
- 单一指标达到阈值的80%
- 本地显示屏闪烁提示
- 不触发声音报警
-
中级报警(橙色):
- 单一指标超过阈值
- 本地蜂鸣器间歇鸣响(0.5s开/0.5s关)
- APP推送通知
-
紧急报警(红色):
- 两项及以上指标同时超标
- 蜂鸣器持续鸣响
- APP紧急通知+短信提醒(需SIM模块支持)
- 自动切断电磁阀(需外接继电器)
4.2 阈值设置逻辑
通过实验测试和数据分析,我们确定了以下默认阈值:
- 烟雾浓度:800ppm
- 温度变化率:3℃/min
- 绝对温度:65℃
- 燃气浓度:1000ppm
这些阈值可以通过按键模块进行调整,适应不同家庭的使用习惯和环境特点。调整步长设计为:
- 烟雾/燃气:±100ppm
- 温度:±5℃
- 变化率:±0.5℃/min
5. 无线通信实现
5.1 ESP8266 WiFi模块
选用ESP-01S模块实现无线连接,主要考虑:
- 成本低廉(约15元)
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
- 通过AT指令控制,开发简单
连接流程:
- 初始化USART2,设置115200波特率
- 发送AT指令测试模块响应
- 配置WiFi连接模式(STA)
- 连接路由器
- 建立TCP连接至服务器
常见问题排查:
- 若AT无响应,检查VCC电压(需3.3V)和波特率设置
- 连接不稳定时可尝试降低WiFi速率至802.11b
- 频繁断线时可启用TCP keepalive机制
5.2 手机APP设计
APP采用MIT App Inventor开发,适合快速原型设计。主要功能包括:
- 实时数据显示(数值+曲线图)
- 报警记录查询
- 阈值远程设置
- 报警方式选择(推送/短信)
数据传输协议设计:
json复制{
"device_id": "KITCHEN_001",
"timestamp": 1634567890,
"smoke": 450,
"temp": 32.5,
"fire": 0,
"gas": 120,
"alarm": 0
}
6. 电源管理设计
6.1 供电方案选择
系统采用双电源设计:
- 主电源:5V/2A适配器供电
- 备用电源:18650锂电池(3.7V)通过升压电路提供5V
电源切换电路使用MOSFET实现无缝切换,当主电源断开时自动切换到电池供电,切换时间<10ms。
6.2 低功耗优化
为延长电池续航,实施了以下优化措施:
-
传感器轮询周期动态调整:
- 正常状态:每5秒采集一次
- 预警状态:每1秒采集一次
- 报警状态:持续采集
-
显示屏背光控制:
- 无人操作30秒后亮度减半
- 2分钟后关闭背光
- 按键唤醒恢复
-
WiFi模块休眠:
- 无数据传输时进入Light Sleep模式
- 维持TCP连接但降低功耗
通过这些优化,系统在电池供电下可连续工作48小时以上。
7. 硬件设计要点
7.1 PCB布局技巧
经过多次打样测试,总结出以下经验:
- 传感器接口集中布置在板子一侧,方便接线
- 模拟信号走线远离数字信号,避免干扰
- 电源部分使用星型拓扑,确保各模块供电稳定
- 为每个传感器预留滤波电容位置
- 蜂鸣器驱动电路增加续流二极管
7.2 抗干扰设计
厨房环境电磁干扰严重,我们采取了多重措施:
- 所有信号线采用双绞线或屏蔽线
- 传感器信号进入MCU前经过RC滤波
- 数字地和模拟地分开,单点连接
- 关键芯片电源引脚添加0.1μF去耦电容
- 外壳采用金属网屏蔽,同时保证通风
8. 软件架构解析
8.1 主程序流程
系统软件基于FreeRTOS实时操作系统开发,创建了4个主要任务:
-
传感器采集任务:
- 周期性读取各传感器数据
- 进行初步滤波处理
- 发布到消息队列
-
报警判断任务:
- 从队列获取数据
- 应用报警逻辑
- 触发相应报警动作
-
显示更新任务:
- 刷新OLED显示屏
- 处理用户按键输入
-
网络通信任务:
- 维护WiFi连接
- 数据上传和指令接收
8.2 关键算法实现
- 滑动平均滤波:
c复制#define FILTER_SIZE 5
float movingAverage(float newVal) {
static float buffer[FILTER_SIZE] = {0};
static uint8_t index = 0;
static float sum = 0;
sum -= buffer[index];
buffer[index] = newVal;
sum += newVal;
index = (index + 1) % FILTER_SIZE;
return sum / FILTER_SIZE;
}
- 温度变化率计算:
c复制float calcTempChangeRate(float currentTemp) {
static float lastTemp = 0;
static uint32_t lastTime = 0;
float rate = 0;
if(lastTime != 0) {
uint32_t timeDiff = HAL_GetTick() - lastTime;
rate = (currentTemp - lastTemp) / (timeDiff / 60000.0); // ℃/min
}
lastTemp = currentTemp;
lastTime = HAL_GetTick();
return rate;
}
9. 测试与优化
9.1 测试方案设计
我们设计了全面的测试用例,覆盖各种场景:
-
单因素测试:
- 点燃香烟测试烟雾检测
- 使用打火机测试火焰检测
- 电吹风加热测试温度检测
- 燃气灶微量放气测试燃气检测
-
组合测试:
- 烹饪过程中触发多个传感器
- 模拟传感器故障情况
- 电源切换测试
-
极限测试:
- 高温高湿环境(浴室旁)
- 电磁干扰(微波炉附近)
- 长时间连续运行(72小时)
9.2 性能优化记录
根据测试结果进行了多次迭代优化:
-
第一版问题:
- 火焰传感器误报率高
- 网络连接不稳定
- 报警响应延迟明显
-
优化措施:
- 增加火焰传感器判断延时(持续1秒才确认)
- 改进WiFi天线布置
- 优化任务优先级设置
-
最终性能:
- 报警响应时间<500ms
- 误报率<0.1%
- 漏报率0%
10. 安装部署建议
10.1 设备安装位置
根据实测数据,推荐以下安装方案:
-
主机安装:
- 距地面1.5-1.8米
- 距离灶台0.5-1米
- 避开直接通风位置
-
传感器分布:
- 烟雾传感器:天花板中央
- 温度传感器:距灶台30cm侧壁
- 火焰传感器:朝向灶台方向
- 燃气传感器:距地面30cm(燃气比空气重)
10.2 系统维护指南
为确保系统长期可靠运行,建议:
-
每月:
- 用吸尘器清洁传感器进气孔
- 测试报警功能(按下测试按钮)
-
每半年:
- 校准燃气传感器
- 检查电池状态
-
注意事项:
- 避免使用清洁剂直接喷洒
- 勿用尖锐物体触碰传感器
- 发现异常及时送修
这个项目从构思到完成历时4个月,期间经历了多次设计修改和方案优化。最大的收获是认识到工程实践中理论知识与实际应用的差距,比如传感器在理想环境下的参数与实际安装后的表现往往有很大不同。通过这个项目,我掌握了从需求分析到产品落地的完整开发流程,这对我的职业发展有极大帮助。