基于单片机的自动节水灌溉系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机控制的节水灌溉系统
题目:基于单片机的节水灌溉系统
班级:13级34班
*名:***
学号:B********
指导老师:
目录
第1节引言 (3)
1.1 节水灌溉系统概述 (3)
1.2 本设计任务和主要内容 (4)
第2节系统主要硬件电路设计 (5)
2.1 单片机控制系统原理 (5)
2.2 单片机主机系统电路 (5)
2.2.1时钟电路 (6)
2.2.2复位电路 (6)
2.2.3数据存储器的扩展电路 (6)
2.3 数据采集处理电路 (7)
2.4 LED显示系统电路 (8)
2.5 超限报警电路 (10)
第3节系统软件设计 (11)
3.1 系统主程序设计 (11)
3.2 采样子程序设计 (12)
3.3数据处理 (13)
3.3. 1数字滤波技术 (13)
3.3.2标度变换 (15)
3. 3. 3 BCD转换 (18)
3. 4 LED动态显示程序 (18)
第4节结束语 (21)
参考文献 (22)
基于单片机的自动节水灌溉系统
第1节引言
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。

单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行实现。

单片机控制部分采用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。

单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上。

该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

1.1 节水灌溉系统概述
生命之起源,水为必要条件,没有了水,地球上的生命将会枯竭。

随着21世纪的到来,能源危机将接踵而至。

比能源危机更可怕的是,作为
人类生命之源的水的短缺到了前所未有的程度,这一状况还将随着时间的推移和
社会的发展继续恶化。

水资源危机已成为全球性的突出问题,利用科技手段缓解这一危机,将是人类主要的出路。

农业是人类社会最古老的行业,是各行各业的基础,也是人类顿以生存的最
重要的行业。

农业的发展从长远来看很重要,一是水的问题,二是科技的问题。

农业的根本出路在科技,在教育。

由传统农业向现代化农业转变,由粗放经营向
集约经营转变,必须要求农业科技有一个大的发展,进行一次新的农业技术革命。

农业与工业、交通等行业相比仍然比较落后,农业灌溉技术尤其落后。

灌溉系统
自动化水平较低是制约我国高效农业发展的主要原因。

传统的灌溉模式自动化程
度极低,基本上属粗放的人工操作,即便对于给定的量,在操作中也无法进行有
效的控制,为了提高灌溉效率,缩短劳动时间和节约水资源,必须发展节水灌溉
控制技术。

现代智能型控制器是进行灌溉系统田间管理的有效手段和工具,它可提高操
作准确性,有利于灌溉过程的科学管理,降低对操作者本身素质的要求。

除了能
大大减少劳动量,更重要的是它能准确、定时、定量、高效地给作物自动补充水分,以提高产量、质量,节水、节能。

现代灌溉控制器的研究使用在我国农、林、及园艺为数不多,与发达国家相比,有较大的差距,还基本停留在人工操作上,即使有些地方搞了一些灌溉工程
的自动化控制系统,也是根据经验法来确定每天灌溉次数和每次灌溉量,如果灌
溉量与作物实际需水量相比太少,便不能有效的促进作物健康成长;而灌溉量太
多,肥水流失,又会造成资源浪费,同时传统的灌溉法还需要相关专家的实时观
察并经验指导生产,劳动生产率低,这也不能与现代化农业向优化、高效化方向
发展要求同步。

随着计算机技术和传感器技术的迅猛发展,计算机和传感器的价格日益降
低,可靠性日益提高,用信息技术改造农业不仅是可能的而且是必要的。

用高新
技术改造农业产业,实施节水灌溉已成为我国农业乃至国民经济持续发展带战略
性的根本大事。

本文旨在设计一套能对作物生长的土壤湿度进行自动监控的系
统,它能对作物进行适时、适量的灌水,起到高效灌溉,节水、节能的作用。

第2节系统主要硬件电路设计
2.1 单片机控制系统原理
图2 单片机控制系统原理框图
2.2 单片机主机系统电路
AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。

内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。

由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。

2.2.2 单片机的最小系统
单片机的最小系统应包括振荡电路和复位电路等[8]。

振荡电路(时钟电路)的主要任务是为AT89S52单片机正常工作需要的时钟电路提供一个稳定的工作频率。

根据AT89S52单片机时钟周期的要求,回路需要选用频率为12MHz的晶振。

晶振回路由电容和陶瓷谐振器并联组成,作为单片机的时钟源。

AT89S52内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2端口接上时钟电源即可构成时钟电路。

本设计中采用内部时钟产生方式,如图2.2所示。

在XTAL1和XTAL2两端跨接晶振,与内部的反相器构成稳定的自激振荡器。

其发出的时钟脉冲直接送入单片机内定时控制部件。

电容C8和C9对频率有微调作用。

电容C1和C3,应尽可能的安装在单片机芯片附近,以减少寄生电容,保证振荡器稳定可靠的工作。

复位电路的功能就是对CPU进行实时监测,当CPU落入死循环之后,能及时发现并使整个系统复位。

为确保微机系统中电路稳未定可靠工作,复位可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。

一般微机电路正常工作需要供电电源为4.75〜5.25V。

由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC上电时,只有当VCC超过4.75V,低于5.25V 以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。

89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。

当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应
图3 单片机主机系统图
2.3数据采集处理电路
ADC0809是一种8位逐次逼近式A/D转换器,内部具有锁存控制的8路模
拟开关,外接8路模拟输入端,可同时对8路0-5V的输入模拟电压信号分时进
行采集转换,本系统只用到INO和INl两路输入通道。

ADC0809转换器的分辨
率为8位,最大不可调误差小于士1LSB,采用单一+5V供电,功耗为15mW,
不必进行零点和满度调整。

由于ADC0809转换器的输出数据寄存器具有可控的
三态输出功能,输出具有TTL三态锁存缓冲器,故其8位数据输出引脚可直接
与数据总线相连。

A/D转换器需外部控制启动转换信号方能进行转换,这一启动
转换信号可由CPU提供,不同型号的A/D转换器,对启动转换信号的要求也不
同,分脉冲启动和电平启动两种,ADC0809采用脉冲启动转换,只需给A/D转
换器的启动控制转换的输入引脚((START)上,加入正脉冲信号,即启动A/D
转换器进行转换,转换开始后,转换结束信号输出端(EOC)信号变低,转换结
束时,EOC返回高电平,以通知主机读取转换结果的数字量,这个信号可以作
为A/D转换器的状态信号供查询,也可以用作中断请求信号。

本系统中ADC0809与AT89C51单片机的接口如图5所示,采用等待延时方式。

ADC0809的时钟频率范围要求在10-1280kHz , AT89C51单片机的ALE脚的频率是单片机时钟频率的1/6,因此当单片机的时钟频率采用6MHz,ADC0809输入时钟频率即为CLK=1MHz,发生启动脉冲后需延时100Us才可读取A/D转换数据。

ADC0809
2.4LCD显示系统电路
D 7D 0D 1D 2D 3D 4D 5D 6D 7
R S R W E
D 0D 1D 2D 3D 4D 5D 6234567891
RP1
4.7k
D 714
D 613D 512D 411D 310D 29D 18D 07
E 6R W 5R S 4V S S 1V D D 2V E E
3
LCD
LM016L
R1
220
2.5报警电路
为了在某些紧急状态或反常状态下,能使操作人员不致忽视,以便及时处理,往往需要有某种更能引起人们注意提起警觉的报警信号产生,这种报警信号通常有三种类型:闪光报警、鸣音报警、语音报警,本系统采用简单易行的鸣音报警电路。

如图8所示报警电路,报警设备选用压电式蜂鸣器,它约需要10mA的驱动电流,只需在其两条引线上加3一15V的直流电压,即可产生3KHz左右的蜂鸣声音,图中蜂鸣器的一端接在高电平+SV,另一端接Pl.0,在初态Pl.0始终输出高电平1,当需要报警时,程序对其端口清零即可,声音的长短可用延时程序控制实现。

第3节系统的软件设计
系统软件程序设计主要包括:主程序设计,采样子程序设计,数据处理程序,显示子程序,串口通信程序等。

3.1 软件设计的整体思想
对于系统而言,要完成各项功能,首先必须要有较完善的硬件作保证。

同时还必须得到相应设计合理的软件的支持,尤其是单片机应用高速发展的今天。

许多由硬件完成的工作,都可通过软件编程来代替,甚至有些用很复杂的硬件电路才能完成的工作,用软件编程的时候,往往会变得很简单,如数字滤波,信号处理等等。

系统进行软件设计时,先要对本设计硬件有一个熟练的掌握,知道系统的组成,数据的传输,信号是如何被控制的,以及信号的显示。

然后进行软件设计时,先搞清楚各个部分的子程序及他们的流程图,然后进行C语言编程,最后将它们系统的编程[11]。

本设计是以AT89C51单片机为核心,采用C语言编程。

它采用模块化设计,由主程序、读出湿度子程序、LCD1602显示子程序、以及有关ADC0809的程序等模块组成。

本系统设计的工作流程是,开始并初始化后,传感器读取湿度值,读取成功后,线性拟合数据,然后LCD显示数据,如果湿度过限,则报警并且启动控制设备;如果数据在湿度上下限范围内,则显示湿度值。

3.2 程序流程图设计
整个系统的软件设计采用模块化编程,主要的功能子程序有:系统初始化,ADC0809的初始化,LCD-1602的初始化。

主程序流程图如图3-1所示。

图3-1 主程序流程图
3.1 系统主程序设计
void main()
{
init();
while(1)
{ shiduxianshi();
write_com(0x80);//第一行
delay(20);
for(a=0;a<16;a++)
{
write_date(table1[a]);
delay(20);
}
write_com(0xc0);//第二行
delay(50);
for(a=0;a<16;a++)
{
write_date(table2[a]);
delay(40);
}
if(shu<=sd2)
{
table2[10]='o';
table2[11]='f';
table2[12]='f';
}
if(shu>sd2)
{
table2[10]='o';
table2[11]='n';
table2[12]=' ';
beep();
switch(sd2)
{case 1 :i1=80;break;
case 2 :i2=40;break;
case 3 :i3=20;break;
case 4 :i4=10;
}
write_com(0xc0);//显示第二行信息
delay(50);
for(a=0;a<16;a++)
{
write_date(table2[a]);
delay(40);
}
}
if(i1)
{i1--;
watering=0;
if(i1==0)
watering=1;//浇水停止
}
if(i2)
{i1--;
watering=0; }
if(i3)
{i1--;
watering=0; }
if(i4)
{i1--;
watering=0;
}
}
}
3.2采样子程序设计
根据电路图,因EOC未接入单片机,故只能采用延时等待的方法来读取A/D转换结果,ADC0809的INO和INl两个地址分别是OBFF8H, OBFF9H, INO通道采集到的11个数据放入以ADTURNO(片内21H)为首址的一片数据区内,IN1通道采集到的11个数据放入以ADTURN1(片内2CH)为首址的另一片数据区内。

程序清单:
void shidu()
{
wela=1;
P0=0; //选通ADCS
wr=0; //AD写入(随便写个什么都行,主要是为了启动AD转换)
_nop_();
wr=1;
P0=0xff; //关闭ADCS
delay(10);
wela=0;
for(a=20;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ delay(50);
}
wela=1; //重新打开有AD片选信号锁存器的锁存端
P1=0xff; //读取P1口之前先给其写全1
P0=0; //选通ADCS
adrd=0; //AD读使能
adval=P1; //AD数据读取赋给P1口
adrd=1;
P0=0xff; //关闭ADCS
wr=0;
P1=adval;
wela=0;
}
void shiduxianshi()
{
adval=adval/2.55;
sd1=adval/100; //分出百,十,和个位
sd2t=adval%100;
sd2=sd2t/10;
sd3=sd2t%10;
shidu();
table1[10]=sd1+0x30;
table1[11]=sd2+0x30;
table1[12]=sd3+0x30;
}
显示程序
4.1 软件调试
系统软件设计的过程主要分为以下几个步骤:
第一步:建立源程序。

通过计算机开发系统的编辑软件,按照所要求的格式、语法规定、源程序输入到开发系统中,并存在磁盘上。

第二步:在计算机上,利用KILE软件对第一步输入的源程序进行编译,变为可执行的目标代码。

如果源程序有语法错误,则其错误将显示出来,然后返回到第一步进行修改,再进行编译,直到语法错误全部纠正为止。

第三步:在线调试。

对于与系统、硬件无联系的程序,可以借助在线调试手段,发现逻辑错误后,返回到第一步修改,直到逻辑错误纠正为止。

对于与系统硬件紧密相关的程序,则需对软件和硬件同时进行调试,将程序烧入CPU,然后将CPU 插入系统。

发现硬件故障后应排除故障,发现逻辑错误后应修改程序,消除逻辑错误。

4.2 硬件调试
硬件调试主要包括两步:
第一步:系统上电之前,先仔细检查线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,应特别注意电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线是否存在相互之间短路或与其它信号线的短路。

第二步:第一步的调试,只是对系统进行初步调试,可以排除一些明显的故障,而硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠软件和硬件联调来排除。

硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。

4.3 液晶模块调试
液晶显示器是人机界面最关键的部分,能够使我们更加清楚的读取数据。

在对显示模块进行调试的过程中发现显示不正常,汉字显示与字符显示不同,LCD1602有二行,每行可以显示16个字符,由于软件编程时,地址分配有误,使得汉字部分无法显示。

经过检查,发现问题后,将地址重新分配,显示部分正确。

4.4 报警电路调试
本次系统设计采用的是声音报警电路。

当湿度其中任何值一个过限后,蜂鸣器都会发出声音。

这是写在软件程序里的。

但是在加上控制信号,湿度过限后,蜂鸣器不报警。

蜂鸣器的控制端口无控制信号输出。

经检查发现程序里面蜂鸣器的控制端口电平设置有误,修改后,蜂鸣器工作正常。

结束语
首先,通过这次应用系统设计,在很大程度上提高了自己的独立思考能力和单片机的专业知识,也深刻了解写一篇应用系统的步骤和格式,有过这样的一次训练,相信在接下来的日子我们都会了,而且会做得更好。

我所写的系统主要根据目前节水灌溉技术的发展趋势和国内实际的应用特点和要求,采用了自动化的结构形式,实现对土壤湿度的自动检测和控制。

系统以单片机AT89C51为核心部件,单片机系统完成对土壤湿度信号的采集、处理、显示等功能;用Protel软件绘制电路原理图和PCB电路印刷板图,并在电路板厂制作控制主板;利用MCS51c语言编制,运行程序该系统的主要特点是:
1)适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不同作物对土壤湿度的要求,实现对土壤湿度的实时监控,下位机也可脱离上位机单独工作。

2)可对作物进行适时、适量灌水,不仅有利于作物的生长发育,而且避免了水资源的浪费,起到了高产节水的作用。

3)将模糊智能控制技术引入对土壤湿度的分析和处理中,模糊控制决策无需建立被控对象的数学模型,系统的鲁棒性强,适合对非线性、时变、滞后系统的控制,对灌溉系统采用模糊控制非常适合。

具体采用双输入单输出的模糊控制方法,使控制系统更具科学性。

4)系统成本低廉,操作非常简单,可扩展性强,只要稍加改变,即可增加其他使用功能。

本系统对现代化农业的发展具有十分重要的意义:
1)本系统只对灌溉中水的因素实行监控,而未涉及肥的问题,应将水肥结合起来进行灌溉,对作物生长效果会更好。

2)应同时考虑土壤湿度和作物需水量两个因素,判断是否要对作物进
行灌溉以及所需灌水量的多少。

3)被测土壤湿度只是进行了两点测试,如果能进行多点检测就会使检测到的湿度值精度更高。

4)本系统在模拟检测中运行较好,但采样据不太稳定等,还有待于进一步完善提高。

参考文献
[1]范海涛.世界设施农业发展现状.农村实用工程技术,2001(1): 10-11
[2]李朝青.单片机原理及接口技术. 北京: 北京航空航天大学出版社,2009
[3]潘新民, 王燕芳.微型计算机控制技术.北京: 电子工业出版社, 2011
[4]周润景, 张丽娜. 基于PROTEUS的电路及单片机系统设计与仿真. 北京: 北京航空航天大学出版社, 2006
[5]房德君.新型单片机综合试验系统.山东: 山东大学出版社, 1996
[6]刘九庆.温室环境工程技术.吉林: 东北林业大学出版社, 2002
[7]张友德, 赵志英, 涂时亮.单片微型机原理应用与实验.上海: 复旦大学出版社, 2003
[8]沈庆阳.单片机实践与应用.北京: 清华大学出版社, 2002
[9]杜深慧.温湿度检测装置的设计与实现. 北京: 机械工业出版社, 2004
[10]姜志海, 赵艳雷.单片机的C语言程序设计与应用.北京: 电子工业出版社, 2010
附录:
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit watering=P3^2;
sbit wela=P2^7;
sbit BEEP=P2^3 ; //蜂鸣器驱动线
uint temp;
float f_temp;
sbit diola=P2^5;
sbit adrd=P3^7;
uchar
a,t,a1,a2,a3,sd1,sd2,sd2t,sd3,j,k,adval,shu1,shu=4,i1,i2,i3,i4 ;
uchar table1[]="humidity: ";
uchar table2[]=" warning: ";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void beep()
{
unsigned char y;
for (y=0;y<100;y++)
{
delay(70);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器delay(100);
}
/***************1602显示********************/ void write_com(uchar com)
{
P0=com;
rs=0;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void write_date(uchar date)
{
P0=date;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void init()
{
dula=0;
wela=0;
wr=0;
write_com(0x38);
delay(20);
write_com(0x0e);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
table2[10]='o';
table2[11]='f';
table2[12]='f';
dula=0;
wela=0;
P0=0;
P2&=0x1F;
}
void main()
{
dula=0;
wela=0;
P0=0;
P2&=0x1F;
init();
table2[10]='o';
table2[11]='f';
table2[12]='f';
while(1)
{ shiduxianshi();
write_com(0x80);//第一行
delay(20);
for(a=0;a<16;a++)
{
write_date(table1[a]);
delay(20);
}
write_com(0xc0);//第二行
delay(50);
for(a=0;a<16;a++)
{
write_date(table2[a]);
delay(40);
}
if(shu<=sd2)
{
table2[10]='o';
table2[11]='f';
table2[12]='f';
}
if(shu>sd2)
{
table2[10]='o';
table2[11]='n';
table2[12]=' ';
beep();
switch(sd2)
{case 1 :i1=80;break;
case 2 :i2=40;break;
case 3 :i3=20;break;
case 4 :i4=10;
}
write_com(0xc0);//第二行
delay(50);
for(a=0;a<16;a++)
{
write_date(table2[a]);
delay(40);
}
}
if(i1)
{i1--;
watering=0;
if(i1==0)
watering=1;//jiaoshui
}
if(i2)
{i1--;
watering=0; }
if(i3)
{i1--;
watering=0; }
if(i4)
{i1--;
watering=0;
} }
土壤套头接口。

相关文档
最新文档