孙小春,孙小迎
(1.杨凌职业技术学院,陕西 杨凌 712100;2.南昌工学院,南昌 330108)
当前很多农业种植户都需根据土壤墒情进行大水浇灌,这种灌水特点是连续的,选取这种灌溉方式仅仅只能保证农作物不会缺水而死,经常是水量过多,该方式对作物来说并不是最好的生长环境,浪费了水资源又无法使农作物健康生长。种植户必须定期到农田进行巡查,灌溉的智能化程度也很低,需要较多劳动力,因此迫切需要一个小型的智能灌溉系统[1],减少劳动力,增加经济收入。
基于单片机的小型智能节水灌溉系统以51单片机作为控制中心,设置适合农作物的湿度参数范围,利用土壤湿度传感器对土壤湿度信息进行实时采集,并对该湿度信息进行分析、处理和实时显示,单片机根据数据分析结果发出不同的控制信号去控制抽水电机的启动和停止,从而控制水泵抽水灌溉,最终实现智能节水灌溉系统的设计。
灌溉系统以单片机为控制核心,湿度传感器把土壤湿度信息传给单片机,单片机对湿度信息实时采集并进行分析处理,当湿度数值小于下线设定值时,单片机发出报警信息,同时发出控制信号给水泵控制阀门启动水泵电机,并显示当前的土壤湿度数据,当湿度数值大于设定的上限值时单片机控制关闭阀门,停止水泵电机。设计结构框见图1。
该设计以单片机为核心,在LCD1602显示器上实时显示测试的土壤湿度,而且用户可以通过按键来设置水泵电机工作、停止的边界值。
图1 设计结构框
单片机选用AT89C51芯片,由于其性价比高、电压低,兼容标准的51指令系统,使其更容易应用。系统采用直流5 V电源,亦可由USB输入直接供电;数据采集模块主要用YL-69土壤湿度传感器;湿度数据实时显示模块选用LCD1602液晶显示屏,可显示字母、数字、符号等;水泵电机驱动模块,单片机根据湿度数据的分析、处理结果,发出不同的控制信号,控制水泵电机的工作状态,当超出预设的数值范围可以进行声光报警。
土壤湿度传感器选用YL-69,其内部有一个电容,当电容受到不同湿度的影响,它的电阻值可以改变。当土壤含水量发生变化时,它的电阻值立即发生变化,从而可以产生不同大小的电信号,这样就能将土壤的湿度信息直接转化成电信号。YL-69传感器的模拟量电压输出接口为AO,将AO与ADC0809芯片的IN0模拟输入端口相连进行A/D转换,将转换后的数字信号由DO端口传输给单片机。
湿度对应的电压范围为:5.0 V干燥,对应0%湿度,4.0 V对应25%湿度,1.0 V对应湿度80%。程序设计水泵电机的开关,当湿度为25%也就是4.0 V时候,电机开启水泵。
图2是水泵电机驱动控制原理。智能灌溉系统的电机部分主要由AT89C51、驱动放大电路、电机部分组成[2,3]。
图2 电机驱动电路
根据硬件电路设计,结合C语言特点,进行软件设计。其软件控制流程如图3所示。
图3 软件流程
首先,进入系统初始化,LCD1602显示初始化;其次,采集土壤湿度数据并送给ADC0809进行模式转换,单片机读取转换输出的八位二进制数据,给该数值乘以0.019 6(5/255)转换成湿度传感器对应的电压信息,并由LCD1602液晶显示模块直接显示该电压信息。同时,把该电压值与预先设定好的数值进行比较,单片机根据比较结果给P2.3引脚(水泵控制模拟单元与单片机的P2.3引脚连接)发出不同的控制信号,即通过改变P2.3引脚的高低电平来控制水泵电机的工作和停止。当传感器检测到的电压值大于4 V时,说明土壤湿度低于25%,农作物需要进行灌溉,单片机就给三极管输出一个高电平,电机驱动电路处于导通状态,继电器接通和电机相连接的开关,就使水泵进行抽水灌溉(继电器工作,水泵开启)。在灌溉的过程中,当湿度传感器检测到的电压值低于4 V时,单片机又给三极管输出一个低电平,这时三极管截止,相当于继电器断开,使水泵停止灌溉(继电器停止工作,水泵停止),将程序写入单片机后,通过单片机P2.3引脚对三极管的控制便能控制水泵是否进行灌溉。该程序软件循环工作,即可做到智能节水灌溉。部分程序和代码如下。
1)A/D转换和数据读取程序。
unsigned int shu;//保存读取数据
sbit clock=P3^3;//定义时钟
sbit start=P3^0;
sbit eoc=P3^1;
sbit oe=P3^2;
TMOD=0X20;
TH1=206;
TL1=206;
EA=1;
ET1=1;
TR1=1;
oe=0;
while(1)
{
start=0;
start=1;
start=0;//转换开始
while(eoc==0);//转换结束
oe=1;//读取数据
temp=P0;
oe=0;
shu=shu*0.0196;
}
void t1()interrupt 3
{
clock=~clock;//时钟信号
}
2)液晶显示程序部分。
sbit RS=P2.0;//定义引脚
sbit RW=P2.1;
sbit E=P2.2;
void lcd_w_cmd(unsigned char com);//写命令子函数
void lcd_w_dat(unsigned char dat);//写 数 据 子函数
unsigned char lcd_r_start();//查询状态子函数
void lcd_int();//初始化函数
void delay(unsigned int i);//延时函数
Void xianshi()//显示数据
{
unsigned char lcd[]=“数据”;
unsigned char i;
P1=0xff;//关闭
lcd_int();
delay(255);
lcd_w_cmd(0x83);
delay(255);
for(i=0;lcd[i]!=‘ ’;i++)
{lcd_w_dat(lcd[i]);
delay(200);}
while(1);
}
用输入0~5 V模拟电压代替湿度传感器测量信息进行仿真测试。当湿度低于25%,测量电压大于4 V时,测试电压为4.35 V,LCD1602和电压表显示都为4.35 V,电机开启,转速497 r/min,水泵进行灌溉(图4);当湿度大于25%,测量电压小于4 V时,测试电压为0.7 V,LCD1602电压表显示都为0.70 V,电机停止,转速为0,水泵停止灌溉(图5);在其他不同湿度进行测量时,电机都可以按设计功能工作。
图4 湿度低于25%的仿真效果
图5 湿度大于25%的仿真效果
系统使用湿度传感器检测湿度信息,由51单片机进行湿度信息的实时采集、处理和显示,根据湿度信息控制抽水电机的工作状态,实现智能节水灌溉。在实际应用中可以设置适合农作物生长的湿度参数范围。该系统实现了智能灌溉功能,且经济实用,具有很高的应用价值。