一. 系统概述
- 本系统以STM32单片机为核心控制单元,通过温湿度传感器、烟雾传感器、光照传感器和火焰传感器实时监测仓库环境。采集到的数据将显示在显示屏上,用户可以通过按键设定各个参数的阈值,实现环境的智能调节和报警。系统将根据温度变化自动控制加热或降温装置,当湿度超标时启动除湿装置。如果光照不足且检测到有人存在,系统会自动开启灯光。此外,当烟雾浓度过高或检测到火焰时,系统会触发蜂鸣器报警。
二. 仿真概述
- 本系统使用DHT11传感器进行温湿度检测,通过光敏电阻模块监测光照强度。人体检测和火焰检测通过开关量来实现。用户可以通过按键设置各类参数的阈值,当温度过低时系统会启动加热,当温度过高时会启动降温。当湿度过高时,系统会启动除湿装置。如果检测到有人且光照强度低于设定阈值,系统会自动开灯;若烟雾浓度超标或发现火焰,则会触发蜂鸣器报警。
- 通过按下DHT11传感器上的红色按钮,可以调节温湿度设置,显示端会实时更新温湿度数据。当温度超过设定范围时,系统会自动进行降温;当温度低于阈值时,会启动加热;当湿度超标时,会启动除湿功能。
- 通过调整光敏电阻模块上的滑动变阻器,可以改变光照强度。当检测到光强低于设定值且有人存在时,系统会自动开启灯光。
- 当系统检测到火焰时,会立即触发蜂鸣器进行报警。
三.程序设计
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//2:2
Init_Test();
while(1)
{
Key_Scan(&key);
if(key==1){ set++; if(set>5)set=0; key=0;OLED_ShowString(4,1," "); }
if(set==1)
{
OLED_ShowString(4,1,"set tmin >");OLED_ShowNum(4,12,tl,2);
if(key==2){tl++;key=0;} if(key==3){tl--;key=0;}
}
if(set==2)
{
OLED_ShowString(4,1,"set tmax >");OLED_ShowNum(4,12,th,2);
if(key==2){th++;key=0;} if(key==3){th--;key=0;}
}
if(set==3)
{
OLED_ShowString(4,1,"set hmax >");OLED_ShowNum(4,12,hh,2);
if(key==2){hh++;key=0;} if(key==3){hh--;key=0;}
}
if(set==4)
{
OLED_ShowString(4,1,"set smax >");OLED_ShowNum(4,12,sh,2);
if(key==2){sh++;key=0;} if(key==3){sh--;key=0;}
}
if(set==5)
{
OLED_ShowString(4,1,"set lmin >");OLED_ShowNum(4,12,ll,2);
if(key==2){ll++;key=0;} if(key==3){ll--;key=0;}
}
DHT11_Read_Data(&t,&h);
smo =PCF8591_ADC_Input(0x90,1);if(smo>99)smo=99;//
light=PCF8591_ADC_Input(0x90,0);if(light>99)light=99;//
OLED_ShowString(1,1,"Temp:");OLED_ShowNum(1,6,t,2);OLED_ShowString(1,9,"Humi :");OLED_ShowNum(1,15,h,2);//OLED_ShowString(1,9," C");//OLED_ShowNum(1,14,tl,2);
OLED_ShowString(2,1,"Smo :");OLED_ShowNum(2,6,smo,2);OLED_ShowString(2,9,"Light:");OLED_ShowNum(2,15,light,2);//OLED_ShowString(2,9," Rh");//OLED_ShowNum(1,14,tl,2);
OLED_ShowString(3,1,"body:");OLED_ShowString(3,9,"flame:");
if(Key4==0){OLED_ShowString(3,6,"H");}else{OLED_ShowString(3,6,"N");}
if(Key5==0){OLED_ShowString(3,15,"H");}else{OLED_ShowString(3,15,"N");}
if(t<tl)Relay1_1;else Relay1_0;
if(t>th)Relay2_1;else Relay2_0;
if(h>hh)Relay3_1;else Relay3_0;
if(smo>sh || Key5==0)Relay5_1;else Relay5_0;
if(light<ll && Key4==0)Relay4_1;else Relay4_0;
}
}
24-32f-12