您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 基于单片机的温湿度检测电路
1“温湿度传感器”作品简介作品名称:基于51单片机的温湿度检测电路2目录1、作品名称······························(3)2、作品简介及其功能······················(3)3、电路设计思路及其硬件的选择············(3)4、电路的设计与成型······················(3)4.1供电部分·····························(3)4.2微控制器部分·························(4)4.3测温部分·····························(4)4.4测湿部分·····························(5)4.5报警部分·····························(5)4.6键盘部分·····························(5)4.7显示部分·····························(6)4.8整体电路及其PCB板····················(6)5、电路软件的设计··························(7)5.1温度部分······························(7)5.2湿度部分······························(8)5.3液晶显示部分··························(9)5.4主程序································(10)6、所思所感································(11)7、参考文献································(11)31、作品名称:基于单片机的温湿度检测电路2、作品简介及其功能:随着工业自动化的愈趋完善,各种各样的传感器被用在了各式各样的场合。而温度和湿度这两个重要的参数成为了实现过程控制自动化必不可少的过程。换言之,问题具体化为了选择怎样的传感器及如何去检测温湿度的变化,并根据检测结果调整系统以使之保持在最佳工作状态。本电路即是用来检测环境温度及湿度的情况并实时显示及作出处理的。虽然原理很简单却可靠实用。下面将给出详细描述。3、电路设计思路及其硬件的选择先说测温部分。考虑到测温方案有很多种,包括电阻式测温、热电偶测温等等。而由于外界诸多因素的变化,由分立元件所搭建的电路会受到各种各样的干扰而导致测量结果的偏差,比如电阻会因温度升高而阻值降低,三极管在发热状态下基极电流会升高等等。这会带来测量误差,从而导致一系列负面响应。考虑到这些问题,方案最终被定在了集成温度测量传感器DS18B20上。DS18B20是美国DALLAS公司生产的集成温度传感器。它将测温、处理及输入输出等模拟+数字电路集成在一块形似三极管的三端芯片上,体积小巧、功能强大,且数据的输入输出只需要一跟端口线,并且可在一根总线上并联多个芯片以实现多点测温。用之与单片机结合简直是温度检测的不二选择。再说湿度检测部分。湿度检测部分也有许多方案可供选择,同样也有集成湿度检测元件。但考虑到其价格及普遍使用程度,最后放弃了集成元件的方案,改用分立式的电容测湿电路。本电路在工业上使用普遍且方案成熟,不失为可行方法之一。控制器方面,自然是使用STC89C52了,实惠够用。辅助部分有键盘部分和显示部分,会在后面有详细的介绍。4、电路的设计与成型:4.1供电部分:电路图如图4.1.1所示。4图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测温电路54.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按键电路64.7显示部分:显示部分如图4.7.1所示。本电路采用了1602液晶显示,接口简单,控制方便。由于本电路占用单片机的I/O口并不多,所以采用了并行接口方式。图4.7.1液晶显示电路4.8整体电路及其PCB板:整体电路如图4.8.1所示:图4.8.1整体电路7PCB图如图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);//写温度计配置寄存器}8//数据提取程序段uintgetdat_18B20(){floatc;uinttemp;ucharh,l;conv_18B20();reset_18B20();delay_18B20(1);//稍作延时wbyte_18B20(0xcc);wbyte_18B20(0xbe);//发送读取温度数据的命令l=rbyte_18B20();//读取低8位h=rbyte_18B20();//读取高8位flag_18B20=h&0x80;if(flag_18B20)//最高位为1,温度为负{temp=h;temp=temp8;//读取的高8位数据装在temp高8位temp=temp|l;temp=~temp+1;c=temp*0.0625;temp=c*100+0.5;}else{temp=h;temp=temp8;temp=temp|l;c=temp*0.0625;temp=c*100+0.5;}return(temp);//温度整数部分2位,小数部分2位}5.2湿度部分:由于需要检测的信号是一定频率的方波,所以最佳检测方案莫过于用单片机的计数器在一定时间内进行计数,进而计算出其频率。其函数如下所示。//初始化程序段,用于对外部中断0和定时器0进行初始化设置voidinit_freq(){TMOD=0x02;9TH0=56;TL0=56;//定时器0,计时中断一次为200usEA=1;ET0=1;EX0=1;//开外部中断0IT0=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);//写入一个字后光标后移,且屏幕不移动}//显示程序10voidwcom_1602(ucharc){rw_1602=0;rs_1602=0;P0=c;en_1602=0;delay_1602(2);en_1602=1;delay_1602(2);en_1602=0;}voidwdat_1602(uchard){rw_1602=0;rs_1602=1;P0=d;en_1602=0;delay_1602(2);en_1602=1;delay_1602(2);en_1602=0;}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){uchark;uchar*p=dat;if(hang==1)k=0x80;if(hang==2)k=0xc0;k=k+lie-1;wcom_1602(k);while(*p!='\0'){wdat_1602(*p);p++;}p=0;}5.4主程序:为了简化主程序,使用了头文件包含的形式,这样主程序看起来干净多了:#include1602.h#includeDS18B20.h11#includefreqchk.hvoidmain(){init_1602();init_18B20();init_freq();while(1);}6、所思所感:说实话,其实以前已经分别做过了温度和湿度的检测电路,这次只不过把它们俩整合起来而已,可以说是驾轻就熟,较为顺利。通过这次制作,我强化了PCB板的布局、压缩等多方面的技巧,收获不小。可以说这次在传感器应用方面的收获没有在制板方面的收获主要,这也可算是不错了。我明白了一个道理,只要用心,即使是最平凡的事上也能得到收获的,而且千万不要小看每一件简单的事物,即使最细微的细节也能导致一个系统的崩盘。防微杜渐才是主要的,亡羊补牢之侥幸心理要不得。7、参考文献【1】张毅刚.新编MCS-51单片机应用设计.哈尔滨工业大学出版社;【2】郭天祥.51单片机C语言教程.电子工业出版社
本文标题:基于单片机的温湿度检测电路
链接地址:https://www.777doc.com/doc-1903249 .html