基于STM32的火灾检测系统设计与实现(代码+原理图+PCB+APP)

基于STM32的火灾检测系统设计与实现

摘要:本文设计了一种基于STM32的火灾检测系统,能够实时监测环境温度、烟雾浓度、火焰状态以及一氧化碳浓度,并通过OLED显示屏和手机端蓝牙App实时显示这些信息。系统设定了温度和烟雾浓度的阈值,当检测到高于阈值时,蜂鸣器报警并启动相应设备(如风扇、水泵)进行应急处理。系统采用STM32F103系列单片机作为核心控制器,结合多种传感器和执行器,实现了对火灾隐患的全面监测和及时预警。

关键词:STM32;火灾检测;温度阈值;烟雾浓度;火焰检测;一氧化碳浓度;OLED显示;蓝牙App

一、引言

火灾是一种严重的灾害,它不仅会造成财产损失,还可能危及人们的生命安全。因此,设计一种高效、可靠的火灾检测系统具有重要意义。本文基于STM32单片机,设计并实现了一种能够实时监测环境温度、烟雾浓度、火焰状态以及一氧化碳浓度的火灾检测系统。当检测到异常时,系统能够自动报警并启动相应的应急处理设备,同时通过OLED显示屏和手机端蓝牙App实时显示监测信息,以便用户及时采取措施。

二、系统总体设计
2.1 系统功能概述

本系统旨在实现对火灾隐患的全面监测和及时预警。具体功能包括:

  1. 温度监测:实时监测环境温度,当温度高于设定阈值时,蜂鸣器报警。
  2. 烟雾浓度监测:实时监测烟雾浓度,当烟雾浓度高于设定阈值时,蜂鸣器报警并启动继电器控制风扇通风。
  3. 火焰检测:实时监测环境火焰状态,当检测到火焰时,蜂鸣器报警并启动水泵出水。
  4. 一氧化碳浓度监测:实时监测一氧化碳浓度,并在OLED显示屏和手机端蓝牙App上显示。
  5. 信息显示:通过OLED显示屏实时显示温度、烟雾浓度、是否有火焰以及一氧化碳浓度等信息。
  6. 手机端蓝牙App显示:通过手机端蓝牙App实时显示温度、烟雾浓度、是否有火焰以及一氧化碳浓度等信息,方便用户远程监控。
2.2 系统硬件设计
2.2.1 核心控制器

本系统采用STM32F103系列单片机作为核心控制器。STM32F103系列单片机是基于ARM Cortex-M3内核的32位微控制器,具有丰富的外设资源和强大的处理能力,能够满足本系统对数据采集、处理和控制的要求。

2.2.2 传感器模块
  1. 温度传感器:采用DS18B20数字式集成温度传感器,能够直接输出数字温度信号供单片机处理。DS18B20具有高精度、低功耗、抗干扰能力强等优点,适合用于环境温度监测。
  2. 烟雾传感器:采用MQ-2烟雾气敏传感器,能够实时监测烟雾浓度。MQ-2传感器对可燃气体和烟雾具有较高的灵敏度,当烟雾浓度超过设定阈值时,能够输出相应的电信号供单片机处理。
  3. 火焰传感器:采用红外火焰传感器,能够实时监测环境火焰状态。红外火焰传感器通过检测火焰发出的特定波长红外光来实现火焰检测,具有响应速度快、抗干扰能力强等优点。
  4. 一氧化碳传感器:采用MQ-7一氧化碳气敏传感器,能够实时监测一氧化碳浓度。MQ-7传感器对一氧化碳具有较高的灵敏度,适合用于住宅等场所的一氧化碳浓度监测。
2.2.3 执行器模块
  1. 蜂鸣器:用于发出报警声,当系统检测到异常时,蜂鸣器会发出响亮的报警声以提醒用户。
  2. 继电器:用于控制风扇的启动和停止。当烟雾浓度超过设定阈值时,继电器会闭合,从而启动风扇进行通风。
  3. 水泵:用于灭火或降温。当系统检测到火焰时,水泵会启动出水以扑灭火焰或降低环境温度。
2.2.4 显示模块
  1. OLED显示屏:用于实时显示温度、烟雾浓度、是否有火焰以及一氧化碳浓度等信息。OLED显示屏具有自发光、对比度高、视角广等优点,适合用于本系统的信息显示。
  2. 蓝牙模块:用于与手机端蓝牙App进行通信,将监测信息实时传输到手机端进行显示。蓝牙模块具有通信距离远、功耗低等优点,适合用于本系统的远程监控。
2.3 系统软件设计
2.3.1 主程序流程

主程序首先进行系统初始化,包括初始化STM32单片机的各个外设(如ADC、GPIO、USART等)、初始化传感器和执行器以及设置初始参数等。然后,系统进入主循环,不断采集传感器数据并进行处理。当检测到异常时,系统会根据预设的逻辑启动相应的报警和执行器进行应急处理,并通过OLED显示屏和手机端蓝牙App实时显示监测信息。

2.3.2 数据采集与处理
  1. 温度数据采集与处理:通过DS18B20温度传感器采集环境温度数据,并将其转换为数字信号供单片机处理。单片机将采集到的温度数据与设定阈值进行比较,当温度高于阈值时,启动蜂鸣器报警。
  2. 烟雾浓度数据采集与处理:通过MQ-2烟雾气敏传感器采集烟雾浓度数据,并将其转换为电压信号供单片机处理。单片机将采集到的电压信号与设定阈值进行比较,当烟雾浓度高于阈值时,启动蜂鸣器报警并控制继电器闭合以启动风扇通风。
  3. 火焰检测数据处理:通过红外火焰传感器采集火焰状态数据,并将其转换为数字信号供单片机处理。当检测到火焰时,单片机启动蜂鸣器报警并控制水泵出水以扑灭火焰。
  4. 一氧化碳浓度数据采集与处理:通过MQ-7一氧化碳气敏传感器采集一氧化碳浓度数据,并将其转换为电压信号供单片机处理。单片机将采集到的电压信号转换为浓度值,并在OLED显示屏和手机端蓝牙App上显示。
2.3.3 通信协议设计

本系统采用蓝牙通信协议实现单片机与手机端蓝牙App之间的数据传输。蓝牙通信协议具有通信距离远、功耗低、抗干扰能力强等优点,适合用于本系统的远程监控。在通信过程中,单片机将采集到的温度、烟雾浓度、火焰状态以及一氧化碳浓度等信息打包成数据帧,并通过蓝牙模块发送到手机端蓝牙App进行显示。手机端蓝牙App接收到数据帧后,解析数据帧并显示相应的监测信息。

三、系统硬件实现
3.1 核心控制器电路

STM32F103系列单片机是本系统的核心控制器,其电路主要包括电源电路、时钟电路、复位电路以及各个外设的接口电路等。电源电路为单片机提供稳定的工作电压;时钟电路为单片机提供时钟信号;复位电路用于在单片机出现异常时进行复位操作;各个外设的接口电路用于连接传感器、执行器以及显示模块等。

3.2 传感器电路
3.2.1 温度传感器电路

DS18B20温度传感器采用单总线通信方式,其电路主要包括电源电路、数据线接口电路以及上拉电阻等。电源电路为传感器提供工作电压;数据线接口电路用于连接单片机和传感器之间的数据线;上拉电阻用于提高数据线的稳定性。

3.2.2 烟雾传感器电路

MQ-2烟雾气敏传感器采用模拟量输出方式,其电路主要包括电源电路、信号调理电路以及输出接口电路等。电源电路为传感器提供工作电压;信号调理电路用于将传感器输出的微弱电压信号放大并转换为适合单片机处理的电压范围;输出接口电路用于连接单片机和传感器之间的信号线。

3.2.3 火焰传感器电路

红外火焰传感器采用数字量输出方式,其电路主要包括电源电路、红外接收电路以及输出接口电路等。电源电路为传感器提供工作电压;红外接收电路用于接收火焰发出的特定波长红外光并转换为电信号;输出接口电路用于连接单片机和传感器之间的信号线。

3.2.4 一氧化碳传感器电路

MQ-7一氧化碳气敏传感器采用模拟量输出方式,其电路设计与MQ-2烟雾气敏传感器类似,主要包括电源电路、信号调理电路以及输出接口电路等。

3.3 执行器电路
3.3.1 蜂鸣器电路

蜂鸣器电路主要包括电源电路、驱动电路以及输出接口电路等。电源电路为蜂鸣器提供工作电压;驱动电路用于控制蜂鸣器的启动和停止;输出接口电路用于连接单片机和蜂鸣器之间的控制线。

3.3.2 继电器电路

继电器电路主要包括电源电路、驱动电路以及输出接口电路等。电源电路为继电器提供工作电压;驱动电路用于控制继电器的闭合和断开;输出接口电路用于连接单片机和继电器之间的控制线。当单片机检测到烟雾浓度超过设定阈值时,会控制继电器闭合以启动风扇通风。

3.3.3 水泵电路

水泵电路主要包括电源电路、驱动电路以及输出接口电路等。电源电路为水泵提供工作电压;驱动电路用于控制水泵的启动和停止;输出接口电路用于连接单片机和水泵之间的控制线。当单片机检测到火焰时,会控制水泵启动出水以扑灭火焰。

3.4 显示模块电路
3.4.1 OLED显示屏电路

OLED显示屏电路主要包括电源电路、数据接口电路以及控制接口电路等。电源电路为显示屏提供工作电压;数据接口电路用于连接单片机和显示屏之间的数据线以传输显示数据;控制接口电路用于连接单片机和显示屏之间的控制线以控制显示屏的显示状态。

3.4.2 蓝牙模块电路

蓝牙模块电路主要包括电源电路、数据接口电路以及天线等。电源电路为蓝牙模块提供工作电压;数据接口电路用于连接单片机和蓝牙模块之间的数据线以传输通信数据;天线用于增强蓝牙信号的传输距离和稳定性。

四、系统软件实现
4.1 主程序实现

主程序首先进行系统初始化操作,包括初始化STM32单片机的各个外设、初始化传感器和执行器以及设置初始参数等。然后,系统进入主循环,不断采集传感器数据并进行处理。主程序的具体实现流程如下:

  1. 系统初始化:初始化STM32单片机的时钟系统、GPIO端口、ADC模块、USART模块等外设;初始化传感器和执行器;设置初始参数(如温度阈值、烟雾浓度阈值等)。
  2. 主循环:不断采集温度、烟雾浓度、火焰状态以及一氧化碳浓度等传感器数据;对采集到的数据进行处理(如滤波、放大等);将处理后的数据与设定阈值进行比较;根据比较结果启动相应的报警和执行器进行应急处理;通过OLED显示屏和手机端蓝牙App实时显示监测信息。
4.2 数据采集与处理子程序实现
4.2.1 温度数据采集与处理子程序

温度数据采集与处理子程序主要通过DS18B20温度传感器采集环境温度数据,并将其转换为数字信号供单片机处理。子程序的具体实现流程如下:

  1. 初始化DS18B20传感器:按照DS18B20的通信协议初始化传感器,使其进入工作状态。
  2. 发送温度转换命令:向DS18B20传感器发送温度转换命令,使其开始采集环境温度数据。
  3. 读取温度数据:等待一段时间后(根据DS18B20的转换时间),从传感器读取转换后的温度数据。
  4. 数据处理:将读取到的温度数据进行处理(如滤波、放大等),得到准确的温度值。
  5. 阈值比较与报警:将处理后的温度值与设定阈值进行比较,当温度高于阈值时,启动蜂鸣器报警。
4.2.2 烟雾浓度数据采集与处理子程序

烟雾浓度数据采集与处理子程序主要通过MQ-2烟雾气敏传感器采集烟雾浓度数据,并将其转换为电压信号供单片机处理。子程序的具体实现流程如下:

  1. 初始化ADC模块:初始化STM32单片机的ADC模块,设置采样通道、采样时间等参数。
  2. 采集烟雾浓度数据:通过ADC模块采集MQ-2传感器输出的电压信号,得到烟雾浓度数据。
  3. 数据处理:对采集到的烟雾浓度数据进行处理(如滤波、放大等),得到准确的烟雾浓度值。
  4. 阈值比较与报警:将处理后的烟雾浓度值与设定阈值进行比较,当烟雾浓度高于阈值时,启动蜂鸣器报警并控制继电器闭合以启动风扇通风。
4.2.3 火焰检测数据处理子程序

火焰检测数据处理子程序主要通过红外火焰传感器采集火焰状态数据,并将其转换为数字信号供单片机处理。子程序的具体实现流程如下:

  1. 初始化GPIO端口:初始化STM32单片机的GPIO端口,设置红外火焰传感器的输入引脚为输入模式。
  2. 采集火焰状态数据:读取红外火焰传感器的输出引脚状态,得到火焰状态数据。
  3. 数据处理:对采集到的火焰状态数据进行处理(如去抖、滤波等),得到准确的火焰状态。
  4. 报警与应急处理:当检测到火焰时,启动蜂鸣器报警并控制水泵启动出水以扑灭火焰。
4.2.4 一氧化碳浓度数据采集与处理子程序

一氧化碳浓度数据采集与处理子程序主要通过MQ-7一氧化碳气敏传感器采集一氧化碳浓度数据,并将其转换为电压信号供单片机处理。子程序的具体实现流程与烟雾浓度数据采集与处理子程序类似,只是传感器类型和数据处理方式有所不同。

4.3 通信协议实现

本系统采用蓝牙通信协议实现单片机与手机端蓝牙App之间的数据传输。通信协议的具体实现流程如下:

  1. 初始化蓝牙模块:按照蓝牙模块的通信协议初始化模块,使其进入工作状态。
  2. 数据打包:将采集到的温度、烟雾浓度、火焰状态以及一氧化碳浓度等信息打包成数据帧。数据帧的格式可以根据实际需求进行设计,一般包括帧头、数据长度、数据类型、数据内容以及校验和等部分。
  3. 数据发送:通过蓝牙模块将数据帧发送到手机端蓝牙App。在发送过程中,需要确保数据的完整性和准确性。
  4. 数据接收与解析:手机端蓝牙App接收到数据帧后,解析数据帧并提取出温度、烟雾浓度、火焰状态以及一氧化碳浓度等信息进行显示。
五、系统测试与结果分析
5.1 系统测试

为了验证本系统的性能和可靠性,进行了以下测试:

  1. 功能测试:分别测试温度监测、烟雾浓度监测、火焰检测以及一氧化碳浓度监测等功能是否正常工作。通过模拟不同的环境条件(如高温、高烟雾浓度、火焰以及高一氧化碳浓度等),观察系统是否能够准确检测到异常并启动相应的报警和执行器进行应急处理。
  2. 性能测试:测试系统的响应速度、准确性以及稳定性等性能指标。通过多次重复测试,统计系统的响应时间、报警准确率以及运行稳定性等数据,并进行分析和评估。
  3. 通信测试:测试单片机与手机端蓝牙App之间的通信是否正常。通过模拟不同的通信距离和干扰环境,观察系统是否能够稳定地进行数据传输和显示。
5.2 结果分析

经过测试,本系统能够准确地监测环境温度、烟雾浓度、火焰状态以及一氧化碳浓度等信息,并在检测到异常时及时启动相应的报警和执行器进行应急处理。同时,系统能够通过OLED显示屏和手机端蓝牙App实时显示监测信息,方便用户远程监控。在性能测试方面,系统的响应速度较快、准确性较高且运行稳定。在通信测试方面,单片机与手机端蓝牙App之间的通信正常,能够稳定地进行数据传输和显示。

六、结论与展望
6.1 结论

本文设计了一种基于STM32的火灾检测系统,能够实时监测环境温度、烟雾浓度、火焰状态以及一氧化碳浓度等信息,并在检测到异常时及时启动相应的报警和执行器进行应急处理。系统采用STM32F103系列单片机作为核心控制器,结合多种传感器和执行器,实现了对火灾隐患的全面监测和及时预警。同时,系统通过OLED显示屏和手机端蓝牙App实时显示监测信息,方便用户远程监控。经过测试,系统性能稳定、可靠性高,具有一定的实际应用价值。

6.2 展望

虽然本系统已经实现了对火灾隐患的全面监测和及时预警功能,但仍存在一些不足之处和改进空间。例如,可以进一步优化系统的算法以提高检测的准确性和稳定性;可以增加更多的传感器类型以扩大系统的监测范围;可以设计更加人性化的用户界面以提高用户体验等。此外,还可以将本系统与其他智能家居系统进行集成,实现更加智能化的火灾防控和应急处理。未来,我们将继续对系统进行改进和完善,以提高其性能和可靠性,并探索其在更多领域的应用。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AD.h"
#include "dht11.h"
#include "usart.h"
#include "led.h"
#include "key.h"
u8 Humi,Temp;
u8 Yan,Co;

u8 Yan_N=40;   //烟雾浓度阈值
u8 Co_N=50;    //CO浓度阈值
u8 Temp_N=40;  //温度阈值
u8 Key_mode=0; //按键模式


u8 Key1=0; //按键标志
u8 Key2=0; //按键标志
u8 Key3=0; //按键标志
u8 Key4=0; //按键标志

u16 i;
u8 Beep_num=0; //报警标志
u8 Beep=0; //报警
u8 fire=0; //火焰
int main(void)
{
	/*模块初始化*/
	OLED_Init();				//OLED初始化
	AD_Init();					//AD初始化
	DHT11_UserConfig();
  LED_Init();
	uart1_init(9600);
	Key_Init();
	
	/*显示静态字符串*/
	
	
	//显示“温度:  C”
	OLED_ShowChinese(1,1,0);
	OLED_ShowChinese(1,2,5);
	OLED_ShowChar(1,5,':');
	OLED_ShowChar(1,8,'C');
	
	//显示“火灾:  
	OLED_ShowChinese(1,5,22);
	OLED_ShowChinese(1,6,23);
	OLED_ShowChar(1,13,':');

	
	//显示“烟雾:”
	OLED_ShowChinese(2,1,2);
	OLED_ShowChinese(2,2,3);
	OLED_ShowChar(2,5,':');
	OLED_ShowString(2,8,"%");

	//显示“CO:”
	OLED_ShowString(3,1,"C O :");
	OLED_ShowString(3,8,"%");
	
	
		//显示“报警:”
	OLED_ShowChinese(3,5,20);
	OLED_ShowChinese(3,6,21);
	OLED_ShowChar(3,13,':');

	
	

	
		//显示“阈值:”
	OLED_ShowChinese(2,5,14);
	OLED_ShowChinese(2,6,15);
	OLED_ShowChar(2,13,':');
	OLED_ShowString(2,16,"%");
	
	
	//显示“温度:  C”
	OLED_ShowChinese(4,1,0);
	OLED_ShowChinese(4,2,5);
	OLED_ShowChinese(4,3,14);
	OLED_ShowChinese(4,4,15);
	OLED_ShowChar(4,9,':');
	OLED_ShowChar(4,12,'C');
	
	
	i=0;
	while (1)
	{
		i++;
		if(i>=500)
		{
			i=0;
			LED1_Turn();
			//显示 DHT11温湿度数据
		DHT11_Read_Data(&Humi,&Temp);
		OLED_ShowNum(1,6,Temp,2);
//		OLED_ShowNum(1,14,Temp_N,2);

		 Yan = 100 * AD_Value[0] / 4095.f;
		 Co = 100 * AD_Value[2] / 4095.f;
		OLED_ShowNum(2,6,Yan,2);      //显示 烟雾PPM数据
    OLED_ShowNum(3,6,Co,2);       //显示CO数据
			
		OLED_ShowNum(2,14,Yan_N,2);    //显示 烟雾阈值数据
		OLED_ShowNum(4,10,Temp_N,2);   //显示温度阈值数据	
		OLED_ShowNum(4,16,Key_mode,1);   //显示温度阈值数据	
			
			printf("\n");
		printf("温度: %d\n",Temp);
//		printf("湿度: %d\n",Humi);
		printf("烟雾: %d\n",Yan);
		if(fire==1)
		{
			printf("火焰:有火焰 \n");
		}
		else
		{
		printf("火焰:无火焰 \n");
		}
	
		printf("一氧化碳: %d\n",Co);
		}

		

		
		 if (Yan > Yan_N)
		{
		 Beep=1;
		}
		else if(Temp > Temp_N)
		{
	   Beep=1;
		 GPIO_SetBits(GPIOB, GPIO_Pin_12);	//开通风
		}
		else if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) == 0)	
		{
		 Beep=1;
		 fire=1;
		}
		else
		{
		 Beep=0;
		 fire=0;
		GPIO_ResetBits(GPIOB, GPIO_Pin_12); //关通风
		}
		
		
	  if ((Beep==1)&&(Beep_num==1))
		{
		GPIO_SetBits(GPIOB, GPIO_Pin_14);	
		}
		else
		{
		GPIO_ResetBits(GPIOB, GPIO_Pin_14);	
		}
		
		if (fire==1)
		{
		GPIO_SetBits(GPIOB, GPIO_Pin_13);	//开水泵
		OLED_ShowChinese(1,8,24);
		}
		else
		{
		GPIO_ResetBits(GPIOB, GPIO_Pin_13);	//关水泵
			OLED_ShowChinese(1,8,25);
		}
		
		
		
		
		
		
		
		
		
		
		
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_4) == 0)
		{
		  Key1=1;
		}
		else if(Key1==1)
		{
			Key1=0;
		 Key_mode++;
			if(Key_mode==3)
			{
			Key_mode=0;
			}
		}
		
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0)
		{
		  Key2=1;
		}
		else if(Key2==1)
		{
			Key2=0;
			if(Key_mode==1)
			{
				Yan_N++;
				if(Yan_N==100)
				{
				Yan_N=99;
				}
		  }
			if(Key_mode==2)
			{
      	Temp_N++;
				if(Temp_N==100)
				{
				Temp_N=99;
				}
		  
		  }
		}
		
		
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6) == 0)
		{
		  Key3=1;
		}
		else if(Key3==1)
		{
			Key3=0;
			if(Key_mode==1)
			{
				Yan_N--;
				if(Yan_N<0)
				{
				Yan_N=0;
				}
		  }
			if(Key_mode==2)
			{
				Temp_N--;
				if(Temp_N<0)
				{
				Temp_N=0;
				}
		  }
		}
		
		
		
		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7) == 0)
		{
		  Key4=1;
		}
		else if(Key4==1)
		{
		  Key4=0;
			Beep_num=!Beep_num;
		}
		
		
		if(Beep_num==1)
		{
			OLED_ShowChinese(3,8,19);
		}
		else
		{
		
			OLED_ShowChinese(3,8,18);
		}
		
		
		Delay_ms(1);							//延时100ms,手动增加一些转换的间隔时间
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值