毕业设计(论文)-基于AT89C52单片机的自动浇花系统 下载本文

自动浇花系统

置的浇花时长停止浇花动作。

因考虑花卉的浇水时间各不相同,所以,需要进一步检测系统能否在设定的时间内执行浇花功能,在其他时间,是否会有错误动作。

5.4系统测量与误差分析

表 5-1 信号调理放大电路测试 单位:V

信号值 计算值 实测值 0 0 0 0.1 0.5 0.2 1 0.3 1.5 0.4 2 0.5 2.5 0.6 3 0.7 3.5 0.8 4 0.9 4.5 1 3.5 4 0.49 0.98 1.49 1.98 2.49 .2.98 3.47 3.96 3.97 通过测试我们得出数据的有效放大范围为0 ~ 0.8V ,即对应系统的测湿度范围。测量湿度范围:0~80% {vol% (m3/m3)}。虽然系统有待完善,但已经不影响系统功能的实现。通过误差计算,我们可以得出误差精度。 信号值 绝对误差

测湿误差主要来源于以下几个方面:

一、土壤湿度传感器与土壤的插入深度与探针将直接影响测量的精确值。 二、信号调理电路的设计,以及放大误差的计算不完善。

三、由于工具简陋,实际测量湿度也有误差。影响测量误差的因素很多,还包括现场环境干扰等。

四、系统循环检测时间上的偏差。 五、湿度检测的滞后。 七、显示位数的精度的误差。

八、在电路板与元件焊接做工不精细,有些元件焊接不好,所以造成某些地方接触不好,产生误差。

0 0 0.1 0.01 表 5-2 系统误差计算 0.2 0.3 0.4 0.5 0.02 0.01 0.02 0.01 0.6 0.02 0.7 0.03 0.8 0.04 22

自动浇花系统

6 总结

本设计自动浇花系统以单片机为核心,自动化程度高,测量速度快,精度高,实现了对土壤湿度的测量。充分考虑了各种花草的浇水时间有所差异,一般在早晚时间浇水,中午温度较高,不适合浇花。所以内置了时钟芯片,用于控制浇花时间,并有时钟日历显示。本系统硬件电路相对简单,熟悉单片机中基本理论,芯片控制,显示技术,传感器的原理及应用,A/D转换中的数字化,及弱电控制强电等知识都有所运用。此外程序的编写是电子产品设计的重中之重,是决定功能能否实现,自动化,智能化程度的高低,以及是否符合人性化的关键。此次设计,发挥了独立思考,独立解决问题,虚心学习。不断的调试,修改,完善是必要过程。过程虽然辛苦,但幸不辱命完成了自动浇花系统的要求,实现了设计目的。

通过对本课题的研究学习,也有了以下体会。 一、熟悉了单片机工作基本规律和必要的基本概念。

二、了解土壤湿度检测与其他学科的关系与应用,扩大了知识面。 三、培养了思维能力,分析问题和解决问题的能力。

四、掌握与人共同交流探讨的方法技巧,不断完善,发展自我。

23

自动浇花系统

附录

附录A 原理图

24

自动浇花系统

附录B PCB图

25

自动浇花系统

附录C 程 序

#include #include

unsigned char code tab1[]=\ %unsigned char code tab2[]=\ %unsigned char code tab0[]=\ %unsigned char code tab02[]=\ %unsigned char code tab01[]=%unsigned char cnt,ADtemp;

unsigned char code dis1[]={\ - - %unsigned char code dis2[]={\ : : %unsigned char code tab3[]={\TER TIME %unsigned char code tab4[]={\ TIME %unsigned char code digit[10]={\ unsigned char mode=0,k02;

unsigned char shidu=0,hour0,minute0,second1,minute1,hour3,minute3,second3; /*定义接口*/ sbit ADC_CS=P3^4; sbit ADC_CLK=P3^5; sbit ADC_DI=P3^6; sbit ADC_DO=P3^7; sbit shui=P2^7; sbit k1=P0^0; sbit k2=P0^1; sbit k3=P0^2;

sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; sbit BF=P0^7; sbit DATA=P2^5; sbit RST=P2^3; sbit SCLK=P2^4;

/*****函数功能:延时若干微秒******/ void delaynus(unsigned char n) { unsigned char i; for(i=0;i

/*函数功能:向1302写一个字节数据**/ void Write1302(unsigned char dat) { unsigned char i;

26