本设计包含proteus仿真+程序代码+设计报告+讲解视频
一、开发环境
仿真图:proteus 8.17
程序编译器:keil 5
编程语言:C语言
设计编号:C0135
二、主要功能
- 烟雾采集传感器选用MQ-2监测环境烟雾浓度;
- 采用火焰传感器监测环境火光;
- 温湿度采集使用DHT11数字传感器;
- 显示设备使用OLED,可以在屏幕上显示实时烟雾浓度值、温湿度值,火焰检测状态、安防监测状态以及报警阈值等信息;
- 报警模块则采用蜂鸣器和LED灯组成,烟雾浓度超过阈值、温度超过阈值,监测到火光,设防状态下监测到人体红外信号触发报警。蜂鸣器会鸣叫报警,灯光闪烁;
- 设计采用3个按键作为操作输入设备,可以用来调整温度、烟雾报警阈值和关报警器;
- 烟雾浓度超过阈值、温度超过阈值,监测到火光会触发继电器工作,模拟洒水灭火;
8.通过WIFI模块ESP01S将数据实时上传至物联网云平台,可以通过手机APP查看温湿度、烟雾检测值、火焰状态、设防状态等;Proteus仿真没有ESP-01元器件,使用串口模拟。
主要硬件设备:STM32F103C8T6、MQ-2烟雾传感器、火焰传感器、ESP-01S、OLED显示、继电器、DHT11温湿度
资料下载链接:
KEY_C0135 STM32物联网WiFi火灾烟雾自动灭火报警器
链接: https://pan.baidu.com/s/1TN4Mcx-oDv1gaRBRsNQgUg?pwd=wgr3
提取码: wgr3
以下为本设计资料展示:
三、仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
四、程序代码
程序是用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...rn"); 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 Successrn"); 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 Successrn"); OneNET_Subscribe(); Display_Init(); Led_Set(LED_OFF); SystemCoreClockUpdate(); UsartPrintf(USART_DEBUG, "system_clock:%lu Hz (%.2f MHz)rn", 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=%drn",temp,humi); Fire_read();//读取火焰传感器 Hc_sr501_read();//读取人体红外热释电传感器 UsartPrintf(USART_DEBUG, "Security_Status=%drn",Security_Status); smog=MQ2_GetData_PPM(); if(smog>9999){smog=9999;} UsartPrintf(USART_DEBUG, "VOL----%.2frn",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_Clearrn"); } }else{ if(key_ctrl){ Display_Init(); key_ctrl=0; UsartPrintf(USART_DEBUG, "Display_Initrn"); } } 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); }}
程序流程图:
五、设计说明书
16250字,内容包括硬件设计、软件设计、结论等。
六、资料清单&下载链接
资料下载链接:
链接: https://pan.baidu.com/s/1TN4Mcx-oDv1gaRBRsNQgUg?pwd=wgr3
提取码: wgr3
阅读全文
179