蔬菜大棚温度控制系统.docx
《蔬菜大棚温度控制系统.docx》由会员分享,可在线阅读,更多相关《蔬菜大棚温度控制系统.docx(25页珍藏版)》请在冰豆网上搜索。
![蔬菜大棚温度控制系统.docx](https://file1.bdocx.com/fileroot1/2022-11/15/eef0519d-f7c0-4e21-9e91-7a683218baf7/eef0519d-f7c0-4e21-9e91-7a683218baf71.gif)
蔬菜大棚温度控制系统
摘要
本文根据蔬菜大棚温度控制系统的要求和特点,设计了一种基于51单片机的蔬菜大棚温度控制器。
该控制器以单片机为控制核心,结合外围信号采集电路、键盘扫描电路、LCD显示电路、报警电路和继电器控制电路,实现了蔬菜大棚的的智能控制。
DS18B20温度传感器将采集的数据在传感器内部经模数转换后传送给单片机,单片机将得到的数据分别与键盘预先设定的上限温度值和下限温度值比较,如果数据大于上限温度值值,开启电机并报警,如果数据小于下限温度值,启动电机并报警,并且电路还有预报警,当温度高于预报警上限值,进行报警,提醒用户,当温度低于预报警下限值时,进行报警,提醒用户。
整个过程LCD实时显示上限温度值、下限温度值、实际温度值。
关键字:
单片机;信号采集;温度控制系统;键盘扫描。
目录
摘要I
第1章绪论1
1.1温度控制系统设计的背景、发展历史及意义1
1.2课题研究的目的意义1
第2章系统方案设计2
2.1温度控制系统设计方框图2
2.2方案论证2
第3章电路设计3
3.1键盘电路设计3
3.2显示电路设计3
3.3报警电路设计4
3.4传感器电路设计4
3.5电机控制电路设计5
第4章程序设计5
4.1系统主程序设计5
4.2显示程序设计5
4.3温度处理程序设计.............................................................................6
4.4上下限温度设定程序........................................................................6
4.5程序流程图........................................................................................6
4.6程序源代码........................................................................................7
第5章系统仿真17
5.1系统原理图17
5.2仿真效果图18
第6章总结20
参考文献21
第1章绪论
1.1温度控制系统设计的背景、发展历史及意义
随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。
特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。
针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。
温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。
在工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域内,温度常常是表征对象和过程状态的最重要的参数之一。
比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、柴油、煤油等产品。
没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。
因此,各行各业对温度控制的要求都越来越高。
可见,温度的测量和控制是非常重要的。
单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。
随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温度控制器应运而生。
1.2课题研究的目的意义
本设计的内容是温度测试控制系统,控制对象是温度。
温度控制在日常生活及工业领域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度控制。
而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。
针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。
第2章系统方案设计
2.1蔬菜温度控制系统设计方框图
图2.1系统设计方框图
系统硬件电路框图如图2.1所示,蔬菜温度控制装置由单片机最小系统、LCD液晶显示电路、键盘电路、报警电路、温度传感器、继电器控制等七部分组成。
系统工作原理:
将温度传感器采集的数据输入单片机,单片机将得到的数据分别与键盘预先设定的上限温度和下限温度比较,如果数据大于上限温度单片机控制报警并接通电机电源(相当于接升温器),如果数据小于下限温度单片机控制报警并接通电机电源(相当于接降温器),整个过程LCD实时显示:
上限温度值、下限温度值、实际温度值。
2.2方案论证
在设计中要对空压机内压力、上、下限压力显示,显示模块的设计方案如下。
方案一:
测温电路的设计,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电感温电路比较麻烦。
路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路
方案二:
考虑使用温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。
比较以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现,故实际设计中拟采用方案二。
第3章电路设计
3.1键盘电路
因为本设计使用键盘数比较少,只要5个按键就足够了,故可以直接接在端口即可。
图3.1键盘电路
3.2显示电路设计
将P1与显示的数据端相连,采用模拟时序形式电路。
电路接线如图3-2
图3.2显示电路
3.3报警电路设计
报警电路对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的报警情况,发出不同频率的声音。
图3.3报警电路
3.4传感器电路设计
本设计使用的是DS18B20,采用单总线方式连接。
图3.4传感器电路
3.5电机控制电路设计
电机电路利用继电器来控制电机开断。
电路如图图3.5
图3.5电机控制电路设计
第4章程序设计
4.1主程序设计
主程序主要完成初始化、以及调用显示、指示灯、温度采集等等。
具体模块包括:
1、显示程序设计
2、温度采集程序设计
3、温度处理程序设计
4.2显示程序设计
显示程序主要将几个数组的内容通过LCD1602的写数据指令显示在LCD屏上。
4.3温度处理程序设计
将采集到的实时温度与设定的上限,下限,上限预报警,下限预报警温度进行比较,若超过上限温度红灯亮,并且发出高频率的报警声。
如果实时温度介于上限预报警和上限温度之间,黄灯亮,并发出低频率的报警声。
在超过下限温度时红灯亮,也发出高频率的报警声,如果实时温度介于下限预报警和下限温度之间,黄灯亮,并发出低频率的报警声。
4.4上下限温度设定程序
采用外部中断1的方式,可以实时进行设定温度上下限值。
温度上下限设定的范围为-20—99度。
4.5程序流程图
4.6程序源代码
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulintunsignedlongint
ucharcodetable0[]={//欢迎界面
0xa0,0x57,0x65,0x6c,0x63,0x6f,0x6d,0x65,
0xa0,0x74,0x6f,0xa0,0x75,0x65,0x73,0xa0,
0xa0,0xa0,0x74,0x68,0x65,0x72,0x6d,0x6f,
0x6d,0x65,0x74,0x65,0x72,0x21,0xa0,0xa0};
uchartable1[]={0x6d,0x61,0x78,0x3a,0x00,0x00,0x00,0xa0,//存储报警值
0x6d,0x69,0x6e,0x3a,0x00,0x00,0x00,};
uchartable2[]={//存储温度
0x54,0x4d,0x50,0x54,0x3a,
0x00,0x00,0x00,0x00,0xa5,0x00,0x00,0x43};
ucharcodetable3[]={//提醒设定报警值
0xa0,0x50,0x6c,0x65,0x61,0x73,0x65,0xa0,
0xa0,0x63,0x68,0x61,0x72,0x67,0x65,0xa0,
0xa0,0xa0,0xa0,0x79,0x6f,0x75,0x72,0xa0,
0x63,0x61,0x72,0x64,0x21,0xa0,0xa0,0xa0};
uchartable4[]={//输入界面
0x50,0x6c,0x65,0x61,0x73,0x65,0xa0,0x69,
0x6e,0x70,0x75,0x74,0x3a};
sbitE=P3^7;
sbitRW=P3^6;
sbitRS=P3^5;
sbitflag=P1^7;
sbitdec=P3^0;
sbitinc=P3^1;
sbitok_max=P3^2;
sbitok_min=P3^4;
sbitout=P2^1;
sbitDQ=P2^3;
sbitbeep=P2^2;
ucharp,tflag;
uinttvalue;
/*****************延时函数**********************/
voiddelay_18B20(unsignedinti)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
voidInit_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay_18B20(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay_18B20(80);//精确延时大于480us
DQ=1;//拉高总线
delay_18B20(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/
voidWriteOneChar(unsignedchardat)