【STM32项目开源】基于STM32的智能仓库火灾检测系统
目录
一、设计背景和意义
1.1设计背景
1.2设计意义
二、实物效果展示
2.1实物图片
2.2实物演示视频
三、硬件功能简介
3.1项目功能详解
3.2元器件清单
四、主框图与软件流程图
五、硬件PCB展示
六、软件程序设计
七、项目资料包内容
资料获取:查看主页介绍“充哥单片机设计”
一、设计背景和意义
1.1设计背景
随着全球物流业的飞速发展和智能制造理念的深入,现代仓库作为供应链的核心节点,其内部存储的货物价值日益增高,一旦发生火灾,将可能造成难以估量的经济损失乃至人员伤亡。因此,对仓库环境进行实时、智能化的安全监控,实现火灾的早期预警与快速响应,已成为工业安全领域一个至关重要且紧迫的课题。
目前,传统的仓库火灾防范系统多依赖于独立的烟感或温感探测器,这类系统普遍存在响应滞后、误报率高、监控维度单一等问题。例如,单一的烟雾传感器在灰尘较大的仓储环境中容易误报,而单一的温度传感器则可能在火灾萌芽阶段因温度上升不明显而无法及时报警。此外,传统系统大多局限于本地声光报警,缺乏远程监控和干预能力,管理人员无法在第一时间获取警情并采取措施,错失最佳灭火时机。随着物联网技术的成熟,市场上也出现了一些初步的智能消防方案,但它们往往存在系统封闭、集成度不高、用户交互体验不佳或成本过于高昂等缺点,难以在中小型仓库中普及应用。
1.2设计意义
从社会与经济的现实需求来看,仓库是连接生产与消费的枢纽,承载着巨大的资产价值。传统消防系统依赖于孤立的传感器和被动响应机制,其固有的缺陷——如单一传感器在复杂仓库环境下(如粉尘、湿度干扰)的高误报率、报警滞后性以及缺乏远程交互能力——已经成为现代仓储安全管理的“阿喀琉斯之踵”。一旦火情因系统缺陷未能被及早发现和控制,其后果往往是灾难性的。因此,本系统的研究不再局限于一个简单的技术实现,而是直击当前行业痛点,致力于构建一个多维感知、智能决策、即时响应、人机协同的主动式安全防护体系。通过将火灾防范的关口前移,从“灾后补救”转向“灾前预警”和“早期扑救”,本系统能有效保障人员生命安全,减少巨额财产损失,其成功实施将产生直接且显著的社会经济效益。
二、实物效果展示
2.1实物图片
2.2实物演示视频
【开源】基于STM32的智能火灾仓库监控系统
三、硬件功能简介
3.1项目功能详解
- 传感器检测:检测烟雾浓度、液化气浓度、火焰火情、温湿度
- 数据显示:0.96OLED屏幕显示全部的传感器数据以及传感器的阈值等数据。
- 执行机构:风扇、水泵、蜂鸣器、报警灯。
- 接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台。
- App远程监控:通过App远程监控全部传感器数据,并控制执行机构。
- 阈值数据设定:系统通过按键设定阈值,也可以通过手机App远程设定。
- 模式切换:可以通过按键或者手机App实现自动/手动模式的切换。
- 手动模式:通过手机App或小程序控制开关
- 自动模式:当检测到火焰,打开水泵灭火并声光报警;检测到温湿度、烟雾浓度、液化气浓度超过阈值打开风扇通风并蜂鸣器报警。
- 历史数据记录:采集的传感器数据上传并记录在机智云平台,可以在云平台后台查看历 史数据(手机App不具备此功能)。
3.2元器件清单
- 主控采用STM32F103C8T6芯片
- 0.96OLED显示屏幕
- ESP8266 WiFi模块
- DHT11温湿度传感器
- 火焰传感器
- MQ-2烟雾浓度传感器
- MQ-5液化气浓度传感器
- 声光报警
- 继电器风扇、水泵
- 按键
四、主框图与软件流程图
主框图
流程图
五、硬件PCB展示
六、软件程序设计
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "control.h"
#include "key.h"
#include "timer.h"
#include "oled.h"
#include "dht11.h"
#include "adc.h"
#include "IoData.h"/**** 数据变量 ****/
uint16_t temp_door = 30; //温度阈值
uint16_t humi_door = 70; //湿度阈值
uint16_t mq2_door = 3000; //烟雾阈值
uint16_t mq5_door = 3000; //液化气阈值uint8_t auto_mode = 0; //自动模式开关 0关闭 1开启
uint8_t wind_status = 0; //风扇开关状态
uint8_t water_status = 0; //水泵开关状态/**** 菜单变量 ****/
uint8_t keu_num = 0; //按键
uint8_t page_num = 1; //界面
uint8_t option = 0; //选项/**** 功能函数声明 ****/
void get_all_sensor_data(); //传感器数据采集
void Sensor_Data_Handle(); //不同模式下控制效果
void Key_event_handle(void); //按键功能函数
void All_Pin_Init(void); //系统初始化函数void OLED_Show_OnePage(); //第一屏显示内容
void OLED_Show_TwoPage(); //第二屏显示内容
void OLED_Show_ThreePage(); //第三屏显示内容void All_Pin_Init(void)
{delay_init(); //系统延时函数初始化OLED_Init(); //屏幕初始化uart3_init(9600); //串口3初始化,波特率9600uart1_init(115200); //串口1初始化,波特率115200uart2_init(9600); //串口2初始化,波特率9600DHT11_Init(); //DHT11温湿度初始化Adc_Init(); //烟雾浓度、液化气浓度度初始化KEY_Init(); //按键初始化TIME_Config(); //定时器初始化Control_Init(); //声光报警、风扇、水泵初始化
}int main(void)
{All_Pin_Init();while(1) { get_all_sensor_data(); //传感器数据采集Key_event_handle(); //按键监测Sensor_Data_Handle(); //数据处理if(page_num == 1){ //屏幕更新OLED_Show_OnePage();}else if(page_num == 2){OLED_Show_TwoPage();}else if(page_num == 3){OLED_Show_ThreePage();}}
}void Key_event_handle(void)
{keu_num = KEY_Scan(0); //按键扫描赋值switch(keu_num){case 1: //按键1按下if(page_num==1){page_num=2;OLED_Clear();OLED_Show_TwoPage();}else if(page_num==2){option++;if(option>4){option=0;page_num=3;OLED_Clear();OLED_Show_ThreePage();}else OLED_Show_TwoPage();}else if(page_num==3){option++;if(option>2){option=0;page_num=1;OLED_Clear();OLED_Show_OnePage();}else OLED_Show_ThreePage();}break;case 2: //按键2按下if(page_num==1){auto_mode = 1;}else if(page_num==2){if(option==1)temp_door++;else if(option==2)humi_door+=1;else if(option==3)mq2_door+=25;else if(option==4)mq5_door+=25;}else if(page_num==3){if(auto_mode==0){if(option==1){Wind=1;wind_status = 1;}else if(option==2){Water_pump=1;water_status = 1;}}}break;case 3: //按键3按下if(page_num==1){auto_mode = 0;}else if(page_num==2){if(option==1)temp_door--;else if(option==2)humi_door-=1;else if(option==3)mq2_door-=25;else if(option==4)mq5_door-=25;}else if(page_num==3){if(auto_mode==0){if(option==1){Wind=0;wind_status = 0;}else if(option==2){Water_pump=0;water_status = 0;}}}break;}
}void get_all_sensor_data()
{DHT11_Read_Data(&DHT_temp,&DHT_hum); //获取温湿度数据Get_MQ2_Value(&MQ2_Value); //获取烟雾数据Get_MQ5_Value(&MQ5_Value); //获取液化气浓度Get_Fire_Value(&fire_status); //检测火焰有无
}
void Sensor_Data_Handle()
{//自动模式if(auto_mode==1){//温度、湿度、烟雾浓度、液化气浓度超过阈值 或 检测到火焰 蜂鸣器报警if(DHT_hum>humi_door ||DHT_temp>temp_door || MQ2_Value>mq2_door || MQ5_Value>mq5_door || fire_status==1){Beep = 0; }else{Beep = 1;}//温度、湿度、烟雾浓度、液化气浓度超过阈值 打开风扇通风if(DHT_hum>humi_door ||DHT_temp>temp_door || MQ2_Value>mq2_door || MQ5_Value>mq5_door){Wind=1;wind_status = 1;}else{Wind=0;wind_status = 0;}//检测到火焰 打开水泵灭火if(fire_status==1){Water_pump=1;water_status = 1;}else{Water_pump=0;water_status = 0;}}else{Beep = 1;}
}