乔琳君, 魏严锋
(1.西安航空职业技术学院 自动化工程学院, 陕西 西安 710089;2.中航西飞民用飞机有限责任公司, 陕西 西安 710089)
居家和办公环境中常常会摆放绿植以改善居家环境,调节工作氛围,但经常会存在浇水过量使绿植过涝或忘记浇水、外出过旱,最终都可能导致绿植死亡。为能够及时、按需根据土壤湿度对家庭或办公场所的绿植进行自动浇灌,设计基于STC89C52型单片机的自动浇花系统一套,防止人们浇水过量或外出时绿植长期干旱。
本自动浇花系统由六个单元组成,即单片机控制单元、土壤湿度采集单元、模数转换单元、按键选择单元、继电器驱动水泵单元和液晶显示单元。当土壤湿度变化引起湿敏传感器的阻值发生变化,系统上电后,该阻值变化在电路中会转换为变化的电压信号,经过模数转换后送至单片机识别运算控制,并由LCD显示器显示土壤湿度。通过此方式对土壤的湿度信息进行实时监测和控制,以达自动浇花之目的。系统框图,如图1所示。
图1 系统框图
系统采用低功耗、高性能的STC89C52型单片机为控制器,其内部有8位中央处理器(CPU)、4k字节Flash闪速存储器、128Byte内部RAM、32个I/0口、2个16位定时/计数器、一个5向量两级中断结构、一个全双工串行通信口、片内振荡器和时钟电路[1]。其最小应用系统由单片机、晶振电路和复位电路构成。
湿度传感器用来检测花盆土壤湿度大小,由敏感元件以及转换电路组成。当土壤湿度变化时,传感器电阻值发生变化,经转换电路引起输出电压的变化,并将此电压信号输送至数模转换器以便单片机判别运算。本设计选用YL-69土壤湿度传感器[2],其湿度检测范围0%-100%,仿真电路中用电位器模拟湿度传感器。
为了实时显示土壤湿度,提示使用者该系统的工作模式,因此选用LCD1602液晶显示器用来显示湿度大小和工作模式。运行过程中第一行Humidity显示当前湿度;第二行state显示工作模式,Maul为手动模式,Aoto为自动模式;自动模式下调节湿度参数时上下两行分别显示湿度上下限值。液晶显示器的8位数据端D1-D7由单片机的P0口控制,RS、R/W、E端分别由单片机P2.5-P2.6控制。
该模块由PNP型三极管和继电器及水泵组成,单片机P2.0口控制三极管基极。当系统选择手动浇花模式或自动模式下湿度低于下限湿度时,P2.0输出为0,则PNP型三极管导通,继电器得电,常开触点吸合,电动机回路接通,执行浇花工作。当自动模式下湿度高于上限湿度时,P2.0输出为1,则PNP型三极管导通,继电器失电,常开触点复位,电动机回路断开,结束浇花工作。
除以上五大单元外,系统还设置有工作模式选择、参数调节按键单元和灯光指示单元。
当系统上电后进行初始化,同时获取设定湿度并采集当前湿度值。经过A/D转换后,送到LCD显示器显示信息;系统判断当前土壤湿度和预设湿度大小关系,如果小于预设值,继电器就会驱动水泵进行抽水灌溉;如果高于预设值,继电器和水泵不工作。湿度传感器实时监测土壤湿度,当浇花过程中土壤湿度大于设定值,则浇花过程结束。系统流程图,如图2所示。
图2 主程序流程图
系统部分程序如下。
#include〈reg52.h〉 //头文件
#include〈intrins.h〉
#include"eeprom52.h"
#define uchar unsigned char //宏定义
#define uint unsigned int
#define LCD1602_dat P0 //液晶数据口定义
sbit LCD1602_rs=P2^5;//IO 定义
sbit LCD1602_rw=P2^6;
sbit LCD1602_e=P2^7;
sbit beep=P1^3; //蜂鸣器
sbit led_1=P1^4; //指示灯
sbit led_2=P1^6;
sbit key_1=P3^0; //按键
sbit key_2=P3^1;
sbit key_3=P3^2;
sbit alarm_1=P2^0; //继电器
sbit ADC0832_CS=P1^2;
sbit ADC0832_CLK=P1^0;
sbit ADC0832_DIO=P1^1; //adc0832引脚
uint sum;
uchar RH,RH_H=60,RH_L=20,state,ms,time_num,cs;
bit beep1,zt,s1;
void main() //主循环
{
float Ad_dat=0;
TMOD=0x01; //配置定时器0
TH0=0x3c;
TL0=0xb0; //赋50 ms初值
ET0=1;
TR0=1;
EA=1; //打开总中断
LCD1602_cls(); //液晶初始化
RH_H=byte_read(0x2000);
RH_L=byte_read(0x2200);
if((RH_H>99)||(RH_L>99)||(RH_L>=RH_H)) {RH_H=30; RH_L=20;}
while(1)
{
sum+=A_D(); //累加5次AD数据
cs++;
if(cs==5)
{
cs=0;
Ad_dat=(float)(sum/5); //取一个平均值,用于滤波
if(Ad_dat>250) Ad_dat=0;
else if(Ad_dat<=70) Ad_dat=100;
else Ad_dat=100-((Ad_dat-70)/1.8);
RH=(uint)(Ad_dat);
sum=0;
}
show(); //调用显示函数
key(); //调用按键扫描
proc(); //调用报警子函数
}
}
选用Proteus仿真软件实现自动浇花系统的软件仿真调试,按照所设计的方案搭建电路模型,如图3所示。
图3 手动工作模式
系统所需元件明细表,如表1所示。
表1 自动浇花电路所需元件列表
模型搭建完毕,点击单片机添加程序,打开仿真开关开始调试。
系统上电后直接为手动模式。
由图3可知,LCD1602第一行49%为显示当前湿度,第二行Manul为手动工作模式;P2.0输出为0,继电器工作,水泵转,LCD1602实时显示当前土壤湿度,当湿度增加到人为预期值,按S3键手动关水泵,手动浇花结束。
按下S2工作模式切换为自动。按下S1设置键,进入湿度预设值调节模式,分别按S2/S3键,实现增/减预设值。设置完成后,再按S1键退出,返回到正常模式。将湿度上下限分别设置为RH-L20~RH-H30%。当湿度在30%以下时P2.0输出为0,继电器得电工作,水泵转,湿度在20%以下时D2报警;当湿度在30%以上时P2.0输出为1,继电器断电,水泵停,D3报警指示,完成自动浇花,如图4所示。
图4 自动工作模式
从仿真实验结果表明,该系统可以实现低于设定下限湿度时系统自动浇花,高于设定上限湿度停止浇花,同时带有灯光报警指示和湿度实时显示,在实际中有一定的应用价值。