基于单片机的温湿度检测电路优质参考Word格式文档下载.docx
《基于单片机的温湿度检测电路优质参考Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的温湿度检测电路优质参考Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
5.1温度部分·
5.2湿度部分·
(8)
5.3液晶显示部分·
(9)
5.4主程序·
(10)
6、所思所感·
(11)
7、参考文献·
1、作品名称:
基于单片机的温湿度检测电路
2、作品简介及其功能:
随着工业自动化的愈趋完善,各种各样的传感器被用在了各式各样的场合。
而温度和湿度这两个重要的参数成为了实现过程控制自动化必不可少的过程。
换言之,问题具体化为了选择怎样的传感器及如何去检测温湿度的变化,并根据检测结果调整系统以使之保持在最佳工作状态。
本电路即是用来检测环境温度及湿度的情况并实时显示及作出处理的。
虽然原理很简单却可靠实用。
下面将给出详细描述。
3、电路设计思路及其硬件的选择
先说测温部分。
考虑到测温方案有很多种,包括电阻式测温、热电偶测温等等。
而由于外界诸多因素的变化,由分立元件所搭建的电路会受到各种各样的干扰而导致测量结果的偏差,比如电阻会因温度升高而阻值降低,三极管在发热状态下基极电流会升高等等。
这会带来测量误差,从而导致一系列负面响应。
考虑到这些问题,方案最终被定在了集成温度测量传感器DS18B20上。
DS18B20是美国DALLAS公司生产的集成温度传感器。
它将测温、处理及输入输出等模拟+数字电路集成在一块形似三极管的三端芯片上,体积小巧、功能强大,且数据的输入输出只需要一跟端口线,并且可在一根总线上并联多个芯片以实现多点测温。
用之与单片机结合简直是温度检测的不二选择。
再说湿度检测部分。
湿度检测部分也有许多方案可供选择,同样也有集成湿度检测元件。
但考虑到其价格及普遍使用程度,最后放弃了集成元件的方案,改用分立式的电容测湿电路。
本电路在工业上使用普遍且方案成熟,不失为可行方法之一。
控制器方面,自然是使用STC89C52了,实惠够用。
辅助部分有键盘部分和显示部分,会在后面有详细的介绍。
4、电路的设计与成型:
4.1供电部分:
电路图如图4.1.1所示。
图4.1.1电源电路
考虑到取电源的方便性,电路的电源部分采取了标准9V电源接口引入然后用LM7805集成稳压芯片稳压输出稳定5V电压的方案。
这种方案最大的好处是节省电源部分的体积,缺点则是无法透彻理解电源稳压的原理及实现方法。
4.2微控制器部分:
微控制器电路图如图4.2.1所示:
图4.2.1微控制器电路
微控制器为通用的51单片机系统,简单明了。
4.3测温部分:
温度检测电路如图4.3.1所示。
如图所示,集成温度传感器的数据接口
直接与单片机的P2.5口相连,且需要加一个
10K的上拉电阻。
图4.3.1测温电路
4.4测湿部分:
测湿电路图如图4.4.1所示。
由于测湿传感器是采用的电容式
测湿传感器,故对湿度的测量转变为
了对变化电容的容值检测。
检测容值
的有效方案首选由555芯片组成的多
谐振荡器,如右图所示。
如图,当电路通电时,电容HS0001
被充电。
当触发端2脚的电压上升到2*VCC5/3图4.4.1测湿电路
时,输出端3变为低电平,同时电容通过7脚放电,2脚电平下降;
当2脚电平下降到VCC5/3时,输出端3脚转变为高电平。
电容HS0001放电所需时间为:
Td=RH4*CHS0001*㏑2
当放电结束时,VCC5将通过RH3、RH4向电容HS0001充电。
2脚电压由VCC5/3
上升到2*VCC5/3所需的时间为:
Tu=(RH4+RH3)*CHS0001*㏑2
当3脚上升到2*VCC5/3时,电路又翻转为低电平。
如此周而复始,就在电路的输出端3脚得到一个周期性的矩形波,通过单片机的外部中断口可以检测这个矩形波并得到其频率,频率的计算公式如下:
f=1/(Td+Tu)=1/(2*RH4+RH3)*CHS0001*㏑2
进而得到电容值的计算公式:
CHS0001=1/(2*RH4+RH3)*f*㏑2
这样就能得到测湿电容CHS0001的电容值并与湿度一一对应起来了。
4.5报警部分:
报警部分如图4.5.1所示。
当温度或者湿度超过设定值时,单片机会
控制蜂鸣器发声报警。
电路中的三极管9012当
做开关管使用,给低电平就导通。
图图4.5.1报警电路
4.6键盘部分:
键盘部分如图4.6.1所示。
由于整体电路
不需要很多按键,所以用不到矩阵键盘的方案。
单片机只需要检测哪个按键有了低电平,即可
确定哪个按键被按下了。
图
图4.6.1按键电路
4.7显示部分:
显示部分如图4.7.1所示。
本电路采用了1602液晶显示,接口简单,
控制方便。
由于本电路占用单片机的I/O口并
不多,所以采用了并行接口方式。
图4.7.1液晶显示电路
4.8整体电路及其PCB板:
整体电路如图4.8.1所示:
图4.8.1整体电路
PCB图如图4.8.2所示:
图4.8.2PCB印制板图
5、电路软件的设计:
5.1温度部分:
用单片机控制DS18B20非常方便。
先对之进行初始化,之后就能从其中读出数据了。
以下是程序。
//初始化程序段
voidinit_18B20(void)
{
reset_18B20();
//总线复位
wbyte_18B20(0xcc);
//忽略检查ROM匹配操作
wbyte_18B20(0x4e);
//设置写模式(写暂存器)
/*wbyte_18B20(0x21);
//设置温度上限为33【设置则精度只能是0.5】
wbyte_18B20(0x1c);
//设置最低温度为28*/
wbyte_18B20(0x1f);
//写温度计配置寄存器
}
//数据提取程序段
uintgetdat_18B20()
floatc;
uinttemp;
ucharh,l;
conv_18B20();
delay_18B20
(1);
//稍作延时
wbyte_18B20(0xbe);
//发送读取温度数据的命令
l=rbyte_18B20();
//读取低8位
h=rbyte_18B20();
//读取高8位
flag_18B20=h&
0x80;
if(flag_18B20)//最高位为1,温度为负
{
temp=h;
temp=temp<
<
8;
//读取的高8位数据装在temp高8位
temp=temp|l;
temp=~temp+1;
c=temp*0.0625;
temp=c*100+0.5;
}
else
return(temp);
//温度整数部分2位,小数部分2位
5.2湿度部分:
由于需要检测的信号是一定频率的方波,所以最佳检测方案莫过于用单片机的计数器在一定时间内进行计数,进而计算出其频率。
其函数如下所示。
//初始化程序段,用于对外部中断0和定时器0进行初始化设置
voidinit_freq()
TMOD=0x02;
TH0=56;
TL0=56;
//定时器0,计时中断一次为200us
EA=1;
ET0=1;
EX0=1;
//开外部中断0
IT0=1;
//跳变沿触发方式(“0”为低电平触发方式)
TR0=1;
//中断程序段
voidEX0_int()interrupt0
num++;
voidT0_timer0()interrupt1
time++;
if(time==500)//200us*500=100ms,此乃100ms的定时
EX0=0;
//先把外部中断关掉
TR0=0;
//再把定时器关掉
time=0;
//记得复位,很重要
display_freq();
num=0;
//同时把中断计数清零
TR0=1;
//开启定时
EX0=1;
//开启外部中断
5.3液晶显示部分:
液晶显示部分已经是固化程序了,程序如下:
//初始化
voidinit_1602()
en_1602=0;
wcom_1602(0x38);
//数据总线8位,显示两行5*7点阵/字
wcom_1602(0x0c);
//开显示功能,且光标不显示,不闪烁
wcom_1602(0x06);
//写入一个字后光标后移,且屏幕不移动
//显示程序
voidwcom_1602(ucharc)
rw_1602=0;
rs_1602=0;
P0=c;
delay_1602
(2);
en_1602=1;
voidwdat_1602(uchard)
rs_1602=1;
P0=d;
voidwsingle_1602(ucharhang,ucharlie,uchardat)
uchark;
if(hang==1)k=0x80;
if(hang==2)k=0xc0;
k=k+lie-1;
wcom_1602(k);
wdat_1602(dat);
voidwstring_1602(ucharhang,ucharlie,uchar*dat)
uchar*p=dat