一:功能介绍:
1、系统组成:采用51单片机+DHT11温湿度传感器+MQ2烟雾传感器+光敏传感器+ADC0832+蜂鸣器+LCD1602显示屏
2、通过DHT11采集温湿度,显示到LCD1602上面;
3、通过光敏传感器采集光照强度,显示到LCD1602上面;
4、通过MQ2烟雾传感器采集烟雾浓度,显示到LCD1602上面;
5、当检测烟雾浓度大于阈值,蜂鸣器进行报警提醒;
6、当检测光照强度低于阈值,开启补光灯;
二:实物演示视频
261-基于51单片机DHT11温湿度烟雾浓度光照强度环境监测系统
三:程序代码展示(采用C语言编写,使用keil5编译,代码有中文注释,新手容易看懂)
unsigned int Get_ADC0832(unsigned char CHAANEL) //AD转换,返回结果
{
unsigned long Volt;//测量的电压值
u8 i=0;
u8 j;
u16 dat=0; //正向输入
u8 ndat=0; //反向输入
if(CHAANEL==0)CHAANEL=2;
if(CHAANEL==1)CHAANEL=3;
DI=1; _nop_();_nop_(); //发起始位,固定为1(1位)
CS=0; _nop_();_nop_(); //拉低CS端,让ADC0832使能
CLK=1;_nop_();_nop_(); //拉高CLK端,DI端的数据移入ADC0832内部的多路移位寄存器
CLK=0;_nop_();_nop_(); //拉低CLK端,形成下降沿1,第一个周期开始
CLK=1; //拉高CLK端,在第一个时钟周期内,DI为高电平,表示启动位
DI=CHAANEL&0x1;_nop_();_nop_(); //假设选取通道0,则10&01=0,即SGL/DIF=0,为差分输入(2位)
CLK=0;_nop_();_nop_(); //拉低CLK端,形成下降沿2,第二个周期开始
CLK=1; //拉高CLK端
DI=(CHAANEL>>1)&0x1;_nop_();_nop_(); //选取通道0,则01&01=1,ODD/EVEN=1,表示通道0
CLK=0; //拉低CLK端
DI=1;_nop_();_nop_();
dat=0;
for(i=0;i<8;i++) //每一个CLK下降沿输出一位数,先输出高位
{
dat|=DO;
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_();
dat<<=1;
if(i==7)dat|=DO;
}
for(i=0;i<8;i++) //每一个CLK下降沿输出一位数,先输出低位
{
j=0;
j=j|DO; //收数据
CLK=1;_nop_();_nop_();
CLK=0;_nop_();_nop_(); //形成一次时钟脉冲
j=j<<7;
ndat=ndat|j;
if(i<7)ndat>>=1;
}
CS=1; //拉低CS端口
CLK=0; //拉低CLK端口
DO=1; //拉高数据端
dat<<=8;
dat|=ndat;
Volt=dat*0.0763/100;//8位 //Volt=100-dat*0.0763*2.2/100;//8位
return(Volt); //返回数据
}
void main(void)
{ unsigned int temperature;
unsigned int humidity;
LcdInit();
LDR_Val=Get_ADC0832(0);//光照检测
Flag_num=LDR_Val;
LcdWriteCom(0x01);
DisplayListChar(0,0,"GZ="); DisplayListChar(8,0,"WD="); DisplayListChar(0,1,"YW="); DisplayListChar(8,1,"SD=");
DisplayOneChar(13,0,'C'); DisplayOneChar(13,1,'%');
while(1)
{
DHT11_Read_Date(&temperature,&humidity); //读取DHT11温湿度
DisplayOneChar(11,0,temperature/10+'0');//显示温度
DisplayOneChar(12,0,temperature%10+'0');
DisplayOneChar(11,1,humidity/10+'0');//显示DHT11湿度
DisplayOneChar(12,1,humidity%10+'0');
LDR_Val=100-Get_ADC0832(0)*2.2;//光照检测
DisplayOneChar(3,0,LDR_Val%1000/100+'0');
DisplayOneChar(4,0,LDR_Val%100/10+'0');
DisplayOneChar(5,0,LDR_Val%10+'0');
MQ2=Get_ADC0832(1)*10;//烟雾检测
if(MQ2<21) MQ2=0;
DisplayOneChar(3,1,MQ2%1000/100+'0');
DisplayOneChar(4,1,MQ2%100/10+'0');
DisplayOneChar(5,1,MQ2%10+'0');
if(LDR_Val<50) led=0;//光照低于50 开启补光灯
else led=1;
if(MQ2>50) beep=0; //烟雾浓度大于50 开启蜂鸣器
else beep=1;
}
}
四:原理图文件展示(采用AD(Altium Designer)打开)
五:实物图展示:
六: 资料清单展示: