⭐项目概述
该项目旨在构建一个多功能的环境监测系统,通过传感器实时监测温度、湿度、烟雾浓度和光照强度。系统不仅能够将采集的数据进行显示,当检测值超出预设阈值时,还会触发声光报警以提示用户。例如,当光照强度低于设定值时自动开启照明,当温度超过阈值时自动启动风扇以降温。此外,系统通过无线通信将这些环境参数传输至手机,实现远程实时监控。该系统为家庭或办公环境提供了智能化的监控和自动调节功能。
⭐实物图
⭐主要功能
1.检测温度,湿度,烟雾,光照信息
2.对数据进行显示
3.当数值超过设定的阈值时进行声光报警
4.当光照低于阈值时开启灯光
5.当温度高于阈值时开启风扇
6.温度、湿度、光照和烟雾浓度手机显示
⭐系统框图:
⭐部分代码
int main(void)
{
u8 i;
float temp;
u8 flag=0;
u8 key=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
LED_BEEP_Init();
KEY_Init();
Relay_Init();
TIM2_Int_Init(72-1,1000-1);//定时1ms 72,000,000Hz/1,000Hz=72,000=72*1000
uart_init(115200); //串口1初始化为115200
uart2_init(9600);
OLED_Init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
Adc_Init();
userInit();
gizwitsInit();
gizwitsSetMode(2);
while(DHT11_Init());//DHT11初始化
//预读三次,防bug
for(i=0;i<3;i++)
{
DHT11_Read_Data(&temperature,&humidity);
delay_ms(100);
}
delay_ms(100);
while(1)
{
//检测
DHT11_Read_Data(&temperature,&humidity); //每100ms(至少)读一次温湿度值,否则有错误xx8
//温度(0~50℃)
//湿度(20~90%)
if(humidity<20) humidity=20;//<20%
if(humidity>90) humidity=90;//>90%
//光照强度采集
lux1=Get_Adc_Average(ADC_Channel_0,10);
lux1=4096-lux1;
lux=(int)(((((lux1*100))/4096)));
//烟雾浓度采集
smoke1=Get_Adc_Average(ADC_Channel_1,10);
smoke=(int)(((((smoke1*100))/4096)));
if(page_now==0)
{
if(flag_oled_cls)
{
flag_oled_cls=0;//清屏标志置零
OLED_Clear();
//数据显示界面
OLED_ShowChinese(0,0,0,16,1);
OLED_ShowChinese(16,0,1,16,1);
OLED_ShowString(32,0,":",16,1);
OLED_ShowChinese(56,0,2,16,1);
OLED_ShowChinese(0,16,3,16,1);
OLED_ShowChinese(16,16,4,16,1);
OLED_ShowString(32,16,":",16,1);
OLED_ShowChinese(56,16,5,16,1);
OLED_ShowChinese(0,32,6,16,1);
OLED_ShowChinese(16,32,7,16,1);
OLED_ShowString(32,32,":",16,1);
OLED_ShowChinese(0,48,10,16,1);
OLED_ShowChinese(16,48,11,16,1);
OLED_ShowString(32,48,":",16,1);
}
//数据显示
OLED_ShowNum(40,0,temperature,2,16,1);
OLED_ShowNum(40,16,humidity,2,16,1);
OLED_ShowNum(40,32,smoke,2,16,1);
OLED_ShowNum(40,48,lux,2,16,1);
}
else
{
if(flag_oled_cls)
{
flag_oled_cls=0;//清屏标志置零
OLED_Clear();
//阈值显示界面
OLED_ShowChinese(8,0,0,16,1);
OLED_ShowChinese(24,0,1,16,1);
OLED_ShowString(40,0,":",16,1);
OLED_ShowChinese(8,16,3,16,1);
OLED_ShowChinese(24,16,4,16,1);
OLED_ShowString(40,16,":",16,1);
OLED_ShowChinese(8,32,6,16,1);
OLED_ShowChinese(24,32,7,16,1);
OLED_ShowString(40,32,":",16,1);
OLED_ShowChinese(8,48,10,16,1);
OLED_ShowChinese(24,48,11,16,1);
OLED_ShowString(40,48,":",16,1);
OLED_ShowNum(48,0,tempp,2,16,1);
OLED_ShowNum(48,16,humm,2,16,1);
OLED_ShowNum(48,32,smokee,2,16,1);
OLED_ShowNum(48,48,luxx,2,16,1);
}
}
OLED_Refresh();
//温度/烟雾控制风扇
if(temperature>tempp||smoke>smokee)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
}
else
{
GPIO_SetBits(GPIOB,GPIO_Pin_9);
}
//湿度控制加湿器
if(humidity<humm)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}
else
{
GPIO_SetBits(GPIOB,GPIO_Pin_8);
}
//光照控制灯光
if(lux<luxx)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
else
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
//阈值判断,声光报警
if(temperature>tempp||humidity<humm||smoke>smokee||lux<luxx)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_12);
}
else
{
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOA,GPIO_Pin_12);
}
OLED_Refresh();
delay_ms(50);
}
}
⭐资料获取
我用夸克网盘分享了「室外环境.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/877e3dceefe6
提取码:Math