1. 项目概述与设计背景
作为一名在嵌入式领域摸爬滚打多年的工程师,我深知家庭燃气安全的重要性。去年参与的一个真实案例让我印象深刻:某小区因燃气泄漏引发爆炸,造成严重损失。这促使我着手设计这套基于STM32的燃气安全系统,希望能用技术手段预防类似悲剧。
这套系统的核心价值在于实现了"三重防护"机制:
- 第一重:实时监测(MQ-2/MQ-5传感器)
- 第二重:本地报警(声光报警器)
- 第三重:远程通知(4G短信)
选择STM32F103C8T6作为主控是经过深思熟虑的。这款Cortex-M3内核的MCU具有72MHz主频、64KB Flash和20KB RAM,完全能满足多任务处理需求。更重要的是其丰富的外设接口(12位ADC、多个定时器、USART等)和广泛的市场验证,确保了系统稳定性。
2. 硬件系统设计详解
2.1 核心模块选型分析
2.1.1 气体检测模块
MQ-2(烟雾)和MQ-5(可燃气体)传感器都是半导体气敏元件,其工作原理是通过敏感材料在接触目标气体时电阻值发生变化。我在选型时特别考虑了以下几点:
- 灵敏度:MQ-2对LPG、丙烷、氢气敏感,MQ-5对天然气、液化气更优
- 预热时间:实测需要约2分钟稳定(设计时需加入预热倒计时)
- 寿命周期:约5000小时,建议每年更换
重要提示:传感器需要定期校准!我采用的方法是每月用标准气体(1000ppm异丁烷)进行标定,记录ADC基准值。
2.1.2 通信模块对比
测试了三种方案后最终选择EC20 4G模块:
code复制| 模块类型 | 成本 | 功耗 | 覆盖 | 适用性 |
|----------|-------|-------|-------|--------|
| SIM800L | 低 | 高 | 2G | 差 |
| ESP8266 | 中 | 中 | WiFi | 局限 |
| EC20 | 较高 | 低 | 4G | 最佳 |
2.2 电路设计关键点
2.2.1 传感器接口电路
采用分压电路设计,特别注意:
- 负载电阻RL选择:MQ-2用5KΩ,MQ-5用20KΩ(根据传感器手册推荐值)
- 添加0.1μF去耦电容,减少电源干扰
- 信号输出端串联100Ω电阻保护ADC引脚
c复制// ADC采样代码示例(HAL库)
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
2.2.2 报警电路设计
采用三级驱动架构:
- STM32 GPIO → 2N3904三极管 → 蜂鸣器/LED
- 蜂鸣器选用有源型(5V/20mA)
- LED采用高亮红光(1000mcd)配合漫射罩
3. 软件系统实现
3.1 主程序架构
采用时间片轮询方式,确保实时性:
flow复制st=>start: 系统初始化
op1=>operation: 传感器预热(120s)
op2=>operation: 主循环
sub1=>subroutine: 气体浓度检测
sub2=>subroutine: 报警判断
sub3=>subroutine: 显示刷新
sub4=>subroutine: 按键扫描
e=>end
st->op1->op2
op2->sub1->sub2->sub3->sub4->op2
3.2 关键算法实现
3.2.1 浓度计算
采用滑动平均滤波算法:
c复制#define SAMPLE_SIZE 10
uint16_t gas_readings[SAMPLE_SIZE];
uint16_t get_filtered_value(uint16_t new_val) {
static uint8_t index = 0;
static uint32_t sum = 0;
sum = sum - gas_readings[index] + new_val;
gas_readings[index] = new_val;
index = (index + 1) % SAMPLE_SIZE;
return sum / SAMPLE_SIZE;
}
3.2.2 报警逻辑
采用滞后比较防止误报:
c复制if(concentration > threshold_high) {
alarm_status = ON;
} else if(concentration < threshold_low) { // 比阈值低10%
alarm_status = OFF;
}
3.3 4G通信实现
采用AT指令交互,关键流程:
- 模块初始化:AT+CPIN? → AT+CSQ
- 短信发送:AT+CMGF=1 → AT+CMGS="手机号"
- 超时重试机制(3次重试间隔5s)
实测发现:EC20模块冷启动需要约30秒,设计时需增加状态检测LED
4. 系统优化与实测数据
4.1 功耗优化方案
- 传感器供电采用MOSFET控制(仅在采样时通电)
- 显示屏设置15秒自动关闭
- 主频动态调整(报警时72MHz,待机时8MHz)
实测功耗对比:
code复制| 模式 | 电流 | 续航(2000mAh) |
|------------|-------|-----------------|
| 全速运行 | 85mA | 23小时 |
| 优化模式 | 18mA | 110小时 |
4.2 抗干扰设计
- 软件:添加数字滤波(中值+均值)
- 硬件:
- 所有信号线加磁珠
- 电源入口加TVS二极管
- 传感器与主控板分离式设计
5. 常见问题解决方案
5.1 传感器响应异常
现象:读数波动大
排查步骤:
- 检查加热电压(5.0±0.1V)
- 测量负载电阻两端电压(应在0.8-3V间)
- 用酒精棉清洁传感器表面
5.2 4G模块连接失败
快速诊断流程:
- 检查SIM卡接触(重新插拔)
- 测量VBAT电压(3.4-4.2V)
- 发送AT+CPIN?查看SIM状态
- 检查天线阻抗(50Ω)
5.3 OLED显示残影
解决方法:
- 增加屏幕刷新间隔(≥200ms)
- 在初始化时执行清屏命令3次
- 避免长时间显示静态内容
6. 安装与使用建议
-
安装位置选择:
- 燃气传感器距天花板30-50cm
- 远离油烟机、窗户等通风处
- 报警器安装在卧室可听范围内
-
日常维护:
- 每月测试报警功能(长按测试键3秒)
- 每季度清洁传感器进气口
- 每年更换传感器(即使工作正常)
-
进阶设置技巧:
- 通过组合键可查看历史峰值(按键A+B)
- 长按设置键5秒进入校准模式
- 短信可配置多个接收号码(用逗号分隔)
这个项目从原型到稳定运行历时4个月,期间经历了3次硬件改版和无数次的软件调试。最深刻的体会是:安全系统必须做到"零误报"和"零漏报"的平衡。通过引入双重验证机制(浓度+趋势判断),最终实现了小于1%的误报率。建议有兴趣的开发者可以进一步加入WiFi联网功能,实现与智能家居系统的联动。