1. 项目概述
这个危险气体检测报警系统是我去年为一家化工厂设计的实际项目。当时厂区需要一套能够实时监测多种危险气体浓度,并在超标时立即报警的自动化系统。传统的气体检测设备要么价格昂贵,要么功能单一,于是我决定用单片机开发一套经济实用的解决方案。
系统核心功能很简单:通过气体传感器采集环境中的可燃气体或有毒气体浓度,当浓度超过安全阈值时,本地声光报警器启动,同时通过无线模块将报警信息发送到监控中心。整套设备成本控制在200元以内,比市面上的工业级检测仪便宜了80%,但检测精度和响应速度完全满足化工厂的需求。
2. 系统设计与核心组件选型
2.1 主控芯片选择
我最终选择了STM32F103C8T6这款单片机,主要基于以下几点考虑:
- 性能足够:72MHz主频,20KB RAM,64KB Flash,完全能够处理多路传感器数据
- 丰富的外设接口:自带ADC、UART、I2C、SPI等接口,方便连接各类传感器
- 开发成本低:市面上开发板和烧录器都很便宜,开发资料丰富
- 低功耗特性:在待机模式下电流可低至2μA,适合长期运行的检测设备
注意:选择单片机时一定要确认ADC的精度和采样速率是否满足气体传感器的要求。有些廉价单片机的ADC噪声较大,会影响检测精度。
2.2 气体传感器选型
根据化工厂的实际需求,我选用了以下三种传感器:
- MQ-2可燃气体传感器:检测甲烷、丙烷等可燃气体
- MQ-7一氧化碳传感器
- MQ-135空气质量传感器(检测氨气、硫化物等)
这些传感器都是半导体式,优点是价格便宜(每个约20-50元)、响应快、寿命长。但需要注意定期校准,一般建议每3个月校准一次。
2.3 无线通信方案
考虑到化工厂区面积较大,我选择了LoRa无线模块作为远程通信方案,型号是E32-433T20D。主要优势:
- 传输距离远:厂区内实测可达800米
- 穿透能力强:可以穿过多层墙壁
- 功耗低:发射电流约120mA,待机电流仅2mA
- 抗干扰能力强:采用扩频技术,433MHz频段
3. 硬件电路设计详解
3.1 传感器接口电路
气体传感器通常需要加热元件工作,因此供电设计很关键。以MQ-2为例:
- 加热电路:需要5V/150mA的稳定供电
- 信号输出:通过分压电阻连接单片机的ADC引脚
- 负载电阻:根据传感器规格书选择合适阻值(MQ-2通常用5KΩ)
code复制 +5V
|
[R1] 5KΩ
|
+-----> ADC输入
|
MQ-2
|
GND
3.2 报警电路设计
报警电路包含以下部分:
- 声报警:采用有源蜂鸣器(5V驱动)
- 光报警:高亮度LED(红色)
- 继电器输出:可连接外部报警设备
电路设计时要注意驱动电流,单片机IO口通常只能提供20mA电流,所以需要用三极管或MOS管驱动:
code复制单片机IO --> [1KΩ] --> NPN三极管基极
集电极 --> +5V
发射极 --> 蜂鸣器 --> GND
3.3 电源管理设计
系统采用12V直流供电,通过以下方式转换:
- 主电源:12V转5V(LM2596模块),为传感器和外围电路供电
- 单片机电源:5V转3.3V(AMS1117),为STM32供电
- 备用电池:3.7V锂电池,通过TP4056充电管理电路
重要提示:化工环境可能存在电源干扰,建议在电源输入端加入TVS二极管和滤波电容。
4. 软件设计与关键代码实现
4.1 主程序流程
系统软件采用前后台架构:
- 初始化:硬件初始化、传感器预热(约2分钟)
- 主循环:
- 读取各传感器数据
- 数据滤波处理
- 判断是否超标
- 处理报警逻辑
- 发送无线数据
- 进入低功耗模式(约1秒)
4.2 传感器数据处理
传感器原始数据需要经过以下处理:
- 均值滤波:连续采样10次取平均值
- 温度补偿:根据环境温度修正读数
- 浓度转换:将ADC值转换为实际浓度(ppm)
c复制#define MQ2_RL 5.0 // 负载电阻值(kΩ)
float MQ2_GetPPM(float adcValue, float temp) {
float sensorVoltage = adcValue * 3.3 / 4095;
float rs = (3.3 - sensorVoltage) / sensorVoltage * MQ2_RL;
float ppm = 1000 * pow(rs/9.8, -1.53); // 甲烷转换公式
// 温度补偿
ppm = ppm / (1 + 0.001 * (temp - 20));
return ppm;
}
4.3 无线通信协议设计
为了确保通信可靠性,我设计了简单的通信协议:
| 字节 | 内容 | 说明 |
|---|---|---|
| 0 | 0xAA | 帧头 |
| 1 | 设备ID | 1字节设备地址 |
| 2-3 | 甲烷浓度 | 2字节,单位ppm |
| 4-5 | CO浓度 | 2字节,单位ppm |
| 6 | 报警状态 | 位0:甲烷, 位1:CO |
| 7 | 校验和 | 前面所有字节的异或 |
5. 系统调试与优化
5.1 传感器校准方法
传感器出厂参数与实际使用环境有差异,必须现场校准:
- 零点校准:在洁净空气中,记录传感器输出值作为零点
- 跨度校准:使用标准气体(如1000ppm甲烷),调节参数使读数准确
校准步骤:
- 将传感器置于洁净空气中24小时
- 读取稳定后的ADC值作为ZeroPoint
- 使用标准气体,记录目标浓度时的ADC值
- 计算灵敏度系数S = (ADC_gas - ADC_air)/浓度
5.2 抗干扰措施
化工环境电磁干扰严重,我采取了以下措施:
- 所有信号线使用屏蔽线
- 在传感器输出端加入RC滤波(如1kΩ+0.1μF)
- 软件上采用中值滤波+滑动平均的组合算法
- 无线通信加入重传机制,重要数据发送3次
5.3 功耗优化技巧
为了延长电池备用时间,我做了这些优化:
- 调整传感器加热周期(从持续加热改为间歇加热)
- 无线模块大部分时间处于睡眠模式
- 单片机使用停机模式(Stop Mode),仅RTC唤醒
- 关闭未使用的外设时钟
优化后,系统平均电流从85mA降到了15mA,备用电池续航时间从4小时延长到24小时。
6. 实际应用中的问题与解决方案
6.1 传感器中毒问题
在硫化氢环境中,MQ-2传感器出现了灵敏度下降的问题。解决方案:
- 定期高温清洁(加热到5V,持续24小时)
- 在传感器前加装活性炭过滤器
- 软件上增加灵敏度衰减补偿算法
6.2 无线通信距离不足
最初在某些区域通信不稳定,通过以下方法改善:
- 调整天线位置和角度
- 修改通信速率(从19.2kbps降到9.6kbps)
- 增加中继节点
- 改用更高增益的天线(5dBi)
6.3 误报警问题
初期系统偶尔会误报警,排查发现原因有:
- 电源干扰导致ADC读数异常 → 加强电源滤波
- 传感器预热不充分 → 延长预热时间到3分钟
- 环境温湿度变化影响 → 增加温湿度补偿
7. 系统扩展与改进方向
这套基础系统还可以进一步扩展:
- 增加更多的气体传感器类型(如氧气、氯气等)
- 加入GPS模块,实现移动检测车的定位
- 开发手机APP,实现远程监控
- 接入云平台,实现大数据分析和预警
- 采用太阳能供电,实现完全无线化
我在最新版本中增加了NB-IoT通信模块,可以直接将数据上传到云平台,监控中心可以实时查看整个厂区的气体分布情况。这个改进使系统的实用性提升了至少50%。