(STM32F103C8T6、标准库)
- 功能设计
本项目设计一种全自动的智能火灾监控系统,可对环境温度、湿度和烟雾浓度进行实时监测,当有火灾风险或异常情况发生时,本装置可进行声音报警、自动控制并能够远程数据上报。本系统的具体设计参数如下:
(1)通过 DHT11 检测控制温湿度数据,并显示在OLED上。
(2)通过 MQ-2 检测烟雾浓度数据并显示在OLED上, 正常阀值在0~1000PPM之间。
(3)系统综合多个传感器数据来判断火情,能够实现风险较轻、风险较高、风险极高等基本火情判断:
检测到温度 超过30摄氏度,风险较轻;
检测到温度 超过40摄氏度,风险较高;
检测到烟雾浓度大于 30ppm 时 风险极高;
(4)检测到以上任意风险时蜂鸣器报警提醒,同时发送报警信息(当前温湿度,烟雾浓度,风险登记)到手机上。
(5)低风险不做处理,风险较高,打开风扇,风险极高风扇和水泵同时打开。
2. 硬件设计
2.1 系统结构框图
本系统由主控制器模块、传感器检测模块、通信模块、执行报警模块、显示模块和电源模块等部分组成,各模块协同工作,实现对火灾的实时监测、处理与报警。其结构框图如图1所示。
图1 系统结构框图
2.2 主控制器选型
本系统STM32F103C8T6作为主控制器,该型号提供 64KBFlash+ 20KBSRAM的存储组合,能满足多传感器监测与执行控制的综合需求。多个独立的ADC通道,可同时支持MQ-2 等模拟量传感器的采集,可在无需扩展芯片的情况下同时连接WiFi模块、调试接口和外部通信设备。其定时器配置便于驱动风扇、水泵、蜂鸣器等执行装置,特别适合需要多路PWM控制的火灾联动系统。
2.3 烟雾传感器、温湿度传感器选型
本系统烟雾检测部分采用MQ-2 型可燃气体/烟雾传感器。该传感器能够检测空气中的烟雾及多种可燃气体浓度,典型测量范围约为 300~10000PPM,输出为随浓度变化的模拟电压信号,电压范围在 0~5V之间,可直接连接至主控制器的ADC输入端口进行采集和处理,能够满足系统对烟雾浓度实时监测的要求。
本系统温湿度检测部分采用DHT11 型数字式温湿度传感器,用于测量环境温度和相对湿度。其温度测量范围为 0~50 ℃、湿度测量范围为 20~90 %RH,温度精度约 ±2 ℃、湿度精度约 ±5 %RH,输出为数字信号,采用单总线的通信方式与主控制器进行连接,具有接口简单、数据读取稳定的特点,适用于本系统的环境参数采集。
2.4 通信模块选型
本系统的通信部分在仿真环境中采用Proteus中的COMPIM通信接口模块,用于实现主控制器与计算机之间的串行数据交互。COMPIM能够将仿真电路中的UART信号映射为计算机本地的串口或虚拟串口,使系统在仿真阶段即可通过串口助手接收主控发送的数据,实现与真实串口相同的通信效果。该模块支持标准TTLUART信号,波特率可根据系统设置灵活调整,接口形式与实际硬件串口一致,便于在仿真过程中验证数据发送格式、通信稳定性及上位机显示功能。
2.5主控制器外围电路设计
主控制器外围电路如图2所示,时钟部分采用8MHz无源晶振Y2配合C13、C14构成主时钟振荡电路,同时搭配32.768kHz的Y1晶振与C11、C12组成实时时钟电路以满足低功耗计时需求;复位功能由复位按键SW1、电容C2和电阻R2构成的手动复位电路实现;电源方面通过ME6211-3.3将5V输入转换为3.3V的VCC,且输入输出端均配置滤波电容稳定供电;调试接口采用SWD形式的H4接口,可实现程序下载与调试;同时还设计了USB接口、GPIO扩展排针等外设接口,以及电源指示灯LED1、LED2用于状态显示,也引出了PA11/PA12等引脚支持USB通信。
图2 主控制器外围电路原理图
2.6 烟雾入侵检测电路设计
烟雾入侵检测电路如图3所示。本设计采用MQ-2 可燃气体/烟雾传感器作为火灾早期烟雾识别元件。MQ-2 的模拟输出随空气中烟雾浓度变化而改变,经可调电位器RV1 进行阈值设定后送入主控制器的ADC通道。MCU持续采集烟雾模拟量,并与设定浓度阈值比较,当检测到烟雾浓度升高至危险水平时立即触发火灾预警,联动蜂鸣器、排风风扇及水泵执行紧急处置。该电路结构简单、响应快速,能够有效实现火灾初期烟雾的自动检测与报警功能。
图3 烟雾入侵检测电路原理图
2.7 执行报警电路设计
执行报警电路如图4所示。本系统采用蜂鸣器、微型风扇和水泵作为火灾报警后的执行装置,各执行元器件均通过导线直接连接到STM32 的GPIO引脚,并由单片机输出高低电平实现开关控制。当检测到温度或烟雾浓度超过阈值时,主控制器立即输出高电平驱动蜂鸣器发声,同时启动风扇进行排烟,并控制水泵开启进行简易灭火。该电路结构简单,响应迅速,能够在仿真环境下实现火灾场景的联动报警功能。
烟雾传感器、温湿度传感器选型:
图4 蜂鸣器原理图
图5 电机驱动原理图
2.8 显示模块
本系统的显示模块采用 0.96 英寸OLED液晶显示屏,工作电压为 5V,通过I2C总线与STM32F103C8T6 相连,仅需SDA和SCL两根信号线即可完成数据传输,接口简单、占用资源少。该模块具有高亮度、高对比度和宽视角等特点,即使在低光环境下也能清晰呈现信息,非常适合用于火灾监控场景的实时数据显示。OLED显示内容包括当前温度、湿度、烟雾浓度以及系统工作状态等关键参数,主控制器通过发送字符缓存与刷新指令实现界面的动态更新。显示模块响应速度快、功耗低,可确保在持续监控过程中稳定运行,为用户提供直观、可靠的现场监控信息。
图6OLED原理图
2.9 电源电路设计
电源电路如图所示。本系统采用稳定的 5V直流电源作为整套电路的供电基础,主控制器STM32F103C8T6、DHT11 温湿度传感器、MQ-2 烟雾传感器模块、OLED显示屏及蜂鸣器等都由该电源统一供电。在仿真环境中,各模块均已集成必要的稳压处理,因此电源直接分配至各器件的VCC与GND引脚即可满足工作要求。系统中所有数字接口均共享公共地线,确保信号传输可靠;5V电源具备足够的电流输出能力,可同时驱动风扇、水泵等负载,从而保证整个火灾监控系统的稳定运行。
图7 电源模块原理图
3. 软件设计
3.1 主程序设计
1. 系统初始化和主循环
2. 传感器数据读取
3. 主要风险判断(温度>30或烟雾>30)
4. 报警和数据发送
5. 三级响应机制(根据烟雾和温度值控制风扇水泵)
6. 显示更新和循环继续
图8 主程序流程图
3.2OLED显示子程序设计
1. 接收行号、列号和字符串指针参数;
2. 遍历字符串中的每个字符;
3. 调用OLED_ShowChar()逐个显示字符;
4. 遇到字符串结束符'\0'时停止
图9OLED显示子程序流程图
3.3 串口发送子程序设计
- 发送单个字节,等待发送完成;
- 发送字符串,遍历直到遇到'\0'
- 发送字节数组,指定长度;
- 发送数字,转换为字符串形式;
- 格式化输出,支持可变参数;
图10 串口发送子程序流程图
3.4温湿度传感器子程序设计
- 复位DHT11
2. 检测响应
3. 读取数据(包含字节和位的循环)
4. 校验数据
5. 解析数据或返回失败
图11 串口发送子程序流程图
3.5烟雾传感器(滑动变阻器模数转换)子程序设计
- 初始化ADC- 配置GPIO和ADC参数
- 获取ADC平均值 - 循环多次采样
单次ADC采样
延时5ms
- 计算平均值 - 返回最终结果
图12 烟雾传感器(滑动变阻器模数转换)子程序流程图
4.效果展示
温度<30℃且烟雾小于30PPM时,无反响:
烟雾>30PPM:触发声音报警,启动通风+灭火系统
数据上报:异常状态下通过WiFi发送实时数据
温度>30℃:触发声音报警
数据上报:异常状态下通过WiFi发送实时数据
温度>40℃:触发声音报警,启动通风系统
5. 程序清单
主程序 while(1) { DHT11_Read_Data(&temp,&humi); mq2=MQ2_Get_Adc_Average(ADC_Channel_1,10)*1000/4095;//烟雾传感器浓度的值 OLED_ShowNum(47,0,temp,2,OLED_8X16); OLED_ShowNum(47,16,humi,2,OLED_8X16); OLED_ShowNum(47,32,mq2,3,OLED_8X16); OLED_Update(); //阈值检测 if(temp>30 || mq2>30) //任何一种风险产生 开报警并发送数据出去 { GPIO_ResetBits(GPIOB, GPIO_Pin_0);//低电平触发 Delay_ms(10); GPIO_SetBits(GPIOB, GPIO_Pin_0);//低电平触发 //通过串口发送一次数据到WiFi模块 if(send_flag == 0){ send_flag = 1; printf("TEMP="); Serial_SendByte(temp/10+'0'); Serial_SendByte(temp%10+'0'); printf(" C, HUMI="); Serial_SendByte(humi/10+'0'); Serial_SendByte(humi%10+'0'); printf(" RH, MQ2="); Serial_SendByte(mq2/100+'0'); Serial_SendByte(mq2/10%10+'0'); Serial_SendByte(mq2%10+'0'); printf(" PPM\r\n"); } } else //无风险 关报警 { send_flag = 0; GPIO_SetBits(GPIOB, GPIO_Pin_0); } if(mq2>30){ //风险极高 GPIO_SetBits(GPIOB, GPIO_Pin_3);//开风扇 GPIO_SetBits(GPIOB, GPIO_Pin_6);//开水泵 } else if(temp>40){ //风险较高 GPIO_SetBits(GPIOB, GPIO_Pin_3);//开风扇 GPIO_ResetBits(GPIOB, GPIO_Pin_6);//关水泵 }else{ //低风险或无风险 GPIO_ResetBits(GPIOB, GPIO_Pin_3);//关风扇 GPIO_ResetBits(GPIOB, GPIO_Pin_6);//关水泵 } }(详细代码、图片流程图等看网盘中的报告)
网盘:代码、仿真、报告
通过网盘分享的文件:火灾监控系统
链接: https://pan.baidu.com/s/1S_-OeYKDnZy6qC7FnV-Jrw?pwd=yjjz 提取码: yjjz