277-基于stm32单片机烟雾火灾检测自动灭火装置(程序+原理图+元器件清单)
·
一:功能介绍
1、实物组成部分:采用stm32f103c8t6核心板+火焰传感器+DHT11温湿度+MQ2烟雾传感器+蜂鸣器+继电器风扇+继电器水泵+OLED显示屏+独立按键+蓝牙HC05模块;
2、采用DHT11传感器采集温湿度,OLED显示;
3、采用MQ2传感器检测烟雾浓度,OLED显示;
4、可以通过按键设置手动模式和自动模式,自动模式下可以设置烟雾浓度阈值、温湿度阈值;
5、自动模式下,当温度或者湿度或者烟雾浓度大于设置阈值(按键设置),风扇自动打开进行排气;当检测到有明火,水泵自动打开进行灭火;
6、手动模式下,可以通过按键打开和关闭风扇和水泵;
7、可以通过蓝牙模块上传相关数据;
二:实物演示视频
277-基于stm32单片机烟雾火灾检测自动灭火装置(程序+原理图+元器件清单)
三:程序代码预览(采用keil5编写,使用的C语言,程序有中文注释,新手容易看懂)
特别注意:下载资料包以后一定要先解压! !!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。


int main(void){unsigned char *dataPtr = NULL;unsigned short timeCount = 30; //发送间隔变量uint8_t status;long int cardnum=0;u16 adcx;int temp,buf=0,set=0,wenduset=30,shiduset=70,mq2set=100;Hardware_Init(); //初始化外围硬件OLED_Init();OLED_ColorTurn(0);OLED_DisplayTurn(0);OLED_ShowString(0,0," MQ2:",16); OLED_ShowString(70,0,"PPM",16);OLED_ShowString(0,16,"TEMP:",16); OLED_ShowString(70,16,"C",16);OLED_ShowString(0,32,"HUMI:",16); OLED_ShowString(70,32,"%",16);OLED_ShowString(0,48," HUO:",16);OLED_Refresh();KEY_Init();Adc_Init(); LED_Init();Q1=Q2=BEEP=1;while(1){DHT11_Read_TempAndHumidity ( & DHT11_Data );adcx=Get_Adc_Average(ADC_Channel_0,10);temp=(float)adcx/4096*330-150;if(temp<0) temp=0;if(KEY4==0)//自动/手动设置{buf++;if(buf>1) buf=0;while(KEY4!=1);}if(set==0){OLED_ShowString(120,0,"<",16);OLED_ShowString(120,16," ",16);OLED_ShowString(120,32," ",16);}if(set==1){OLED_ShowString(120,0," ",16);OLED_ShowString(120,16,"<",16);OLED_ShowString(120,32," ",16);}if(set==2){OLED_ShowString(120,0," ",16);OLED_ShowString(120,16," ",16);OLED_ShowString(120,32,"<",16);}if(buf==0)//自动模式下{OLED_ShowString(100,48,"zd",16);if(KEY3==0){set++;if(set>2) set=0;}if(KEY2==0&&set==1)//温度阈值20-99可调{wenduset++;if(wenduset>99) wenduset=99;}if(KEY1==0&&set==1)//温度阈值20-99可调{wenduset--;if(wenduset<20) wenduset=20;}if(KEY2==0&&set==2)//湿度阈值50-99可调{shiduset++;if(shiduset>99) shiduset=99;}if(KEY1==0&&set==2)//湿度阈值50-99可调{shiduset--;if(shiduset<50) shiduset=50;}if(KEY2==0&&set==0)//MQ2阈值50-200可调{mq2set++;if(mq2set>200) mq2set=200;}if(KEY1==0&&set==0)//MQ2阈值50-200可调{mq2set--;if(mq2set<50) mq2set=50;}if(DHT11_Data .temp_int>wenduset-1||DHT11_Data .humi_int>shiduset||temp>mq2set) Q2=0;else Q2=1;if(HUO==0)//判断明火{Q1=0;OLED_ShowString(45,48,"YES",16);printf("HUO=YES\r\n");}else{Q1=1;OLED_ShowString(45,48," NO",16);printf("HUO=NO\r\n");}}if(buf==1)//手动模式下{OLED_ShowString(100,48,"sd",16);if(KEY1==0){Q1=~Q1;while(KEY1!=1);}if(KEY2==0){Q2=~Q2;while(KEY2!=1);}if(HUO==0)//判断明火{OLED_ShowString(45,48,"YES",16);printf("HUO=YES\r\n");}else{OLED_ShowString(45,48," NO",16);printf("HUO=NO\r\n");}}if(temp>mq2set) printf("MQ2 alarm\r\n");OLED_ShowNum(40,0,temp,3,16);OLED_ShowNum(40,16,DHT11_Data .temp_int,2,16); OLED_ShowNum(95,0,mq2set,3,16);OLED_ShowString(56,16,".",16);OLED_ShowNum(60,16,DHT11_Data .temp_deci,1,16); OLED_ShowNum(95,16,wenduset,2,16);OLED_ShowNum(40,32,DHT11_Data .humi_int,2,16); OLED_ShowNum(95,32,shiduset,2,16);OLED_Refresh();printf("MQ2=%d\r\n",temp);delay_ms(50);printf("wendu=%d.%d C\r\n",DHT11_Data .temp_int,DHT11_Data .temp_deci); //蓝牙上传数据delay_ms(50);printf("shidu=%d \r\n",DHT11_Data .humi_int);delay_ms(50);}}
四:原理图展示(源文件采用Altium Designer打开,公众号有安装包)


五:实物图展示


六:元器件清单展示

7:资料清单展示(文件中包含的相关资料)

更多推荐
所有评论(0)