基于AT89C51的自动喷水系统.docx

上传人:b****0 文档编号:10133822 上传时间:2023-05-23 格式:DOCX 页数:41 大小:494.09KB
下载 相关 举报
基于AT89C51的自动喷水系统.docx_第1页
第1页 / 共41页
基于AT89C51的自动喷水系统.docx_第2页
第2页 / 共41页
基于AT89C51的自动喷水系统.docx_第3页
第3页 / 共41页
基于AT89C51的自动喷水系统.docx_第4页
第4页 / 共41页
基于AT89C51的自动喷水系统.docx_第5页
第5页 / 共41页
基于AT89C51的自动喷水系统.docx_第6页
第6页 / 共41页
基于AT89C51的自动喷水系统.docx_第7页
第7页 / 共41页
基于AT89C51的自动喷水系统.docx_第8页
第8页 / 共41页
基于AT89C51的自动喷水系统.docx_第9页
第9页 / 共41页
基于AT89C51的自动喷水系统.docx_第10页
第10页 / 共41页
基于AT89C51的自动喷水系统.docx_第11页
第11页 / 共41页
基于AT89C51的自动喷水系统.docx_第12页
第12页 / 共41页
基于AT89C51的自动喷水系统.docx_第13页
第13页 / 共41页
基于AT89C51的自动喷水系统.docx_第14页
第14页 / 共41页
基于AT89C51的自动喷水系统.docx_第15页
第15页 / 共41页
基于AT89C51的自动喷水系统.docx_第16页
第16页 / 共41页
基于AT89C51的自动喷水系统.docx_第17页
第17页 / 共41页
基于AT89C51的自动喷水系统.docx_第18页
第18页 / 共41页
基于AT89C51的自动喷水系统.docx_第19页
第19页 / 共41页
基于AT89C51的自动喷水系统.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于AT89C51的自动喷水系统.docx

《基于AT89C51的自动喷水系统.docx》由会员分享,可在线阅读,更多相关《基于AT89C51的自动喷水系统.docx(41页珍藏版)》请在冰点文库上搜索。

基于AT89C51的自动喷水系统.docx

基于AT89C51的自动喷水系统

[摘要]本次设计的自动喷水系统包括土壤温湿度的采集与显示,计数器的设置与显示,独立按键以及喷水报警等四大部分。

土壤温湿度的采集和显示以AM2301作为温湿传感器来采集温湿度,将采集到的土壤温湿度值送入AT89S52单片机,再由其传输到LED数码管进行显示。

自动喷水系统设计为智能和手动两个部分:

智能喷水部分是通过独立按键来设定比较值并输入到单片机与传感器送入单片机的土壤湿度值相比较,比如:

当湿度低于下限值时,单片机将会输出一个信号控制喷水,同时,当温度高于上限值时,单片机也会输出一个信号控制喷水;手动部分也是由独立按键来设定喷水时间。

[关键词]AT89S52温湿度的采集与显示定时器LEDAM2301

引言

21世纪水资源正在变成一种宝贵的稀缺资源,水资源问题已不仅仅是资源问题,更成为关系到国家经济、社会可持续发展和长治久安的重大战略问题。

基于此种情况采用节水、节能的智能灌溉方法已成为全世界灌溉技术发展的趋势,推广使用智能化节水灌溉也已成为世界各国为缓解水资源危机和实现农业现代化的必然选择。

于是,为了解决以上问题,我设计并初步实现了一套简单的智能化自动喷水系统。

该系统可对土壤的温湿度进行监控,并对其进行适时适量的胶水。

其核心是单片机控制模块,温湿度采集及显示模块。

用户可以通过数码管显示浏览采集到实时的温湿度信息。

自动喷水系统的初步设计

所谓的自动喷水系统即利用温湿度传感器采集或监测土壤信息、田间信息和作物生长信息等。

并将监测数据传到CPU,经过CPU相应程序的分析决策,对终端发出相应的指令,从而实现自动喷水的功能。

起初,将系统划分为四个部分:

温湿度传感器模块;显示模块;控制模块;单片机处理模块。

控制模块有独立按键组成,设为4个按键,第一个为电源按键,其次为模式切换按键,然后分别为+,-功能键。

显示模块选用6个动态数码管。

温湿度传感器模块选用DS18B20和AM1001。

单片机处理模块采用单片机AT89S51及其他相关硬件。

由于,传感器部分作为相对独立的部分,同时考虑到硬件问题,我先初步的将定时模块程序规划好。

定时模块需要采用单片机的定时器,来实现时分秒的递减显示,当时间归零时,报警器响。

设计程序时,还要注意时分秒进位时,相关的细节操作。

另外,独立按键的扫描,要求控制和设定时间,起初考虑用中断的方式来控制实现其功能。

其次,考虑传感器部分,参考DS18B20温度采集与显示设计,注意传感器的初始化,写操作,读操作等,设计相应的程序。

显示模块采用动态数码管显示,编程时注意ClK信号的设置,以及相应的延时子程序,段码表和位选等都要设定妥当。

最后,将温度传感器得到的实时温度与用户设定值进行比较,通过if语句输出相应的信号来控制报警器和电磁阀的工作。

在控制技术方面,有诸如开环、闭环反馈控制,模糊控制,自适应控制,神经网络控制等现代控制技术。

模糊控制技术当前应用最广泛,一般用于有上、下位机的单片机控制系统。

本系统采用传统的闭环控制技术,系统控制原理逻辑框图实现如下:

以上是通过网上查找资料等方式,定制的最初的功能实现方案。

自动喷水系统功能设计进阶

现实生活中很多植物温度、湿度要保持在一个既定的值上,超出或者低于这个预定值将对植物的生长产生影响。

该系统要求用单片机测控来植物生长环境因子信息数据的实时采集、处理,而后输出控制执行机构,以实现环境湿度、温度的测控,达到节水节能,省时省工的效果。

具体功能如下:

1、实现按需灌溉功能。

按照植物的需求开启和关闭灌溉系统,实现一般的控制。

具有结构简单,成本低,操作方便。

2、通过传感器检测植物生长的环境温度、土壤湿度;依据设定的植物要求的温度、湿度的上下限值,由单片机来控制开关电磁阀,从而调节温湿度。

3、室内环境中土壤湿度是重要因子,要求当土壤含水量过低而不能满足植物最低需求时,就打开电磁阀进行喷水,当湿度满足要求时关闭电磁阀。

主要器件的选择

一、单片机的选择:

电子技术飞速发展,使得计算机不断更新换代。

其中单片机更是一枝独秀,广泛应用于各个领域,使其自动化程度大提高。

单片机具有体积小,价格低廉,功能强大等优点。

候选单片机AT89S51和AT89S52.下面是两单片机的比较:

AT89S51功能特性

a.兼容MCS-51指令系统

b.32个双向I/O口

c.2个16位可编程定时/计数器

d.全双工UART串行中断口线

e.2个外部中断源

f.中断唤醒省电模式

g.看门狗(WDT)电路

h.灵活的ISP字节和分页编程

i.4k可反复擦写(>1000次)ISPFlashROM

j.4.5-5.5V工作电压

k.时钟频率0-33MHz

l.128x8bit内部RAM

m.低功耗空闲和省电模式

n.3级加密位

o.软件设置空闲和省电功能

p.双数据寄存器指针

AT89S52功能特性

a.兼容MCS51指令系统

b.8k可反复擦写(大于1000次)FlashROM

c.32个双向I/O口

d.256x8bit内部RAM

e.3个16位可编程定时/计数器中断

f.时钟频率0-24MHz

g.2个串行中断,可编程UART串行通道

h.2个外部中断源,共8个中断源

i.2个读写中断口线,3级加密位

j.低功耗空闲和掉电模式,软件设置睡眠和唤醒功能

k.有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。

起初,我选择的是51单片机,但在编程设计中,为了更好地实现具体功能,我发现实现过程中需要用到三个定时器,并且综合考虑,52单片机能发挥出更强大的能效,同时我们手上正在使用的也是52单片机,因此相对熟悉。

二、传感器的选择

对于传感器的选择,起初我是选用两个传感器,温度采集使用DS18B20,而湿度采用AM1001。

但是,在网上查找资料的过程中发现市场上拥有已将温湿度采集集成在同一片传感器上的AM2301,同时,它是以效准数字信号输出的复合传感器,省去了模数转换的麻烦,节省了硬件资源。

综合考虑,我选用了AM2301温湿度传感器。

三、显示器的选择

显示器可采用LED数码管和LCD显示屏,将二者进行比较,LED结构简单,它实际上是由七个发光二极管组成8字形构成的,加上小数点就是8个。

这些段分别由字母a,b,c,d,e,f,g,dp来表示。

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的“8”数码管字样了。

它的原理简单,容易理解和操作,对于一些简单的显示系统是非常理想的器件。

LCD虽然功能强大,但是操作复杂,并且LED在本系统中就足以发挥作用,加上成本低廉,所以在本次设计中选用LED显示数据。

主要模块分析

一、主输入输出控制电路

自动控制系统通过AM2301传感器对受控对象的有关参数信息数据的实时采集及数字变化,进入单片机CPU进行必要的处理,而后输出以驱动执行器件或机构产生相应的动作,直接推动被控对象来调整被测参量,最终目的以使受控参量始终处于要求值或范围内。

系统中我们选择主控制器芯片的时候需要考虑整个系统的功耗要低,并且有非易失性的程序和数据存储器方便数据的掉电存储,要集成内部基准电压源并采用at89s51单片机。

AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,AT89S52在众多嵌入式控制应用系统中得到广泛应用。

主机和传感器之间可通过三个步骤完成数据读取

步骤一:

AM2301上电后(AM2301上电后要等待2S以越过不稳定状态,在此期间读取设备不能发送任何指令),测试环境温湿度数据,并记录数据,此后传感器自动转入休眠状态。

AM2301的SDA数据线由上拉电阻拉高一直保持高电平,此时AM2301的SDA引脚处于输入状态,时刻检测外部信号。

步骤二:

微处理器的I/O设置为输出,同时输出低电平,且低电平保持时间不能小于800us,典型值是拉低1MS,然后微处理器的I/O设置为输入状态,释放总线,由于上拉电阻,微处理器的I/O即AM2301的SDA数据线也随之变高,等主机释放总线后,AM2301发送响应信号,即输出80微秒的低电平作为应答信号,紧接着输出80微秒的高电平通知外设准备接收数据。

步骤三:

AM2301发送完响应后,随后由数据总线SDA连续串行输出40位数据,微处理器根据I/O电平的变化接收40位数据。

位数据“0”的格式为:

50微秒的低电平加26-28微秒的高电平;

位数据“1”的格式为:

50微秒的低电平加70微秒的高电平。

二、电磁阀控制电路

电磁阀控制电路主要由NPN共集-共射复合管及继电器组成,当单片机P0.7给出高电平,复合管导通,继电器接通,将开关吸合,电磁阀接通开始放水。

因为单片机的带负载能力比较小,不足以驱动继电器和电磁阀,所以采用功率放大驱动电路,使得电磁阀能够工作。

同时可以减少电磁阀对主电路的干扰作用。

电磁阀控制电路原理图如图所示:

三、报警电路设计

报警电路设计作为一个独立的模块,采用市面上比较普遍的蜂鸣器电路,结构比较简单,使用AT89S52上的一根口线驱动蜂鸣器发声。

蜂鸣器原理图如图所示:

四、显示模块电路

显示模块可采用两种方式,一种是采用动态显示方式驱动6个数码管工作,左边四位显示温湿度值,精确到小数点后一位,右边两位为温湿度的单位显示。

其中通过S4键切换温湿度,数码管通过位段扫描实现显示功能。

键盘模块原理图如下:

五、定时模块

定时模块其中分为定时部分和调时部分,同样通过S1和S2键来控制时间的减和加,S3键来确定定时和切换设置时间。

温湿度程序代

六、温湿度采集模块

首先是对AM2301的介绍。

AM2301湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电容式感湿元件和一个高精度测温元件,并与一个高性能8位单片机相连接。

因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个传感器都在极为精确的湿度校验室中进行校准。

校准系数以程序的形式储存在单片机中,传感器内部在检测信号的处理过程中要调用这些校准系数。

标准单总线接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。

产品为3引线(单总线接口)连接方便。

特殊封装形式可根据用户需求而提供。

AM2301引脚图及其分配

引脚

颜色

名称

描述

1

红色

VDD

电源(3.5-5.5v)

2

黄色

SDA

串行数据,双向

3

黑色

GND

4

NC

空脚

AM2301的数据总线SDA输出40位数据后,继续输出低电平50微秒后转为输入状态,由于上拉电阻随之变为高电平。

同时AM2301内部重测环境温湿度数据,并记录数据,测试记录结束,单片机自动进入休眠状态。

单片机只有收到主机的起始信号后,才重新唤醒传感器,进入工作状态。

AM2301传感器读单总线的流程图如图所示:

AM2301传感器读单总线的流程图

温湿度采集原理图如下图所示

七、硬件抗干扰设计

在自动浇灌控制系统中,系统可靠性的保证是非常重要的,单片机硬件系统的可靠性决定了整个系统的可靠性。

硬件抗干扰技术主要体现在过程通道抗干扰设计、供电系统抗干扰设计和印刷电路板抗干扰设计三个方面。

单片机硬件系统的抗干扰能力与元器件质量、装配质量等因素都有关系,但主要取决于设计的可制造性(DEM),本系统采取如下相应的抗干扰措施。

1.采用抗干扰稳压电源

采用具有抗干扰能力的稳压电源,绝大部分干扰都可以克服。

提高稳压电源抗干扰能力,通常采用的措施:

采用电源滤波;通过低通滤波器接入电网。

2.采用良好的接地系统。

3.强电与弱电之间采用继电器隔离。

总结

由于水平、时间与试验条件有限,系统设计还不完善,程序不够简洁,功能没有完整。

设计中系统关键部分电磁阀由于没有购买,用蜂鸣器代替,定时器模块不够完善,对定时器的定义有一定的误解,尚未找到比较好的解决办法。

今后还应进行更多的学习和研究,例如自动控制部分,我并没有考虑外部扰动信号等更多地干扰因素,今后要完善产品的结构与设计,使其更具有实用性。

设计中遇到的问题和解决方法举例:

1、起初用3个按键来控制整个程序的切换和设定,经过反复试验,无法达到预期的效果;最后经过假设和参考,在原来按键“‘切换功能’‘加’‘减’”的设定上加上了“设定”按键,意在通过该按键可以实现修改上下限值,设定计时时间等功能。

2、在程序实现过程中,发现数码管数据有闪烁的现象,经过老师的提醒加上自己通过构思得到的方法,我采用了一个定时器,将温湿度扫描程序放在定时器中断里面,通过定时器的方式,避免程序的反复循环而导致数码管显示的延迟而造成闪烁的缺陷。

设计中,还有其他许多的问题,由于不是关键部分不予赘述。

在这次实习过程中,始终浸透着老师的心血和汗水,让我从中学到了许多重要的东西,为自己将来的工作和就业,提供了良好的借鉴和帮助,在此,向老师致以最诚挚的敬意和最美好的祝愿!

附:

原理图:

实物图:

 

程序:

#include

#include

//

typedefunsignedcharU8;typedefunsignedintU16;#defineucharunsignedchar

#defineuintunsignedint

sbitbeep=P3^2;

sbits0=P3^3;

sbits1=P3^4;

sbits2=P3^5;

sbits3=P3^6;

sbitHR=P3^7;

sbitclk=P2^7;

U8U8FLAG,q,w,e;

U8U8temp;

U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8datatab[6],tabs[6];

U8U8comdata;

U8outdata[6];//定义发送的字节数

U8count;

U8str[6];

U16U16temp1,U16temp2;

ucharshi,fen,miao,nam,dkey,num,key;

ucharcodewei[]={0x01,0x02,0x04,0x08,0x10,0x20};//八位位选码表

ucharcodeduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示编码(1-F)

voidSendData(U8*a)

{outdata[0]=a[0];

outdata[1]=a[1];

outdata[2]=a[2];

outdata[3]=a[3];

outdata[4]=a[4];

outdata[5]=a[5];

count=1;

SBUF=outdata[0];

}

voiddelay1(U16t)

{U16i,j;

for(i=t;i>0;i--)

for(j=25;j>0;j--)

;

}

voiddelay2(U8z)

{uinti,j;

for(i=z;i>0;i--)

for(j=110;j>0;j--);

}

voidDelay(U16j)

{U8i;

for(;j>0;j--)

{for(i=0;i<27;i++);

}

}

voidDelay_10us(void)

{U8i;

i--;

i--;

i--;

i--;

i--;

i--;

}

voidCOM(void)

{U8i;

for(i=0;i<8;i++)

{U8FLAG=2;

while((!

HR)&&U8FLAG++);

Delay_10us();

Delay_10us();

Delay_10us();

U8temp=0;

if(HR)U8temp=1;

U8FLAG=2;

while((HR)&&U8FLAG++);

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

//如果高电平高过预定0高电平值则数据位为1

U8comdata<<=1;

U8comdata|=U8temp;//0

}//rof

}

voidRH(void)

{//主机拉低18ms

HR=0;

Delay(180);

HR=1;

//总线由上拉电阻拉高主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入判断从机响应信号

HR=1;

//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

if(!

HR)//T!

{U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否结束

while((!

HR)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出80us的高电平,如发出则进入数据接收状态

while((HR)&&U8FLAG++);

//数据接收状态

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;

HR=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U16temp1=U8RH_data_H;

U16temp1<<=8;

U16temp1|=U8RH_data_L;//获得完整的湿度

tab[0]=U16temp1/100;//湿度百位

tab[1]=U16temp1%100/10;//湿度十位

tab[2]=U16temp1%10;//湿度个位

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U16temp2=U8T_data_H;

U16temp2<<=8;

U16temp2|=U8T_data_L;//获得完整的温度

tab[3]=U16temp2/100;//温度百位

tab[4]=U16temp2%100/10;//温度十位

tab[5]=U16temp2%10;//温度个位

U8checkdata=U8checkdata_temp;//校验位

}

}

}

voidtime_display(inta,intb,intc){uchars,g;

s=a/10;

g=a%10;

clk=0;

P2=wei[5];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[4];

P0=duan[g]|0x80;

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

s=b/10;

g=b%10;

clk=0;

P2=wei[3];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[2];

P0=duan[g]|0x80;

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

s=c/10;

g=c%10;

clk=0;

P2=wei[1];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[0];

P0=duan[g];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

}

voidtime1_display()

{uchars,g;

s=shi/10;

g=shi%10;

clk=0;

P2=wei[5];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[4];

P0=duan[g]|0x80;

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

s=fen/10;

g=fen%10;

clk=0;

P2=wei[3];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[2];

P0=duan[g]|0x80;

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

s=miao/10;

g=miao%10;

clk=0;

P2=wei[1];

P0=duan[s];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

delay2

(1);

clk=0;

P2=wei[0];

P0=duan[g];

clk=1;

delay2

(1);

clk=0;

P2=0;

clk=1;

de

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2