单片机设计温度大棚.docx
- 文档编号:6517184
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:33
- 大小:458.46KB
单片机设计温度大棚.docx
《单片机设计温度大棚.docx》由会员分享,可在线阅读,更多相关《单片机设计温度大棚.docx(33页珍藏版)》请在冰豆网上搜索。
单片机设计温度大棚
单片机课程设计
题目:
大棚温度控制系统
姓名
学号:
指导老师:
目录
摘要2
一、系统概述3
1.1课题背景3
1.2本系统主要研究内容3
二、系统的主要模块4
1.控制部分5
2.上位机部分6
3.温湿度检测模块7
4.当前状态显示8
5.马达部分8
三、实验结果9
四、实验心得10
五、参考文献10
六、实验程序10
摘要
随着人们生活水平的日益增长,对蔬菜的要求也越来越高,对大棚温度的控制就是一个重要的因素,温度过高,蔬菜就会停止生长甚至是死亡,而温度过低,蔬菜也会生长过慢,也会出现死亡现象。
所以,对大棚温湿度实现自动控制是很有必要的。
本设计共包括四章,主要包括绪论,系统的硬件设计、系统的软件设计,上位机的实现。
本设计的主要功能是:
1.利用89c52单片机实现大棚温湿度的智能控制,使室温温度能控控制在作物最佳生长的温度18-26度之间。
2.通过对89c52的编程,对数字温湿度传感器dht11发出控制命令开始采集温湿度的数据,最后把采集的数据送去上位机去显示,如果温度超出了设定的范围,89c52单片机会自动进行检测并执行相应的处理程序,也会做出相应的警告。
总之,本系统以89c52单片机为控制核心的测控仪,主要是为了对大棚的温湿度检测和控制而设计的,该控制仪具有检测精度高、使用简单、成本较低和工作稳定可靠的特点,具有很好的应用前景。
8051单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度控制系统的实例也很多。
使用8051单片机能够实现温湿度全程的自动控制,而且8051单片机易于学习、掌握,性价比高。
使用8051型单片机设计温湿度控制系统,可以及时、精确的反映室内的温度以及湿度的变化。
完成诸如升温到特定温度、降温到特定温度、在温度上下限范围内保持恒温等多种控制方式,在湿度控制方面也是如此。
将此系统应用到温室当中无疑为植被的生长提供了更加适宜的环境。
关键字:
大棚温湿度控制系统89c52上位机
1、系统概述
应用自动控制盒电子计算机实现农业生产和管理的自动化,是农业现代化的重要标志之一。
近年来电子技术和信息技术的飞速发展,带来了温度控制与管理技术方面的一场革命。
随着“设施农业”“虚拟农业”等新名词的出现。
温度计算机控制与管理系统正在不断的吸收自动控制和信息管理领域的理论和方法,结合温室作物种植特点,不断创新,逐步完善,从而使得温室种植业实现真正意义上的现代化、产业化。
1.1课题背景
改革开放以来,人们对生活质量要求显著提高,对美丽的植被和花卉的需求量也急剧上升,这对以种植植被为生计的园林工人是一个机遇,同时也对传统的手工植被种植是一个挑战,而基于单片机的温湿度控制系统对解决这些问题有着非常重大的意义。
前种植植被一般都用温室栽培,为了充分的利用好温室栽培这一高效技术,就必需有一套科学的,先进的管理方法,用以对不同种类植被生长的各个时期所需的温度及湿度等进行实时的监控。
温湿度控制对于单片机的应用具有一定的实际意义,它代表了一类自动控制的方法。
而且其应用十分广泛。
1.2本系统主要研究内容
本系统所要完成的任务是:
1.2.1人性化的设计。
界限温度值及湿度值能够由用户根据不同植被的各种生长需求由键盘输入并通过显示器显示。
1.2.2能够实时、准确的显示采样温度值与湿度值。
1.2.3通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(包括警报灯的提示功能以及提示音等)进行报警,并采取相应的方案。
1.2.4能够根据植被在不同时间段内对温湿度的不同要求,用户可随机更改温度及湿度值,以满足用户不同的需求。
2、系统的主要模块
本实验为一个全自动温湿度检测与控制系统,有以下的几个部分组成:
STC89C52单片机、温度检测、显示部分、马达以及相应的报警装置,组成框图如下:
温湿度检测电路
STC
89C52
单片机
显示
上位机
马达控制
降温设备
当前状态显示
报警装置
led
系统正常工作时的过程为:
1.控制部分
本实验的控制部分采用89c52单片机,原因是51系列单片机功能很简单实用,比其他系列的单片机更加容易上手,程序编写也比较简单,不需要像m3单片机那样去分配I/O端口,51单片机是最基本的单片机,完成一个大棚温湿度控制系统还是很好的选择。
而系统的显示部分是利用VC++编程开发环境设计了一个简单的上位机页面,利用单片机的最小系统可以很方便的实现单片机与上位机的通信问题,单片机的P2^2引脚接到温湿度传感器DHT11,通过控制引脚上的高低电平时间可以实现对温湿度的采集。
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
2.上位机部分
51单片机对采集到的温度进行判断和处理,然后通过串行口把数据送至上位机进行显示。
上位机上还有按键可以直接实现对当前温度的控制,按下“升温”按键,上位机将对单片机发送一个为0x12的字符,当单片机检测到这样的字符后,单片机将自动运行升温函数,并让“低温灯”亮起来。
同理,按下“降温”按键,上位机将对单片机发送一个为0x13的字符,当单片机检测到这样的字符后,单片机将自动运行降温函数,并让“高温灯”亮起来,然后让p2^7引脚的电平拉高,电流经过uln2003芯片放大后可以直接驱动电机转动,单片机将温度送去显示。
按下“自动”按键后,上位机发送0x32的指令,命令单片机将采集到的数据上传至上位机从而进行显示。
上位机与单片机的通信是通过中断实现的,是串口中断,响应程序里写上相关的命令即可实现。
同时,上位机上还对当前的温湿度范围进行了显示,但不可以更改。
3.温湿度检测模块
温湿度传感器的选择:
市面上的温湿度传感器的种类有很多,DHT11传感器是单引线数字输出温湿度传感器,从经济性和实用性上考虑,DHT11传感器是一个很好的选择。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。
每个DHT11传感器都在极为精确的湿度校验室中进行校准。
校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
单线制串行接口,使系统集成变得简易快捷。
超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
产品为4针单排引脚封装。
连接方便,特殊封装形式可根据用户需求而提供。
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。
4.当前状态显示
本系统通过DHT11对当前的温湿度进行采集,然后将采集到的数据传送至51单片机,单片机对传感器送来的数据进行处理,判断当前的温度是否在18-26度的范围内,当室温小于18度时,单片机将自动运行升温函数,并让“低温灯”亮起来,单片机将温度送去显示。
而升温的过程将用不停闪烁的led灯来模拟,当室温大于26度时,单片机将自动运行降温函数,并让“高温灯”亮起来,然后让p1^3引脚的电平拉高,驱动电机转动,从而实现降温的目的。
5.马达部分
当时下的室温温度高于设定的温度值时,农作物不宜生长,应该要进行降温。
当dht11检测到后,送于单片机。
然后让p1^3引脚的电平拉高,电流经过uln2003芯片放大后可以直接驱动电机转动,从而实现降温的目的。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还 可以在高负载电流并行运行。
ULN2003采用DIP—16或SOP—16塑料封装。
封装外形图
ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。
它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。
ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。
用户输出口的外接负载可根据以上参数估算。
采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。
通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
3、实验结果
由于实验是用上位机显示,没有涉及液晶的使用。
所以要用到电脑,系统采用5v的电源供电,51最小系统的电源也是5v,所以没有做独立电源,而是通过串口线和电源线让电脑给最小系统供电,再把电源引脚接出来给温度采集系统供电。
当系统能够正常工作时,单片机的引脚输出波形为:
系统上位机的显示部分为:
四、实验心得:
以前的设计总是要求仿真,只要仿真结果能出来就什么都ok啦!
但通过这次做实物,的确让我遇到了很多的困难,就好比程序与实物的端口不匹配,甚至是在芯片上都会忘记加上电源线,焊接的问题也老是使得结果出现了很多意想不到的错误。
还有一次修改跳线的时候竟然忘记了关掉电源,还烧掉了一只led和一片51单片机。
Dht11的调试过程也是花费了好久的时间,最后是求助于同学,才勉强实现了温湿度的采样,这次由于精度的原因只是对小数点后的数显示了2-3位。
此次设计是在我的同学支持下完成的。
本系统的设计成功与同学的帮助是密不可分的,再加上自身的努力才能圆满地完成预期的目标。
使得我对新知识,新事物都有了自己独到的理解,这深深的影响了我今后对学习的态度,将使我终生难忘。
同学一丝不茍的工作态度和认真负责的敬业精神也同样给了我巨大的收益和鼓舞。
这些都将使我受益匪浅,同时也要感谢我的父母,不是你们我就不可能在大学校园里,也就不可能有这个毕业设计!
最后,我要以最真挚的感情来感谢指导本次毕业设计中的导师,是您们用辛勤的劳动、无私的奉献和渊博的知识换来了我的毕业设计。
同时感谢各位同学对我的帮助,只有我们不断的努力学习,明天才会更加美好,因为机会永远属于那些有准备的人。
五、参考文献
[1]周坚,单片机轻松入门[M].北京:
北京航空航天出版社,2002.
[2]胡辉.王晓,戴永成.单片机原理及应用设计[M].北京:
中国水利水电出版社,2005.P6,P181
[3]
[4]张毅刚,彭喜元,彭宇,单片机原理及运用[M].北京:
高等教育出版社,2010.
六、实验程序
#include
#defineNUMBER20
#defineSIZE5
#defineOK1
#defineERROR0
#defineucharunsignedchar
#defineuintunsignedint
uintwarng=26;//温度上限
uintwarnd=18;//温度下限
ucharstr[5];
inttemp_value,humi_value;
staticunsignedcharReadValue(void);
sbitgw=P2^0;//高温灯
sbitdw=P2^1;//低温灯
sbitdht11=P2^2;//温度传感器
sbitsw=P2^3;//升温标志
sbitmd=P2^7;//马达转动
********************************************************************
*名称:
Delay_1ms()
*功能:
延时,延时时间大概为1mS。
*输入:
无
*输出:
无
***********************************************************************/
externvoidDelay_1ms(unsignedintms)
{
unsignedintx,y;
for(x=ms;x>0;x--)
{
for(y=124;y>0;y--);
}
}
staticvoidDHT11_Delay_10us(void)
{
unsignedchari;
i--;
i--;
i--;
i--;
i--;
i--;
}
///*读一个字节的数据*/
voidDHT11_ReadValue(void)
{
unsignedcharvalue=0,i,j;
dht11=0;//拉低数据线大于18ms发送开始信号
Delay_1ms(20);//需大于18毫秒
dht11=1;//释放数据线,用于检测低电平的应答信号
//延时20-40us,等待一段时间后检测应答信号,应答信号是从机拉低数据线80us
DHT11_Delay_10us();
DHT11_Delay_10us();
DHT11_Delay_10us();
DHT11_Delay_10us();
for(j=0;j<5;j++)
{
value=0;
for(i=8;i>0;i--)
{
//高位在先
value<<=1;
//每一位数据前会有一个50us的低电平时间.等待50us低电平结束
while(dht11==0);
//26-28us的高电平表示该位是0,为70us高电平表该位1
DHT11_Delay_10us();
DHT11_Delay_10us();
DHT11_Delay_10us();
DHT11_Delay_10us();
//延时30us后检测数据线是否还是高电平
if(dht11!
=0)
{
//进入这里表示该位是1
value++;
//等待剩余(约40us)的高电平结束
while(dht11!
=0);
}
}
str[j]=value;
}
}
/********************************************************************
*名称:
jiangwen()
*功能:
降温函数
*输入:
无
*输出:
无
***********************************************************************/
voidjiangwen()
{md=1;
P0=0xff;
Delay_1ms(100);
P0=0x00;
}
/********************************************************************
*名称:
shengwen()
*功能:
升温函数
*输入:
无
*输出:
无
***********************************************************************/
voidshengwen()
{uinti;
sw=1;
for(i=0;i<8;i++)
{
sw=~sw;
Delay_1ms(100);
}
}
/********************************************************************
*名称:
DEAL()
*功能:
温度处理函数。
*输入:
当前温度
*输出:
无
***********************************************************************/
voiddeal(uintt)//温度处理
{
if(t>warng)//温度大于27度
{gw=1;//高温灯亮
jiangwen();//降温函数
}
elseif(t { dw=1;//低温灯亮 shengwen();//升温函数 } elseif((warnd { Delay_1ms(10); } } /******************************************************************** *名称: send() *功能: 串口发送函数。 *输入: 要发送的值 *输出: 无 ***********************************************************************/ voidsend(ucharm) { SBUF=m; while(! TI); TI=0; } //串口初始化 voidCom_Init(void) { TMOD=0x20;//定时器工作在定时器1的方式2 PCON=0x00;//不倍频 SCON=0x50;//串口工作在方式1,并且启动串行接收 TH1=0xFd;//设置波特率9600 TL1=0xFd; TR1=1;//启动定时器1 ES=1;//开串口中断 EA=1;//开总中断 gw=0; dw=0; md=0; sw=0; } /******************************************************************** *名称: Main() *功能: 主函数 *输入: 无 *输出: 无 ***********************************************************************/ voidMain() {Com_Init(); while (1) { DHT11_ReadValue(); Delay_1ms(2000); deal(str[2]); } } voidCom_Int(void)interrupt4 { unsignedcharTemp;//定义临时变量 if(RI)//判断是接收中断产生 { RI=0;//标志位清零 Temp=SBUF;//读入缓冲区的值 switch(Temp) { case0x11: deal(str[2]);break; case0x12: shengwen();break; case0x13: jiangwen();break; case0x32: send(str[2]/10+48); send(str[2]%10+48); send(str[3]/100+48); send(str[3]%100/10+48); send(str[3]%100%10+48); send(str[0]/100+48); send(str[0]%100/10+48); send(str[0]%100%10+48); send(str[1]/100+48); send(str[1]%100/10+48); break; } } } 上位机程序: //dapengDlg.cpp: implementationfile // #include"stdafx.h" #include"dapeng.h" #include"dapengDlg.h" #include"RS485Comm.h" #ifdef_DEBUG #definenewDEBUG_NEW #undefTHIS_FILE staticcharTHIS_FILE[]=__FILE__; #endif ///////////////////////////////////////////////////////////////////////////// //CAboutDlgdialogusedforAppAbout classCAboutDlg: publicCDialog { public: CAboutDlg(); //DialogData //{{AFX_DATA(CAboutDlg) enum{IDD=IDD_ABOUTBOX}; //}}AFX_DATA //ClassWizar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 设计 温度 大棚