基于单片机的自动节水灌溉系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机控制的节水灌溉系统
题目:基于单片机的节水灌溉系统
班级: 13级34班
姓名:程雪园
学号: B
指导老师:
目录
第1节引言 (3)
节水灌溉系统概述 (3)
本设计任务和主要内容 (4)
第2节系统主要硬件电路设计 (5)
单片机控制系统原理 (5)
单片机主机系统电路 (5)
2.2.1时钟电路 (6)
2.2.2复位电路 (6)
2.2.3数据存储器的扩展电路 (6)
数据采集处理电路 (7)
LED显示系统电路 (8)
超限报警电路 (10)
第3节系统软件设计 (11)
系统主程序设计 (11)
采样子程序设计 (12)
数据处理 (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显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
节水灌溉系统概述
生命之起源,水为必要条件,没有了水,地球上的生命将会枯竭。
随着21世纪的到来,能源危机将接踵而至。
比能源危机更可怕的是,作为
人类生命之源的水的短缺到了前所未有的程度,这一状况还将随着时间的推移和
社会的发展继续恶化。
水资源危机已成为全球性的突出问题,利用科技手段缓解这一危机,将是人类主要的出路。
农业是人类社会最古老的行业,是各行各业的基础,也是人类顿以生存的最
重要的行业。
农业的发展从长远来看很重要,一是水的问题,二是科技的问题。
农业的根本出路在科技,在教育。
由传统农业向现代化农业转变,由粗放经营向
集约经营转变,必须要求农业科技有一个大的发展,进行一次新的农业技术革命。
农业与工业、交通等行业相比仍然比较落后,农业灌溉技术尤其落后。
灌溉系统
自动化水平较低是制约我国高效农业发展的主要原因。
传统的灌溉模式自动化程
度极低,基本上属粗放的人工操作,即便对于给定的量,在操作中也无法进行有
效的控制,为了提高灌溉效率,缩短劳动时间和节约水资源,必须发展节水灌溉
控制技术。
现代智能型控制器是进行灌溉系统田间管理的有效手段和工具,它可提高操
作准确性,有利于灌溉过程的科学管理,降低对操作者本身素质的要求。
除了能
大大减少劳动量,更重要的是它能准确、定时、定量、高效地给作物自动补充水分,以提高产量、质量,节水、节能。
现代灌溉控制器的研究使用在我国农、林、及园艺为数不多,与发达国家相比,有较大的差距,还基本停留在人工操作上,即使有些地方搞了一些灌溉工程
的自动化控制系统,也是根据经验法来确定每天灌溉次数和每次灌溉量,如果灌
溉量与作物实际需水量相比太少,便不能有效的促进作物健康成长;而灌溉量太
多,肥水流失,又会造成资源浪费,同时传统的灌溉法还需要相关专家的实时观
察并经验指导生产,劳动生产率低,这也不能与现代化农业向优化、高效化方向
发展要求同步。
随着计算机技术和传感器技术的迅猛发展,计算机和传感器的价格日益降
低,可靠性日益提高,用信息技术改造农业不仅是可能的而且是必要的。
用高新
技术改造农业产业,实施节水灌溉已成为我国农业乃至国民经济持续发展带战略
性的根本大事。
本文旨在设计一套能对作物生长的土壤湿度进行自动监控的系
统,它能对作物进行适时、适量的灌水,起到高效灌溉,节水、节能的作用。
第2节系统主要硬件电路设计
单片机控制系统原理
图2 单片机控制系统原理框图
2.2 单片机主机系统电路
AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
单片机的最小系统
单片机的最小系统应包括振荡电路和复位电路等[8]。
振荡电路(时钟电路)的主要任务是为AT89S52单片机正常工作需要的时钟电路提供一个稳定的工作频率。
根据AT89S52单片机时钟周期的要求,回路需要选用频率为12MHz的晶振。
晶振回路由电容和陶瓷谐振器并联组成,作为单片机的时钟源。
AT89S52内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2端口接上时钟电源即可构成时钟电路。
本设计中采用内部时钟产生方式,如图所示。
在XTAL1和XTAL2两端跨接晶振,与内部的反相器构成稳定的自激振荡器。
其发出的时钟脉冲直接送入单片机内定时控制部件。
电容C8和C9对频率有微调作用。
电容C1和C3,应尽可能的安装在单片机芯片附近,以减少寄生电容,保证振荡器稳定可靠的工作。
复位电路的功能就是对CPU进行实时监测,当CPU落入死循环之后,能及时发现并使整个系统复位。
为确保微机系统中电路稳未定可靠工作,复位可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。
一般微机电路正常工作需要供电电源为〜。
由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电
源上电时,只有当VCC上电时,只有当VCC超过,低于以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应
并将系统复位。
图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转换数据。
2.4LCD显示系统电路
报警电路
为了在某些紧急状态或反常状态下,能使操作人员不致忽视,以便及时处理,往往需要有某种更能引起人们注意提起警觉的报警信号产生,这种报警信号通常有三种类型:闪光报警、鸣音报警、语音报警,本系统采用简单易行的鸣音报警电路。
如图8所示报警电路,报警设备选用压电式蜂鸣器,它约需要10mA的驱动电流,只需在其两条引线上加3一15V的直流电压,即可产生3KHz左右的蜂鸣声音,图中蜂鸣器的一端接在高电平+SV,另一端接,在初态始终输出高电平1,当需要报警时,程序对其端口清零即可,声音的长短可用延时程序控制实现。
第3节系统的软件设计
系统软件程序设计主要包括:主程序设计,采样子程序设计,数据处理程序,显示子程序,串口通信程序等。
软件设计的整体思想
对于系统而言,要完成各项功能,首先必须要有较完善的硬件作保证。
同时还必须得到相应设计合理的软件的支持,尤其是单片机应用高速发展的今天。
许多由硬件完成的工作,都可通过软件编程来代替,甚至有些用很复杂的硬件电路才能完成的工作,用软件编程的时候,往往会变得很简单,如数字滤波,信号处理等等。
系统进行软件设计时,先要对本设计硬件有一个熟练的掌握,知道系统的组成,数据的传输,信号是如何被控制的,以及信号的显示。
然后进行软件设计时,先搞清楚各个部分的子程序及他们的流程图,然后进行C语言编程,最后将它们系统的编程[11]。
本设计是以AT89C51单片机为核心,采用C语言编程。
它采用模块化设计,由主程序、读出湿度子程序、LCD1602显示子程序、以及有关ADC0809的程序等模块组成。
本系统设计的工作流程是,开始并初始化后,传感器读取湿度值,读取成功后,线性拟合数据,然后 LCD显示数据,如果湿度过限,则报警并且启动控制设备;如果数据在湿度上下限范围内,则显示湿度值。
程序流程图设计
整个系统的软件设计采用模块化编程,主要的功能子程序有:系统初始化,ADC0809的初始化,LCD-1602的初始化。
主程序流程图如图3-1所示。
图3-1 主程序流程图
3.1 系统主程序设计
void main()
{
init();
while(1)
{ shiduxianshi();
write_com(0x80);89C世界设施农业发展现状.农村实用工程技术, 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<>
#include <>
#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;
} }。