1、安阳师范学院1专业课程设计基于单片机的温室大棚控制系统学院:物理与电气工程学院姓名:指导老师:丁电宽摘要随着社会的进步和工农业生产技术的发展,许多产品对生产和使用环境的要求越来越严,人们对温度、湿度、光强、二氧化碳浓度、灰尘等环境因素的影响越来越重视了。大棚技术的普及,使得安阳师范学院2温室大棚数量不断增多,对于蔬菜大棚来说,最重要的一个管理因素是温湿度控制。温湿度太低,蔬菜就会被冻死或则停止生长,所以要将温湿度始终控制在适合蔬菜生长的范围内。传统的温度控制是在温室大棚内部悬挂温度计,工人依据读取的温度值来调节大棚内的温度。如果仅靠人工控制 既 耗 人 力 , 又 容 易 发 生 差 错 。
2、现 在 , 随 着 农 业 产 业 规 模 的 提 高 , 对 于 数 量 较 多 的大棚,传统的温度控制措施就显现出很大的局性。为此,在现代化的蔬菜大棚管理中通常有温湿度自动控制系统,以控制蔬菜大棚温度,适应生产需要。本论文主要阐述了基于 AT89C52单片机的温室大棚温湿度控制系统设计原理,主要电路设计及软件设计等。该系统采用 AT89C52单片机作为主控制器,SHT11作为温湿度数据采集系统,可对执行机构发出指令实现大棚温湿度参数调节,根据实际需求设计了单片机硬件系统,该系统能够实现数据采集,数据处理,数值显 示 等 功 能 。 同 时 介 绍 了 温 湿 度 传 感 器 , 单 片 机
3、 接 口 , 及 其 应 用 软件的设计,该基于单片机的大棚温湿度控制系统性能可靠,结构简单,能实现对温室内温湿度的自动调节。关 键 词 : AT89C51;大棚;温湿度;传感器;目录1、绪论41.1 系统设计背景5安阳师范学院31.2 系统功能、优势及特点52、设计内容52.1 设计思想5 2.2 系统组成53、系统主要部分设计5 3.1 AT89c52 简介及最小系统53.2 温度控制模块传感器 DS18B2083.3 湿度传感器 DHT1183.4 12864 液晶显示模块93.5 光敏 BH1750FVI 模块103.6 总电路原理图及 PCB 图114、系统软件的设计114.1 系统
4、主程序134.2 控制系统的程序13参考文献321. 绪论 1.1 系统设计背景 植物的生长都是在一定的环境中进行的,其在生长过程中受到安阳师范学院4环境中各种因素的影响,其中对植物生长影响最大的是环境中的温度和湿度。环境中昼夜的温度和湿度变化大,其对植物生长极为不利。因此必须对环境的温度和湿度进行监测和控制,使其适合植物的生长,提高其产量和质量。本系统就是利用价格便宜的一般电子器件来设计一个参数精度高,控制操作方便,性价比高的应用于农业种植生产的温室大棚温湿度测控系统。 本系统温湿度的监控包括以下步骤:感应环境温湿度;判断感应到的温湿度是否异常;若感应到的温湿度异常,判断异常是否超过预设时间
5、;若异常超过预设时间,则异常报警;判断异常是否处理完毕;若异常处理完毕,解除报警。并可以利用控制器和单片机机来达到机房温湿度的远程控制,从而实现温室大棚温湿度管理的实时性和有效性。 为此,在现代化的温室大棚管理中通常有温湿度自动控制系统,以控制大棚温度,适应生产需要。它以先进的技术和现代化设施,人为控制作物生长的环境条件,使作物生长不受自然气候的影响,做到常年工厂化,进行高效率,高产值和高效益的生产。 1.2 系统功能、优势及特点 该检测系统充分利用 AT89C52 单片机的软、硬件资源,辅以相应的测量电路,能实现多任务、多通道的检测和输出。它具有测量范围广、测量精度高等特点,前端测量用的传感
6、器类型可在该基础上修改为其他非电量参数的测量系统。温度检测系统采用 DS18B20 测量元件,湿度检测系统采用 DHT11 湿度传感器,光度检测采用光敏BH1750FVI 模块。系统在硬件设计上充分考虑了可扩展性,经过一定的添加或改造,很容易增加功能。根据温室大棚内的温湿度传感器等采集到的信息,利用数据总线将传感器信息送给单片机,再通过12864 液晶显示。当系统报警时监控中心可向现场控制器发出控制指令,监测仪根据指令控制风机、水泵、等设备进行降温除湿补光等动作,以保证大棚内作物的生长环境。监控中心也可以通过报警指令来启动现场监测仪上的声光报警装置,通知大棚管理人员采取相应措施来确保大棚内的环
7、境正常。2、设计内容 安阳师范学院52.1 设计思想 大棚温湿度控制系统上电工作后,单片机进入主程序后,开始以查询的方式检测温湿度传感器的温湿度状态,并将相应的数值通过显示器显示输出。当温室内的温度光照湿度等小于或大于设置的初值时,单片机将通过控制各电机设备开始工作。 2.2 系统组成系统由单片机电源电路、温度传感器 DS18B20、湿度传感器DHT11、光敏 BH1750FVI 模块、电机、12864 液晶显示和控制模块(AT89C52)组成。 1、温湿度传感器:负责检测并采集各控制点温湿度数据。 2、数据通讯转换器:负责温湿度数据采集数据的信号转换,复位等。3、软件部分:软件部分负责对所有
8、数据进行读取分析,并执行各项管理功能。 4、控制部分(即温湿度调节系统):执行指令,由各直流电动机完成。3、系统主要部分设计 3.1 AT89c52 简介及最小系统89C52是 INTEL 公司 MCS-51系列单片机中基本的产品,它采用ATMEL 公司可靠的 CMOS 工艺技术制造的高性能8位单片机,属于标准的 MCS-51的 HCMOS 产品。它结合了 CMOS 的高速和高密度技术及CMOS 的低功耗特征,它基于标准的 MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理
9、单元、256字节内部数据存储器 RAM、8k 片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结 CPU 而 RAM 定时器、串行口和中断系统维持其功能。掉电模式下,保存 RAM 数据,时钟振荡停止,同时停止芯片内其它功能。89C52有 PDIP(40pin)和 PLCC(44pin)两种封装形式。管脚介绍:安阳师范学院6VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向 I/O 口,每脚可吸收8个
10、 TTL门电流。当 P0口的管脚第一次写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在 FIASH 编程时,P0 口作为原码输入口,当 FIASH 进行校验时,P0输出原码,此时 P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向 I/O 口,P1口缓冲器能接收输出4个 TTL 门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在 FLASH 编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向 I/O 口,P2口缓冲器可接收
11、,输出4个 TTL 门电流,当 P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在 FLASH 编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向 I/O 口,可接收输出4个 TTL 门电流。当 P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部
12、下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口作为 AT89C51的一些特殊功能口,管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(计时器0外部输入)P3.5 T1(计时器1外部输入)安阳师范学院7P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的底位字节。在 FLASH 编程期间,
13、此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE的输出可在 SFR8EH 地址上置0。此时, ALE 只有在执行 MOVX,MOVC指令是 ALE 才起用。另外,该引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN 有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。/EA / VPP:当/
14、EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH) ,不管是否有内部程序存储器。注意加密方式1时,/EA 将内部锁定为 RESET;当/EA端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP) 。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。单片机各管脚及最小系统图:安阳师范学院8单片机各管脚及最小系统图3.2 温度控制模块传感器 DS18B20:本系统所用的温度传感器为 DS18B20,DS18B20是常用的温度传感器,具有体积小,硬件开消低,抗干扰能力强,精度高的特点。实物
15、图如下:DS18B20工作原理:DS18B20的读写时序和测温原理与 DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理如图3所示。图中低温度系数晶振的振安阳师范学院9荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度
16、系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。DS18B20接线如图:3.3 湿度传感器 DHT11DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11传感
17、器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在 OTP 内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应安阳师范学院10用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。实物图如下:湿度传感器 DHT11接线图:3.4 12864液晶显示模块12864 是一种具有 4 位/8 位并行、2 线或 3 线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为 12864, 内置 8192 个 16*16 点汉字,和 128个 16*8 点
18、 ASCII 字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示 84 行1616 点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。安阳师范学院1112864显示模块接线图:3.5 光敏 BH1750FVI 模块:BH1750FVI 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围
19、的光强度变化。3.6 总电路原理图及 PCB 图:安阳师范学院12温控大棚系统原理图Pcb 布板图安阳师范学院134. 系统软件的设计 软件设计主要分为主程序、温湿度传感器数据读取子程序、LCD显示程序、键盘扫描,按键去抖动的处理、控制器控制流程。 4.1 系统主程序 本系统的智能核心是 AT89C52,其监控程序和应用软件全部固化在 EPROM 内。他的工作过程是:当系统接通电源后,AT89C52 单片机进入监控状态,同时完成对各个端口的初始化工作,当有按键按下时,产生申请中断,进入响应的中断程序,完成键盘处理工作。当没有外部控制信息的输入时,系统会自动采集温湿度传感器的电压值,最终数据在
20、LCD 显示屏上显示。4.2 控制系统的程序:#include#include#define uchar unsigned char#define uint unsigned int/湿度 防止 ht11 在与硬件通信时发生死循环的计数范围 #define OK 1 #define ERROR 0 #define SIZE 5 uchar value_arraySIZE; /*可在其他的文件引用温湿度值,实际是温度的整数的 10 倍 / 如 dht11 读回的温度是 26,则 temp_value = 260, 湿度同理*/ uint temp_value, humi_value; /光照#d
21、efine SlaveAddress 0x46 /定义器件在 IIC 总线中的从地址,根据ALT ADDRESS 地址引脚不同修改/ALT ADDRESS 引脚接地时地址为0x46,接电源时地址为 0xB8typedef unsigned char BYTE;typedef unsigned short WORD;安阳师范学院14BYTE BUF8; /接收数据缓存区 uchar ge,shi,bai,qian,wan; /显示变量uint dis_data; /变量/引脚定义sbit CLK_18B20=P25; /18B20sbit dht11=P24;/湿度sbit da_light=P
22、23;/光照sbit clk_light=P22;sbit clk_mq5=P21;/气体sbit RS=P12;/12864sbit RW=P11;sbit E=P10;sbit fmq=P13;sbit motor1=P27;float tem;/温度值uchar a;/中断 0 次数记录uchar b=0;/判断主函数是否为前 5 次进入循环,若为前 5 次蜂鸣器禁止响uchar code dd120=“温度湿度光照浓度“;uchar Data_tem5;/暂存液晶温度值uchar Data_hum5;/暂存液晶湿度值uchar Data_lux5;/暂存液晶光照值uchar code
23、str148=0x28,0x5b,0x09,0xd1,0x04,0x00,0x00,0x2b,0x28,0x00,0xb1,0xd0,0x04,0x00,0x00,0x03,0x28,0x93,0x30,0xd0,0x04,0x00,0x00,0xed,0x28,0x05,0xa5,0xd0,0x04,0x00,0x00,0x8b;/储存 4 个温度传感器 64 位rom 代码码组/延时子程序 1安阳师范学院15void delay(uint ms)uchar i;while(ms-)for(i=0;i=1; /读 18B20 单个字节read_18b20()uchar i,dat=0;for
24、(i=0;i=1;CLK_18B20=0;CLK_18B20=1;_nop_();if(CLK_18B20=0)delaynop(8);else dat=dat|0x80;delaynop(8);CLK_18B20=1;安阳师范学院17return(dat);/对 18B20 读写前的初始化子程序void init_18b20()CLK_18B20=1;CLK_18B20=0;delaynop(60);CLK_18B20=1;delaynop(4);while(CLK_18B20=1);delaynop(20);CLK_18B20=1;delaynop(1);/读取温度子程序float pro
25、cessing_18b20()uchar xl;uint i,xh;float x;init_18b20();write_18b20(0xcc);write_18b20(0x44);delaynop(60);init_18b20();write_18b20(0xcc);write_18b20(0xbe);xl=read_18b20();xh=read_18b20();xh4)+(ielsex=(i4)+(iif(b4)if(tem30)|(tem30)|(i 0; i-) /高位在先 value 300) /超标了响应电机alarm();motor1=1;elsemotor1=0;Data_l
26、ux0=i/10000;Data_lux1=(i/1000)%10;Data_lux2=(i/100)%10;Data_lux3=(i/10)%10;Data_lux4=i%10;12864 程序/查忙闲busy()bit b;RS=0;RW=1;E=1;delaynop(1);b=(bit)(P0E=0; return (b);/写一个字节数据void write_1data12864(uchar k)/while(busy();RS=1;安阳师范学院27RW=0;P0=k;delaynop(1);E=1;delaynop(1);E=0;/写两个字节数据void write_2data128
27、64(uchar k)write_1data12864(dd1k);write_1data12864(dd1k+1); /写命令void write_cmd12864(uchar k)/while(busy();RS=0;RW=0;P0=k;delaynop(1);E=1;delaynop(1);E=0;/读数据void read_data12864(uchar k)/while(busy();RS=0;RW=1;E=1;安阳师范学院28delaynop(1);P0=k;delaynop(1);E=0;/显示图像void display_img(uint *ddd)uchar i,j;for(
28、i=0;i32;i+)for(j=0;j8;j+)write_cmd12864(0x34);/绘图开上半屏(扩充指令集)write_cmd12864(0x80+i); /垂直坐标write_cmd12864(0x80+j); /水平坐标write_cmd12864(0x30);write_1data12864(dddi*16+j*2);write_1data12864(dddi*16+j*2+1);for(i=32;i64;i+)for(j=0;j8;j+)write_cmd12864(0x34);/绘图开下半屏(扩充指令集)write_cmd12864(0x80+i-32);write_cm
29、d12864(0x88+j);write_cmd12864(0x30);write_1data12864(dddi*16+j*2);write_1data12864(dddi*16+j*2+1);安阳师范学院29write_cmd12864(0x36);/12864 初始化void init_12864()delay(10);write_cmd12864(0x30);/选择基本指令集delay(5);write_cmd12864(0x30);/delay(5);write_cmd12864(0x0c);/开显示(无游标,无反白)delay(5);write_cmd12864(0x01);/清屏
30、显示,并设定地址指针为 00hdelay(5);write_cmd12864(0x06);/在资料的读取与写入时设定游标的移动方向及指定显示的移位,光标右向左加 1 位移动delay(5); CO 检测程序void test_co() if(clk_mq5=0) alarm();motor1=1;write_cmd12864(0x9b);write_1data12864(0XB3);write_1data12864(0XAC);write_1data12864(0XB1);write_1data12864(0XEA);write_1data12864(!);安阳师范学院30else motor
31、1=0;write_cmd12864(0x9b);write_1data12864(0XD5);write_1data12864(0XFD);write_1data12864(0XB3);write_1data12864(0XA3);write_1data12864(.);处理数据/ 显示子程序void display()write_cmd12864(0x01);/清屏显示,并设定地址指针为 00hdelay(5);write_cmd12864(0x80);write_2data12864(0);write_2data12864(2);write_1data12864(:); if(tem0)write_1data12864(-);if(Data_tem4!=0)write_1data12864(Data_tem4+0x30);if(Data_tem4!=0)|(Data_tem3!=0)write_1data12864(Data_tem3+0x30);write_1data12864(Data_tem2+0x30);write_1data12864(.);write_1data12864(Data_tem1+0x30);write_1data12864(Data_tem0+0x30);