花园农田智能自动灌溉系统_第1页
花园农田智能自动灌溉系统_第2页
花园农田智能自动灌溉系统_第3页
花园农田智能自动灌溉系统_第4页
花园农田智能自动灌溉系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要:本花园农田智能自动灌溉系统以STC90C58RD+为核心控制单元,采用抗干扰能力强,精度较高的数字温湿度传感器DHT11测量温湿度数据控制灌溉。并且通过多孔管实现由土壤湿度检测到空气湿度检测的转换,并且能较准确的实现湿度的测量。系统通过1602液晶把温度、湿度等实时信息反馈给使用者。使用者也可通过键盘实现手动给水。关键词:智能灌溉 温湿度传感器 Abstract: The Intelligent automatic irrigation system of the garden and farmland is based on STC90C58RD+ micro control unit

2、. By using the anti-interference ability, high accuracy digital temperature humility sensor DHT11, this irrigation system can get the data of temperature and humility, and control the irrigation. By using the porous pipe, the system can convert the measurement of soil humility to the measurement of

3、the air humility. Users can get the information of temperature, humidity through 1602 screen. Users can also control the irrigation through keyboard manually. Keywords: Intelligent irrigation temperature humility sensor1前言随着经济的发展,智能化渐渐步入普通百姓的家。现在市场上的各类智能化产品可谓层出不穷,最常见的有智能电饭煲,智能电冰箱和智能洗衣机等。所谓的智能化,其目的在于

4、增加人与机器的互动,降低功耗,提升效率,尽量达到以人为本的目的。而本小组的作品“花园绿地智能自动灌溉系统”,就是遵循上述目的设计的。对于现代城市大量的绿地来说,植物的灌溉花费大量人力物力,而且并不一定能够依据植物的需求即使提供水分。夏日的骄阳,随时都有可能对植物的生长造成伤害。有鉴于此,本小组设计了花园绿地智能自动灌溉系统,它能够对温湿度实时监控,自动灌溉并且可以随时切换手动自动灌溉。对植物的灌溉根据土壤湿度而定,当土壤湿度低于阈值时,它能自动灌溉。有了它,可以节约大量人力物力,并且起到节约水资源的作用。2 总体方案设计及选择湿度测量温度测量2.1总体系统设计LCD显示键盘输入MCU稳压电源开

5、关模块总体系统设计如上图所示,以单片机为核心,通过温湿度传感器来判断获取温湿度数据,进而控制开关模块的工作。由于功耗较低使用电池模块为整个系统提供稳定的低压直流电。人机交互由键盘和LCD来完成。通过键盘,用户能执行基本的控制,而LCD能把温度,湿度,工作状态等基本信息反馈给用户。2.2微控制器方案方案一:高性能单片机ATmega16方案二:增强型51单片机STC89C58RD+性能要求:(1)较强的抗干扰能力(2)低功耗 (3)较高处理速度(4)成本合理。方案比较:两款单片机均能较好地实行上述要求但采用51内核的STC89C58RD+具有比ATmega16更稳定的市场来源,更低的成本(前者的约

6、为后者二分之一)而且ROM、RAM容量更大。最终决定采用STC89C58RD+。2.3湿度检测方案方案一:土壤湿度传感器方案二:多孔管转化测量土壤湿度方案比较:土壤湿度传感器可以精确地测量土壤的湿度值,但是价格较高在7001000元不适于民用。通过多孔管将土壤湿度转换为空气湿度进行测量,实现难度较低价格便宜,但是精度较低需要重新确定土壤湿度和空气湿度的对应关系。通过比较发现,民用不需要过高的精确度,而且空气湿度传感器有数字型可以直接测得数字值易于MCU使用。最终我们决定使用方案二。 3 单元模块设计3.1单片机最小系统设计本系统以STC89C58RD+为核心控制单元其管脚与一般的51兼容,其主

7、要特性如下:(1) 增强型51内核,一个机器周期执行一条指令。(2) 工作电压5.5V3.3V(3) 工作频率范围035MHz(4) 60K ROM,1024 RAM(5) 32个通用IO口,可推输出,电流达20ma(6) 支持ISP,IAP串口编程方式(7) 集成EPROOM,看门狗,内部RC(8) 上电自动复位,掉电检测(9) 5路中断,支持上升沿触发(10) 2路8位PWM其引脚如上图所示,RXD,TXD为串口收发端,INT0,INT1为外部触发,WR,RD分别为外部写选通,外部读选通。P0,P1,P2,P3为输入输出接口。可设定为四种模式:准双向口,推免,高阻,开漏。P1口第二功能为A

8、D口和ISP下载口P0口自带上拉电阻。XTAL2XTAL1为晶振引脚。最小系统电路:C3与R1构成上电复位电路,XTAL1,XTAL2与晶振相连,频率为12MHz,C1,C2为起振电容EA接正极,以保证对内部ROM编程。电源电压为直流5V。晶振频率为11.0562MHz。3.2DHT11湿度传感器DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。每个DHT11传感器都在湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串

9、行口,较小的体积、较低的功耗,信号传输距离可达20米。DHT11的供电电压为35.5V。传感器上电后,要等待1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。由于DHT11的温度测量只能精确到个位,而实际浴室温度变化比较小,很难通过DHT11的变化控制PWM的占空比,故本设计只采用DHT11的湿度传感器,而温度的测量则交由DS18B20实现。3.3模块连接图1602屏幕STC89C58RD+ 数字信号 DHT11温湿度传感器键盘 脉冲信号 脉冲信号电源模块 注:DHT11温湿度检测模块可以多个并行使用,测量多点温湿度值,并

10、且由MCU同时控制决定灌溉。仿真图模块初始化3.4程序主要流程图 传感器检测键盘检测LCD显示是否手动 Y灌溉 N N 检测是否达到灌溉阈值 延时 N灌溉 Y 是否达到停止阈值延时 N停止灌溉 Y4主程序设计#include #include /typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */typedef u

11、nsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */typedef signed long S32; /* defined for signed 3

12、2-bits integer variable 有符号32位整型变量 */typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */#define uchar unsigned char#define uint unsigned int#define Data_0_time 4sbit RS = P15

13、;sbit RW = P16;sbit E = P17;uchar code table1=HUMI;uchar code table2=TEMP;/*void delay1(uint z)/uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*void read_busy()/1.1 RS = 0;RW = 1;E = 1;while(P2&0x80);/*void write_com(uchar com)/1.2P2 = com;RS = 0;RW = 0;E = 1;/?delay1(5);E = 0;/*uchar read_dat(void)/1.3uc

14、har rdat;RS = 1;RW = 1;E = 1;rdat = P2;delay1(5);return(rdat);/*void write_dat(uchar dat)/1.4P2 = dat;RS = 1;RW = 0;E = 1;delay1(5);E = 0;/*void init()/delay1(15); /5.1write_com(0x38);/5.2delay1(5); /5.3write_com(0x38);/5.4delay1(5); /5.5write_com(0x38);/5.6write_com(0x38);/5.8write_com(0x08);/5.9wr

15、ite_com(0x01);/5.10write_com(0x06);/5.11write_com(0x0c);/5.12/*void display(uchar *p)/write stringwhile(*p!=0)write_dat(*p);p+;read_busy();/*/-/-IO口定义区-/-/sbit P1_0 = P10 ;/-/-定义区-/-/U8 U8FLAG,k,humih,humil,temph,templ,temp,humi;U8 U8count,U8temp;U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8ch

16、eckdata;U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8 U8comdata;U8 outdata5; /定义发送的字节数 U8 indata5;U8 count, count_r=0;U8 str5=RS232;U16 U16temp1,U16temp2;SendData(U8 *a)outdata0 = a0; outdata1 = a1;outdata2 = a2;outdata3 = a3;outdata4 = a4;count = 1;SBUF=ou

17、tdata0; void Delay(U16 j) U8 i; for(;j0;j-) for(i=0;i27;i+); void Delay_10us(void) U8 i; i-; i-; i-; i-; i-; i-; void COM(void) U8 i; for(i=0;i8;i+) U8FLAG=2; while(!P1_0)&U8FLAG+);Delay_10us(); Delay_10us();Delay_10us(); U8temp=0; if(P1_0)U8temp=1; U8FLAG=2; while(P1_0)&U8FLAG+); /超时则跳出for循环 if(U8F

18、LAG=1)break; /判断数据位是0还是1 / 如果高电平高过预定0高电平值则数据位为 1 U8comdata=1; U8comdata|=U8temp; /0 /rof /-/-湿度读取子程序 -/-/-以下变量均为全局变量-/-温度高8位= U8T_data_H-/-温度低8位= U8T_data_L-/-湿度高8位= U8RH_data_H-/-湿度低8位= U8RH_data_L-/-校验 8位 = U8checkdata-/-调用相关子程序如下-/- Delay();, Delay_10us();,COM(); /-void RH(void) /主机拉低18ms P1_0=0;

19、 Delay(180); P1_0=1; /总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); /主机设为输入 判断从机响应信号 P1_0=1; /判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P1_0) /T ! U8FLAG=2; /判断从机是否发出 80us 的低电平响应信号是否结束 while(!P1_0)&U8FLAG+); U8FLAG=2; /判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while(P1_0)&U8FLAG+); /数据接收

20、状态 COM(); U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; P1_0=1; /数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp=U8checkdata_temp) U8RH_d

21、ata_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; /fi /fi/-/main()功能描述: AT89C51 11.0592MHz 串口发 /送温湿度数据,波特率 9600 /-void main()U8 i,j;/uchar str6=RS232;/* 系统初始化 */TMOD = 0x20; /定时器T1使用工作方式2TH1 = 253; / 设置初值TL1 =

22、253;TR1 = 1; / 开始计时SCON = 0x50; /工作方式1,波特率9600bps,允许接收 ES = 1;EA = 1; / 打开所以中断 TI = 0;RI = 0;init();write_com(0x80+0x03);display(table1);write_com(0x80+0x43);display(table2);SendData(str) ; /发送到串口 Delay(1); /延时100US(12M晶振)while(1) /- /调用温湿度读取子程序 RH(); /串口显示程序 /- str0=U8RH_data_H; str1=U8RH_data_L; str2=U8T_data_H; str3=U8T_data_L; str4=U8checkdata; SendData(str) ; /发送到串口 /读取模块数据周期不易小于 2S humi=U8RH_data_H; temp=U8T_data_H; humih=humi/10+0x30; humil=humi%10+0x30; temph=temp/10+0x30; templ=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论