基于单片机智能浇灌系统课设报告.doc

上传人:牧羊曲112 文档编号:4957936 上传时间:2023-05-26 格式:DOC 页数:36 大小:915.95KB
返回 下载 相关 举报
基于单片机智能浇灌系统课设报告.doc_第1页
第1页 / 共36页
基于单片机智能浇灌系统课设报告.doc_第2页
第2页 / 共36页
基于单片机智能浇灌系统课设报告.doc_第3页
第3页 / 共36页
基于单片机智能浇灌系统课设报告.doc_第4页
第4页 / 共36页
基于单片机智能浇灌系统课设报告.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《基于单片机智能浇灌系统课设报告.doc》由会员分享,可在线阅读,更多相关《基于单片机智能浇灌系统课设报告.doc(36页珍藏版)》请在三一办公上搜索。

1、武汉华夏理工学院课程设计报告书 课 程 名 称 单片机原理及应用课程设计 课程设计总评成绩 学生姓名、学 号 周子林 102124142217 学 生 专 业 班级 自动化1142 指 导 教 师 姓名 李文彦 课程设计起止日期 2016.12.192016.12.30 单片机课程设计任务书题 目: 基于单片机的全自动浇花系统电路设计 初始条件:1. 采用湿度传感器采集数据;2. 采用温度传感器采集数据;3.采用单片机组成数据采集系统; 4.采用ULN2803芯片驱动直流电机。 要求完成的主要任务: 1. 对环境的温湿度状态进行数据采集;2. 设湿度传感器输出为0-5V的电路;3. 设计8位或

2、10位A/D转换接口电路;4. 设计单片机的信号显示电路;5. 设计单片机的控制电路;6. 设计掉电保存数据电路;7. 设计驱动直流电机电路;8. 严格按照课程设计说明书要求撰写课程设计说明书;时间安排: 序号阶 段 内 容所需时间(周)1方案选择及电路设计假期进行2制作、编程、调试13撰写课程设计报告及答辩1合 计2指导教师签名: 年 月 日 基于单片机的全自动浇花系统设计作者:周子林武汉华夏理工学院信息工程学院自动化1142摘要: 现代生活中,随着人们生活水平的提高,人们对花卉、树木等绿色植物的喜爱和种植越来越多,然而以前对花木的浇灌、施肥等工作都需要人工来实现,由于现代生活节奏加快,人们

3、往往忙于工作而忘记及时为花卉补充水分和养料,导致花木枯死。水是植物生存、生长的最基本需要,因此,设计一种能够在无人管理的情况下为花木自动浇水的系统,能够有效解决花木因缺水而枯死的难题。 本系统是采用AT89C52单片机为核心的全自动浇花系统。系统主要实现的功能是对花木的土壤中的湿度进行实时检测,当土壤湿度低于用户设定值时及时给花木浇水,当土壤湿度高于系统设定值时停止给花木浇水。关键词:C51单片机 A/D转换 IIC通信协议 LCD1602显示1 系统设计 本次设计包括AT89C52单片机及基本外围电路模块、温湿度检测电路模块、A/D转换电路模块、显示电路模块、EEPROM掉电数据保存电路模块

4、、按键控制电路模块、电机驱动电路模块、电源电路模块等部分组成,具体设计方案如图1-1所示。图1-1.系统框图2 硬件电路设计2.1 单片机本系统采用AT89C52单片机。 图2-1 单片机引脚图AT89C52是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机,如图2-1所示。AT89C2052是一种带4K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准

5、的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,就单片机而言,在课程中已经介绍,在此就不在多加解释。2.2 湿度传感器本系统采用FC-28电阻式湿度传感器输出模拟量更精确的计算出湿度值,如图2-2所示。 图2-2 湿度检测电路湿度值计算公式如式(1): (1) 当湿度传感器完全部浸入水中时,Rs=5.87k (稳定值),计算出Vo1=1.85V;当湿度传感器不接触水时,Rs=,计算出V01=5.0V。由于V01的变化范围为1.85V 5.0V,为了方便计算出湿度值,在程序的算法中作以下处理:Vo2=5.0V

6、-Vo1,即Vo2的变化范围为0V3.15V。显示湿度值计算公式:HR=(Vo2/3.15)*100%。2.3 温度传感器(1)温度传感器DS18B20特性 全数字温度转换及输出。 先进的单总线数据通信。 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。 可编程分辨率为912位,对应的可分辨温度分别为0.5,0.25,0.125和 0.0625,可实现高精度测温。 检测温度范围为-55+125。 内置EEPROM,限温报警功能。 64位光刻ROM,内置产品序列号,方便多机挂接。 负压特性。电源接反时,芯片不会因为发热而烧毁,但不能正常工作 。(2)DS18B20引

7、脚介绍如图2-3所示。 GND:电源负极。 DQ :信号输入输出。 VDD:电源正极。图2-3 DS18B20直插式(3) DS18B20RAM及EEPROM结构图如图2-4所示。 图2-4高速暂存器RAM由9个字节的存储器组成。第0、1个字节是温度转换后的数据值信息;第2、3个字节是用户EEPROM(常用于温度报警值储存)的镜像;第4个字节则是用户第3个EEPROM的镜像;第5、6、7个字节为计数寄存器,是为了让用户得到更高的分辨率而设计的,同样也是内温度转换、计算的暂存单元;第8个字节为前8个字节的CRC码。 (4)DS18B2电路原理图如图2-5所示。图2-5 DS18B20典型电路(5

8、) DS18B20工作时序图如图2-6所示。 图2-6 DS18B20工作时序 2.4 A/D转换电路设计 模数转换电路的作用是将图2-2所示电路中湿度传感器输出的直流量转换成数字量,送至单片机进行分析与处理。本设计模数转换器选用ADC0820,它是8位并行单极性A/D转换器。(1)ADC0820引脚说明 图2-7 ADC0820引脚图如图2-7所示。其中:模拟信号输入端,输入电压范围是。:数据端,三态数据输出。:片选端,低电平有效。:输入信号参考电压,当模拟信号的电压范围在时,接,接地。:溢出指示端,正常情况下,是逻辑高电平,当模拟输入比还高,在转换结束时将变低,还可用级联两个或多个器件以提

9、高分辨率(9位或10位)。:工作电压,:中断输出,其使用方法详见后述ADC0820工作方式。:方式选择端,ADC0820有两种工作方式,分别是读方式和写-读方式,当为低电平时为读方式,当为高电平时为写-读方式。:写/准备端,在写-读方式下,为低电平时,下降沿启动A/D转换;在读工作方式,在的下降沿且转换结果送入输出锁存电路时,进入高阻状态。:读,在写-读方式下,三态数据输出端在变为低电平时允许输出;在读方式下,在下降沿开始A/D转换,当进入高阻态且由高电平变为低电平时,表示一次A/D转换结束。(2)ADC0820工作方式 ADC0820有两种工作方式:读方式和写-读方式。 读方式 当为低电平时

10、,ADC0820工作于读方式。在读方式下,作为输出端且为准备端(即作为功能)。在此状态,当由高电平变为低电平,表示器件准备就绪, 在下降沿,开始转换,在由高电平变为低电平且恢复为高阻抗状态后内,完成转换。转换完成后,数据输出()从高阻状态转变为有效状态。数据读出之后,、为高电平,数据输出端恢复至高阻抗状态。读方式时序如图2-8所示。图2-8读方式工作时序(MODE为低电平) 写-读方式 当置为高电平时,转换器为写-读工作方式。在此模式下,将接低电平,若将接单片机I/O口,转换开始于的上升沿,并在其后600ns完成转换。在该工作方式下,单片机有三种读取数据的方式:a. 程序延时,在上升沿启动转换

11、,延时后,将由高电平置为低电平,通过读取数据,数据读出后,置为高电平,恢复高电平状态,数据输出恢复至高阻抗状态;b.程序查询,在此模式下,当单片机检测到下降沿到来时,将由高电平置为低电平,开始读取数据,数据读出之后,恢复为高电平状态,将置为高电平。当 恢复高电平状态后,数据输出端恢复至高阻状态;c. 直通方式,此工作方式操作简单,将、一直置于处低电平,转换开始于的上升沿,转换大约在内完成,在下降沿到来时表示转换完成,数据可读出。直通方式工作时序如图2-9所示。图2-9 直通方式工作时序(独立工作,MODE为高电平且为低电平)(3)本系统设计中ADC0820所选工作方式说明 本设计ADC0820

12、选用写-读方式下的直通工作方式,以提高工作效率。模数转换电路如图2-10所示。该方式下,将ADC0820的与直接接地、接高电平、不与外电路连接、端接单片机PB7端口以控制转换;先将置为低电平,延时一段时间后,将其置为高电平,A/D转换开始于其上升沿,由其内部计数器开始延时计时(延时时间约),如果后还没读取数据,则 变为高电平,数据被锁存。本设计中没有使用端,因为当置为低电平后,在转换开始后约数据就能读出。本设计中,数据输出端接单片机P1.7-P1.0口。 图2-10 A/D转换电路2.5 显示电路模块设计显示电路的作用是显示土壤湿度值、用户设定值及环境温度值,由于显示内容复杂,本系统采用LCD

13、1602液晶显示屏作为显示器。(1)接口信号说明 1602型液晶接口信号说明如表2.1所示。 表2.1 1602液晶接口信号说明编号符号引脚说明编号符号引脚说明1电源地9D2数据口2电源正极10D3数据口3VO液晶显示对比度调节11D4数据口4RS数据/命令选择端(H/L)12D5数据口5读写选择端(H/L)13D6数据口6E使能信号14D7数据口7D0数据口15BLA背光电源正极8D1数据口16BLK背光电源负极(2)基本操作时序 读状态 输入:RS=L,=H,E=H 输出:D0-D7=状态字。 读数据 输入:RS=H,=H,E=H 输出:无。 写指令 输入:RS=L,=L,D0-D7=指令

14、码,E=高脉冲 输出D0-D7=数据。 写数据 输入:RS=H,=L,D0-D7=数据,E=高脉冲 输出D0-D=无。(3)RAM地址映射图 控制器内部带有80B的RAM缓冲区,对应关系如图2.2所示。 表2.2 1602内部RAM地址映射表000102030405060708090A0B0C0D0E0F10.27404142434445464748494A4B4C4D4E4F50.67 当我们向表2.2中的00-0F、40-4F地址中的任一处写入显示数据时,液晶都可以立即显示出来,当写入到10-27或50-67地址时,必须通过移屏指令将它们移入可显示区域方可正常显示。(4)写操作时序(见图2

15、-11) 分析时序图可知操作1602液晶的流程如下: 通过RS确定是写数据还是写命令。写命令包括使液晶的光标显示/不显示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等。写数据是指要显示什么内容。 读/写控制端设置为写模式,即低电平。 将数据或命令送达数据线上。 给E一个高脉冲将数据送入液晶控制器,完成写操作。图2-11 1602液晶写操作时序图 (5)1602液晶与单片机接口如图2-12所示。图2-12 1602液晶与单片机接口2.6 EEPROM掉电数据保存电路设计EEPROM掉电数据保存电路主要功能:在系统掉电之后保存用户设定的土壤湿度下限值。电路设计采用具有IIC总线接口

16、的EEPROM AT24C02,ATMEL公司生产的AT24C02可解决掉电数据保存问题,可对所存数据保存100年,并可多次擦写,擦写次数可达10万次以上。(1) AT24C02引脚配置与引脚功能 AT24C02芯片的常用封装形式有直插(DIP8)式和贴片(S0-8)式两种,无论是直插式还是贴片式,其引脚功能与序号都一样,引脚图如图2-13所示。图2-13 AT24C02引脚图 各引脚功能如下: 1,2,3(A0、A1、A2)可编程地址输入端。 4(GND)电源地。 5(SDA)串行数据输入/输出端。 6(SCL)串行时钟输入。 7(WP)写保护输入端,用于硬件数据保护。当其为低电平时,可以对

17、整个存储器进行正常的读/写操作;当其为高电平时,存储器具有写保护功能,但读操作不受影响。8(Vcc)电源正端。(2) 存储器结构与寻址 ATC2402的存储容量为2KB,内部分成32页,每页8B,共256B,操作时有两种寻址方式:芯片寻址和片内子地址寻址。 芯片寻址。AT24C02的芯片地址为1010,其地址控制字格式为1010A2A0。其中A2,A1,A0为可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。为芯片读写控制位,该位为0,表示对芯片进行读操作。 片内子地址寻址。芯片寻址可对内部256B中的任一个进行读/写操作,其寻

18、址范围为00-FF,共256个寻址单元。 由于第二种寻址方式寻址灵活,操作简单,即采用片内子地址寻址。(3) 读/写操作时序 图2-14 AT24C02工作时序图 (4)AT24C02电路连接如图2-15所示。 图2-15 AT24C02连接图2.7 按键控制电路设计按键的功能:用户针对不同植物的生长对土壤湿度需求的差异,设定土壤湿度下限值LHR。按键电路设计采用独立键盘,电路图如图2-16所示。图2-16 键盘电路S1键:控制土壤湿度下限值LHR增加S2键:控制土壤湿度下限值LHR增加2.8 电机驱动电路设计当传感器检测到土壤湿度值低于土壤湿度下限值LHR时,单片机发出命令,要求水泵启动,由

19、于单片机只能输出0V或5V的电压,不足以驱动6V-12V直流电机,因此需要借助驱动电路驱动电机。(1) 电磁继电器 利用单片机输出的高低电平触发电磁继电器工作,从而控制电机工作,但是,电磁继电器在工作瞬间常开触点闭合、常闭触点断开,会有嘀嗒的声音,制造噪音,所以不选用电磁继电器。 (2)电机驱动芯片 采用达林顿驱动器(ULN2803)如图2-17所示,它实际上是一个集成芯片,单块芯片同时可驱动8个电机,每个电机由单片机的一个I/O口控制,当需要调节直流电机转速时,使单片机相应I/O口输出不同占空比的PWM波形即可。驱动芯片工作时静音,且电路简单,功能强大,即选用ULN2803驱动器驱动电机。图

20、2-17 ULN2803电路连接图2.9 电源电路设计 (1)用5V直流电压给单片机及基本外围电路模块供电。 (2)用9V干电池给直流电机供电。 切记:直流电机供电电源和单片机的供电电源要共地。3 系统软件设计3.1 软件设计思路本系统软件设计是基于KEIL软件平台,以AT89C52单片机软件编程为主,系统软件部分主要由系统初始化模块、温湿度数据采集模块、A/D转换模块、键盘控制模块、数据存储模块以及1602液晶显示模块等部分组成。当系统上电后单片机及基本外围模块进行初始化设置,主程序运行,用户设置LHR值,湿度传感器开始检测土壤湿度,A/D模块将土壤湿度模拟量转换为数字量送到单片机处理分析,

21、如果土壤湿度值HR低于土壤湿度下限值LHR,单片机P3.7端口输出高电平触发驱动器工作,水泵开始浇水,如果土壤湿度值HR高于系统设定土壤湿度上限值HHR,单片机P3.7端口输出低电平,驱动器停止工作,水泵停止浇水。3.2 系统主程序流程图如图3-1所示。 图3-1 系统主程序流程图3.3 程序设计主程序:#include#includehead.h#define V 5.0sbit M=P37;float vi=0.0;uint c1;uchar num1;uchar s;void main()/主函数 EEPROM_int();num1=read_add(2);lcd1602_init();

22、/LCD1602初始化LCD_clear();/LCD1602清屏delay_ms(5);/硬件反应时间display3();P1=0xff;while(1)AD_Convert(); vi=vi*V/256;c1=(500-vi*100)/315)*100; if(99c1)c1=99;if(0=c1&c1=99)display1(11,c1);read_temperature();/读取温度数据if(s=0)display2(5,read_temperature();if(s=1)display4(6,read_temperature();delay_us(100);/硬件反应时间keys

23、can();display1(4,num1);write_add(2,num1);if(c1=num1) M=1; delay_ms(500); M=0; delay_ms(1500);if(40=c1)M=0;A/D转换程序:#include #include #include #includehead.h#define N 64sbit ad_wr=P36;extern float vi;uchar DataN;void AD_Convert() uint i;vi=0.0;for(i=0;iN;i+) ad_wr=1;/wr port raise edage delay_ms(1); a

24、d_wr=0;/wr pot false edage delay_ms(1); ad_wr=1;/start ad convert _nop_(); _nop_(); _nop_(); Datai=P1; ad_wr=0; for(i=0;iN;i+)vi+=Datai; vi=vi/N; 温度检测程序:#include#include#includehead.hsbit ds=P26;uchar time;extern uchar s;void dsreset(void)/DS18B20复位,初始化函数 ds=1;/数据线置高电平1 for(time=0;time2;time+); /延时约

25、6us,延时尽可能短一点 ds=0;/数据线置低电平0 for(time=0;time200;time+);/延时约600us,延时控制在480960us之间 ds=1;/数据线置高电平1 for(time=0;time10;time+);/延时约30us if(!ds)/等待DS18B20应答 for(time=0;time200;time+);/延时约600us,DS18B20应答脉冲void dswrite(uchar dat)/向DS18B20写指令函数,dat表示指令编码,例如,温度转换0x44uchar i=0;for (i=0; i8; i+)/把dat中的数据分八次传给ds,一

26、次只发送一位二进制数 ds=1;/数据线置高电平1 _nop_();/延时一个机器周期,约1us ds=0;/数据线置低电平0 _nop_();/延时一个机器周期,约1us ds=dat&0x01;/DS18B20采样,把dat中的最低位传给ds for(time=0;time15;time+);/延时约45us ds=1;/数据线置高电平1 for(time=0;time1;time+);/延时约3us(1ustREC=1; /dat数据右移一位 for(time=0;time4;time+);/延时约为12us,硬件反应时间uchar dsread(void)/从DS18B20中的RAM读

27、一个字节的数据 uchar i=0;uchar dat;/把RAM中的温度数据传给datfor (i=0;i=1;/dat中的数据右移一位,读到的第一位二进制在最右边 _nop_();/延时一个机器周期,约1us ds=1;/数据线置高电平1 for(time=0;time2;time+);/延时约为6us if(ds=1)/读数据线的状态得到一个状态位,并进行数据处理 dat|=0x80;/ 把dat的最高位置1else dat|=0x00;/把dat的最高位置0 for(time=0;time10;time+);/延时约30us return dat; uint read_temperat

28、ure() /读取温度数据 uchar temp1,temp2;uint temp3;dsreset();/DS18B20复位 dswrite(0xcc);/写跳过读ROM指令,同时使用多个DS18B20时,要识别ROM中的序列号dswrite(0x44);/写温度转换指令for(time=0;time100;time+);/硬件反应时间dsreset();/DS18B20复位dswrite(0xcc);/写跳过读ROM指令dswrite(0xbe);/写读RAM中9字节的温度数据指令for(time=0;time100;time+);/硬件反应时间temp1=dsread();/读温度值低八

29、位(LSB)temp2=dsread();/读温度值高八位(MSB)dsreset();/DS18B20复位,表示温度数据读取完毕temp3=(temp28)|temp1);if(temp3&0xf800) s=1;/温度为负值temp3=temp3+1;else s=0;/温度为正值temp3=temp3*0.0625*10+0.5;/温度在寄存器中为12位,分辨率为0.0625度 /(temp28)|temp1,将两个字节组合为一个字 /*10表示保留小数点后一位,+0.5表示四舍五入return temp3;/返回以十进制表示的temp3,例如:temp3=272,显示为27.2摄氏度

30、数据存储程序:#include #includehead.hsbit sda=P23;sbit scl=P24;void start()/开始信号 sda=1; delayus(); scl=1; delayus(); sda=0; delayus();void stop()/停止信号 sda=0; delayus(); scl=1; delayus(); sda=1; delayus();void respons()/应答 uchar i; scl=1; delayus(); while(sda=1)&(i255) i+; scl=0; delayus();void EEPROM_int()

31、 sda=1; delayus(); scl=1; delayus();void write_byte(uchar date) uchar i,temp; temp=date; for(i=0;i8;i+) temp=temp1;scl=0;delayus();sda=CY;delayus();scl=1;delayus(); scl=0; delayus(); sda=1; delayus();uchar read_byte() uchar i,k; scl=0; delayus(); sda=1; delayus(); for(i=0;i8;i+) scl=1;delayus();k=(k

32、1)|sda;scl=0;delayus(); return k;void write_add(uchar address,uchar date) start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop();uchar read_add(uchar address) uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start();

33、 write_byte(0xa1); respons(); date=read_byte(); stop(); return date;1602显示程序:#includehead.h/*LCD1602 初始化函数*/void lcd1602_init(void)/*LCD 8位数据端口上电初始化时全部配置成输出低电平的形式 */ D0=0; D1=0; D2=0; D3=0; D4=0; D5=0; D6=0; D7=0; EN=0; /硬件初始化时关闭LCD是使能端口 RW=0; /初始化时默认讲写功能打开,RW为低电平时为写LCD,为高电平时为读LCD RS=0; /初始化时默认讲RS配置

34、成低电平选择命令。RS为高时为数据控制。 lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X38); lcd1602_write_command(0X0c); lcd1602_write_command(0X06);/*LCD1602 写命令函数*/void lcd1602_write_command(uchar com ) RS=1; RS=0; RW=1; delay_ms(1); RW=0; P0=com; EN=1; delay_ms(100); EN=0;/*LCD160

35、2 写数据函数*/void lcd1602_write_date(uchar dat) RS=0; RS=1; RW=1; delay_ms(1); RW=0; P0=dat; EN=1; delay_ms(100); EN=0;/*LCD1602 清屏函数*/void LCD_clear()/清屏 lcd1602_write_command(0X01);void display1(uchar add1,uchar dat1)/显示LHR值及HR值 uchar shi,ge; shi=dat1/10; ge=dat1%10; lcd1602_write_command(0x80+add1);

36、lcd1602_write_date(0x30+shi); lcd1602_write_date(0x30+ge); void display2(uchar add2,uint dat2)显示温度正值 uchar shi1,ge1,fen1; shi1=dat2/100; ge1=dat2%100/10; fen1=dat2%10; lcd1602_write_command(0x80+0x40); lcd1602_write_date(T); lcd1602_write_command(0x80+0x40+1); lcd1602_write_date(E); lcd1602_write_co

37、mmand(0x80+0x40+2); lcd1602_write_date(M); lcd1602_write_command(0x80+0x40+3); lcd1602_write_date(P); lcd1602_write_command(0x80+0x40+4); lcd1602_write_date(:); lcd1602_write_command(0x80+0x40+9); lcd1602_write_date(C); lcd1602_write_command(0x80+0x40+add2); lcd1602_write_date(0x30+shi1); lcd1602_write_date(0x30+ge1); lcd1602_write_date(.); lcd1602_write_date(0x30+fen1);void display3() lcd1602_write_command(0x80+0); lcd1602_write_date(L); lcd1602_write_command(0x80+1); lcd1602_write_date(H); lcd1602_write_command(0x80+2); lcd1602_write_date(R

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号