一.硬件方案
本设计通过光敏电阻检测光照强度,然后A/D模块PCF8591处理后,将光照强度值实时显示在液晶上,并且可以按键控制光照的强度值,当光照低于设定的阈值,1颗白色高亮LED灯亮进行补光,光照高于设定的阈值,就不用管。通过DS18B20检测温度值,并且实时显示在1602液晶上,并且可以通过按键设定温度值,当温度低于设定值时,通过一颗黄色高亮LED灯模拟。
主要由STC89C52单片机、LCD1602液晶显示、光照检测、土壤湿度传感器、A/D采样PCF8591、风扇控制、继电器控制、补光灯、补温灯、按键及电源组成;
二.设计功能
(1)通过光敏电阻检测光照强度,然后A/D模块PCF8591处理后,将光照值实时显示在液晶上,按键可以设置光照阈值。当光照低于设定的阈值,高亮LED灯亮进行补光,否则关闭。
(2)通过DS18B20检测温度值,实时显示在1602液晶上,可以通过按键设定温度阈值,当温度低于设定值时,补温灯打开,否则关闭;当温度超过设定值时,风扇旋转。
(3)通过土壤湿度传感器检测土壤的湿度,将湿度值显示在液晶上,按键设置湿度阈值,当土壤湿度小于设定的阈值,继电器打开,继电器可以外接水泵;否则继电器不动作。
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)PCB图如下:
四.软件设计
主程序源码
void main (void)
{
unsigned char midval;
Init_Timer0();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
led_l = 0;relay = 0;led_b = 0;fan = 0; //上电检测下 方便检测硬件
DelayMs(200);
led_l = 1;relay = 1;led_b = 1;fan = 1;
sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);//打印电压电流值
LCD_Write_String(0,0,disdat);//显示
sprintf(disset," L:%2d R:%2d T:%2d",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);//打印电压电流值
LCD_Write_String(0,1,disset);
while (1) //主循环
{
key(); //按键处理程序
if(readADCFlag == 1) //定时读取adc
{
midval=ReadADC(1); //转换的结果,在下次,才能读出
Lv=5.15-(float)midval*5.15/255; //光照
Lval = (unsigned int )(Lv * 100 )/5.16;
DelayMs(10); //延时有助于稳定
midval=ReadADC(0); //读取AD检测到的 光敏地值
Tv=5.15-(float)midval*5.15/255; //光照
Rval = (unsigned int )(Tv * 100 )/5.16;
sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);//打印电压电流值
LCD_Write_String(0,0,disdat);//显示
LCD_Write_Char(14,0,0XDF) ;
readADCFlag = 0 ;
sprintf(disset," L:%2d R:%2d T:%2d ",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);//打印电压电流值
LCD_Write_String(0,1,disset);
if(SetFlag == 1) //进入设置
{
LCD_Write_Char(0,1,'S') ; //显示S
LCD_Write_Char(5,1,' ') ;
LCD_Write_Char(10,1,' ') ;
}
else if(SetFlag == 2)
{
LCD_Write_Char(0,1,' ') ;
LCD_Write_Char(5,1,'S') ; //显示S
LCD_Write_Char(10,1,' ') ;
}
else if(SetFlag == 3)
{
LCD_Write_Char(0,1,' ') ;
LCD_Write_Char(5,1,' ') ; //显示S
LCD_Write_Char(10,1,'S') ;
}
else
{
LCD_Write_Char(0,1,' ') ;
LCD_Write_Char(5,1,' ') ; //显示S
LCD_Write_Char(10,1,' ') ;
}
if(Lval <= setLval) //光照对比
{
led_l = 0; //打开led
}
else
{
led_l = 1; //关闭led
}
if(Rval <= setRval) //土壤对比
{
relay = 0; //打开继电器
}
else
{
relay = 1; //关闭继电器
}
if(distem <= setTval) //温度对比
{
led_b = 0; //led及风扇处理
fan = 1;
}
else
{
led_b = 1; //led及风扇处理
fan = 0;
}
}
if(readTem==1) //定时温度读取
{
temp=ReadTemperature(); //温度读取
temperature=(float)temp*0.0625; //温度处理
if(temperature >1) //防止温度读错
{distem = (unsigned int )temperature;} //温度处理
readTem=0;
}
}
}
资料链接:https://pan.baidu.com/s/1YDpZ7RI3Pm12G_wSlt-Cxw?pwd=q3v3
提取码:q3v3