1. 项目概述
厨房作为家庭生活中使用频率最高的区域之一,同时也是安全事故的高发地带。根据消防部门统计,超过40%的家庭火灾源于厨房,主要诱因包括燃气泄漏、明火失控、电器短路等。传统厨房安全防护主要依赖人工监测和简易报警装置,存在响应滞后、功能单一、无法远程监控等明显缺陷。
针对这些问题,我设计并实现了一套基于STM32的智能厨房安全检测系统。这个系统能够实时监测厨房环境中的烟雾浓度、温湿度变化以及火焰情况,在检测到异常时立即触发本地报警并执行应急动作,同时通过无线通信将数据同步到手机APP,实现远程监控。整套系统采用模块化设计,硬件成本控制在200元以内,非常适合普通家庭使用。
2. 系统核心功能设计
2.1 硬件架构设计
系统硬件采用"主控+传感器+执行器"的三层架构:
- 主控层:STM32F103C8T6微控制器作为核心,负责数据处理和系统控制
- 传感层:
- MQ-2烟雾传感器:检测可燃气体和烟雾
- DHT11温湿度传感器:监测环境温湿度
- 红外火焰传感器:检测明火
- 执行层:
- 蜂鸣器报警模块
- 继电器控制的灭火装置
- 步进电机驱动的通风窗
- ESP8266 WiFi通信模块
各模块通过标准接口与主控连接,确保系统扩展性和维护性。比如传感器统一采用3.3V供电,数字信号通过GPIO输入,模拟信号通过ADC采集。
2.2 软件功能设计
软件系统基于Keil MDK开发环境,采用模块化编程思想,主要功能模块包括:
-
数据采集模块:
- ADC采集烟雾传感器模拟信号
- 单总线协议读取DHT11数据
- GPIO检测火焰传感器状态
-
数据处理模块:
- 滑动滤波算法处理传感器数据
- 多级阈值判断逻辑
- 异常状态机管理
-
人机交互模块:
- OLED显示屏驱动
- 按键扫描与阈值设置
- 蜂鸣器报警控制
-
执行控制模块:
- 继电器驱动逻辑
- 步进电机控制算法
- 应急流程管理
-
通信模块:
- UART与ESP8266通信
- 自定义数据传输协议
- 手机APP数据同步
3. 关键硬件设计与实现
3.1 主控电路设计
选用STM32F103C8T6作为主控芯片,主要考虑以下因素:
- Cortex-M3内核,72MHz主频满足实时性要求
- 64KB Flash+20KB SRAM存储空间足够
- 丰富的外设接口(ADC、I2C、UART等)
- 3.3V工作电压,低功耗设计
电源电路采用两级稳压设计:
- 外部5V电源输入
- AMS1117-3.3V稳压芯片转换
- 100μF+0.1μF电容组合滤波
复位电路采用10kΩ电阻和0.1μF电容构成RC复位,同时保留手动复位按钮。
3.2 传感器模块选型
3.2.1 MQ-2烟雾传感器
特性参数:
- 检测范围:100-10000ppm
- 响应时间:<10s
- 工作电压:5V
- 模拟信号输出
电路设计要点:
- 加热电阻需要预热3-5分钟
- AO引脚接STM32的PA0(ADC1_IN0)
- 并联100nF电容滤波
3.2.2 DHT11温湿度传感器
特性参数:
- 温度范围:0-50℃ ±2℃
- 湿度范围:20-90%RH ±5%
- 单总线通信
- 3.3V供电
接线方式:
- DATA引脚接PB0
- 10kΩ上拉电阻
- 供电引脚加0.1μF去耦电容
3.2.3 火焰传感器
选用红外火焰传感器模块:
- 检测波长:760-1100nm
- 探测角度:60°
- 数字输出模式
- 3.3V供电
安装注意事项:
- 避免阳光直射
- 距离灶台30-50cm
- 灵敏度电位器调节
3.3 执行模块设计
3.3.1 报警电路
采用有源蜂鸣器驱动方案:
- NPN三极管(8050)驱动
- 基极串联1kΩ电阻
- 反并联1N4148保护二极管
- PB5控制信号
3.3.2 应急执行机构
-
灭火装置:
- 小型水泵(5V/1A)
- 继电器控制
- 水箱容量500ml
-
通风系统:
- 28BYJ-48步进电机
- ULN2003驱动芯片
- 开窗行程约15cm
-
排风设备:
- 5V小型风扇
- 继电器控制
- 最大风量0.5m³/min
4. 软件系统实现
4.1 主程序流程
c复制int main(void)
{
// 硬件初始化
System_Init();
while(1)
{
// 传感器数据采集
Sensor_Update();
// 数据处理与状态判断
Safety_Check();
// 人机交互更新
Display_Update();
Key_Scan();
// 通信处理
WiFi_Process();
// 低功耗处理
Power_Save();
}
}
4.2 传感器数据处理
4.2.1 烟雾数据处理
采用滑动平均滤波算法:
c复制#define SAMPLE_SIZE 10
static uint16_t smoke_samples[SAMPLE_SIZE];
static uint8_t sample_index = 0;
uint16_t Smoke_Filter(uint16_t raw_adc)
{
smoke_samples[sample_index++] = raw_adc;
if(sample_index >= SAMPLE_SIZE) sample_index = 0;
uint32_t sum = 0;
for(int i=0; i<SAMPLE_SIZE; i++){
sum += smoke_samples[i];
}
return (uint16_t)(sum/SAMPLE_SIZE);
}
4.2.2 温湿度数据读取
DHT11通信时序关键点:
- 主机拉低总线18ms以上
- 释放总线等待20-40us
- 检测从机响应信号
- 接收40位数据(湿度整数+小数+温度整数+小数+校验)
- 校验和数据正确性
4.3 报警逻辑实现
三级报警机制设计:
-
预警级:单一参数超过阈值80%
- OLED显示警告标志
-
报警级:参数超过阈值
- 蜂鸣器间歇报警
- APP推送通知
-
紧急级:火焰检测或双重参数超标
- 蜂鸣器持续报警
- 启动应急措施
- APP紧急通知
4.4 无线通信协议设计
自定义简单通信协议:
| 字段 | 长度 | 说明 |
|---|---|---|
| HEAD | 1B | 0xAA |
| CMD | 1B | 指令类型 |
| LEN | 1B | 数据长度 |
| DATA | N | 数据内容 |
| CRC | 1B | 校验和 |
主要指令类型:
- 0x01:传感器数据上传
- 0x02:报警信息推送
- 0x03:阈值设置指令
- 0x04:设备控制指令
5. 系统调试与优化
5.1 传感器校准方法
-
MQ-2校准:
- 清洁空气中记录基准值
- 使用标准气体校准
- 建立ADC值与ppm对应表
-
DHT11校准:
- 与标准温湿度计对比
- 记录误差补偿值
- 软件补偿算法
-
火焰传感器:
- 调节灵敏度电位器
- 测试不同距离响应
- 排除环境光干扰
5.2 常见问题解决
-
ESP8266连接不稳定:
- 检查天线位置
- 增加重连机制
- 添加看门狗复位
-
误报警问题:
- 优化滤波算法
- 增加延时确认
- 调整传感器位置
-
功耗优化:
- 采用间歇采样模式
- 动态调整传感器供电
- 使用STM32低功耗模式
6. 实际应用效果
经过3个月的实测验证:
- 火灾检测响应时间<3秒
- 温湿度测量误差<±5%
- 系统待机功耗<0.5W
- 无线通信距离>15米(无遮挡)
- 误报率<1次/月
系统成功检测并处理了多次安全隐患:
- 燃气泄漏预警2次
- 油温过高报警5次
- 小型火灾应急处理1次
7. 项目改进方向
-
功能扩展:
- 增加人体感应模块
- 集成语音报警功能
- 添加本地数据存储
-
性能提升:
- 采用更精确的传感器
- 升级无线通信模块
- 优化电源管理系统
-
智能化改进:
- 引入机器学习算法
- 实现多设备联动
- 云端数据备份分析
这个项目从设计到实现历时4个月,期间遇到了不少挑战,比如传感器数据漂移、无线通信干扰等问题。通过反复调试和算法优化,最终实现了稳定可靠的厨房安全监测系统。特别提醒后来者,火焰传感器的安装位置和角度非常关键,需要多次测试才能找到最佳位置。
