基于STM32物联网WiFi火灾烟雾自动灭火报警器

本设计包含proteus仿真+程序代码+设计报告+讲解视频

一、开发环境

仿真图:proteus 8.17

程序编译器:keil 5

编程语言:C语言

设计编号:C0135

二、主要功能

  1. 烟雾采集传感器选用MQ-2监测环境烟雾浓度;

  2. 采用火焰传感器监测环境火光;

  3. 温湿度采集使用DHT11数字传感器;

  4. 显示设备使用OLED,可以在屏幕上显示实时烟雾浓度值、温湿度值,火焰检测状态、安防监测状态以及报警阈值等信息;

  5. 报警模块则采用蜂鸣器和LED灯组成,烟雾浓度超过阈值、温度超过阈值,监测到火光,设防状态下监测到人体红外信号触发报警。蜂鸣器会鸣叫报警,灯光闪烁;

  6. 设计采用3个按键作为操作输入设备,可以用来调整温度、烟雾报警阈值和关报警器;

  7. 烟雾浓度超过阈值、温度超过阈值,监测到火光会触发继电器工作,模拟洒水灭火;

8.通过WIFI模块ESP01S将数据实时上传至物联网云平台,可以通过手机APP查看温湿度、烟雾检测值、火焰状态、设防状态等;Proteus仿真没有ESP-01元器件,使用串口模拟。

主要硬件设备:STM32F103C8T6、MQ-2烟雾传感器、火焰传感器、ESP-01S、OLED显示、继电器、DHT11温湿度

img

imgimg

资料下载链接:

KEY_C0135 STM32物联网WiFi火灾烟雾自动灭火报警器

链接: https://pan.baidu.com/s/1TN4Mcx-oDv1gaRBRsNQgUg?pwd=wgr3

提取码: wgr3

以下为本设计资料展示:

三、仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

img

img

四、程序代码

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序有注释可以结合讲解视频理解。

/*
************************************************************
*	函数名称:	main
*
*	函数功能:	
*
*	入口参数:	无
*
*	返回参数:	0
*
*	说明:		
************************************************************
*/
int main(void)
{
    DHT11_Data_TypeDef DHT11_Data;	

	
	unsigned short timeCount = 0;	//发送间隔变量
	unsigned short set_timeCount = 0;	//设置状态刷新状态
	unsigned char *dataPtr = NULL;
	
	uint8_t smog_lock=0;
//	uint8_t security_lock=0;
	
	Hardware_Init();				//初始化外围硬件
	Fan_Set(FAN_OFF);
	Beep_Set(BEEP_OFF);
	Relay_Set(RELAY_OFF);
#if 1	
	ESP8266_Init();					//初始化ESP8266


//	UsartPrintf(USART_DEBUG, "Connect MQTTs Server...\r\n");
	OLED_Clear(); OLED_ShowString(0,0,"Connect MQTTs Server...",16);
	while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
		DelayXms(500);
//	UsartPrintf(USART_DEBUG, "Connect MQTT Server Success\r\n");
	OLED_ShowString(0,4,"Connect MQTT Server Success",16); DelayXms(500);

	OLED_Clear(); OLED_ShowString(0,0,"Device login ...",16);
	while(OneNet_DevLink())			//接入OneNET
	{
		ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT");
		DelayXms(500);
	}
#endif		
	UsartPrintf(USART_DEBUG, "Connect MQTT Server Success\r\n");
	OneNET_Subscribe();
	
	Display_Init();
	Led_Set(LED_OFF);
	SystemCoreClockUpdate();
	UsartPrintf(USART_DEBUG, "system_clock:%lu Hz (%.2f MHz)\r\n", SystemCoreClock, SystemCoreClock / 1000000.0);

//	temp = DS18B20_GetTemperture();//读取温度传感器
	smog=MQ2_GetData_PPM();		//读取烟雾传感器
	Fire_read();				//读取火焰传感器

	temp=humi=25;//初始化

	while(1)
	{


		if(++timeCount >= 50&&set_sta==0)									//发送间隔2.5s
		{

//			temp = DS18B20_GetTemperture();
		 // 		 DHT11_Read_Data(&temp,&humi);

		 if(DHT11_Read_TempAndHumidity(&DHT11_Data) == SUCCESS) {
                humi = DHT11_Data.humi_int;
                temp = DHT11_Data.temp_int;
            }		
			UsartPrintf(USART_DEBUG, "temp=%d--humi=%d\r\n",temp,humi);
			
			Fire_read();//读取火焰传感器
			Hc_sr501_read();//读取人体红外热释电传感器
			UsartPrintf(USART_DEBUG, "Security_Status=%d\r\n",Security_Status);
			  smog=MQ2_GetData_PPM();
			if(smog>9999){smog=9999;}
		    UsartPrintf(USART_DEBUG, "VOL----%.2f\r\n",smog);
			
			OneNet_SendData();									//发送数据		
			timeCount = 0;
			ESP8266_Clear();
		
		  
		 	if(Status_Change){
				Status_Change=0;
				Display_Init();
			}
		}
		if(DHT11_Read_TempAndHumidity(&DHT11_Data) == SUCCESS) {
			   humi = DHT11_Data.humi_int;
			   temp = DHT11_Data.temp_int;
		   }

		Fire_read();//读取火焰传感器
		Hc_sr501_read();//读取人体红外热释电传感器	
		smog=MQ2_GetData_PPM();
	    if(smog>9999){smog=9999;}
		dataPtr = ESP8266_GetIPD(0);
		if(dataPtr != NULL){
			OneNet_RevPro(dataPtr);	
		}

		if(set_sta){
			if(key_ctrl){
				OLED_Clear();
				key_ctrl=0;
			    UsartPrintf(USART_DEBUG, "OLED_Clear\r\n");
			}
		}else{
				if(key_ctrl){
				Display_Init();
				key_ctrl=0;
				UsartPrintf(USART_DEBUG, "Display_Init\r\n");
				}		
		}
		
		Refresh_Data();
		
		/***利用smog_lock进行自锁操作,避免重复无效控制,超阈值后,
		只执行一次,实现蜂鸣器可以被手动按停,
		直到降到阈值以下,才解锁,进入下轮阈值检测***/
		if(((smog>smog_th)||(Fire_Status==0)||(temp>temp_th))&& smog_lock==0)
		{
			smog_lock = 1;
			Fan_Set(FAN_ON);
			Beep_Set(BEEP_ON);
			Relay_Set(RELAY_ON);
//			Led_Set(LED_ON);
			
		}
		if(((smog<smog_th)&&(Fire_Status!=0)&&(temp<temp_th))&&smog_lock==1){
			smog_lock=0;
			Fan_Set(FAN_OFF);
			Beep_Set(BEEP_OFF);
			Relay_Set(RELAY_OFF);
//			Led_Set(LED_OFF);
		}
		
		if(set_arm&&Security_Status){//安防检测单独做蜂鸣器动作
			Beep_Set(BEEP_ON);
			Led_Set(LED_ON);
		}
		
		if(smog_lock && (timeCount>25)){
			Led_Set(LED_ON);
		}else{
			Led_Set(LED_OFF);
		}
		
		DelayMs(10);	
	}

}

img

程序流程图:

img

五、设计说明书

16250字,内容包括硬件设计、软件设计、结论等。

img

六、资料清单&下载链接

img

资料下载链接:

链接: https://pan.baidu.com/s/1TN4Mcx-oDv1gaRBRsNQgUg?pwd=wgr3

提取码: wgr3

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐