温室大棚温度控制系统 2A教材.docx
《温室大棚温度控制系统 2A教材.docx》由会员分享,可在线阅读,更多相关《温室大棚温度控制系统 2A教材.docx(32页珍藏版)》请在冰豆网上搜索。
![温室大棚温度控制系统 2A教材.docx](https://file1.bdocx.com/fileroot1/2023-1/14/bb2bc20a-f88b-4738-b237-17835dee7dd1/bb2bc20a-f88b-4738-b237-17835dee7dd11.gif)
温室大棚温度控制系统2A教材
第1章绪论
我国南方温度炎热而漫长,大力推广大棚蔬菜的种植来满足人们日常生活对蔬菜的需要。
随着人们生活水平的日益增长,对蔬菜的要求也较高,对大棚蔬菜的温度控制就是一个重要因素。
温度过高,蔬菜就会停止生长或者糜烂。
本系统就基于单片机AT89C52实现对大棚温度的自动化控制。
用数字温度模块DS18B20采集,将采集到的温度用显示屏显示,再根据采集到的温度,控制马达的转速,从而实现对大棚温度的控制。
当温度大于35℃,喇叭产生报警信号。
1.1系统的概述
应用自动控制和电子计算机实现农业生产和管理的自动化,是农业现代化的重要标志之一。
近年来电子技术和信息技术的飞速发展,带来了温室控制与管理技术方面的一场革命,随着“设施农业”、“虚拟农业”等新名称的出现。
温度计算机控制与管理系统正在不断吸收自动控制和信息管理领域的理论和方法,结合温室作物种植的特点,不断创新,逐步完善,从而使温室种植业实现真正意义上的现代化,产业化。
本系统以AT89C52单片机为控制核心的测控仪,主要是为了对蔬菜大棚内的温度,地检测与控制而设计的。
该测控仪具有检测精度高、使用简单、成本较低和工作稳定可靠等特点,所以具有一定的应用前景。
1.2系统的要求
本系统通过单片机AT89C52控制,用DS18B20数字温度模块采集温度。
通过LCD1602液晶显示屏显示当前温度,当温度高于20℃,马达将带动风扇的转动,实现自动控制大棚里的温度。
当检测到的温度高于35℃时,发出报警信号。
本设计将实现大棚温度的自动化控制。
1.3系统的主要模块
1.3.1本系统的主要组成部分
本系统为一个全自动温度检测与控制系统,由以下几个部分组成:
AT89C52单片机,温度检测,显示电路,马达,及报警装置等组成。
组成图如图1-1。
图1-1温度自动控制构成图
由图1-1所示,本系统的核心部分是AT89C52,此芯片是该电路的枢纽。
由它先控制着温度的检测,用检测到的温度实现马达的自动控制,以及显示。
1.3.2各部分的功能
AT89C52单片机:
它是系统的中央处理器,担负着系统的控制和运算。
温度检测装置:
DS18B20数字温度模块对大棚内温度进行采集,将温度转换成数字。
显示设备:
主要是用于显示检测到的大棚温度。
马达:
主要用于带动风扇的转动。
报警装置:
产生报警信号。
1.3.3工作原理
首先对硬件系统DS18B20定义端口为P1.3,P2.4,P2.5,P2.6和P0口控制液晶LCD1602的显示,定义端口P1.5为马达控制端口,P1.7为喇叭控制端口。
首先对温度采集,将采集到的温度转换数字,采集到的温度由LCD液晶显示屏显示。
再将采集到的温度所属软件设置的哪个范围,而控制P1.5的电平输出。
第2章设计的理论基础
整个控制系统由软件程序设计。
根据系统具体要求,可以对具体部分进行分析设计。
但要实现对各部分的设计,需要充分了解各部分的理论基础。
本设计系统的基本组成单元包括:
单片机控制单元,DS18B20温度检测电路,LCD1602显示屏,直流马达,蜂鸣器报警装置。
2.1AT89C52的工作原理
2.1.1CPU的结构
CPU是单片机内部的核心部分,是单片机的指挥和执行机构,它决定了单片机的主要功能特性。
从功能上看,CPU包括两个基本部分:
运算器和控制器[1]。
2.1.2CPU的结构I/O口结构
AT89C52单片机有4个8位并行I/O接口,记作P0、P1、P2和P3,每个端口都是8位准双向口,共占32根引脚。
每一条I/O线都能独立地用作输入或输出。
每个端口都包括一个锁存器,一个输出驱动器和输入缓冲器,作输出时数据可以锁存,作输入时数据可以缓冲,但是这四个通道的功能完全不同。
如图2-1。
图2-1AT89C52引脚及管脚功能
2.1.3程序存储器
程序存储器通过16位程序计数器寻址,寻址能力为64K字节。
这能在6K地址空间内任意寻址,但没有指令使程序能控制从程序存储器空间转移到数据存储空间。
对AT89C52芯片来说,片内有8K字节ROM/EPROM,片外可扩展60K字节EPROM,片内和片外程序存储器统一编址。
2.1.4定时器
定时器T0具有方式0、方式1、方式2和方式3四种工作方式。
T1具有方式0、方式1和方式2三种工作方式。
不管是定时工作方式还是计数方式,定时器T0和T1在对内部时钟或对外部时间计数时,不占用CPU时间,除非定时器/计数器溢出,才可能中断CPU的当前操作。
由此可见,定时器是单片机中效率最高而且工作灵活的部件。
2.1.5中断系统
中断是指中央CPU正在处理某事情的时候,外部发生了某一事件,请求CPU迅速去处理,于是,CPU暂时中断当前的工作,转入处理所发生的事件;中断服务处理完成以后,再回到原来被中断的工作,这样的过程称为中断[2]。
2.2单总线数字温度传感器DS18B20检测电路
由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。
这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件。
2.2.1DS18B20简介
DS18B20数字温度传感器采用DS18B20可组网数字温度传感器芯片封装二成,具有耐磨耐碰,体积小使用方便,封装形式多样等优点,适用于各种狭小空间设备数字温度和控制领域[3]。
2.2.2DS18B20的性能特点
①适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电。
②独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
③DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
④DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
⑤温范围-55℃~+125℃,在-10~+85℃时精度为±0.5。
零待机功耗。
⑥可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
⑦在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
图3-1DS18B20的引脚功能图
图3-2DS18B20的内部结构图
2.2.3DS18B20的测温原理
DS18B20的测温原理,低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值[4]。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20→发ROM功能命令→发存储器操作命令→处理数据[5]。
2.3LCD1602液晶显示器
2.3.1LCD1602简介
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如表2-1所示:
表2-1引脚接口说明表
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
2.3.2LCD1602的指令说明及时序
LCD1602液晶模块内部的控制器共有11条控制指令[6],如表2-2所示:
表2-2控制命令表
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAMDDRAM)
1
0
要写的数据内容
11
CGRAM或DDRAM读数
1
1
读出的数据内容
LCD1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
1为高电平、0为低电平。
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
LCD1602读写时序如表2-3所示:
表2-3基本操作时序表
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
2.4直流马达
电动马达,又称为马达或电动机,是一种将电能转化成机械能,并可再使用机械能产生动能,用来驱动其他装置的电气设备。
电动机种类非常繁多,但可大致分为交流电动机及直流电动机以用于不同的场合。
2.4.1马达工作的原理
马达的旋转原理的依据为佛来明左手定则,当一导线置放于磁场内,若导线通上电流,则导线会切割磁场线使导线产生移动。
电流进入线圈产生磁场,利用电流的磁效应,使电磁铁在固定的磁铁内连续转动的装置,可以将电能转换成力学能。
与永久磁铁或由另一组线圈所产生的磁场互相作用产生动力直流马达的原理是定子不动,转子依相互作用所产生作用力的方向运动[7]。
电枢:
可以绕轴心转动的软铁芯缠绕多圈线圈。
场磁铁:
产生磁场的强力永久磁铁或电磁铁。
集电环:
线圈约两端接至两片半圆形的集电环,随线圈转动,可供改变电流方向的变向器。
每转动半圈,线圈上的电流方向就改变一次。
电刷:
通常使用碳制成,集电环接触固定位置的电刷,用以接至电源。
2.4.2马达的基本构造
电动机的种类很多,以基本结构来说,其组成主要由定子和转子所构成。
定子在空间中静止不动,转子则可绕轴转动,由轴承支撑。
定子与转子之间会有一定空气间隙,以确保转子能自由转动。
定子与转子绕上线圈,通上电流产生磁场,就成为电磁铁,定子和转子其中之一亦可为永久磁铁[8]。
2.5蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器。
蜂鸣器主要分为压电式蜂鸣器和电磁化蜂鸣器两种类型。
本系统采用的是电磁式蜂鸣器[9]。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁铁圈,使电磁铁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
蜂鸣器发声原理是电流通过电磁铁圈,使电磁线圈产生磁场来驱动振动膜发声的。
程序中改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。
另外,改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。
第3章系统的硬件组成电路设计
系统的硬件组成部分包括:
主控制器AT89C52单片机、温度传感器DS18B20、显示电路LCD1602、马达、报警装置等构成。
3.1系统总硬件设计
首先对硬件系统DS18B20定义端口为P1.3,P2.4,P2.5,P2.6和P0口控制液晶LCD1602的显示,定义端口P1.5为马达控制端口,P1.7为喇叭控制端口。
首先对温度采集,将采集到的温度转换数字,采集到的温度由LCM液晶显示屏显示。
再将采集到的温度所属软件设置的哪个范围,而控制P1.5的电平输出。
电路原理图如3-1所示:
图3-1电路原理图
3.2单总线数字温度传感器DS18B20检测电路
DQ为数据输入/输出引脚,连接P1.3。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源,GND为地信号;VCC为电源信号。
图3-2为DS18B20检测电路。
图3-2DS18B20检测电路
3.3LCD1602显示模块
用AT89C52的P0口作为数据线,用P2.4、P2.5、P2.6分别作为LCD的E、R/W、RS。
其中E是下降沿触发的片选信号,连接P2.6,R/W是读写信号,连接P2.5,RS是寄存器选择信号,连接P2.4。
图3-3为LCD1602的硬件连接。
图3-3LCD1602的硬件连接
VEE用连接阻值为10K的电阻,主要用于调节对比度的调整。
接正电源时对比度最低,接地电源时,对比度最高。
对比度过高时,会产生“鬼影”。
因此连接一10K的电阻用以调整[10]。
第4章系统软件的设计
一个应用系统要完成各项功能,首先必须有较完善的硬件做保证。
同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。
甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编和有时会变得很简单。
因此充分利用其内部丰富的硬件资源和软件资源。
程序设计语言有三种:
机器语言、汇编语言、高级语言。
本系统运用的是高级语言所编写,也就是C语言。
4.1主程序设计
从软件的功能不同可分为四大类:
一是检测软件,它是用来检测温度。
二是显示部分,用来显示所检测到的温度。
三是调控部分,用来控制马达的转速。
四是当温度大于35℃,蜂鸣器发出报警信号。
每一个执行软件也就是一个小的功能执行模块。
这里将各执行模块一一列出,并为每一个执行模块进行功能定义。
图4-1为软件设计流程图。
图4-1软件设计流程图
4.2温度检测
4.2.1读取温度设计
DSl8B20可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生电源为止。
此外,还可外接5V电源,给DS18B20供电[11]。
图4-2
图4-2DS18B20读取温度流程图
读取温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
DS18B20的各个命令对时序的要求特别严格,所以必须按照所要求的时序才能达到预期的目的,同时,要注意读进来的是高低位在后,低位在前,共12位数,小数4位,整数7位,还有一位符号位。
读取温度的主程序如下:
unsignedintReadTemperature(void)
{
unsignedchara=0;
unsignedintb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
delay(200);
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();//低位
b=ReadOneChar();//高位
b<<=8;
t=a+b;
return(t);
}
4.2.2温度数据处理设计
读出温度数据后,TempL的低四位为温度的小数部分,可以精确到0.0625℃,TempL的高四位和TempH的低四位为温度的整数部分,TempH的高四位全部为1表示负数,全为0表示正数。
所以先将数据提取出来,分为三个部分:
小数部分、整数部分和符号部分。
小数部分进行四舍五入处理:
大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。
当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。
还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。
图4-3为温度数据处理流程图。
图4-3温度数据处理流程
由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。
温度高字节高5位是用来保存温度的正负,高字节低3位和低字节来保存温度值。
其中低字节的低4位来保存温度的小数位。
由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。
也就说,本系统的温度精确到了0.1度[12]。
温度数据数理主程序如下:
str[0]=TempH/100;//十位温度
str[1]=(TempH%100)/10;//十位温度
str[2]=(TempH%100)%10;//个位温度,带小数点
str[3]=TempL;
if(flag_get==1)//定时读取当前温度
{
temp=ReadTemperature();
if(temp&0x8000)
{
str[0]=0x40;//负号标志
temp=~temp;//取反加1
temp+=1;
}
else
str[0]=0;
TempH=temp>>4;
TempL=temp&0x0F;
TempL=TempL*6/10;//小数近似处理
flag_get=0;
4.3液晶显示器LCD1602
4.3.1LCD1602初始化
端口定义如下:
sbitRS=P2^4;//Pin4
sbitRW=P2^5;//Pin5
sbitE=P2^6;//Pin6
#defineDataP0//数据端口
函数显示子码:
用数组和指针将字符逐个显示出来[13]。
/*********************************************************************/
voidShowChar(unsignedcharpos,unsignedcharc)
{
unsignedcharp;
if(pos>=0x10)
p=pos+0xb0;//是第二行则命令代码高4位为0xc
else
p=pos+0x80;//是第二行则命令代码高4位为0x8
WriteCommand(p);//writecommand
WriteData(c);//writedata
}
/*************************************************************************/
voidShowString(unsignedcharline,char*ptr)
{
unsignedcharl,i;
l=line<<4;
for(i=0;i<16;i++)
ShowChar(l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
4.4马达的控制
温度低于20℃时,P1.7角的输出信号为1,马达不转动。
当温度高于20℃,且低于25℃马达开始转动且占空比为0.5,温度高于25℃,低于30℃,占空比为0.75。
温度高于30℃时,低于35℃时,占空比为0.875。
温度高于35℃时,占空比为0.9375。
从而实现温度越高,马达的速率越快,从而实现温度的平衡[14]。
马达的控制主程序如下:
Fan=1;
mDelay(10);
Tru=1;
mDelay(10);
if((TempH>20)&&(TempH<=25))
{
Fan=0;
mDelay(10);//占空比为0.5
}
if((TempH>25)&&(TempH<=30))
{
Fan=0;
mDelay(30);//占空比为0.675
}
if((TempH>30)&&(TempH<=35))
{
Fan=0;
mD