这个基于STM32的火灾监控与可视化系统是我在指导学弟学妹毕业设计时开发的一个典型案例。随着物联网技术的普及,传统的单一功能火灾报警器已经不能满足现代安防需求。这个系统不仅实现了本地火灾监测,还通过无线通信技术将数据上传到远程客户端,实现了真正的智能化监控。
系统采用模块化设计思路,硬件部分以STM32F103C8T6为核心控制器,搭配MQ-2烟雾传感器、DS18B20温度传感器和GP2Y1010AU0F粉尘传感器组成检测阵列。软件层面则实现了传感器数据采集、阈值判断、报警触发和无线数据传输等功能。特别值得一提的是,我们采用了ESP8266 WiFi模块实现物联网连接,使得系统可以轻松接入现有网络环境。
选择STM32F103C8T6作为主控芯片主要基于以下几点考虑:
实际开发中发现,STM32的GPIO驱动能力较强,可以直接驱动LED和蜂鸣器,省去了额外的驱动电路。
MQ-2烟雾传感器需要设计专门的信号调理电路:
c复制// ADC初始化代码示例
void Adc_Init_Fire(void)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
DS18B20数字温度传感器的优势:
ESP8266 WiFi模块通过串口与STM32连接,需要注意:
c复制// WiFi配置关键代码
const u8* wifiap_ssid="FireMonitor_AP"; // AP名称
const u8* wifiap_password="12345678"; // 连接密码
const u8* portnum="5000"; // 监听端口
void atk_8266_test(void)
{
atk_8266_quit_trans(); // 退出透传
atk_8266_set_uart(115200,8,0,1,0); // 设置串口参数
atk_8266_set_ap(wifiap_ssid,wifiap_password,3); // 配置AP模式
atk_8266_set_server(1,portnum); // 启动TCP服务器
}
上电初始化阶段:
主循环任务:
中断服务程序:
采用加权决策算法提高报警准确性:
报警条件:
if (0.5Smoke + 0.3dTemp/dt + 0.2*Dust) > Threshold
根据环境变化动态调整报警阈值:
c复制#define BASE_SMOKE 200 // 基准烟雾值
#define BASE_TEMP 30 // 基准温度值
uint16_t adaptive_threshold(uint16_t smoke, float temp)
{
static uint16_t base_smoke = BASE_SMOKE;
static float base_temp = BASE_TEMP;
// 环境自适应
if(smoke < base_smoke) base_smoke = smoke;
if(temp < base_temp) base_temp = temp;
return base_smoke * 1.5; // 阈值设为基准值的1.5倍
}
自定义简单通信协议格式:
| 帧头 | 命令字 | 数据长度 | 数据内容 | 校验和 |
|---|---|---|---|---|
| 0xAA | 1字节 | 1字节 | N字节 | 1字节 |
常见命令示例:
传感器数据跳动大
c复制#define FILTER_NUM 5
uint16_t filter_smoke(uint16_t new_val)
{
static uint16_t buf[FILTER_NUM] = {0};
static uint8_t cnt = 0;
buf[cnt++] = new_val;
if(cnt >= FILTER_NUM) cnt = 0;
// 排序找中值
uint16_t temp[FILTER_NUM];
memcpy(temp, buf, sizeof(temp));
bubble_sort(temp, FILTER_NUM);
return temp[FILTER_NUM/2];
}
WiFi连接不稳定
误报警问题
采用间歇工作模式:
硬件优化:
实测功耗对比:
| 工作模式 | 电流消耗 | 待机时间 |
|----------|----------|----------|
| 全速运行 | 45mA | 约22小时 |
| 间歇模式 | 8mA | 约5天 |
| 深度睡眠 | 0.5mA | 约3个月 |
多节点组网监测
云平台集成
智能联动控制
机器学习应用
这个项目从硬件选型到软件开发都经过精心设计,特别适合作为电子信息类专业的毕业设计课题。在实际部署测试中,系统表现出良好的稳定性和可靠性,检测响应时间小于3秒,误报率低于5%。通过这个项目,学生可以全面掌握STM32开发、传感器应用、无线通信等关键技术,为后续工作或深造打下坚实基础。