张东辉 刘春东
(河北建筑工程学院机械工程学院,河北 张家口 075000)
无论在实际生产还是人们日常生活中,都经常会遇到进行温湿度检测的场合,比如:研究表明粮仓需要维持一定的温湿度才能确保粮食的品质,室内家居需要维持一定的温湿度,人们才会感觉更舒适.由此可见,快速有效的对温湿度进行监测对实际生产生活具有重要意义.因此,本文设计并开发了一款使用方便、价格合适的室内温湿度检测仪.
该检测仪要能够采集实际环境的温度和湿度,并能通过LCD1602液晶显示屏进行实时显示.环境的温度和湿度可以通过传感器DHT11进行采集,DHT11是全数字型温湿度传感器,DHT11摄氏温度测量范围:0~50 ℃,摄氏温度测量精度:±1~±2 ℃,其湿度测量范围在20%RH—95%RH[1],它可以满足一般环境温湿度监测的需求.温湿度的显示采用LCD1602,该显示模块具有体积小、功耗低、显示内容丰富、超薄轻巧等优点[2].DHT11传感器是单总线器件,其数据不能直接送往LCD1602进行显示,需要通过单片机对传感器送来的数据进行计算处理,而且LCD1602的显示也需要单片机进行初始化、显示控制等.因此,该检测仪以单片机为核心,由于STC89C52RC单片机具有较高的性价比,所以采用STC89C52RC单片机作为温湿度检测仪的主控芯片,供电方式采用USB供电.具体所需要的所有元件见表1所示.
温湿度检测仪由STC89C52RC单片机及最小系统、温湿度传感器电路、显示电路及供电电路等主要部分组成.温湿度检测采用DHT11传感器,单片机在软件程序控制下读取DHT11的温湿度数据,并且对数据进行计算处理得到实际温度和湿度,送往LCD1602液晶屏进行显示.温湿度检测仪的系统整体框图如图1所示.
表1 温湿度检测仪所需元件清单
图1 系统整体框图
立创EDA是一个基于云端平台的电路设计工具,联网即用,2019年7月推出离线版,立创EDA的设计操作界面简洁,操作步骤简单[3].图2为基于立创EDA设计的温湿度检测仪的电路原理图.电路原理图采用模块化设计,包括八个模块,分别用M1、M2、…M8表示,采用模块化设计使得电路更简洁,其中M1模块为晶振电路,为单片机提供工作所需要的时钟;M2模块为复位电路,当单片机上电瞬间,通过对电容充电在RST引脚上产生高电平使单片机复位,在单片机启动之后可以通过按键K4对单片机进行复位;M3模块为主控芯片单片机,STC89C52RC单片机共有40根引脚,其中电源引脚2根,分别为VCC和GND;控制引脚4根,使用片内ROM,因此EA引脚接高电平;IO引脚共32根,用于单片机的输入和输出;;M4模块LCD1602显示模块,LCD1602的引脚有16根,对温湿度信息进行显示;M5为温湿度传感器模块,DHT11有4根引脚,分别是VCC、GND、IO和NC,NC悬空即可,I/O需要外接5k的上拉电阻,M6为供电接口,SW1为电源开关;M7为电源指示灯,接通电源即SW1按下时,LED1点亮,M8为单片机程序下载接口,通过下载器与J1端子相连,在STC-ISP软件配合下,将Hex文件烧录到单片机.
图2 温湿度检测仪电路原理图
在已经完成电路图的基础上,将电路图转PCB,在转PCB之前需要进行原理图检查,通过原理图转PCB会把元件导入到PCB中,然后调整元件位置,合理布局,最后进行布线,立创EDA可以进行手动布线,也可以进行自动布线.该PCB采用先自动布线再手动局部调整的方式布线,布线完成之后会出现一个布线完成对话框,显示布线完成如图3所示,布线失败数为0,说明布线成功,自动布线之后LCD1602液晶显示器与单片机引脚的连线间距过小,可以进行手动调整,结果如图4所示,接下来对VCC和GND网络进行敷铜.
图3 布线完成对话框图 图4 PCB自动布线手动调整
立创EDA软件支持PCB的2D预览与3D模型预览,设计完成PCB后,可以通过2D预览查看PCB图样,通过3D模型直观的观察所设计产品的元件布局及外型,通过观察其3D模型,可以发现PCB设计中存在的一些问题,比如元器件的布局是否合理等.
Gerber文件是一种符合EIA标准的,有GerberScientific公司定义为用于驱动光绘机的文件.PCB打样厂用Gerber文件制作PCB.PCB设计好之后生成Gerber文件,即可交由工厂生产PCB电路板,可以在PCB板上加上自己的LOGO或标注.
温湿度检测仪中的DHT11和LCD1602液晶显示器是需要一定的时序才能进行读取温湿度和显示的,因此需要根据各器件的时序编写其单片机程序,采用多文件的编程方式,包括主程序main.c、DHT11_LCD1602.c和头文件DTH11_LCD1602.h,便于程序调试寻找错误和后期移植.在主程序main.c中,通过文件包含将所采用的单片机的头文件和自定义头文件包含进来,定义LCD1602的显示数组,LCD1602_Init()、LCD_Delay()、DHT11_delay_ms()、DHT11_Receive_All()、LCD1602_Display()为自定义函数调用,函数具体实现在DHT11_L CD1602.c中.主程序如下:
#include"reg52.h"
#include"DTH11_LCD1602.h"
unchar code LcdData[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void main()
{
LCD1602_Init(); //初始化LCD
LCD_Delay(10);
while(1)
{
DHT11_delay_ms(1500); //DHT11上电后要等待1S以越过不稳定状态
DHT11_Receive_All();
LCD1602_Display();
}
}
程序采用C51语言进行编写程序,通过Keil进行程序编写及调试,然后生成单片机需要的Hex文件,如图5所示,Keil编译显示0错误、生成hex文件.
图5 Keil编译无错误界面
首先进行实物焊接,根据电路原理图和元器件清单将元器件焊接在PCB电路板上,然后通过下载器和PCB板上的下载电路,将Keil生成的Hex文件下载到单片机里,观察显示结果.经过反复调试和修改程序,最终得到正确的显示效果,如图6所示.LCD1602第一行显示湿度,第二行显示温度.如果改变环境的温湿度,LCD1602显示也会随着发生改变,进行实时显示.
图6 温湿度显示
在调试过程中遇到两个问题,一个是LCD不显示,经过改变可调电阻的值,使得液晶屏的亮度发生变化,从而能够进行显示;另一个问题是只显示第一行,通过调整程序当中LCD1602的初始化过程,完美解决了在调试过程中出现的问题.
经过方案设计、电路原理图设计及PCB打板、焊接、编程等过程,开发出一款性价比较高的温湿度检测仪,能够进行常规的检测,适用于一般需求,和市面上现有产品相比具有体积小、检测方便等有点,但成本造价有些偏高.该检测仪仍有以下需要改进和完善的地方:(1)元件位置的布置和LCD162配套的可调电阻的位置如果不被LCD1602遮挡,那么调整LCD1602的亮度会方便;(2)单片机若是横着摆放,会节省一定的空间,可以进一步降低PCB的成本,同时产品体积更小.(3)不便于扩展:该检测仪没有预留出接口,单片机的IO口还有多个空闲,在PCB设计的时候没有引出来,对于后续扩展带来不便.