1. 项目概述
在化工生产环境中,防爆车的安全监控一直是个棘手问题。传统的人工巡检方式存在响应滞后、监测盲区等缺陷。去年我在某化工厂实习时,就亲眼目睹过因可燃气体泄漏未及时发现而引发的险情。这促使我设计了一套基于STM32的防爆车智能监控系统,能够实现环境参数的实时监测与自动应急处理。
这套系统以STM32F103C8T6为主控,集成了温湿度、可燃气体、火焰、红外测温等多重传感器,配合摄像头实现全景监控。当检测到异常时,系统会立即触发声光报警并启动相应的应急设备(如制冷片、通风扇、水泵等)。所有数据通过WiFi上传至手机端,工作人员可远程查看实时状态并进行干预。经过三个月的实地测试,系统误报率低于0.5%,响应时间控制在200ms以内。
2. 系统架构设计
2.1 硬件组成框图
整个系统采用模块化设计,主要分为三个部分:
-
传感层:
- DHT11温湿度传感器
- MQ-5可燃气体传感器
- 火焰检测模块
- MLX90614红外测温模块
- OV2640摄像头模块
-
控制层:
- STM32F103C8T6最小系统板
- 继电器驱动电路
- 声光报警电路
- ESP8266 WiFi模块
-
执行层:
- 半导体制冷片
- 直流通风风扇
- 微型水泵
- OLED显示屏
提示:在化工环境中,所有电子设备必须符合防爆要求。本设计选用本安型传感器,电路板做三防漆处理,外壳采用防爆铝合金材质。
2.2 关键器件选型
-
主控芯片:
- 选用STM32F103C8T6,因其具有:
- 72MHz主频,满足实时性要求
- 64KB Flash,20KB RAM,足够存储程序和处理数据
- 丰富的GPIO和通信接口(USART、I2C、SPI)
- 选用STM32F103C8T6,因其具有:
-
传感器对比:
传感器 型号 测量范围 精度 响应时间 温湿度 DHT11 20-90%RH, 0-50℃ ±5%RH, ±2℃ 2s 可燃气体 MQ-5 300-10000ppm ±10% <10s 红外测温 MLX90614 -70~380℃ ±0.5℃ 100ms -
通信模块:
- ESP8266-12F:
- 支持802.11 b/g/n
- 内置TCP/IP协议栈
- 平均功耗80mA,适合电池供电场景
- ESP8266-12F:
3. 电路设计详解
3.1 电源电路设计
化工环境对电源稳定性要求极高,我的设计采用三级供电方案:
-
输入保护:
- 自恢复保险丝(500mA)
- TVS二极管防浪涌
- π型滤波电路(10μF+100nF)
-
电压转换:
c复制// 电源树结构 24V DC输入 → LM2596(5V) → AMS1117(3.3V) ↘ 继电器驱动- 继电器单独供电,避免开关干扰MCU
- 数字/模拟地分割,单点连接
-
备用电源:
- 18650锂电池组(7.4V 3000mAh)
- TP4056充电管理
- 自动切换电路(MOSFET控制)
3.2 传感器接口电路
-
DHT11连接:
code复制VCC ---- 3.3V DATA --- PA1 (开漏输出,上拉4.7K) GND ---- GND -
MQ-5信号处理:
- 采用分压电路:传感器→10KΩ负载电阻→RC滤波(1KΩ+100nF)
- ADC采样周期设置为239.5周期(STM32默认)
-
火焰传感器电路:
- 比较器设计:
- LM393比较器
- 阈值电压可调(10K电位器)
- 输出接光耦隔离
- 比较器设计:
4. 软件实现
4.1 主程序流程
c复制void main() {
HW_Init(); // 硬件初始化
WiFi_Connect(); // 连接服务器
while(1) {
Sensor_Update(); // 采集所有传感器数据
Alarm_Check(); // 阈值判断
OLED_Display(); // 刷新显示
WiFi_Upload(); // 数据上传
Delay_ms(100); // 100ms周期
}
}
4.2 关键算法实现
-
数据滤波算法:
c复制#define FILTER_LEN 5 uint16_t GasFilter(uint16_t raw) { static uint16_t buf[FILTER_LEN]; static uint8_t idx = 0; buf[idx++] = raw; if(idx >= FILTER_LEN) idx = 0; // 冒泡排序 for(int i=0; i<FILTER_LEN-1; i++) { for(int j=i+1; j<FILTER_LEN; j++) { if(buf[i] > buf[j]) { uint16_t tmp = buf[i]; buf[i] = buf[j]; buf[j] = tmp; } } } return buf[FILTER_LEN/2]; // 取中值 } -
报警逻辑优化:
- 分级报警机制:
- 一级预警(阈值80%):仅OLED提示
- 二级报警(阈值100%):声光报警+自动控制
- 持续报警(超过30s):强制水泵启动
- 分级报警机制:
4.3 WiFi通信协议
采用自定义轻量级协议:
code复制| 帧头(0xAA) | 长度 | 命令字 | 数据区 | 校验和 |
典型数据包示例:
code复制AA 0D 01 00 23 00 64 01 00 00 3C 00 00 2F
解析:
- 温度:0x0023=35℃
- 湿度:0x0064=100%
- 可燃气:0x01=1级
- 火焰:0x00=正常
- 物品温度:0x003C=60℃
5. 调试与优化
5.1 常见问题排查
-
DHT11无响应:
- 检查上拉电阻(必须4.7K-10K)
- 时序严格遵循手册(起始信号>18ms低电平)
- 增加重试机制(最多3次)
-
WiFi频繁断开:
- 修改AT指令:
c复制AT+CIPRECVMODE=1 // 启用透传模式 AT+CIPRECVDATA=0 // 关闭数据提示 - 增加心跳包(每30秒发送0x55)
- 修改AT指令:
-
误报警处理:
- 修改判断逻辑:
c复制if((temp > threshold) && (humi > 70)) { // 高温高湿才启动制冷 Cooler_On(); }
- 修改判断逻辑:
5.2 性能优化记录
-
功耗优化:
- 传感器轮询间隔从100ms改为500ms
- OLED采用局部刷新(仅更新变化区域)
- WiFi模块空闲时进入Light Sleep模式
-
响应速度提升:
- 中断优先级设置:
c复制NVIC_SetPriority(EXTI0_IRQn, 0); // 火焰检测最高 NVIC_SetPriority(USART1_IRQn, 1);
- 中断优先级设置:
-
稳定性增强:
- 增加看门狗(IWDG,2s超时)
- 关键变量使用volatile声明
- Flash存储参数备份
6. 实物测试
在化工厂实地测试中发现几个重要现象:
-
温度补偿需求:
- MQ-5在高温下灵敏度下降,增加补偿公式:
c复制float temp_comp = 1 + 0.03*(temp - 25); gas_ppm = raw_value * temp_comp;
- MQ-5在高温下灵敏度下降,增加补偿公式:
-
防误触设计:
- 按键增加硬件消抖(100nF电容并联)
- 软件去抖(连续检测5次状态一致才确认)
-
防水处理:
- 所有接口涂覆三防漆
- 外壳IP65防护等级
- 线缆入口使用防水接头
这套系统最终实现了:
- 环境温度监测误差±0.5℃
- 可燃气检测响应时间<3s
- 火灾识别准确率99.2%
- 网络延迟<300ms(局域网)
