基于51系列单片机的自动喷水系统.docx
- 文档编号:24176336
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:22
- 大小:200.96KB
基于51系列单片机的自动喷水系统.docx
《基于51系列单片机的自动喷水系统.docx》由会员分享,可在线阅读,更多相关《基于51系列单片机的自动喷水系统.docx(22页珍藏版)》请在冰豆网上搜索。
基于51系列单片机的自动喷水系统
基于51系列单片机的自动喷水系统
项目摘要
摘要
本系统由主要由四大部分组成:
数据输入部分,数据显示部分,数据输出部分,数据处理部分。
数据输入部分的功能是把要采集的数据转化成数字信号传入数据处理部分。
数据显示部分的功能是把采集的数据显示出来。
数据输出部分的功能是控制电磁阀来进行外部温湿度的调节。
数据处理部分的功能是把采集进来的数据进行分析,输出要输出的信号控制数据的输出。
本系统的功能是采集温湿度并显示,从而控制电磁阀的输出,进而控制外面的温湿度使得外面的温湿度适合植物的生长。
关键词:
单片机,自动灌溉,温湿度,LED
EnglishAbstract
ABSTRACT
Thissystemmainlyconsistsoffourparts:
datainput,datadisplay,dataoutput,dataprocessing.Thedatainputportionofthefunctionistocollectdataintodigitalsignalintothedataprocessingsection.Datadisplayfunctionistocollectdatadisplay.Dataoutputportionofthefunctionistocontroltheelectromagneticvalvetoexternaltemperatureandhumidityregulator.Thedataprocessingpartofthefunctionistocollectinthedataanalysis,theoutputtooutputsignalstocontroltheoutputofthedata.
Thefunctionofthissystemisthecollectionoftemperatureandhumidityanddisplay,soastocontroltheelectromagneticvalvetocontroltheoutput,theoutsidetemperatureandhumiditymakestheoutsidetemperatureandhumiditysuitableforthegrowthofplants.
KEYWORDS:
Microcontroller,Automaticirrigation,Temperatureandhumidity
项目实现构思
自动喷水系统的设计和功能介绍
自动化控制喷水系统(灌溉)是利用温湿传感器来监测土壤信息、作物生长信息,并将监测数据传到控制系统,在CPU的分析下,对终端设备发出相应的指令,以实现无人自动维护作物生长环境以及土壤性质的功能。
我们的自动喷水系统的工作原理和功能实现如下:
通过土壤、气象、作物等类传感器及监测设备将土壤、作物、气象状况等监测数据通过数据总线传到单片机,经过单片机系统内已编好的程序来汇集数值并进行分析处理来确定是否应该灌溉或停止灌水,然后将开启或关闭阀门的信号通过单片机传输到灌水模块,由阀门控制系统实施阀门的开关,从而实现农作物灌水的自动化控制。
在系统的设计过程中,我们分为以下几个子系统:
控制子系统,其中主要包括了电磁阀等相关电路,用来控制水的灌溉;
数据采集子系统,其中包括AM2301等相关电路;
分析子系统,其中包括AT89S52单片机等相关电路;
显示子系统,其中包括LED数码管显示等相关电路;
报警子系统,其中包括蜂鸣器等相关电路;
操作子系统,其中包括按钮等相关电路。
特色创新部分
1.本次系统设计中我们加入了报警电路模块,当温度达到我们的设定值时,蜂鸣器便会开始报警,而当温度降到设定值以下时,蜂鸣器将会停止报警。
2.在考虑温湿度传感器的选择时,我们决定使用同时集成了温湿度采集及数字输出的AM2301,相比温度传感器DS18B20和湿度传感器AM1001,它更加方便使用,而且采集输出精度更高。
3.在设定温湿度的值时,我们采用4个按键来控制,其中S1和S2键用作减和加,用来定时和设定温湿度的初始值,S2键进行倒计时和时间设定的切换,S4键用来切换定时喷水、根据温度喷水、根据湿度喷水这三种指定模式。
能够自由设定温湿度和定时时间,显得更为人性化,更加具有实用功能。
4.保护电路,使用继电器,通过弱电控制强电,减少了电磁阀对控制系统的干扰。
一定程度上保护了主要电路,延长了使用寿命。
项目实现方案:
方案的比较
1.单片机的选择
单片机具有体积小,价格低廉,功能强大,稳定可靠,运算速度快,功耗低,扩展容易,抗干扰能力强,系列齐全,使用方便灵活等优点,广泛应用于工业过程控制、自动监测、智能仪器仪表、家用电器等领域。
常用开发单片机有AT89S51和AT89S52,二者各有优缺点。
方案一:
使用AT89S51控制系统。
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
方案二:
使用AT89S52控制系统。
相比51,功能基本相同,它的价格虽然略高一点,但是性能更好一点。
总结:
综合考虑,采用方案二,本次设计选用市场上比较普遍的单片机AT89S52来实现系统设计,其内部带有8KB的程序存储器,256字节的数据存储器,足以满足系统要求。
并且他们的引脚相同,而52单片机能发挥出更大的能效,且由于我们正在学习单片机,手上正好有52单片机,我们对它也比较熟悉,所以就决定采用52单片机来实现。
2.传感器的选择
对于传感器的选择,我们有两种方案,一种是温度采集使用DS18B20,而湿度采用AM1001,另一种则是采用已将温湿度采集集成在同一片传感器上,且以校准数字信号输出的复合传感器AM2301。
综合二者,我们选用AM2301(又名DHT21)温湿度传感器,选用它有以下几个理由:
(1)考虑DS18B20采集比较麻烦,因此我们决定直接使用AM2301这块集成温湿度并且数字输出的传感器。
(2)超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为温湿度测量的最佳选择。
(3)因为AM2301,有已经编译好的驱动程序,只需编写将感应到的数据传送到单片机,再发送到串口显示,省去了编程的麻烦,且只需要一个单片机I/O口来传送数据,节省了硬件资源。
3.显示器的选择
显示器可采用LED数码管和LCD显示屏,将二者进行比较,LED结构简单,它实际上是由七个发光二极管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的2个8数码管字样了。
它的原理简单,容易理解和操作,对于一些简单的显示系统是非常理想的器件。
LCD虽然功能强大,但是操作复杂,并且LED在本系统中就足以发挥作用,加上成本低廉,所以在本次设计中选用LED显示数据。
系统架构图
在控制系统方面,通过我们学过的自动控制原理的知识,我们确定本系统采用有单片机的传统的闭环控制系统,系统控制原理图如下图所示:
闭环控制逻辑原理框图
其中,植被温湿度是由AM2301传感器组成的数据采集子系统,数据显示是由6片LED数码管构成的显示子系统,AT89S52处理数据是由52单片机构成的主控制子系统,其中还包括了定时以及对电磁阀的控制,电磁阀开关则是实现喷水动作功能的子系统。
设计与论证
该自动喷水系统共分为七个模块:
主控制模块、电磁阀控制模块、报警模块、显示模块、定时模块、温度采集模块、抗干扰模块
1.主输入输出控制电路。
自动控制系统通过AM2301传感器对受控对象的有关参数信息数据的实时采集及数字变化,进入单片机CPU进行必要的处理,而后输出以驱动执行器件或机构产生相应的动作,直接推动被控对象来调整被测参量,最终目的以使受控参量始终处于要求值或范围内。
在单片机完成控制处理后总是以数字信号通过I/O口线或数据总线输出至受控对象的。
对受控设备的驱动常采用模拟量或数字量输出驱动两种方式。
而在实际的单片机测控系统中,数字量输出控制已越来越广泛地被应用,尤其是其中的开关量输出驱动和控制。
目前单片机I/0口线的驱动能力和与CPU直接接口的一般TTL电路或CMOS电路的驱动能力很有限的,不足以驱动那些功率开关(如继电器、电机、电磁开关等)和强电设备、大功率负载,且由于工作现场环境恶劣、输出通道接近控制对象及周围的电磁等干扰严重,所以输出控制电路设计主要是解决输出隔离即干扰防治和功率驱动问题。
2.电磁阀控制电路
电磁阀控制电路主要由NPN共集-共射复合管及继电器组成,当单片机P0.7给出高电平,复合管导通,继电器接通,将开关吸合,电磁阀接通开始放水。
因为单片机的带负载能力比较小,不足以驱动继电器和电磁阀,所以采用功率放大驱动电路,使得电磁阀能够工作。
输出通道控制图
如图所示:
电磁阀控制电路
3.报警电路设计
报警电路设计作为一个独立的模块,采用市面上比较普遍的蜂鸣器电路,结构比较简单,使用AT89S52上的一根口线驱动蜂鸣器发声。
蜂鸣器电路
4.显示模块电路
显示模块可采用两种方式,一种是采用动态显示方式驱动6个数码管工作,左边四位显示温湿度值,精确到小数点后一位,右边两位为温湿度的单位显示。
其中通过S4键切换温湿度,数码管通过位段扫描实现显示功能。
5.定时模块
定时模块其中分为定时部分和调时部分,同样通过S1和S2键来控制时间的减和加,S3键来确定定时和切换设置时间。
温湿度程序代码与定时类似,下面仅列出定时程序代码。
定时程序代码:
voidtime_display(inta,intb,intc)//调试部分、P2为位选,P0为段选,显示格式为时-分-秒
{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);
}
6.温湿度采集电路设计
AM2301是一块集成了温湿度采集及数字输出的传感器,因此,我们只需要将AM2301的VCC端接5V电压,,将SDA端接52单片机I/O进行数据的输入输出,同时将GND端接地,便可实现温湿度的采集。
温湿度采集电路设计
7.硬件的抗干扰设计
在自动浇灌控制系统中,系统可靠性的保证是非常重要的,单片机硬件系统的可靠性决定了整个系统的可靠性。
硬件抗干扰技术主要体现在过程通道抗干扰设计、供电系统抗干扰设计和印刷电路板抗干扰设计三个方面。
单片机硬件系统的抗干扰能力与元器件质量、装配质量等因素都有关系,但主要取决于设计的可制造性(DEM),本系统采取如下相应的抗干扰措施。
1.采用抗干扰稳压电源
采用具有抗干扰能力的稳压电源,绝大部分干扰都可以克服。
提高稳压电源抗干扰能力,通常采用的措施:
采用电源滤波;通过低通滤波器接入电网。
2.采用良好的接地系统。
3.强电与弱电之间采用继电器隔离。
四.关键模块的分析
1.地表温湿度传感器
首先是对AM2301的介绍。
AM2301湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电容式感湿元件和一个高精度测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在单片机中,传感器内部在检测信号的处理过程中要调用这些校准系数。
标准单总线接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最
为苛刻的应用场合的最佳选择。
产品为3引线(单总线接口)连接方便。
特殊封装形式可根据用户需求而提供。
AM2301引脚图及其分配
引脚
颜色
名称
描述
1
红色
VDD
电源(3.5-5.5v)
2
黄色
SDA
串行数据,双向
3
黑色
GND
地
4
NC
空脚
AM2301引脚分配
AM2301的数据总线SDA输出40位数据后,继续输出低电平50微秒后转为输入状态,由于上拉电阻随之变为高电平。
同时AM2301内部重测环境温湿度数据,并记录数据,测试记录结束,单片机自动进入休眠状态。
单片机只有收到主机的起始信号后,才重新唤醒传感器,进入工作状态。
AM2301传感器读单总线的流程图如图所示
AM2301传感器读单总线的流程图
温湿度检测程序代码:
#include
#include
//
typedefunsignedcharU8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/
typedefunsignedintU16;/*definedforunsigned16-bitsintegervariable无符号16位整型变量*/
#defineucharunsignedchar
#defineuintunsignedint
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
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;
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
}
//--------------------------------
//-----湿度读取子程序------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位==U8T_data_H------
//----温度低8位==U8T_data_L------
//----湿度高8位==U8RH_data_H-----
//----湿度低8位==U8RH_data_L-----
//----校验8位==U8checkdata-----
//----调用相关子程序如下----------
//----Delay();,Delay_10us();,COM();
//--------------------------------
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;//校验位
}
}
}
2.主控制器模块
系统中我们选择主控制器芯片的时候需要考虑整个系统的功耗要低,并且有非易失性的程序和数据存储器方便数据的掉电存储,要集成内部基准电压源并采用at89s51单片机。
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 系列 单片机 自动 喷水 系统