电子湿度计.docx
《电子湿度计.docx》由会员分享,可在线阅读,更多相关《电子湿度计.docx(14页珍藏版)》请在冰豆网上搜索。
电子湿度计
摘要
湿度是表示空气中含水分多少的物理量,有相对湿度、绝对湿度和露点等多种表示方式,其中相对湿度最为常用。
相对湿度是空气中所含水蒸汽密度和同温度下饱和水蒸汽密度的比值,通常以百分数表示,气象预报中的湿度也是用这种方式来表示的。
与温度一样,湿度也可以被人们所感知,同样也是影响人们舒适度的重要参数。
夏季开空调使人感觉舒适不仅仅是因为温度改变,湿度发生变化也是重要原因。
湿度对人们的生活很重要,电子湿度计又叫数字湿度计,它的核心器件是湿度传感器,电路对传感器输出的电信号进行处理,之后通过显示器件显示出测试结果,这种湿度计具有测量准确、显示直观、响应速度快、易于携带等多种优点,是适度发展的趋势。
此次我所做的这款湿度计是一款使用的湿度计,它简单易制、外观独特,可以用于一般家庭、仓库、机房或实验室等场所了解湿度变化情况。
本湿度计通过2位数码管显示当前环境相对湿度,测量范围为0_99%RH。
第1章绪论…………………………………………………………4
1.1课题研究的背景及意义………………………………4
第2章原理分析……………………………………………5
2.1对传感器的选择法案比较………………………5
第3章硬件设计……………………………………………6
3.1湿度——频率转换电路…………………………6
3.2单片机及其显示电路………………………………8
第4章软件设计………………………………………………8
第5章调试……………………………………………………9
第6章总结…………………………………………………9
参考文献……………………………………………………10
附录1…………………………………………………………11
附录2…………………………………………………………19
附录3…………………………………………………………20
第一章绪论
1.1课题研究的背景及意义
湿度对于人们的生活环境很更要,但相对而言人们对湿度的认识远不如温度,市场上湿度计也比温度计少。
常见的湿度计主要有干湿球湿度计、指针式湿度计和电子湿度计三种。
干湿球湿度计采用经典的干湿球法测量湿度,这种湿度计准确度高、稳定性好,但需要经常维护以保证湿球湿润,并且由于干湿球法是一种间接测量方法,因而读取测量结果的过程比较繁琐,而且对测量环境的温度、风速、洁净程度等要求比较高,使用不是很方便,此外还存在体积大、容易损坏等缺点,干湿球湿度计常用与气象观测或作为标准湿度计。
指针式湿度计基于机械形变原理,一般是在带状弹性金属材料上涂覆随时度变化而伸缩的高分子材料后卷成游丝,再通过机械部件将之与指针连接,这种湿度计结构简单、外观时尚,但测量准确度不高,多用于家庭或作为小礼品。
电子湿度计又叫数字湿度计,它的核心器件是湿度传感器,电路对传感器输出的电信号进行处理,之后通过显示器件显示出测试结果,这种湿度计具有测量准确、显示直观、响应速度快、易于携带等多种优点,是适度发展的趋势。
湿度与我们的生活息息相关,例如夏天开空调不仅仅是改变空气中的温度同时也改变湿度,因此制作一个湿度计对于我们的生活等方面是十分必要的。
第二章原理分析
一、对传感器的选择法案比较
常用的湿度传感器主要有电阻式(湿敏电阻)和
容式(湿敏电容)两种。
这两种传感器产品的一般形式都是在基片上涂覆相应的感湿材料,通过金属引线引出,为了防止感湿材料损伤和污染一些产品还具有带孔的塑料外壳。
方案一:
电阻式湿度传感器的感湿材料吸附空气中的水蒸气后,其导电率即器件的阻抗随适度的变化而变化。
为了防止出现极化现象,大多数的电阻式湿度传感器都要求使用交流供电,而且对交流电的频率和电压也有一定的要求。
在实际应用时一般把传感器作为电阻,将之与1个固定电阻构成供电电源分压电路,降分压后输出的信号送入放大、整流和滤波等处理电路,之后得到稳定的直流电压信号,完成湿度到电压的转换。
单片机通过模数转换器(ADC)对上述电压信号采样,再将采样数据进行处理即可得到最终的湿度值,此外也可以采用合适量程的模拟电压表通过对表盘进行标定用指针来指示湿度。
方案二:
电容式湿度传感器的感湿材料吸附空气中的水蒸气后,其介电常数即器件的电容随时度的变化而变化。
在应用时可以把传感器作为电容,将之与电阻和COMS时基电路或施密特触发器等电路构成振荡器,用单片机测量振荡输出信号的频率或周期,对所得数据进行处理即可得到对应的湿度值。
在要求不高的情况下,也可以用单片机控制电路对传感器进行充电放放电,通过测量充电时间来求得湿度值,这种方法将更简单。
与电阻式湿度传感器相比,电容式传感器不需要专门的交流电源供电,应用电路简单很多,并且也不需要ADC,降低了成本。
第三章硬件设计
本湿度计主要包括湿度——频率转换电路和单片机及其显示电路几部分。
1、湿度——频率转换电路
湿度——频率转换电路的电路图如图所示。
C1为HUMIREL的相对湿度传感器HS1101,这是一种采用专利技术固态聚合物结构的电容式湿度传感器,在温度为25摄氏度、湿度为55%RH时电容的典型值为180PF,可以在很宽范围的温度和湿度下工作。
它具有互换性好、能够在长时间处于饱和状态后迅速脱湿、可靠性和长时间稳定性、响应快速、温度系数低、线性好以及适合自动化生产等优点,非常适合家用电器、办公自动化等对成本敏感的产品使用。
U2为TexasInstruments的CMOS时基电路(定时器)TLC555,它与常用的NE555、LM555等时基电路功能类似,引脚排列完全相同,但TLC555采用CMOS工艺制造,具有更高的输入阻抗,与NE555相比他可以使用更小的电容来构成定时电路或振荡电路,从而能够获得更精确的定时时间和振荡频率。
TLC555的最低工作电压为2V,除了上述优点外还具有低功耗、“轨对轨”输出、输出电流大、使用方便、低成本等特点,可以灵活应用于各种电路。
电路中TLC的第2引脚(触发输入端)和第6引脚(阈值输入端相连),与外围器件构成无稳态多谐振荡器。
电路工作时C1通过R1(由R1a和R1b串联而成)和R2(由R2a和R2b串联而成)充电,当C1电压升高到阈值电压(约2Vdd/3)时内部与阈值输入端连接的比较器翻转,在内部逻辑电路的控制下C1通过R2放电,当C1电压降低到触发电压(约Vdd/3)时内部与触发输入端相连的比较器翻转,之后C1再通过R1和R2充电,不断重复以上过程。
TLC555的第3引脚(输出端)在C1充电过程中输出高电平,在C1放电过程中输出低电平,C1不断充电和放电,在第3引脚就等到了方波。
高电平和低电平持续的实间以及方波的频率可以通过下式计算:
Th=C1(R1+R2)ln2Tl=C1R2ln2
F=1/(Th+Tl)=1/(C1(R1+R2)ln2)式中,Th为高电平持续时间;Tl为低电平持续时间;f为方波的频率。
由于实际的TLC555电路内部存在传播延迟和导通电阻,所以以上各计算结果均为近视值。
按图示电路连接的参数时,在25摄氏度的环境下0~100%RH的湿度对应的输出方波的脉冲频率的典型值为7351~6033Hz。
湿度——频率转换电路也可以用HUMIREL的湿度传感器模块HF3223代替。
HF3223的电路结构与上述电路类似,它采用HS1101与CMOS反相施密特触发器HEF40106(CD40106)构成振荡电路,将湿度的变化转换为输出脉冲频率的变化。
HF3223输出脉冲频率和湿度的对应关系与上述电路有所不同,使用时程序要做适当修改。
2、单片机及其显示电路
单片机选用AT89C51,是我们所常见的单片机。
湿度——频率转换电路输出的脉冲送入单片机定时器1的外部输入口P3.5/T1,单片机利用内部计数器来对脉冲进行计数。
2位数码管采用扫描方式驱动,占用9个I/O口。
第四章软件设计
本湿度计的程序主要包括主程序、定时器0溢出中断服务和数码管显示这几部分。
具体程序可见附录。
第五章调试
调试前先对照原理图检查一遍电路,确认无误后即可通电。
上电后第一个测量周期数码管没有任何显示,约1秒后数码管开始显示湿度值。
将电路放到不同的湿度环境,读书应有所变化。
业余条件下改变湿度最简单的办法就是对着湿度传感器呼气,呼气后数码管显示的湿度值应迅速增大,由此可以判断电路工作基本正常。
在正常温度和湿度的环境下如果数码管始终显示“——”则一般是湿度——频率转换电路连接有错误或器件参数有问题。
用示波器测量U2的第3引脚波形,如果无脉冲输出或脉冲不在7351——6033Hz的范围内,则要仔细检查电路并调整器件参数,必要时更换器件;如果脉冲正常则要一步一步检查程序中计数值与湿度值的对照表是否有误以及定时时间是否准确。
第六章总结
制作这样一款电子湿度计放在桌面前能够随时了解环境湿度的改变以及气候变化的趋势,指导人们调节室内湿度,从而是生活更舒适、更科学。
本湿度计外观结构很独特,他同时也是一件非常别致的摆设。
我们同时还可以根据自己兴趣改变PCB的布局,将湿度计设计成悬挂式、水平安装式等结构;也可以采用LED显示,用电池供电,制作成便携式湿度计。
同时还可以去掉数码管电路板,单独将主电路板作为1个湿度测量模块嵌入其他需要湿度显示、湿度控制电路中使用。
采用HS1101设计的湿度测量电路是一款低成本方案,但其同时也存在着一定的测量误差,但用于一般家庭或其它要求不高的场合其准确度就已经足够了。
如果有更高的要求,可以选择性能更好的湿度传感器来设计,同时也可以通过温度补偿和校准、标定来进一步提高准确度。
通过此次制作,使我拓宽了自己的知识面,学到了很多以前自己不懂得知识,同时也掌握了一些单片机引脚的使用方法,对其有了一定程度上的感性认识。
与此同时,在制作的过程中遇到了许多的困难,这主要还是和我的知识不够全面和不够细心所造成的,在此过程中给了我很多的经验,同时我学会了在遇到困难时要迎难而上,而不是自我退缩,自我否认,同时在此还要感谢各位学长的悉心指导,这才使得我能够成功完成电子湿度计。
参考文献:
1、《创意电子设计与制作》刘宁著;
2、《单片机C程序设计》周兴华著;
3、《单片机技术基础教程与实践》夏路易著;
4、《51单片机C语言应用开发》胡杰吴磊赵鸣著;
5、上网查找资料。
附录1:
C语言程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDS1=P3^3;
sbitDS2=P3^4;
uintnum=0,counterTH1,counterTL1,f,sum;
ucharcodetable[]={0x88,0xeb,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90,0xdf};
voiddelay(uintk);//声明延时子函数
voidinitial();//声明初始化子函数
voidtranslate();//声明频率转换为相应的数码管数字
voiddisplay();//声明初始化数码管显示内容子函数
voidinitial()
{
TMOD=0x51;//选择方式寄存器
TL0=0xb0;
TH0=0x3c;//定时器0赋初值
TR0=1;//开启定时
ET0=1;//允许T0中断
TL1=0x00;
TH1=0x00;//定时器T1赋初值
TR1=1;//开启计数
ET1=1;//允许T1中断
EA=1;//打开总中断
}
//****************************************************//
voidmain()//主函数
{
initial();//调用初始化函数
while
(1)
{
translate();//调用转换子函数
display();
}
}
//******************************************************//
voidTimeT0()interrupt1//定时器0溢出中断
{
EA=0;
TR0=0;
TL0=0xb0;
TH0=0x3c;//定时器0初值重装载
num++;
if(num==20)//判断一秒时间是否到了
{
TR1=0;//关计数器1
counterTH1=TH1;
counterTL1=TL1;
f=(counterTH1<<8)|counterTL1;//读计数值
TL1=0x00;
TH1=0x00;//清计数器1
TR1=1;//重新启动计数器T1
num=0;//定时器0重新置零
}
EA=1;
TR0=1;
}
/********************************************************/
voidtranslate()
{
uintnum1,num2;
sum=0;
if(f>7351)
{
num1=10;
num2=10;
}
elseif(7224{
num1=0;
num2=(uint)(7531-f)*10/127;
}
elseif(7100{
num1=1;
num2=(uint)(7224-f)*10/124;
}
elseif(6976{
num1=2;
num2=(uint)(7100-f)*10/124;
}
elseif(6853{
num1=3;
num2=(uint)(6976-f)*10/123;
}
elseif(6728{
num1=4;
num2=(uint)(6853-f)*10/125;
}
elseif(6600{
num1=5;
num2=(uint)(6728-f)*10/128;
}
elseif(6468{
num1=6;
num2=(uint)(6600-f)*10/132;
}
elseif(6330{
num1=7;
num2=(uint)(6468-f)*10/138;
}
elseif(6186{
num1=8;
num2=(uint)(6330-f)*10/144;
}
elseif(6033{
num1=9;
num2=(uint)(6186-f)*10/153;
}
else
{
num1=10;
num2=10;//超出表范围的显示__
}
sum=num1*10+num2;
}
/********************************************************/
voiddelay(uintk)
{
inti,j;
for(i=0;ifor(j=0;j<2;j++);//延时子函数
}
/********************************************************/
voiddisplay()
{
if(sum<=99)
{
P0=table[sum/10];
DS1=0;//显示第1位数码管
delay
(1);
DS1=1;
P0=table[sum%10];
DS2=0;//显示第2位数码管
delay
(1);
DS2=1;
}
else
{
P0=table[10];
DS1=0;//显示第1位数码管
delay
(1);
DS1=1;//关第一个数码管的段码
P0=table[10];
DS2=0;//显示第2位数码管
delay
(1);
DS2=1;//关第二个数码管的段码
}
}
voidcounterT1()interrupt3
{
EA=0;
TR1=0;
TL1=0x00;
TH1=0x00;//计数器T1赋初值
TR1=1;//开启计数
ET1=1;//允许T1中断
EA=1;//打开总中断
}
附录2:
原理图整体效果
附录3:
PCB效果图
实物图的整体效果
图1
图2
图3
数码管显示部分的效果图
图1
图2