Bootstrap

基于单片机的自动喷淋系统设计【毕业设计】

摘要

随着人民生活质量提高与生活节奏的加快,城市居民对于花草绿植的家庭培养与装饰需求增加,随之因浇灌植物的需要,智能浇花系统的市场逐渐扩大。现有自动浇花系统大部分只能通过设置固定浇水时间而难以实现适时、适量浇水,或在植物环境土壤含水量低时进行报警而并不能实际补水。

为克服局限性而设计以单片机为控制中心的自动浇花系统。通过湿度传感器检测目标植物环境土壤湿度数据,再经ADCO832将其放大转换为数字量,由单片机读取输出向LCD1602 显示屏显示并通过比对键盘向单片机所设置的湿度范围而利用中断服务程序进行补水需求判断。如所监测的湿度数字信号低于设置的湿度范围则单片机系统经放大驱动设备向电磁阀发出浇水信号进行对象植物环境水分的补充,所监测的湿度数字信号处于设置的湿度范围之间若则继续进行循环检测,所监测的湿度数字信号高于设置的湿度范围则由单片机系统经放大驱动设备输出信号使电磁阀关闭停止水泵浇水。

该自动喷淋系统对应居民需求与市场现状,具有较好应用前景与市场潜力。

关键词:自动补水;湿度传感器;数据比对

Abstract

With the improvement of people's living quality and the acceleration of the pace of life, urban residents' demands for the family cultivation and decoration of flowers and green plants increase. Therefore, due to the need of watering plants, the market of intelligent watering system gradually expands. Most of the existing automatic watering systems can only set fixed watering time, so it is difficult to achieve timely and appropriate watering, or give an alarm when the water content of the soil in the plant environment is low, but can not actually replenish water.

In order to overcome the limitation, the automatic watering system with single chip microcomputer as the control center is designed. The soil moisture data of the target plant environment is detected by the humidity sensor, which is amplified and converted into a digital quantity by ADCO832, which is read and output by the single chip microcomputer and displayed on the LCD1602 display screen. By comparing the humidity range set by the keyboard to the single chip microcomputer, the interrupt service program is used to judge the water demand. If the monitored humidity digital signal is lower than the set humidity range, the single-chip microcomputer system sends watering signals to the solenoid valve by amplifying the driving equipment to supplement the environmental water of the object plant. If the monitored humidity digital signal is between the set humidity range, the cycle detection will continue. The monitoring humidity digital signal is higher than the set humidity range by the MCU system amplified drive equipment output signal to close the solenoid valve stop water pump watering. Corresponding to the demand of residents and the current situation of the market, it has a good application prospect and market potential.

Key words: automatic water refill; Humidity sensor; Data comparison

目录

摘要

Abstract

1  绪论

1.1 选题背景及意义

1.2 国内外发展现状

1.3 主要研究内容

1.4 特色与创新点

2  系统总体方案设计

2.1 需求及指标分析

2.2 系统组成部分

2.3 系统硬件选型

2.4 系统工作原理

3  系统硬件电路设计

3.1 AT89S52型单片机

3.2 土壤湿度检测电路

3.3键盘及液晶显示电路

3.4水泵调节电路

3.5报警电路

3.6 ADG0832 A/D转换

3.7单片机最小系统

3.7.1 晶振电路设计

3.7.2 复位电路

3.7.3按键消抖方法

3.8 系统整体电路设计

4  系统软件设计

4.1 系统软件总体设计

4.2 各传感器程序设计

5  实物及系统测试

5.1 系统的安装和焊接

5.2 系统调试

总结与展望

总结

展望

致谢

参考文献

附录

附录一 系统原理图

附录二 系统硬件电路PCB设计

1  绪论

1.1 选题背景及意义

人与自然和谐共生是中华民族优秀传统文化的思维精神,是社会主义建设的生态文明关键理念。随着社会主义现代化建设进入新时代与我国居民生活习惯传承,在家中进行花草绿植的培养与装饰愈发普遍化,但现代人们生活多样化甚至碎片化时有对花草浇灌的遗忘疏漏。80%以上的花草植物生长问题都是由不合理的水条件引起的。有些植物因不能满足其对水的需求至而长势趋颓甚至枯萎死亡,有些植物对湿度要求相对低,在过度灌溉条件下根茎易腐烂而影响其正常生长。目前市场上自动灌溉系统的应用范围及性价比对群众的需求并不具备普遍意义,大部分只能按时浇水而很难根据具体情况及时进行适当浇水。花卉缺水报警器只能在花草缺水条件下进行报警而并不能进行实际浇灌。设计此自动喷淋系统针对解决按时、适量向植物花草浇水的问题:将土壤湿度信息通过湿度传感器监测、转化并传达数据至单片机,经湿度设定值比对而判断植物是否缺水,决定是否向水泵发出补水信号进行实现自动喷淋并即时显示土壤湿度条件。

国内现市场与生活中大部分自动供水灌溉系统均为利用虹吸原理即运用渗透的原理来实现补水喷淋,其特点为对植物进行连续补水,但只能维持植物处于不缺水的状态,而不能根据植物对水分的实际需要情况进行供水,具有不稳定性并会造成浪费。另有相当部分的植物自动浇水系统是按照判断是否处于设置的具体时间段内而对植物进行补水喷淋,总的补水时间与补水量是固定的。这两种主流的自动喷淋补水方式的效果基本一致,皆非按照对象植物对水分的具体需求进行喷淋补充,也非按找对象植物所处环境的水分条件变化实时进行喷淋补充。另外现还有小部分自动喷淋系统主要以运用单片机控制原理为核心,同时根据湿度传感器获取对象植物所处土壤条件的湿度具体数据,再根据比对湿度具体设定值来实现自动补水喷淋,但这种方法必须要求外界具备水龙头以提供水分补充所需的实际动力前提下才能正常使用,并不非常适用于大众家庭普遍的分散小型花草种植。本文设计的基于单片机智能喷淋系统能够实现在阳台等位置的灵活广泛应用,可以做到定时、定量地对花草植物进行喷淋补水。

1.2 国内外发展现状

当前正处各传感器技术与单片机技术发展迅速的时代,其主流应用正渐由轻工业领域尤为军工领域向多应用领域辐射渗透,具体应用已与人民大众的日常生活息息相关,影响着生产、思维等各方面。在我国全面建设成为小康社会后全民生活质量正处全面高速提升阶段,智能家居等概念越来越受到人们尤为城市居民的推崇与普及,因而催生着由微电脑控制的电子类智能家庭植物浇花系统具有广泛的应用需求与逐步扩大的目标人群与市场。

伴随改革开放以来与科技革命浪潮推动自动化技术、设备发展,其在生产、生活中的需求与应用越来越普遍,植物的自动浇水系统便是其中符合我国农业大国国情而有关农业生产的自动化技术与设备具体应用。花卉自动洗水系统可根据对象植物的具体需要调节所处的土壤湿度条件范围,针对不同类别植物不同生长阶段对水分条件的需求习性不同而设计。随着相关技术进步与应用市场的扩展,自动喷淋系统的应用空间将不再局限于花卉养殖方面,还可以大规模利用于大规模智能农业园、农场的耕种田地与长距城乡公路绿化、园林绿植中。在大众日常生产生活中所能常见到的滴灌技术应用实亦为智能洗花系统技术在具体领域的扩展深化。近年来海灌等相关技术经我国高速,其相关技术深度与实际应用产业均己居世界前列,现今在生产生活中主要具体应用于大规模特殊作物的耕田、温室大棚、果园与綠化带等。近年滴灌技术在其应用领域的发展由于生产条件的进步与技术普及出现了新的变化趋势,更加适应并结合于我国农业生产的实际情况:由普遍的温室大棚内小单元分类滴灌、平坦耕地大面积滴灌、蔬菜单一植物滴灌、大规模农场大面积集中滴灌、高附加植作物应用转变为室外露天耕地的大单元统一滴灌、特殊耕作地势针对化滴灌、多样化农业经济作物滴灌、特殊农村多样化小面积具体条件分散滴灌、一般经济作物普及化应用。包括高速公路、铁路沿线绿化与恶劣荒漠条件的风沙治理防护林项目等也将滴漼技术的应用普遍化,并且进一步将其相关技术应用于城市绿地、园林、空中花园等非农业领域,更多领域的贴近人们生活。尽管相关具体应用在量上的发展较为不足,但已经为滴灌技术的应用清晰指明了继续推广发展的多样化路线与潜在的广阔市场,在国家推动高质量发展的大势下,社会主义新农村的建设和节约型社会的发展稳步向前,滴灌相关技术在大众生产生活中的应用范围与潜在市场将会逐步被发掘扩展。

世界上许多发达国家在发展高效农业的同时将自动化滴灌技术作为节约水资源的重要举措而推动发展,美国、以色列等国家根据特殊国情与地理环境条件推动发展与应用自动化灌溉技术。在农产品种植培养的灌溉领域尤其是干早、半干早地区对自动化控制系统进行推广应用可以通过适应结合农作物生长特性增加产量、降低生产成本,并且提高地区水资源的利用效率以及缓解可用水资源日趋紧张的现实矛盾。高效农业与精细农业的发展势头符合建设绿色中国的生态环境理念与现实生产发展需要,必须充分重视水资源利用效率的提高并有效落实,将水源的勘察开发、水资源调配运输、灌溉方式与相关技术、水资源重复高效利用和具体地区降雨、蒸发、土壤土质情况和农作物生长特殊性、阶段性需水多样化的具体规律等方面有机统一,根据多元化、多方式、多因素的对水资源进行合理调配与充分利用。

近年流行的微喷系统是有机结合国内外先进技术成果而催生的新型农业灌溉技术,其主要原理为将水源通过管道系统再经喷头灌溉对象喷出,利用其流体特性在空气中自然解体为细小水滴分散在作物及其周围环境,从而最终达到及时对植物均匀补水的效果。微喷系统管道的出水孔多采用空气组,按不同植物生长特殊需求与环境具体限制调整布设距离与规律,常用布设方式有:斜五孔、斜三通、横三孔、左右孔和无空等。出水孔制造一般采用激光打孔、机械钻孔、启动打孔的方法,孔径控制在0.1-0.2mm,空形常为圆形。微喷系统用途广泛,常被应用于培养蔬菜、蘑菇、花卉和苗圃果园、大棚种植等,由于其具有所需用水量相对少、灌溉冲击力小的特点,适合应用于对生长密度大、植被柔软细嫩植物的种植培养。自动化浇花系统随人们生活质量提高与生活节奏加快而应运而生并成为一种应用于园艺工作的便捷产品,将微喷技术应用于家庭植物栽培的日常浇灌并针对家庭浇花的特殊条件与需求合理化改进,最终达到向盆栽花草智能补水的效果。

微灌系统由微灌设备组成并利用土壤与装置间压力差按不同植物生长状况与环境条件调整布设距离与规律将水分配向植物,以微小水流量湿润植物根部环境土壤以达到补水效果。微灌技术通过针对性的分配水源到目标植物的环境土壤中,水源压力保持低水平便可跟农作物生长需要达到补水效果,但其投资成本相较于地面直接灌溉普遍高昂,且微灌管道出水口较小并由于地下铺设的原理而易造成管道出口与过滤系统堵塞。

国际上多年前便已经开始推广与普及自动浇花技术与设备,国内现通用的电子类自动浇水器技术与设备多为进口于国外,在价格上相对昂贵但其产品质量较为可靠。结合国内大众需求与市场现状,进口的自动浇水器与国内相关技术与应用的发展并不相符。当前国内外大众普遍通用的自动浇水器多由玻璃为主体材质制作,生产于我国山西、浙江,其实用性意义相对电子类自动浇水器有限,但胜在价格相对较低。伴随我国进入全面建成现代化强国新征程,居民尤为城市人口的消费水平和生活质量普遍化提高,居家园艺等代表大众生活内容多元化发展的相关市场显著扩宽,同时人们生活节奏的加快也造成了种花容易养花难的现象,居家植物的补水浇花不合理问题随之暴露,给国内相关厂家指明了自动浇花设备市场的需求导向与潜力。当前生产相关小居家用品的厂家主要分布于东南沿海地区,市场销售中在量上占主导地位的自动浇水器主要有玻璃、陶瓷类自动浇水器与电子类自动浇水器两大类。

① 玻璃、陶瓷类自动浇花器实为一种自动渗水装置,利用自身材质的物理结构特性根据物理渗水原理在装置与土壤间完成自动补水过程。自动浇水器内部的存水容器在一定水位高度形成的压力条件下接触到相对干燥土壤将使所储水分自上而下穿过容器材质流向土壤以补水,土壤经湿润后其物理特性改变对容器形成相反的堵塞压力而平衡渗透压,使补水速度逐渐变慢至停止[4]。自动浇水器内部的存水容器的工艺与材质直接影响着水分向土壤渗透的速度效果,相对的补水效果也同目标植物所处的环境土壤物理特性尤为渗透特性与补水前后相关的结构刚性有关,二者共同影响最终对植物的补水效果。

② 电子类自动浇花器(时控临喷装置)主要由主机(控制器)、主管、分水接头、副管喷淋管构成,并根据驱动电源不同主要分为电池自动浇花器和交流电自动浇花器两大类。电子类自动浇花器一般由智能时控电路微电脑芯片与电磁阀结合控制,正常工作于AC220V/50HZ的供电条件下、0.3-0.6Mpa的水压条件下、-10~ 50℃的环境温度条件下、<90%RH的相对湿度条件下。常用电子类自动浇花器的可控连续工作时间范围一般为1 分钟到168 小时,每天自动完成浇水作业次数可达十次以上并可设置每天、隔天、隔多天实现灵活自动循环进行浇水,且支持手动自动控制两用控制工作,可保证工作计时的误差小于每天正负3 秒[5]。

1.3 主要研究内容

此毕业设计为设计一个以单片机为控制中心的自动浇花系统,通过将湿度传感器检测到的目标植物环境土壤湿度模拟量经A/D模数转换器放大转换为数字量输入向单片机,经单片机对湿度数字数据进行读取后由其内程序控制输出向LCD1602 显示屏实时显示植物环境土壤湿度,同时经单片机内通过比对键盘提前设置的湿度范围而利用中断服务程序判断是否需要进行补水,若所监测的湿度数字信号低于设置的湿度范围则单片机系统经放大驱动设备向电磁阀发出浇水信号进行对象植物环境水分的补充,所监测的湿度数字信号处于设置的湿度范围之间若则继续进行循环检测,所监测的湿度数字信号高于设置的湿度范围则由单片机系统经放大驱动设备输出信号使电磁阀关闭停止水泵浇水。

本论文主要章节包括:

第一章,讲述了随着我国在全面建成小康社会基础上迈进全面建设现代化强国新征程,居民生活质量显著提升、大众生活节奏普遍加快,在统一继承与创新人与自然和谐共生的理念基础上居家自动浇花系统的需求扩大与潜在市场。简要分析自动浇花系统在传统领域向生活化普遍化应用发展与相关技术的研究现状,指出本设计的主要内容、特色与创新点。

第二章,主要介绍基于单片机的智能浇花系统总体系统方案与各元器件的选型,以便于设计硬件电路与软件程序。

第三章,主要介绍系统硬件部分设计:包括传感器的选择、A/D模数转换器的选择、显示模块的选择与土壤湿度信号转换电路的设计。

第四章,主要介绍系统软件部分设计:包括原理图的绘制和电路仿真、系统总体程序设计、湿度传感器程序设计,实现对目标植物所处环境土壤水分的实时监测并直观显示,最终控制水分补充实现水分含量的相对平衡。

第五章,主要测试基于单片机的智能浇花系统实物功能,分析系统的可靠性与实用性,调整系统缺陷与寻找改进之处。

1.4 特色与创新点

本论文的基于单片机的智能浇花系统具有以下创新点:

(1)可根据具体植物特性进行补水标准的人为设定

不同植物对水分的需求有所差异,因此需要考虑植物的特定特性,如植物品种对水分需求的特殊性、生长阶段性对水分需求习性等因素,应灵活调整适当的补水标准。例如,大型叶片的植物,如芭蕉、银杏等,需要更多的水分以保持其枝叶的生机和健康,而干旱适应性更强的植物,如仙人掌、多肉植物等,则需要较少的水分。根据植物特性进行补水标准的人为设定可以更好地满足植物的生长具体需求。

(2)可根据具体实际条件变化而适时进行喷淋补水

植物不同的生长环境对其提供的水分条件有着直接影响,如土壤成分类型、空气条件变化等因素都将影响植物所处环境土壤水分的自然变化,应减少变量因素而针对土壤实时水分而进行直接控制,更加准确稳定的为对象植物提供适应的水分条件以满足其生长需求。

2  系统总体方案设计

2.1 需求及指标分析

随着人民生活质量提高与生活节奏的加快,城市居民对于花草绿植的家庭培养与装饰需求增加,随之因浇灌植物的需要,智能浇花系统的市场逐渐扩大。现有自动浇花系统大部分只能通过设置固定浇水时间而难以实现适时、适量浇水,或在植物环境土壤含水量低时进行报警而并不能实际补水。

2.2 系统组成部分

该系统主要由土壤湿度检测电路、键盘、LCD 液晶显示电路、报警电路、水泵控制电路组成。通过土壤湿度传感器测量植物所处环境土壤湿度状况并将其转化为数字信号,进而通过输入向单片机与设置的水分范围标准进行分析比对,输出信号控制水泵是否工作,从而实现按需补水。  

各模块主要功能如下:

(1)土壤湿度检测电路,采用土壤湿度传感器SLHT5-1,检测对象植物所处环境的土壤湿度模拟量并采用ADG0832将其转化为数字量。

(2)按键,用于向单片机输入信号以设计湿度数据比对标准。

(3)警报器,用于补充水分时进行提示。

(4)显示电路,用于方便设置湿度数据比对标准与直观实时显示对象植物所处环境土壤湿度。

(5)水泵控制电路,用于在接收补水信号时控制电机抽水。

(6)电源电路,给单片机与及各电路供电。

2.3 系统硬件选型

STC89C52是一款低压,高性能的8位CNOS8bitCache接口,内置8 R可编程序的可擦式闪存 ROM。STC89C52采用的是经典的MCS-51内核,与传统的51单片机相匹配,它具有高速、低功耗、超强抗干扰等特点,还具有许多传统51单片机不具备的功能。该芯片由 ATMEL高密度非挥发性记忆体加工工艺制作而成,并与业界标准MCS-51指令及输出引线相容。因为将8比特 CPU与系统可编程闪存结合在一片上,所以可以提供高度灵活和便宜的解决方案。

本设计采用土壤温湿度传感器SLHT5-1。SLHT型内部安装有 SHTXX温度和水分感测器,具有超快的响应速度,强的抗干扰能力,高的价格比。二线制的串联介面加上内置的调压,使得周边的系统快速整合。其尺寸小巧,功率消耗小,是各种用途的第一选择。

本方案选择了 LCD12232F,具有功耗低,电源电压范围大等优点。它内建了一个不带储存功能的字节库,使用了并联的方式,并且可以外部的驱动芯片扩充驱动器。拥有2560比特的显示器随机存取存储器(DD随机存取存储器),与68、80等系列的 MPU接口,以及特殊的指令集,可以同时进行文字和图像的显示。

2.4 系统工作原理

由于不同植物不同生长阶段具有特殊的需水特性,对其环境土壤的水分补充应适时适量按需补水。以单片机为控制中心的自动浇花系统,通过将湿度传感器检测到的目标植物环境土壤湿度模拟量经A/D模数转换器放大转换为数字量输入向单片机,经单片机对湿度数字数据进行读取后由其内程序控制输出向LCD1602 显示屏实时显示植物环境土壤湿度,同时经单片机内通过比对键盘提前设置的湿度范围而利用中断服务程序判断是否需要进行补水,若所监测的湿度数字信号低于设置的湿度范围则单片机系统经放大驱动设备向电磁阀发出浇水信号进行对象植物环境水分的补充,所监测的湿度数字信号处于设置的湿度范围之间若则继续进行循环检测,所监测的湿度数字信号高于设置的湿度范围则由单片机系统经放大驱动设备输出信号使电磁阀关闭停止水泵浇水。

3  系统硬件电路设计

3.1 AT89S52型单片机 

AT89S52 与80C51 产品指令、引脚兼容,使用Atmel 公司高密度非易失性存储器技术制造的CMOS8位微控制器,具备低功耗、高性能特点。片上Flash允许程序存储器在系统可编程,并适于常规编程器[9]。

AT89S52包括8 K字节闪存、256字节随机存取存储器、32比特 I/O口线、2个数据指标、3个16比特定时/计数器、6矢量二阶中断、全双工串口、芯片上的晶体振荡和时钟等。而AT89S52可以调低到0赫兹的静态逻辑工作来进行方式的选择:闲置方式, CPU将会停止运行,使随机存取存储器,计数器,串口,中断可以继续运行;当电源断开时,单片机工作到下一次中断或进行硬件重置,保留 RAM内容,冻结振荡器。

3.2 土壤湿度检测电路

本设计采用土壤温湿度传感器SLHT5-1。SLHT系列抗干扰能力强、超快响应、性价比极高,内置SHTXX瑞士原装温湿度传感器,两线制串行接口与内部电压调整使外围系统集成快捷化,且体积微小而功耗极低。

传感器直接与单片机连接,全量程标定、两线数字输出而具有较高统一性,应用于草地、花园、农业温室大棚、苗圃等土壤湿度检测,范围0~100%RH。检测电路见图3-2。    

         

3.3键盘及液晶显示电路 

该设计选取了LCD12232F 液晶显示模块,低功耗、供应电压范围宽,并行连接而使用相对便捷。其具有内置的字节库而不具存储功能,具有16common和61segment输出并可外接驱动IC扩展驱动,具有2560位显示RAM(DD RAM)可与68系列或80系列相适配的MPU接口与专用的指令集,可显示文本、图形。

设置用于显示系统规定的补水湿度上下限度、实时土壤湿度信息,包括复位按钮。

3.4水泵调节电路

图3-7为水泵调节电路图。继电器线圈两端连接三极管发射极E、+ 5V电源VCC。三极管Q1基极B连接单片机P3.6; 继电器线圈两端并联二极管IN4148以消除反向电动势避免击坏三极管。R2与二极管构成指示电路,即继电器通电吸合则LED发光。

    

系统水泵选用220 V电源,最大输出功率为1640 L/H;为了防止因局部土壤水分上升速度太快,导致周围土壤整体水分不均衡,从而导致检测不稳定、不精确。在浇花的时候,选择花淋喷头,以尽可能达到补水的均衡。如果AT89S52的P3.6针是高电平,那么就会给三极管加电,然后接通电源, LED灯就会变成红色,然后接通电源,然后就会给水泵加电。如果 P3.6引脚引入低电平,那么三极管将不导通,在继电器线圈的两端,由于不能产生电位差,使得继电器衔铁断开,二极管随之熄灭,而继电器常开触点断开,则使得水泵不再进行灌溉。 

3.5报警电路

因该系统应用范围灵活,为避免水泵的开启时对环境产生的不必要影响而内置报警电路,在水泵补水工作时开启蜂鸣器发出提示信号。该报警电路图见图3-8。通过单片机P3.0引脚连接三极管控制开启、闭合而通、断蜂鸣器。

3.6 ADG0832 A/D转换

A/D转换的作用是把湿度传感器直接采集到的湿度模拟信号转变为数字信号。ADCO832 是一个8位分辨率 A/D转换芯片,最高可以达到256 级。相对其它的转换芯片来说体积比较小、兼容性较好、性价比高、转换速度快、稳定性能强。A/D转换芯片转换时间短,仅需 32微秒,且可双数据输出以进行数据校验而滅少数据误差。由于内部电源输入与参考电压复用其输入一般处于 0-5V。独立芯片、挂接多器件便于输入、控制。

3.7单片机最小系统  

3.7.1 晶振电路设计  

在 STC89C52 芯片内部,有一个振荡电路和时钟发生器,设计选用内部时钟方式,内部时钟电路利用高增益反相放大器用来构成振荡器。在输入端、输出端即XTAL1 、XTAL2 接入跨界石英晶体、微调电容组成自激振荡器。石英晶体、电容和芯片间距离较短以防产生寄生电容,同时选用电容温度稳定性较好以保证振荡器稳定、可革的工作。 

3.7.2 复位电路

本设计采用按键复位电路,即按住S 按键系统自动复位。RST 端高电压时间大于两个机器周期且由电源 Vcc 经过电阻R1、R2 分压使RST 端产生复位高电平即自动复位。复位电路如图3-11 所示:

3.7.3按键消抖方法

非编码键盘分为独立式键盘、行列式键盘。行列式键盘将按键设置在以I/O 线组成的行线和列线的交叉点上,键数较多时更适用,但硬件电路结构复杂。独立式非编码键盘的按键与数据线一一对应,常开独立式键盘的按键闭合时对应I/O 线变为低电平[10]。机械触点因材质的弹性在闭合、弹开电接触不稳定而造成电压信号5~10ms的抖动。消除抖动有硬件去抖、软件去抖两种方法。硬件去抖常采用双稳态去抖电路;软件消抖在CPU 检测下使按键后延时10~20ms再次检测键电平,如保持闭合状态则确认有键按下,否则从头检测。本次设计采取独立式非编码键盘、软件消抖。

3.8 系统整体电路设计

该系统主要由土壤湿度检测电路、键盘、LCD 液晶显示电路、报警电路、水泵控制电路组成。

以单片机为控制中心输入通过将目标植物环境土壤湿度经湿度传感器检测并经A/D模数转换器放大转换模拟量而来的数字量,进行读取后由其内程序控制输出向LCD1602显示屏实时显示植物环境土壤湿度同时比对键盘提前设置的湿度范围而利用中断服务程序判断是否需要进行补水:若所监测的湿度数字信号低于设置的湿度范围则单片机系统经放大驱动设备向电磁阀发出浇水信号进行对象植物环境水分的补充,所监测的湿度数字信号处于设置的湿度范围之间若则继续进行循环检测,所监测的湿度数字信号高于设置的湿度范围则由单片机系统经放大驱动设备输出信号使电磁阀关闭停止水泵浇水。

4  系统软件设计

4.1 系统软件总体设计

系统软件设计包括初始化、显示子程序、土壤湿度检测子程序、数据处理子程序、报警子程序。主程序流程图如图4-1所示。

本设计以AT89S52 单片机做为控制芯片,根据目标植物所处环境土壤湿度调节补水水泵工作与否。对土壤湿度采取实时检测与设定的湿度值范围对比判定浇水量是否以满足补水需求,实现适时、适量自动化补水[11]。此系统适用范围灵活,尤为在家庭应用中突出,同时该系统可应用于草场、大棚、苗圃等场合,实现智能化的同时又节约了水资源。

4.2 各传感器程序设计

智能浇花系统运行之后通过湿度传感器获取土壤湿度值,初始化后采集数据并进行模数转化输送到单片机,经对比处理后再传送到LCD进行显示和水泵工作。

ADCO832 把传感器梁集到模拟信号转换为数字信号后,使单片机可读取数据并根据软件程序设定的具体湿度范围做出相应判断并输出指令。

5  实物及系统测试

依据智能浇花系统硬件电路设计方案与系统软件设计方案制作智能浇花系统实物模型并进行调控测试。智能浇花系统模型实物如图5-1所示。

5.1 系统的安装和焊接

安装系统之前需要检查所需元器件材料,如电容器耐压是否正确、晶体管型号是否匹配、电容器极性问题。并再次检查原理图并依照其确定各电路的具体布局安装位置,检查各元器件、电路连接的极性,将导线提前做好布设规划。

焊接时优先选择电源与接地点,对应原理图连接各元器件,尤为注意防止正负极焊接错误或管脚焊接错误。

焊接晶体三极管时以防毀坏晶体要注意温度不可过高、时间不宜太长。

防止电烙铁过热、焊枪停留时间过久、焊锡使用过多而破坏电路板。

焊接后需静置元器件以防造成其虚焊或脱焊。

5.2 系统调试

总的采用按照单元电路逐级、联合的调试方法进行安装调试。具体步骤:

1)根据硬件设计将各组成元件对应原理图焊接。

2)根据元件说明书明确各元件动作原理、功能而调试各模块功能实现情况。

3)将根据各功能模块而编写成独立的源程序文件进行调试具体分功能实现情况。

4)将各源程序段组合而进行综合调试系统总功能实现情况。

开机后屏幕亮起,通过键盘选择设定湿度上限与下限,并通过键盘在湿度限度的个位进行每次按键1%的湿度增减设定,确定所需补水的湿度范围为上限45%、下限15%。

按键复位后将湿度传感器置于干燥土壤中,屏幕显示当前湿度为2%,处于设置的补水湿度区间15%-45%,水泵电机开始工作,同时LED亮起,蜂鸣器报警。

总结与展望

总结

本次设计的系统以单片机为控制中心通过湿度传感器检测目标植物环境土壤水分并对比湿度传感器转化传输的湿度数据数字信号与通过键盘预设的系统湿度值,检测到植物所处土壤环境水分低于设定值时,单片机向水泵输出信号使之开启进行水分补充至土壤湿度达到设定值上限,单片机向水泵输出信号使水泵之停止供水,同时液晶显示器将实时稳定显示环境湿度与设置湿度。本论文取得成果做如下总结:

(1)采用STC89C52单片机作为监测与补水系统的控制器,处理湿度传感器传来的数据,实现对植物所处土壤水分条件的监测。

(2)采用 ADG0832把SLHT5-1采集到的模拟信号转变为数字信号以被利用。

(3)采用LCD12232F显示采集到的植物所处土壤水分和设置的补水水分范围。

(4)本文设计自动浇花系统还加上了补水提醒的功能,预防补水过程造成不必要的影响。

展望

经研究设计完成自动喷淋系统硬件设计与软件程序的设计、调试,最终将自动喷淋系统原型制作出来并进行一系列的测试,实现了适时适量对植物环境土壤补水。虽基本实现研究目的,但以下几个方面还可以进一步研究开发。

(1)单个湿度传感器的数据具有局限性,可以设置多个传感器获得更为稳定与可靠的湿度数据。

(2)后续可以根据不同植物生长特性而积累的培养经验直接设置湿度范围。

(3)补水过程相对于植物所处环境不全面,故而在单个湿度传感器条件下易出现补水超量的情况,可以设置多方位均匀补水。

经历本次毕业设计,我加深了单机片智能控制系统与检测控制系统结构与原理的学习与理解,积累了进行项目设计的经验与思路,对自身日后进行学科研究意义深远。

参考文献

[1]毛明轩,朱皋,杨守良.基于单片机的温湿度感应智能晾衣杆系统设计[J]. 重庆文理学院学报,2013,30(4):46-49. 

[2]刘明真,陈鸿.基于单片机智能节水灌溉系统设计[J].学术问题研究,2010(1):75-80. 

[3]程捷,何辰.基于单片机的温湿度检测系统设计与实现[J].电子测试,2011(6):56-58. 

[4]尹发根.果蔬膨化干燥监测系统的设计[J].农机化研究,2011(8): 85-88. 

[5]张泽根,周洪,夏明晔.基于单片机的油量数据采集与监测系统设计[J].微计算机信息,2014,27(1):109-110. 

[6]满红,邹存名,冀勇钢.基于单片机的仓库温湿度智能控制系统设计[J].现代电子技术,2011,34(9):118-120. 

[7]宋维强.基于单片机智能制冷系统设计.华中师范大学出版社,2009.12(8):71-83. 

[8]孙彩凤,杨红军.农村蔬菜灌溉系统设计与实现[J].上海电子出版社,2011.101-110. 

[9]姚望,我国农村智能浇花系统的设计与实现研究.北京现代科学文献出版社,2013.210-223.

[10]孟寒,基于单片机的稻田温湿度智能控制系统设计.广西智能科技出版社,2011.29-57. 

[11]彭正德.单片机的实际应用原理探究[M].中国科技大学社会科学学报,2013.31(5):255-267.

附录

附录一 系统程序

 #include <reg52.h>          //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义 变量范围0~255

#define uint  unsigned int  //无符号整型 宏定义 变量范围0~65535

#include <intrins.h>

sbit SCL=P1^4; //SCL定义为P1口的第3位脚,连接ADC0832SCL脚

sbit DO=P1^5; //DO定义为P1口的第4位脚,连接ADC0832DO脚

sbit CS=P1^3; //CS定义为P1口的第4位脚,连接ADC0832CS脚

sbit beep = P3^3;   //蜂鸣器IO口定义

uint temperature,s_temp ;  //温度的变量

uchar shidu;     //湿度等级

uchar s_high = 45,s_low = 15; //湿度报警参数

sbit dianji = P1^6;     //电机IO定义

bit flag_300ms ;

uchar key_can;  //按键值的变量

uchar menu_1;        //菜单设计的变量

//这三个引脚参考资料

sbit rs=P1^0;  //1602数据/命令选择引脚 H:数据       L:命令

sbit rw=P1^1;  //1602读写引脚          H:数据寄存器   L:指令寄存器

sbit e =P1^2;  //1602使能引脚          下降沿触发

uchar code table_num[]="0123456789abcdefg";

/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

while(q--);

}

/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}

/********************************************************************

* 名称 : write_sfm2(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

   write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_sfm2(uchar hang,uchar add,uint date)

{

if(hang==1)   

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}

/********************************************************************

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

   write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)   

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == '\0')  break;

write_data(*p);

p++;

}

}

/********************************************************************

* 名称 : init_1602()

* 功能 : 初始化1602液晶

* 输入 : 无

* 输出 : 无

***********************************************************************/

void init_1602()

{

write_com(0x38);

write_com(0x38);

write_com(0x0c);

write_com(0x06);

delay_uint(1000);

write_string(1,0,"   shidu: 00%   ");

write_string(2,0," SH:00%   SL:00%");

write_sfm2(2,4,s_high);        //显示湿度上限

write_sfm2(2,13,s_low);    //显示湿度下限

}

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

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

for(j=0;j<120;j++);

}

/***********读数模转换数据********************************************************/

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

//  1  0  0 通道

//  1  1  1 通道

unsigned char ad0832read(bit SGL,bit ODD)

{

unsigned char i=0,value=0,value1=0;

SCL=0;

DO=1;

CS=0; //开始

SCL=1; //第一个上升沿

SCL=0;

DO=SGL;

SCL=1;   //第二个上升沿

SCL=0;

DO=ODD;

SCL=1;     //第三个上升沿

SCL=0;     //第三个下降沿

DO=1;

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

{

SCL=1;

SCL=0; //开始从第四个下降沿接收数据

value<<=1;

if(DO)

value++;

}

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

{ //接收校验数据

value1>>=1;

if(DO)

value1+=0x80;

SCL=1;

SCL=0;

}

CS=1;

SCL=1;

if(value==value1) //与校验数据比较,正确就返回数据,否则返回0

return value;

return 0;

}

//unsigned int Adc0832(unsigned char channel)

//{

// uchar i=0;

// uchar j;

// uint dat=0;

// uchar ndat=0;

// uchar  Vot=0;

//

// if(channel==0)channel=2;

// if(channel==1)channel=3;

// DO=1;

// _nop_();

// _nop_();

// CS=0;//拉低CS端

// _nop_();

// _nop_();

// SCL=1;//拉高CLK端

// _nop_();

// _nop_();

// SCL=0;//拉低CLK端,形成下降沿1

// _nop_();

// _nop_();

// SCL=1;//拉高CLK端

// DO=channel&0x1;

// _nop_();

// _nop_();

// SCL=0;//拉低CLK端,形成下降沿2

// _nop_();

// _nop_();

// SCL=1;//拉高CLK端

// DO=(channel>>1)&0x1;

// _nop_();

// _nop_();

// SCL=0;//拉低CLK端,形成下降沿3

// DO=1;//控制命令结束

// _nop_();

// _nop_();

// dat=0;

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

// {

// dat|=DO;//收数据

// SCL=1;

// _nop_();

// _nop_();

// SCL=0;//形成一次时钟脉冲

// _nop_();

// _nop_();

// dat<<=1;

// if(i==7)dat|=DO;

// }

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

// {

// j=0;

// j=j|DO;//收数据

// SCL=1;

// _nop_();

// _nop_();

// SCL=0;//形成一次时钟脉冲

// _nop_();

// _nop_();

// j=j<<7;

// ndat=ndat|j;

// if(i<7)ndat>>=1;

// }

// CS=1;//拉低CS端

// SCL=0;//拉低CLK端

// DO=1;//拉高数据端,回到初始状态

// dat<<=8;

// dat|=ndat;

//

// return(dat);            //return ad data

//}

/*************定时器0初始化程序***************/

void time_init()   

{

EA   = 1;     //开总中断

TMOD = 0X01;   //定时器0、定时器1工作方式1

ET0  = 1;   //开定时器0中断

TR0  = 1;   //允许定时器0定时

}

/********************独立按键程序*****************/

uchar key_can;  //按键值

void key()  //独立按键程序

{

static uchar key_new;

key_can = 20;                   //按键值还原

P3 |= 0xf0;

if((P3 & 0xf0) != 0xf0) //按键按下

{

delay_1ms(1);       //按键消抖动

if(((P3 & 0xf0) != 0xf0) && (key_new == 1))

{ //确认是按键按下

key_new = 0;

switch(P3 & 0xf0)

{

case 0xd0: key_can = 3; break;    //得到k2键值

case 0xb0: key_can = 2; break;    //得到k3键值

case 0x70: key_can = 1; break;    //得到k4键值

}

}

}

else

key_new = 1;

}

/****************按键处理显示函数***************/

void key_with()

{

if(key_can == 1)  //设置键

{

menu_1 ++;

if(menu_1 >= 3)

{

menu_1 = 0;

init_1602() ;  //初始化显示

}

}

if(menu_1 == 1) //设置湿度上限

{

if(key_can == 2)

{

s_high ++ ; //湿度上限值加1

if(s_high > 99)

s_high = 99;

}

if(key_can == 3)

{

s_high -- ; //湿度上限值减1

if(s_high <= s_low)

s_high = s_low + 1 ;

}

write_sfm2(2,4,s_high);        //显示湿度上限

write_sfm2(2,13,s_low);    //显示湿度下限

write_com(0x80+0x40+4);           //将光标移动到第2行第到3位

write_com(0x0f);                  //显示光标并且闪烁

}

if(menu_1 == 2) //设置湿度下限

{

if(key_can == 2)

{

s_low ++ ;   //湿度下限值加1

if(s_low >= s_high)

s_low = s_high - 1;

}

if(key_can == 3)

{

s_low --;   //湿度下限值减1

if(s_low <= 1)

s_low = 1;

}

write_sfm2(2,4,s_high);        //显示湿度上限

write_sfm2(2,13,s_low);    //显示湿度下限

write_com(0x80+0x40+12);           //将光标移动到第2行第到3位

write_com(0x0f);                  //显示光标并且闪烁

}

}  

/****************报警函数***************/

void clock_h_l()

{

static uchar value,value1;

if(shidu <= s_low)

{

//value ++;

//3if(value >= 2)

{

value = 10;

beep = ~beep;   //蜂鸣器报警

dianji = 0;       //打开电机

}

}

else beep = 1;    //关闭蜂鸣器

if(shidu >= s_high)

{

value1 ++;

if(value1 >= 2)

{

value1 = 10;

beep = 1;      //关闭蜂鸣器

dianji = 1;       //关机电机

}

}

else value1 = 0;

}

/***************主函数*****************/

void main()

{

init_1602();    //1602液晶初始化

time_init(); //初始化定时器

while(1)

{

key(); //独立按键程序

if(key_can < 10)

{

key_with(); //按键按下要执行的程序

}

if(flag_300ms == 1)

{

flag_300ms = 0;   

clock_h_l();  //报警函数

if(beep == 1)

{

shidu = ad0832read(1,0);// //读出湿度

shidu = 99 - shidu * 99 / 255;

}

if(menu_1 == 0)

{

write_sfm2(1,10,shidu);    //显示湿度等级

//write_sfm2(1,6,shidu);    //显示湿度等级

}

}

delay_1ms(1);

}

}

/*************定时器0中断服务程序***************/

void time0_int() interrupt 1

{

static uchar value;

TH0 = 0x3c;

TL0 = 0xb0;     // 50ms

value ++;  

if(value % 6 == 0)

{

flag_300ms = 1;    //300ms

value = 0;

}

}

附录 系统硬件电路PCB设计

;