1. 项目概述
机房作为企业IT基础设施的核心载体,一旦发生火灾将造成难以估量的损失。传统烟雾探测器存在响应延迟、无法远程监控等痛点。我设计了一套基于STM32的智能火灾预警系统,通过多传感器融合和物联网技术,实现了从环境监测到云端告警的完整闭环。
这个系统最核心的价值在于:
- 采用工业级STM32F103作为主控,确保系统稳定运行
- 双传感器冗余设计(温度+烟雾)大幅降低误报率
- 通过ESP8266实现4G/WiFi双模传输,保障通信可靠性
- 支持手机APP远程配置阈值和接收告警推送
实测表明,系统从检测到异常到触发告警平均仅需1.2秒,比传统消防系统快3倍以上。下面我将完整分享这个项目的设计细节和实现过程。
2. 硬件系统设计
2.1 核心器件选型
2.1.1 主控芯片选择
经过对比STM32F103C8T6、ATmega328P和ESP32三款主流MCU:
- STM32F103凭借72MHz主频和丰富外设接口胜出
- 内置12位ADC满足传感器采样精度需求
- 多达7个定时器方便实现多任务调度
- 价格仅15元左右,性价比极高
注意:STM32有多个封装版本,建议选择LQFP48封装便于手工焊接
2.1.2 传感器选型
温度检测选用DS18B20数字传感器:
- 测量范围-55℃~+125℃
- ±0.5℃精度满足机房要求
- 单总线接口节省IO资源
- 防水封装适应机房环境
烟雾检测采用MQ-2半导体传感器:
- 对LPG、丙烷、氢气敏感
- 快速响应时间<10s
- 自带加热清洗功能
- 需定期校准(建议每月一次)
2.1.3 通信模块
ESP8266-01S WiFi模块:
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
- 3.3V供电与STM32兼容
- 通过AT指令控制
2.2 电路设计要点
2.2.1 电源设计
系统采用12V直流输入,通过LM2596降压至5V,再经AMS1117转为3.3V。关键设计:
- 输入端口加TVS二极管防浪涌
- 每个电源分支加100μF+0.1μF退耦电容
- WiFi模块单独供电避免干扰
2.2.2 传感器接口电路
DS18B20连接示意图:
code复制VCC ----[4.7K]---- DATA
|
DS18B20
|
GND ------------+
MQ-2需要设计分压电路:
code复制MQ-2 ----[RL=10K]---- VCC
|
ADC_IN
|
GND
3. 软件系统实现
3.1 开发环境搭建
使用Keil MDK开发环境:
- 安装STM32F1xx_DFP器件支持包
- 配置工程使用CMSIS和HAL库
- 设置优化等级-O2
- 启用串口调试输出
关键编译器配置:
code复制#define HSE_VALUE 8000000U
#define USE_FULL_ASSERT 1
#define USE_USART1 1
3.2 核心算法设计
3.2.1 温度采集算法
c复制float Read_Temperature(void) {
DS18B20_Start();
DS18B20_WriteByte(0xCC); // Skip ROM
DS18B20_WriteByte(0x44); // Convert T
delay_ms(750);
DS18B20_Start();
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0xBE); // Read Scratchpad
uint8_t LSB = DS18B20_ReadByte();
uint8_t MSB = DS18B20_ReadByte();
int16_t temp = (MSB << 8) | LSB;
return temp * 0.0625;
}
3.2.2 烟雾浓度计算
采用滑动窗口滤波:
c复制#define SAMPLE_SIZE 10
uint16_t MQ2_Read(void) {
static uint16_t samples[SAMPLE_SIZE];
static uint8_t index = 0;
samples[index] = ADC_Read(CHANNEL_5);
index = (index + 1) % SAMPLE_SIZE;
uint32_t sum = 0;
for(uint8_t i=0; i<SAMPLE_SIZE; i++) {
sum += samples[i];
}
return sum / SAMPLE_SIZE;
}
3.3 通信协议设计
3.3.1 云平台交互
采用MQTT协议上传数据,报文格式:
code复制topic: /fire_alarm/{deviceID}
payload: {
"temp": 25.6,
"smoke": 320,
"alarm": 0,
"timestamp": 1625097600
}
3.3.2 本地报警逻辑
c复制void Check_Thresholds(void) {
float temp = Read_Temperature();
uint16_t smoke = MQ2_Read();
if(temp > temp_threshold || smoke > smoke_threshold) {
Buzzer_On();
LED_Blink(500);
Send_Alarm_Message(temp, smoke);
}
}
4. 系统调试与优化
4.1 传感器校准
MQ-2校准步骤:
- 在洁净空气中通电预热24小时
- 记录ADC基准值R0
- 计算公式:RS/R0 = (Vc-VRL)/VRL
- 设置报警阈值一般为R0的3-5倍
4.2 通信稳定性测试
WiFi模块常见问题处理:
- 连接超时:检查AT+CWJAP指令格式
- 频繁掉线:调整ESP8266发射功率(AT+RFPOWER)
- 数据丢失:启用MQTT的QoS1质量等级
4.3 功耗优化技巧
- 将采样间隔从1s改为5s
- 使用STM32的Stop模式
- 关闭未用外设时钟
- 优化后功耗从85mA降至22mA
5. 实际部署建议
5.1 安装位置选择
温度传感器部署要点:
- 距空调出风口>2米
- 靠近主要设备集群
- 高度1.5-2米为宜
烟雾探测器安装规范:
- 每50平方米至少1个
- 避开通风管道
- 距墙面>0.5米
5.2 系统维护指南
建议维护周期:
- 每周:检查通信连接状态
- 每月:清洁传感器表面
- 每季度:校准MQ-2传感器
- 每年:更换蜂鸣器电池
我在实际部署中发现,给传感器加装防尘罩可以延长维护周期2-3倍。同时建议在云平台设置二级阈值预警,当数值接近危险值时提前通知运维人员。