1. 项目概述
这个基于STM32的火灾监控与可视化系统是我去年指导的一个本科毕业设计项目,经过三个月的开发和调试,最终实现了稳定可靠的火灾预警功能。系统通过多传感器融合检测技术,能够实时监测环境中的烟雾浓度、温度和PM2.5等关键参数,当检测到异常情况时,会通过声光报警和远程通知两种方式及时预警。
在实际测试中,系统对明火产生的烟雾响应时间小于5秒,对阴燃状态的早期烟雾检测也表现出色。特别值得一提的是,我们采用了NBIoT和WiFi双模通信方案,确保了在各种环境下的数据传输可靠性。下面我将从硬件设计到软件实现的完整开发过程做个详细分享。
2. 硬件设计与选型
2.1 核心控制器选型
选择STM32F103C8T6作为主控芯片主要基于以下几点考虑:
- 72MHz主频满足实时处理需求
- 内置12位ADC便于传感器信号采集
- 丰富的外设接口(UART/SPI/I2C)
- 低功耗特性适合长期运行
- 性价比高(市场价约15元)
提示:对于预算更充足的项目,可以考虑STM32F4系列,其浮点运算能力更强,适合更复杂的算法处理。
2.2 传感器模块设计
2.2.1 烟雾检测模块
选用MQ-2半导体烟雾传感器,其特点包括:
- 检测范围:300-10000ppm
- 加热电压:5V±0.1V
- 响应时间:<10s
- 恢复时间:<30s
实际使用中发现,MQ-2需要预热20分钟才能达到稳定状态。我们在软件中增加了预热计时功能,确保数据可靠性。
2.2.2 温度检测
采用DS18B20数字温度传感器:
- 测量范围:-55℃~+125℃
- 精度:±0.5℃
- 单总线接口节省IO资源
2.2.3 PM2.5检测
使用GP2Y1010AU0F光学灰尘传感器:
- 检测范围:0-500μg/m³
- 输出特性:模拟电压信号
- 需要配合风扇使用
2.3 通信模块设计
2.3.1 WiFi模块
选用ESP8266-01S模块:
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
- 通过AT指令控制
- 工作电流:80mA(平均)
2.3.2 NBIoT备用方案
考虑到某些场所WiFi覆盖不足,我们同时集成了BC95 NBIoT模块:
- 支持Band5/Band8频段
- 低功耗特性(PSM模式电流<5μA)
- 需要SIM卡支持
2.4 电源设计
系统采用12V/2A直流电源输入,通过LM2596降压至5V,再通过AMS1117-3.3转换为3.3V。关键设计要点:
- 输入加入TVS二极管防浪涌
- 每路电源预留100μF+0.1μF去耦电容
- 电池备用方案采用18650锂电池+TP4056充电管理
3. 软件系统设计
3.1 系统架构
整个软件系统分为三个层次:
- 硬件驱动层:传感器驱动、外设控制
- 数据处理层:AD转换、滤波算法、阈值判断
- 应用层:报警逻辑、通信协议、人机交互
3.2 关键算法实现
3.2.1 传感器数据滤波
采用滑动平均滤波结合中值滤波:
c复制#define FILTER_SIZE 5
uint16_t filter_buffer[FILTER_SIZE];
uint16_t median_filter(uint16_t new_value) {
// 滑动窗口更新
for(int i=FILTER_SIZE-1; i>0; i--){
filter_buffer[i] = filter_buffer[i-1];
}
filter_buffer[0] = new_value;
// 中值计算
uint16_t temp[FILTER_SIZE];
memcpy(temp, filter_buffer, sizeof(temp));
bubble_sort(temp, FILTER_SIZE);
return temp[FILTER_SIZE/2];
}
3.2.2 火灾判断逻辑
采用多条件联合判断:
c复制bool check_fire_alarm() {
float smoke_level = get_smoke_level(); // 0-1.0
float temp = get_temperature();
float pm25 = get_pm25();
// 条件1:烟雾浓度突增
if(smoke_level > 0.6 && smoke_level_delta > 0.3)
return true;
// 条件2:温度+烟雾组合判断
if(temp > 60.0 && smoke_level > 0.4)
return true;
// 条件3:PM2.5异常升高
if(pm25 > 150.0 && pm25_delta > 50.0)
return true;
return false;
}
3.3 通信协议设计
自定义了简单的通信协议格式:
code复制[HEAD][LEN][CMD][DATA][CRC]
- HEAD:0xAA 0x55
- LEN:数据长度(1字节)
- CMD:命令字(1字节)
- DATA:变长数据
- CRC:CRC8校验
上位机交互命令示例:
python复制# 设置自动模式
def set_auto_mode():
cmd = bytearray([0xAA, 0x55, 0x01, 0x41, 0x00])
cmd[3] = len(cmd) - 4
cmd[-1] = calc_crc8(cmd[:-1])
ser.write(cmd)
4. 系统调试与优化
4.1 传感器校准
MQ-2传感器需要定期校准,我们开发了校准程序:
- 在洁净空气中记录基准值V0
- 使用标准烟雾源(1000ppm)记录V1
- 计算灵敏度S=(V1-V0)/1000
- 存储校准参数到EEPROM
4.2 通信稳定性优化
发现的问题:WiFi模块在高温环境下容易断连
解决方案:
- 增加心跳包机制(每30秒一次)
- 断线自动重连
- 通信异常时自动切换到NBIoT
关键代码:
c复制void wifi_keep_alive() {
static uint32_t last_send = 0;
if([HAL](https://taotoken.net/?utm_source=hardware)_GetTick() - last_send > 30000) {
if(wifi_send("AT+PING") != SUCCESS) {
wifi_reconnect();
}
last_send = HAL_GetTick();
}
}
4.3 功耗优化
通过以下措施将待机功耗从120mA降至25mA:
- 传感器间歇工作模式(采样周期从1s调整为5s)
- 关闭未使用的外设时钟
- 通信模块空闲时进入睡眠模式
- 使用DMA减少CPU唤醒次数
5. 实际应用建议
-
安装位置选择:
- 距离天花板30-50cm
- 避开空调出风口
- 每50平方米部署1个节点
-
维护建议:
- 每月清洁传感器
- 每季度校准一次
- 定期测试报警功能
-
扩展建议:
- 增加摄像头联动
- 集成消防喷淋控制
- 添加GPS定位功能
这个项目从硬件选型到软件开发完整实现了火灾监控系统,特别适合作为本科毕业设计课题。在实际开发中,最大的收获是要重视系统的可靠性设计,比如通信冗余、故障恢复等机制。对于想进一步深入的同学,可以考虑加入机器学习算法来提高火灾识别的准确率。
