单片机温湿度测量程序编程
CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
博客写作背景----项目中解决的问题
公司有一个使用单片机多路采集温湿度的项目,还需要在上位机进行波形的查看,信号算法的处理,初步定为使用labview编写上位机程序进行处理。为啥用labview呢,因为LabVIEW是美国国家仪器公司(NI)的创新软件产品,其全称是实验室虚拟仪器工程平台(Laboratory Virtual Instrument Engineering Workbench),是一种基于G语言(Graphics Language,图形化编程语言)的测试系统软件开发平台。LabVIEW并不局限于虚拟仪器的开发,它的作用是为大型复杂测试系统提供通用的软件开发平台。目前,LabVIEW已经成为测试领域应用最广泛和最有前途的软件开发平台之一。
下面是我最近写程序的一些知识,进行了部分的整理,发出来和大家一起分享,也方便我以后查找自己的编程过程。
编程知识点–基于labview的温湿度测量
在多数情况下,测量温度的同时需要测量湿度,本节将介绍使用DHT11温湿度传感器、Arduino Uno和LabVIEW组成温湿度测量系统,可用于粮仓等场合的温湿度监控。
温湿度测量系统框图如图所示
在整个系统中,Arduino Uno作为下位机,负责DHT11的读写以及数据传输;LabVIEW编写的显示软件作为上位机;上下位机利用USB-TTL接口实现通信。
DHT11数字温湿度传感器,是一款含有已校准数字信号输出的温湿度复合传感器,采用专用的数字模块采集技术和温湿度传感技术,具有极高的可靠性与卓越的长期稳定性,内部包含一个电阻式感湿元件和一个NTC测温元件。DHT11传感器都经过实验室校准,校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。采用单线制串行接口,超小的体积、极低的功耗,使系统集成变得简易快捷,信号传输距离可达20米以上
DHT11的供电电压为3.3~5V,测量范围为湿度20%~90%RH,温度0~50℃,测量精度为湿度±5%RH,温度±2℃,测量分辨率为湿度1%RH,温度1℃。需要注意的是,DHT11传感器上电之后,要等待1s以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VCC,GND)之间可增加一个100nF的电容,用以去耦滤波。引脚说明如表所示DOUT用于微处理器与DHT11之间的通信和同步,采用单总线数据格式,一次通信时间4ms左右。主机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,主机可选择读取部分数据。在高速模式下,DHT11接收到开始信号即触发一次温湿度采集,如果没有接收到主机发送的开始信号,DHT11不会主动进行温湿度采集。
DHT11的Arduino库文件下载地址为:https://github.com/markruys/arduino-DHT。DHT11库文件有3个函数:dht.setup(int Pin)、dht.getHumidity()、dht.getTemperature()。
❑dht.setup(int Pin):设置DHT11总线的连接管脚号,输入参数为所连接的管脚号,无返回参数。
❑dht.getHumidity():获取DHT11的湿度值,无输入参数,返回值为湿度值,double类型。
❑dht.getTemperature():获取DHT11的温度值,无输入参数,返回值为温度值,double类型。
如果使用的是DHT11模块,则将DHT11温湿度模块的VCC、GND、DOUT引脚分别接至Arduino Uno控制板上的+5V、GND、数字端口2。
如果使用的是DHT11传感器,则还需要在DOUT与VCC之间串联5kΩ的上拉电阻。温湿度测量系统硬件连接
LabVIEW上位机部分需要完成以下功能:
1)向下位机Arduino控制器发送温度采集命令,Arduino控制器通过串口接收上位机命令,完成温度数据的采集之后将数据回传,LabVIEW软件将回传的温度数据显示在前面板上;
2)向下位机Arduino控制器发送湿度采集命令,Arduino控制器通过串口接收上位机命令,完成湿度数据的采集之后将数据回传,LabVIEW软件将回传的湿度数据显示在前面板上。
LabVIEW上位机主程序的结构为顺序结构+While循环。首先,在顺序结构中的第一帧中,通过设置的串口号来初始化串口通信。然后,程序进入While循环和顺序结构,依次向Arduino Uno控制器发送温度和湿度测量的命令码,接收到返回的温度和湿度数据之后,显示在前面板上。最后,关闭串口通信。
为了保证通信的正确性,在数据帧中设置0x55和0xAA为校验帧,0x11为温度采集命令码,0x10为湿度采集命令码。LabVIEW上位机程序框图如图
通过USB电缆连接Arduino Uno控制器与计算机,使用高温烘烤DHT11温湿度传感器和向DHT11温湿度传感器的测试窗吹气,得到如图所示的测量结果。