基于单片机的温湿度控制系统设计概要.docx
《基于单片机的温湿度控制系统设计概要.docx》由会员分享,可在线阅读,更多相关《基于单片机的温湿度控制系统设计概要.docx(27页珍藏版)》请在冰豆网上搜索。
基于单片机的温湿度控制系统设计概要
计算机控制设计
课程设计报告
班级
B电气092
姓名
陈文雄
学号
0910601217
课程设计题目:
基于单片机的花房温湿度控制系统设计
花卉的生长要在一定的环境中进行,其在生长过程中受到环境中很多因素的影响,其中对花卉生长影响最大的是环境中的温度和湿度。
环境中昼夜温度和湿度变化很大,不利于花卉的生长。
因此必须对环境的温度和湿度进行监测和控制,使其适合花卉的生长。
本课程设计就是要求利用基于单片机来设计一个参数精度高,控制操作方便的花房温湿度控制系统。
以前种植植被一般都用温室栽培,为了充分的利用好温室栽培这一高效技术,就必需有一套科学的,先进的管理方法,用以对不同种类植被生长的各个时期所需的温度及湿度等进行实时的监控。
温湿度控制对于单片机的应用具有一定的实际意义,它代表了一类自动控制的方法。
而且其应用十分广泛。
技术参数和设计任务:
1、显示部分的第1到4位显示出温度值,分辨率为0.01度,2位小数,第5、6位显示出湿度值,分辨率为1%H;
2、设置湿度报警值,按1度增加,测量湿度到了设定值后,湿度指示LED灯关掉,高于设定湿度5度时报警LED灯打开,断电后能保存温度设定值;
3、温度低于设定值时,输出加热控制信号;湿度大于设定值时,输出降湿控制信号;
4、利用89C51单片机实现对温度和湿度的控制,以实现温湿度的采集和控制;
5、完成SHT11温湿度传感器模块电路的设计;
6、完成温湿度调节系统主要控制电路的设计;
7、完成LED数码管显示模块电路的设计;
8、完成声光报警模块电路的设计;
9、完成按键模块电路的设计。
一、系统概述
1、系统原理介绍
该系统利用STC89C51单片机的软、硬件资源,辅以相应的测量电路和SHT11数字式集成温湿度传感器等智能仪器,能实现多任务、多通道的检测和输出。
它具有测量范围广、测量精度高等特点。
温湿度控制系统上电工作后,用户首先通过键盘输入温度及湿度的初值,单片机系统将用户设置的初值保存在X25045芯片中。
单片机进入主程序后,开始以查询的方式检测温湿度传感器SHT11的温湿度状态,并将相应的数值通过液晶显示器显示输出。
监控中心可向现场控制器发出控制指令,当温室内的温度或湿度小于设置的初值时,单片机将通过控制输出接口使加温设备或加湿设备开始工作;当温室内的温湿度大于或等于设置的初值时,单片机将通过控制输出接口使加温设备或加湿设备停止工作,从而保证花卉的最佳生长环境。
同时监控中心也可以通过报警指令来启动现场监测仪上的声光报警装置,使报警指示LED灯闪烁,在设定值停止闪烁。
其系统原理图如图1所示:
图1系统原理图
根据设计要求,整个系统由单片机、温湿度传感器、LED数码管、蜂鸣器以及键盘等5部分组成。
单片机作为主控制器,主要负责处理由温湿度传感器送来的数据,并把处理好的数据送向显示器模块。
温湿度传感器主要用来采集周围的环境参数,并把所采集到得数据送向单片机。
键电路主要是用来完成单片机的复位操作和温湿度初始值的设定。
蜂鸣器电路就是用三极管来实现的,用来判断周围的温度或者湿度是否超出设定数值。
显示电路主要用来显示当前的温湿度。
2.系统所用主要芯片介绍
(1)单片机STC89C51
芯片STC89C51共有40个引脚,其中电源引脚有4个,控制引脚有4个,并行的I/O接口有32个,其引脚图如图2所示:
图2STC89C51的引脚图
(2)芯片X25045
X25045是美国Xicor生产的标准化8脚集成电路,它将EEPROM、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。
X25045引脚如图3所示。
图3X25045引脚图
X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。
在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。
看门狗定时器的预置时间是通过X25045的状态寄存器的相应位来设定的。
如表1所示,X25045状态寄存器共有6位有含义,其中WD1、WD0和看门狗电路有关,其余位和EEPROM的工作设置有关。
表1X25045状态寄存器
D7
D6
D5
D4
D3
D2
D1
D0
X
X
WD1
WD0
BL1
BL0
WEL
WIP
WD1=0,WD0=0,预置时间为1.4s。
WD1=0,WD0=1,预置时间为0.6s。
WD1=1,WD0=0,预置时间为0.2s。
WD1=1,WD0=1,禁止看门狗工作。
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时最大循环周期的时间略长即可。
编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。
当系统跑飞,用软件陷阱等别的方法无法捕捉回程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。
其与单片机连接电路如图4所示:
图4X25045与单片机的连接电路图
二、硬件设计
1、温湿度传感器检测电路
(1)SHT11芯片的工作原理
本系统选择的是瑞士Sensirion公司推出的SHT11单片数字温湿度集成传感器,该传感器包括一个电容性聚合体湿度敏感元件、一个用能隙材料制成的温度敏感元件,并在同一芯片上,与l4位的A/D转换器以及串行接口电路实现无缝连接。
每个传感器芯片都在极为精确的湿度腔室中进行标定,以镜面冷凝式湿度计为参照。
校准系数以程序形式存储在OTP内存中,在校正的过程中使用。
两线制的串行接口,使外围系统集成变得快速而简单。
微小的体积、极低的功耗,使其成为各类应用的首选。
这种芯片技术不仅将温湿度传感器结合在一起,而且还将信号放大器、模/数转换器、校准数据存储器、标准I2C总线等电路全部集成在一个芯片内。
经校准的相对湿度和温度传感器与一个14位的A/D转换器相连,可将装换后的数字温湿度值送给I2C总线器件,从而将数字信号转换为符合I2C总线协议的串行数字信号。
(2)SHT11芯片的优越性
SHT11的温湿度检测运用电容式结构,由于它将温度传感器与湿度传感器结合在一起而构成了单一的个体,因而测量精度高,同时不会产生由于温度与湿度传感器之间随温度梯度变化引起的误差。
由于将传感器与电路部分结合在一起,因此,该传感器比其他类型的温湿度传感器具有更好的性能。
首先是传感器信号强度的增加增强了传感器的抗干扰性能,保证了传感器的长期稳定性,而A/D转换的同时完成,则降低了传感器对干扰噪声的敏感程序。
其次在传感器芯片内装载的校准数据保证了每一只温湿度传感器都具有相同的功能,即具有100%的互换性。
它与单片机的连接图如图5所示:
图5SHT11与单片机的连接电路图
SHT11的测量时序如下:
当一个SCK为高电平时,DATA出现低电平,然后SCK变为低电平,接着当SCK再为高电平时,DATA也变为高电平则表示开始数据读写,温湿度传感器SHT11送出的温度、湿度数据必须经过数据转换才能表示实际的温度和湿度,其公式如下:
式中:
Tc为温度;RHTrue为经过温度补偿的相对湿度;d1、d2与温度分辨率有关;C1、C2、C3、t1、t2与湿度分辨率有关;SOT表示从SHT11中读出的温度值;SORH表示从SHT11中读出的湿度值。
2、温湿度调节系统的设计
温湿度调节系统包括加湿模块和降湿模块、加温模块和制冷模块。
它是由单片机的I/O口控制的,有效控制电平为+5V,执行机构的各种设备都是在市电下正常工作的,必须采用I/O口控制继电器的导通和切断来控制市电的通断,也即控制执行设备的工作状态。
由于单片机的I/O不能提供足够的电流,不能直接驱动继电器导通。
因此,我们采用达林顿管,将进行两级放大,提供了足够大的驱动电流,让继电器中的电感线圈产生足够大的磁力,将开关吸合。
用户预先输入温湿度报警值到程序中,该值作为系统阈值。
温湿度传感器监测值传输给单片机,当单片机比较监测到的数值超出所设定阈值时,驱动蜂鸣器报警,并为温湿度调节系统提供控制信号,实现自动控制。
如图6所示:
图6温湿度调节系统
3、声光报警电路
本设计采用把计算机采集的数据进行数据处理、标度变换、数字滤波之后,与该参数上下限与给定值进行比较,如果高于上限值则进行报警,否则就作为采样的正常值,进行显示。
如图7所示,蜂鸣器额定电流≤30Ma,而对于STC89C51单片机,P1口的灌电流为15mA,由此可见,仅靠单片机的P1口电流是不能驱动蜂鸣器的,必须使用晶体管放大电路,为了使单片机的功率更小,所以使用PNP型晶体管,当外部环境的温度或者湿度超过预设值的时候,基级变为低电平,蜂鸣器导通鸣叫。
图7声光报警电路
报警模块具备两项功能,即为报警灯和声音报警。
报警灯模块是完成LED有规律的转换,以便从视觉上提醒用户。
LED是由单片机控制2个双色LED灯组成的,其转换规律为:
1、系统温湿度值在给定的范围时,绿色LED亮。
2、系统温湿度值超出给定的范围时,红色LED亮。
在LED灯转换的同时,声音报警也会同时启动,可采用延时的方式来延长声音报警的声音。
警报灯由2个双色的LED灯组成,一共需要2根数据线,使用单片机控制。
要实现的功能是使2个双色LED灯有规律的转换,当系统上电后,系统进行实时的采样,并判断出当前温湿度与给定温湿度之间的差异,如果当前温湿度低于用户给定的下限温湿度值,则说明当前温湿度过低,系统自动启动红色警报灯,同时开始加温増湿,直至加到所需温湿度值时警报灯熄灭。
反之,如果当前温湿度高于用户设定的上限温湿度值,则说明当前温湿度过高,系统也会自动启动警报灯,同时开始降温减湿,直至降到所需温湿度值时警报灯熄灭。
4、按键电路
按键电路采用独立式按键的方法进行设计。
使用单片机P1口的第五位即P2.0、P2.1、P2.2、P2.3、P2.4分别连接一个独立式按键,并对其进行循环扫描。
在具体连接时,按键一端连接单片机,另一端接地,当按下时,单片机的相应端口呈现低电平。
同时,在靠向单片机的一端分别连接了一个上拉电阻,该电阻一方面保证了在按键未被按下时,P2响应端口的电平能够保持高电平,另一方面也保证了在按键按下时,电路中高电平被截止,是低电平有效。
此外,还可防止电源被短路。
其按键电路连接图如图8所示:
。
图8按键电路连接图
S1为温度和湿度设定切换S2为温度或湿度加1,S3为温度或湿度减1,S4当前状态与设定状态切换,S5为上下限设定切换。
具体按键功能如表2所示:
表2按键功能表
按键
功能
S1
温度或湿度设定切换
S2
温度或湿度加1
S3
温度或湿度减1
S4
当前状态与设定状态切换
S5
上下限设定切换
5、复位电路
复位是单片机的初始化操作,只需给STC89C51的复位引脚RST加上大于2个机器周期的高电平就可使STC89C51复位。
复位电路通常采用上自动复位和按钮复位两种方式。
上电复位是通过外部复位电路给电容C充电加至RST引脚一个短的高电平信号,次信号随着Vcc对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C的充电时间。
因此为保证系统能可靠地复位,EST引脚上的高电平必须维持足够长的时间。
按键手动复位有电平和脉冲两种形式。
图9复位电路
6、LED显示电路
本设计中采用了六位一体的共阴极数码管软件译码的动态显示方式通过程序查表来实现译码其中前四位显示温度,后两位显示湿度。
为了达到数码管工作的额定电流。
本设计将其与单片机相连时采用74LS244芯片作为驱动芯片。
通过单片机P0口输出显示所使用需的段码作为位码的驱动芯片通过逐一置低电平来实现。
其显示电路连接图如图10所示:
图10显示电路连接图
三、软件设计
1.总模块设计
本系统的智能核心是STC89C51,其监控程序和应用软件全部固化在EPROM内。
他的工作过程是:
当系统接通电源后,STC89C51单片机进入监控状态,同时完成对各个端口的初始化工作,当有按键按下时,产生申请中断,进入响应的中断程序,完成键盘处理工作。
当没有外部控制信息的输入时,系统会自动采集温湿度传感器的电压值,最终数据在LED数码管显示屏上显示。
主程序流程图如图11所示:
图11总设计流程图
2.温湿度传感器模块
新一代的数字传感器不再需要外置的A/D转换模块,并具有标准接口,使用方便,应用广泛。
SHT11是一种新型的单总线温湿度数字传感器,具有更多的优点,它使系统设计更加简单,控制方便,易于实现。
温湿度利用SHT11温湿度传感器测量温度。
先对SHT11进行初始化,然后读取、计算,传送给单片机,其温湿度读取子程序流程图如图12所示:
图12温湿度传感器模块
3.按键消抖程序
按键识别有两种方法:
一是行扫描法,另一种是线反转法。
本系统采用行扫描法,CPU通过输出锁存器在某一行线上送出0,通过输入缓冲器检查列线是否有0,进行按键识别。
若有按键压下,则转入逐行扫描,同时检测列线状态。
其流程图如图13所示:
图13按键扫描消抖电路
4.温湿度控制模块
温湿度判断控制模块也是系统的核心模块之一,所谓判断控制模块,就是对用户输入的温度和湿度与当前温室内的实际温湿度进行比较,先进行判断,然后再进行控制,控制模块是决定系统将要进行什么工作的。
如温度高于上限时需要降温,低于下限时需要升温,同时还要启动警报等等。
温度判断控制部分的程序整体思路如图14所示:
图14温湿度控制模块的程序图
四、小结
本设计围绕对温室温湿度进行控制的目的,应用单片机控制系统,为了实现系统模块化,设计中涉及到了SHT11传感器电路、STC89C51单片机主控电路、LED数码管显示电路、声光报警电路和按键电路这五个模块,通过51单片机来进行数据传输和交换。
使用8051型单片机设计温湿度控制系统,可以及时、精确的反映室内的温度以及湿度的变化。
完成诸如升温到特定温度、降温到特定温度、在温度上下限范围内保持恒温等多种控制方式,在湿度控制方面也是如此。
将此系统应用到温室当中无疑为植被的生长提供了更加适宜的环境。
经过近两周的设计,从确定题目,到后来查找资料,理论学习,排版校订,这一切都使我的理论知识和动手能力有了很大的提高,更加熟悉了单片机的硬件结构和软件编程方法,对单片机的工作方式有了进一步的认知。
同时,对一些外围设备比如传感器、LED数码管、键盘、蜂鸣器等有了一定的了解。
而且对protel软件以及visio画图软件跟家熟悉。
我还学会了对一项课题如何设计:
首先,要分析需要设计的系统要实现什么功能,需要什么器件;然后,针对设计选择相应的硬件,选用硬件时不仅要选用经济的,更重要的是如何能更精确更方便的完成系统的要求;再次,对各个硬件的软件实现要弄清楚,如何更好的实现各个硬件的协调,更好的通过主控制器件实现硬件的功能。
最后,通过各种改进和完善,让设计更好的达到系统要求。
由于本人水平有限,此设计中也存在很大的不足。
比如对一些芯片的选择不是最佳,可能导致温湿度显示不是很灵敏。
当然,本次的课程设计也是毕业设计之前的最后一次设计了,它给我们提供了一次宝贵的练手的机会,让我们熟稔设计的流程步骤,温故基础的专业知识,熟练绘图软件的使用,这些都为即将到来的毕业设计打下坚实基础。
它把浅浅的理论上升到实践,使我对理论知识的掌握更加深入,从而提升了自己的专业素养。
最后谢谢老师的指导和同学的帮助,是我这次课程设计能够顺利地完成。
五、参考文献
[1]周坚.单片机轻松入门[M].北京:
北京航空航天出版社,2002.
[2]孙育才.MCS-51系列单片微型计算机及其应用[M].南京:
东南大学出版社,2004.
[3]王宝芹,范长胜,郭艳玲.基于单片机的温室温湿度控制系统设计[J].哈尔滨:
林业机械与木工设备,2008.
[4]公孙茂,马宝匍,孙晨.单片机入口接口实例集[M].北京:
北京航空航天出版社,2002.
[5]龙泽明,顾立志,王桂莲,陈光军.MCS-51单片机原理及工程应用[M].北京:
国防工业出版社,2005.
[6]胡辉.王晓,戴永成.单片机原理及应用设计[M].北京:
中国水利水电出版社,2005.
[7]蔡菲娜.单片微型计算机原理和应用[M]。
杭州:
浙江大学出版社,2003.
[8]王宝芹,范长胜,郭艳玲.基于单片机的温室温湿度控制系统设计[J].哈尔滨:
林业机械与木工设备,2008.
[9]郭天祥.51单片机C语言教程[M].北京:
电子工业出版社,2009.
附录A程序清单
#include
#include
#include
typedefunsignedcharU8;
typedefunsignedintU16;
#definelcd_H
#include
#defineHIGH1
#defineLOW0
#defineTRUE1
#defineFALSE0
#defineZERO0
#defineMSB0x80
#defineLSB0x01
#defineLINE10
#defineLINE21
#defineLINE1_HEAD0x80
#defineLINE2_HEAD0xC0
#defineDATA_MODE0x38
#defineOPEN_SCREEN0x0C
#defineDISPLAY_ADDRESS0x80
#defineCLEARSCREENLCD_en_com(0x01)
#defineLCDIOP1
sbitLCD1602_RS=P2^4;
sbitLCD1602_RW=P2^3;
sbitLCD1602_EN=P2^2;
sbitP2_0=P2^0;
sbitSPK=P0^7;
intt1,t2,ss;
U8U8FLAG;
U8U8count,U8temp;
U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8U8comdata;
unsignedcharstr1[]={'s','h','i','d','u',':
'};
unsignedcharstr2[]={'w','e','n','d','u',':
'};
LCD_init();
voidDelay(U16j)
{U8i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
voidDelay_10us(void)
{
U8i;
i--;
i--;
i--;
i--;
i--;
i--;
}
voidCOM(void)
{
U8i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!
P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
if(U8FLAG==1)break;
U8comdata<<=1;
U8comdata|=U8temp;
}
}
voidLCD_Read_BF(void)
{
unsignedcharread=0;
LCD1602_RS=LOW;
LCD1602_RW=HIGH;
LCD1602_EN=HIGH;
LCDIO=0XFF;
read=LCDIO;
}
voidLCD_en_com(unsignedcharcommand)
{
LCD_Read_BF();
LCD1602_RS=LOW;
LCD1602_RW=LOW;
LCD1602_EN=HIGH;
LCDIO=command;
LCD1602_EN=LOW;
}
voidLCD_en_dat(unsignedchardat)
{
LCD_Read_BF();
LCD1602_RS=HIGH;
LCD1602_RW=LOW;
LCD1602_EN=HIGH;
LCDIO=dat;
LCD1602_EN=LOW;
}
voidLCD_set_xy(unsignedcharx,unsignedchary)
{
unsignedcharaddress;
if(y==LINE1)
address=LINE1_HEAD+x;
elseaddress=LINE2_HEAD+x;
LCD_en_com(address);
}
voidLCD_write_char(unsignedcharx,unsignedchary,unsignedchardat)
{
LCD_set_xy(x,y);
LCD_en_dat(dat);
}
voidLCD_write_string(unsignedcharx,unsignedchary,unsignedchar*s)
{
LCD_set_xy(x,y);
while(*s)
{
LCDIO=*s;
LCD_en_dat(*s);
s++;
}
}
voidLCD_Init(void)
{
LCD_en_com(0x38);
Delay(5);
LCD_en_com(0x38);
Delay(5);
LCD_en_com(0x38);
Delay(5);
LCD_en_com(0x38);
LCD_en_com(0x08);
LCD_en_com(0x01);
LCD_en_com(0x06);
Delay(5);
LCD_en_com(0x0C);
}
voidRH(void)
{
P2_0=0;
Delay(180);
P2_0=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
P2_0=1;
if(!
P2_0)
{
U8FLAG=2;
while((!
P2_0)&&U8FLAG++);
U8FLAG=2;
while((P2_0)&&U8FLAG++);
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8co