1. 项目概述
这个基于STM32的火灾监控与可视化系统是我去年完成的毕业设计项目,它实现了对环境的实时监测、火灾预警和数据可视化展示。系统采用STM32F103C8T6作为主控芯片,搭配多种传感器模块,通过WiFi模块将数据上传至云端服务器,最终在Web端实现可视化展示。整套系统从硬件选型、电路设计、程序开发到上位机实现都由我独立完成,期间踩过不少坑,也积累了很多实战经验。
火灾监控系统在工业、仓储、楼宇等场景都有广泛应用需求。传统方案往往存在响应延迟、误报率高、可视化程度低等问题。我的设计重点解决了三个核心痛点:一是通过多传感器数据融合提高检测准确性;二是优化报警响应速度;三是实现数据的实时可视化展示。整个项目涉及嵌入式开发、传感器技术、无线通信和Web开发等多个技术领域,对电子类专业学生来说是个非常全面的综合训练。
2. 系统设计与硬件选型
2.1 整体架构设计
系统采用三层架构设计:
- 感知层:由STM32主控和各种传感器组成
- 传输层:ESP8266 WiFi模块负责数据传输
- 应用层:基于Bootstrap的Web可视化界面
这种分层设计使得系统具有很好的扩展性,后期可以方便地增加新的传感器或更换通信方式。我在设计时特别注重各层之间的解耦,比如通过定义统一的通信协议,使得更换WiFi模块时只需修改驱动层代码即可。
2.2 核心硬件选型
主控芯片选用STM32F103C8T6(蓝色pill开发板),选择理由:
- 72MHz主频足够处理多传感器数据
- 丰富的GPIO和通信接口
- 成本低廉(约10元/片)
- 完善的开发社区支持
传感器配置:
- MQ-2烟雾传感器:检测烟雾浓度
- DHT11温湿度传感器:监测环境参数
- 火焰传感器:检测明火
- 蜂鸣器+LED:本地报警装置
通信模块选用ESP8266-01S,主要考虑:
- 支持802.11 b/g/n协议
- 内置TCP/IP协议栈
- 超低功耗(深度睡眠时仅20μA)
- 成本仅15元左右
硬件选型心得:初学者常犯的错误是追求高性能芯片,实际上对于这种监控系统,稳定性和成本才是首要考虑因素。STM32F103系列虽然不算最新,但其稳定性和性价比经过市场长期验证,特别适合毕业设计这类预算有限的项目。
3. 系统实现与关键技术
3.1 硬件电路设计
主控电路设计要点:
- 采用AMS1117-3.3V稳压芯片供电
- 所有数字IO口接10kΩ上拉电阻
- 关键信号线加装0.1μF去耦电容
- 预留SWD调试接口
传感器接口设计:
c复制// 传感器引脚定义
#define MQ2_PIN PA0
#define FLAME_PIN PA1
#define DHT11_PIN PA2
#define BUZZER_PIN PB0
#define LED_PIN PB1
常见问题及解决方案:
- MQ-2传感器输出不稳定:
- 增加硬件滤波电路(RC低通滤波)
- 软件端采用滑动平均算法处理
- ESP8266连接不稳定:
- 确保供电电压稳定(3.3V)
- 添加AT指令重试机制
- 误报问题:
- 设置多条件联合判断(温度+烟雾+火焰)
- 加入延时确认机制
3.2 嵌入式软件设计
系统采用FreeRTOS实时操作系统,创建了三个主要任务:
- 传感器数据采集任务(优先级2)
- 数据处理与报警判断任务(优先级3)
- 无线通信任务(优先级1)
关键算法实现:
c复制// 火灾判断算法
uint8_t isFireDetected() {
float temp = DHT11_GetTemperature();
float smoke = MQ2_GetValue();
uint8_t flame = Flame_GetStatus();
if((temp > 60) && (smoke > 500) && (flame == 1)) {
return 1; // 确认火灾
} else if((temp > 70) || (smoke > 800)) {
return 2; // 疑似火灾
}
return 0; // 正常
}
数据通信协议设计:
| 字节 | 内容 | 说明 |
|---|---|---|
| 0 | 0xAA | 帧头 |
| 1 | 0x01 | 设备ID |
| 2-5 | 温度数据 | 浮点数,网络字节序 |
| 6-9 | 湿度数据 | 浮点数,网络字节序 |
| 10-13 | 烟雾浓度 | 浮点数,网络字节序 |
| 14 | 火焰状态 | 0/1 |
| 15 | 校验和 | 前面所有字节的和 |
3.3 上位机软件开发
Web端采用Bootstrap+ECharts实现,主要功能:
- 实时数据显示(折线图+仪表盘)
- 历史数据查询与导出
- 报警记录管理
- 系统参数配置
数据库设计:
sql复制CREATE TABLE sensor_data (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id VARCHAR(20),
temperature FLOAT,
humidity FLOAT,
smoke FLOAT,
flame TINYINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE alarm_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
device_id VARCHAR(20),
alarm_type VARCHAR(50),
alarm_value FLOAT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
数据推送方案:
- STM32每5秒采集一次数据
- 通过ESP8266发送至服务器
- 服务器存储到MySQL数据库
- Web端通过WebSocket获取实时更新
4. 系统优化与调试经验
4.1 低功耗优化
为延长电池供电时的使用时间,我做了以下优化:
- 调整传感器采样频率(非报警状态下每30秒采样一次)
- 使用STM32的Stop模式
- ESP8266仅在数据传输时唤醒
- 关闭所有未使用的硬件外设
实测效果:
- 正常监控状态:约15mA
- 深度睡眠状态:约2mA
- 报警状态:约80mA
4.2 抗干扰设计
在实验室测试时系统运行良好,但在实际部署中遇到了严重的干扰问题,解决方案:
- 所有长信号线改用双绞线
- 增加磁珠滤波
- 数字地与模拟地分开布局
- 关键信号线加装TVS二极管
4.3 报警策略优化
初期版本误报率较高,通过以下改进将误报率降低到5%以下:
- 引入多条件联合判断
- 设置报警延时确认(持续3秒超过阈值才触发)
- 增加环境自适应校准功能
- 采用滑动窗口算法消除瞬时干扰
5. 项目总结与扩展方向
这个项目从立项到完成共耗时4个月,期间经历了3次硬件改版和无数次软件调试。最大的收获是学会了如何将一个完整的物联网系统从无到有实现出来,特别是解决了各子系统之间的协同问题。
系统还可以在以下方面进行扩展:
- 增加GPS模块实现定位功能
- 开发手机APP推送报警信息
- 引入机器学习算法提高火灾预测准确性
- 支持多设备组网监控
对于想做类似项目的同学,我的建议是:
- 先做好需求分析和方案设计,不要急于动手
- 模块化开发,逐个功能验证
- 预留足够的调试时间
- 文档要及时更新,包括电路图、源码注释和开发日志
项目所有资料(原理图、PCB文件、源码、论文)都已开源,希望能给后续做毕设的同学提供参考。在实际部署时,记得要根据具体环境调整报警阈值,并定期校准传感器。