资料下载:
1、实现功能
(1)实时监测森林环境中的烟雾浓度、温度、湿度等参数;
(2)当检测到的烟雾浓度超过设定阈值时,系统立即发出声光报警;
(3)通过按键设置检测参数,如烟雾浓度阈值、报警温度等;
(4)采用OLED屏幕实时显示烟雾浓度、温度、湿度等数据;
(5)检测到明火或环境异常时,通过蜂鸣器发出报警;
(6)将检测数据通过无线通信模块发送至手机APP,实现远程监控。
可增加的功能:
主要元器件:
(1)主控芯片:选用STM32单片机,负责数据采集、处理和输出控制;
(2)烟雾传感器:采用MQ-2型烟雾传感器,实现对森林环境中烟雾浓度的检测;
(3)温湿度传感器:采用DHT11温湿度传感器,实时监测环境温湿度;
(4)OLED显示屏:用于显示烟雾浓度、温度、湿度等数据;
(5)声光报警模块:用于发出报警信号;
(6)无线通信模块:采用WIFI,实现与手机APP的数据传输;
(7)按键模块:用于设置检测参数;
2、实物
系统以STM32单片机作为主控制器,结合DHT11、MQ-2和火焰传感器,构建了一个高效的森林火灾检测系统。通过DHT11传感器实时监测温湿度,MQ-2传感器检测空气中的烟雾浓度,火焰传感器则用于检测火焰的存在,确保对森林环境变化的全面感知。系统通过这些传感器数据的实时采集与处理,能够及时发现异常情况,帮助管理人员进行预警和应急响应。为了便于管理人员实时查看森林环境状态,系统采用OLED液晶显示屏呈现温湿度、烟雾浓度等关键数据,使监控变得直观易懂。同时系统采用ESP8266 WiFi模块实现无线通信,将实时采集到的数据传输至远程平台。通过与手机APP的连接,管理人员可以在任何地方通过APP查看数据和接收预警信息,实现远程监控。系统还具备灵活的报警设置功能,管理人员可以根据森林环境的实际需求设置烟雾浓度的报警阈值。当烟雾浓度超过设定值或火焰被检测到时,系统会触发蜂鸣器进行声音报警,并通过APP向管理人员发送预警提示。此功能有助于及时发现火灾隐患,提高森林防火工作效率,减少火灾带来的损失
【STM32设计】基于STM32设计的森林火灾检测系统
3、代码
STM32代码采用C语言,标准库编写,软件是keil5,代码都有详细注释,看不懂可以截图问我
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "OLED.h"
#include "IO_Init.h"
#include "bsp_adc.h"
#include "DHT11.h"
extern __IO uint16_t ADC_ConvertedValue[NOFCHANEL];// ADC1转换的电压值通过MDA方式传到SRAM
float light,mq135,fire;
u8 mq135_set=30,fire_set=40;
u8 fire_sta;
u8 app_check() //手机APP的指令控制
{
u8 app_key;
app_key=0;
if(USART1_RX_STA>5){
delay_ms(50);
if(strstr((const char *)USART1_RX_BUF,"GPIO0=0")){
app_key= 1;
}
if(strstr((const char *)USART1_RX_BUF,"GPIO0=1")){
app_key= 2;
}
if(strstr((const char *)USART1_RX_BUF,"GPIO0=2")){
app_key= 3;
}
if(strstr((const char *)USART1_RX_BUF,"GPIO0=3")){
app_key= 4;
}
if(strstr((const char *)USART1_RX_BUF,"GPIO0=4")){
app_key= 5;
}
USART1_RX_STA=0;
memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));
}
return app_key;
}
void key_deal()
{
u8 key;
key = Key_Scan(); //按键处理
if(key==0){
key = app_check(); //没有按键按下就处理APP数据
}
if(key==1){
}
if(key==2){
//阈值增加
if(mq135_set<99)
mq135_set++;
}
if(key==3){
//阈值减少
if(mq135_set>10)
mq135_set--;
}
}
int main(void) //主函数
{
u8 str[60],i,time=50,Flag=0;
SystemInit();
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2组中断分组
Beep_Init(); //蜂鸣器初始化
Beep = 0; //测试蜂鸣器
OLED_Init(); //OLED初始化
Beep = 1; //关闭蜂鸣器
usart1_Init(115200);//串口1,ESP8266 WIFI
usart2_Init(115200);//串口2,调试用
Esp8266_AP_Init();//ESP8266初始化为AP模式,会产生一个热点,WIFI,123456789
ADCx_Init(); //ADC模拟量采集引脚初始化
Key_Init(); //按键引脚初始化
while(1)
{
key_deal(); //按键的处理判断
delay_ms(100);
if(time++>10) //10次100ms就是1s一次
{
time=0;
fire = 100-ADC_ConvertedValue[0]/40.95; //ADC数据换成火焰监测数据
mq135 = ADC_ConvertedValue[1]/40.95-1; //ADC数据转换成气体数据
get_temperature_and_humidity(); //温湿度数据
//间隔发送手机APP数据,不能发太快
if(Flag){
Flag=0;
i= sprintf((char *)str,"%.0fW%.0fW%.1fW%dW ",temp,humi,mq135,fire_sta);
UsartPrintf(ESP8266_USART,"AT+CIPSEND=0,%d\r\n",i);
}
else{
UsartPrintf(ESP8266_USART,(char *)str);
Flag=1;
}
}
//报警逻辑处理,数据异常蜂鸣器报警
if((fire_sta)||(mq135>mq135_set))
{
Beep = !Beep;
}
else
Beep = 1;
//以下是显示逻辑部分
OLED_printf(0,0,"Temp:%.0fC ",temp);
OLED_printf(0,2,"Humi:%.0f%% ",humi);
OLED_printf(0,4,"MQ:%4.1f%% %2d%%",mq135,mq135_set);
if(fire>fire_set)
fire_sta = 1;
else
fire_sta = 0;
if(fire_sta==1)
OLED_printf(0,6,"Fire ");
if(fire_sta==0)
OLED_printf(0,6,"NO Fire ");
}
}
4、原理图/PCB
原理图和PCB都使用立创EDA绘制,对新手较为友好。可以导出为AD格式的文件