【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项目功能详解

  1. 传感器检测: 检测烟雾浓度 、液化气浓度、火焰火情温湿度
  2. 数据显示:0.96OLED屏幕显示全部的传感器数据以及传感器的阈值等数据。
  3. ****执行机构:****风扇、水泵、蜂鸣器、报警灯。
  4. 接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台。
  5. App远程监控:通过App远程监控全部传感器数据,并控制执行机构。
  6. 阈值数据设定:系统通过按键设定阈值,也可以通过手机App远程设定。
  7. ****模式切换:****可以通过按键或者手机App实现自动/手动模式的切换。
  8. 手动模式:通过手机App或小程序控制开关
  9. 自动模式:当检测到火焰,打开水泵灭火并声光报警;检测到温湿度、烟雾浓度、液化气浓度超过阈值打开风扇通风并蜂鸣器报警。
  10. 历史数据记录:采集的传感器数据上传并记录在机智云平台,可以在云平台后台查看历 史数据(手机App不具备此功能)。

3.2元器件清单

  1. 主控采用STM32F103C8T6芯片
  2. 0.96OLED显示屏幕
  3. ESP8266 WiFi模块
  4. DHT11温湿度传感器
  5. 火焰传感器
  6. MQ-2烟雾浓度传感器
  7. MQ-5液化气浓度传感器
  8. 声光报警
  9. 继电器风扇、水泵
  10. 按键

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

cpp 复制代码
#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初始化,波特率9600
	uart1_init(115200);	//串口1初始化,波特率115200
	uart2_init(9600);	//串口2初始化,波特率9600
	
	DHT11_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;
	}
}

七、项目资料包内容

资料获取:查看主页介绍"充哥单片机设计"

相关推荐
就叫飞六吧9 小时前
普中stm32大Dap烧录流程
stm32
A9better9 小时前
嵌入式开发学习日志38——stm32之看门狗
stm32·嵌入式硬件·学习
小莞尔10 小时前
【51单片机】【protues仿真】基于51单片机智能路灯控制系统
c语言·stm32·单片机·嵌入式硬件·51单片机
辰哥单片机设计19 小时前
TT直流减速电机(STM32)
stm32
A9better19 小时前
嵌入式开发学习日志36——stm32之USART串口通信前述
stm32·单片机·嵌入式硬件·学习
思诺学长20 小时前
BMS(电池管理系统)的主要功能和架构简述
单片机·嵌入式硬件
czhaii20 小时前
全局不关总中断的 RTOS / CosyOS-II for STCAI MCU
单片机
qq_4017004120 小时前
STM32低功耗Tickless模式
stm32·单片机
研猛男21 小时前
0、FreeRTOS编码和命名规则
笔记·stm32·freertos