【STM32F103ZET6开发板】第3-3讲:DHT11温湿度传感器
【STM32F103ZET6开发板】第3-3讲:DHT11温湿度传感器
【STM32F103ZET6开发板】第3-3讲:DHT11温湿度传感器
点击搜索

【STM32F103ZET6开发板】第3-3讲:DHT11温湿度传感器

时间: 2023-11-23 来源:消防监测

  了解DHT11数字温湿度传感器的基础原理及单总线单总线通信的程序设计。

  编写程序检测DHT11温湿度值通过串口1在串口调试助手和艾克姆实验助手上显示。

  编写程序检测DHT11温湿度值通过RS485接口在串口调试助手和艾克姆实验助手上显示。

  湿敏元件是最简单的湿度传感器。湿敏元件很常见的是电阻式湿敏元件和电容式湿敏元件。除此之外,还有电解质离子型湿敏元件、重量型湿敏元件(利用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声表面波湿敏元件等。下面就电阻式湿敏元件和电容式湿敏元件进行介绍。

  电阻式湿敏元件一般指的是湿敏电阻,湿敏电阻的特点是在基片上覆盖一层用感湿材料制造成的膜,当空气中的水蒸气吸附在感湿膜上时,元件的电阻率和电阻值都发生明显的变化,利用这一特性即可测量湿度。湿敏电阻的种类很多,例如金属氧化物湿敏电阻、硅湿敏电阻、陶瓷湿敏电阻等。

  电容式湿敏元件一般指的就是湿敏电容,湿敏电容一般是用高分子薄膜电容制成的,常用的高分子材料有聚苯乙烯、聚酰亚胺、酷酸醋酸纤维等。当环境湿度发生改变时,湿敏电容的介电常数发生明显的变化,使其电容量也发生明显的变化,其电容变化量与相对湿度成正比。

  湿敏电容的主要优点是灵敏度较高、产品互换性好、响应速度快、湿度的滞后量小、便于制造、容易实现小型化和集成化,其精度一般比湿敏电阻要低一些。

  注:湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,非常容易被污染而影响其测量精度及长期稳定性。

  研究表明,温度和湿度有着密不可分的关系,人的体感并不单纯受温度或是湿度的影响,而是两者综合作用的结果。室内温度不宜过高或过低,室温过低会使人感到寒冷、缩手缩脚,人体消耗热能也会大幅度提升;室温过高会使人感到闷热难受,令人精神不振、头昏脑胀,昏昏欲睡。室内湿度也不宜过高或过低,室内湿度过高,人体散热就很难;室内湿度过低,空气干燥,人的呼吸道会干涩难受。

  据研究表明,室内最适合温度应保持在室温达18℃时,相对湿度应保持在30~40%,室温达 25℃ 时,相对湿度应保持在40~50%为最宜。温度的概念大家比较了解,下面重点介绍下与湿度有关的知识点。湿度,一般在气象学中指的是空气中水分含量,它是空气中水蒸气的含量。空气中液态或固态的水不算在湿度中。不含水蒸气的空气被称为干空气。下面介绍与湿度有关的3个概念。相对湿度(Relative Humidity)是指气体中(通常为空气中)所含水蒸气量(水蒸气压)与其空气相同情况下饱和水蒸气量(饱和水蒸气压)的百分比,一般用百分数表示。通常所说的湿度都是指相对湿度,比如说某个房间的湿度为60%,即指该房间的相对湿度是60%。绝对湿度是指一定体积的空气中含有的水蒸气的质量,一般其单位是克/立方米。绝对湿度的最大限度是饱和状态下的最高湿度。绝对湿度只有与温度一起才有意义,因为空气中能够含有的湿度的量随温度而变化,在不同的温度中绝对湿度也不同,因为随着温度的变化空气的体积也要发生明显的变化。但绝对湿度越靠近最高湿度,它随温度的变化就越小饱和湿度是表示在一定温度下,单位容积空气中所能容纳的水蒸气量的最大限度。如果超过这个限度,多余的水蒸气就会凝结,变成水滴,此时的空气中水分含量便称为饱和湿度。

  DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,也是一款电容式湿度传感器。它应用专用的数字模块采集技术和温湿度传感技术,确定保证产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

  下面给出DHT11数字温湿度传感器和带PCB底板的DHT11模块的实物图。DHT11模块相对于DHT11传感器只是加了电源指示灯及信号引脚上的上拉电阻,也方便杜邦线模块实物图

  注:艾克姆科技IK-ZET6开发板有DHT11传感器专用接口J17,用户不需要购买带PCB的DHT11模块。

  下面介绍下DHT11数字温湿度传感器的规格参数,DHT11模块的规格参数在此不做介绍。

  图3:DHT11数字温湿度传感器管脚号表2:DHT11数字温湿度传感器管脚定义

  注:MCU的GPIO口可以和DHT11的串行数据引脚DATA连接,但需要该引脚上接有上拉电阻方可有效采集传感器信息。

  IK-ZET6开发板上设计了1个DS18B20/DHT11传感器接口,该接口串行数据引脚DATA连接到STM32F103ZET6的PB1引脚上。通过单总线传感器采集的数据。

  注:独立GPIO表示开发板无另外的的电路使用这个GPIO,非独立GPIO说明开发板有其他电路用到了该GPIO。

  DHT11数字温湿度传感器单总线数字温湿度传感器采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能释放总线,而让其它设备使用总线kΩ的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,假如慢慢的出现序列混乱,器件将不响应主机。

  单总线是美国DALLAS公司推出的外围串行扩展总线技术。我们大家都知道,SPI、I²C串行通信会有专用的时钟线,而单总线则是采用单根信号线,这根信号线既传输时钟又传输数据,而且数据传输是双向的。

  单总线通信的优势:节省I/O口、资源结构相对比较简单、成本低廉、便于总线扩展和维护等。

  单总线Kbit/s,最大可达142Kbit/s,通常情况下采用100Kbit/s以下的速率传输数据。主设备I/O口可直接驱动200m范围内的从设备,经过扩展后可达1km范围。

  DHT11数字温湿度传感器DATA引脚用于与微处理器MCU进行单总线通信,下图给出MCU作为单总线从机之间通信的步骤。

  8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验位

  MDK中点击魔术棒,打开工程配置窗口,按照下图所示添加头文件包含路径。

  在“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”工程中有dht11.c文件,该文件包括了MCU单总线通信所用到的函数。这些函数仅是艾克姆科技根据DHT11手册设计的函数,仅供用户参考。下表列举了这些函数。

  解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。

  在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。

  点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。

  点击下载按钮下载程序 。若需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。

  程序运行后,打开串口调试助手选择正确的串口号,波特率设置为19200,数据位为8、停止位为1,可以观察到串口调试助手2s显示一次读取到的温湿度信息。

  注:本节的实验源码是在“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”的基础上修改。本节对应的实验源码是:“实验3-3-2:DHT11温湿度传感器 - 艾克姆实验助手显示(串口1)”。

  在使用库函数建“实验3-3-2:DHT11温湿度传感器 - 艾克姆实验助手显示(串口1)”工程时,要使用到的c文件及添加头文件包含路径的方法与介绍“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”完全一样,在此不再赘述。

  首先dht.c相关的函数及配置与“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”的代码完全一样,在此不再赘述。

  然后,在主函数中对所使用串口1及DHT11传感器DATA引脚进行初始化后,会根据艾克姆实验助手解析数据的协议发送实时读取的温湿度信息。

  解压“…\第3部分:标准库教程和实验源码\ 2 – 传感器实验程序\”目录下的压缩文件“实验3-3-3:DHT11温湿度传感器 - 串口调试助手显示(RS485)”,将解压后得到的文件夹拷贝到合适的目录,如“D\STM32F103ZET6”。

  在MDK5中执行“Project→Open Project”打开“…\DHT11\projec”目录下的工程“DHT11.uvproj”。

  点击编译按钮编译工程。注意查看编译输出栏,观察编译的结果,如果有错误,修改程序,直到编译成功为止。编译后生成的HEX文件“DHT11.hex”位于工程目录下的“Objects”文件夹中。

  点击下载按钮下载程序 。若需要对程序进行仿真,点击Debug按钮,即可将程序下载到STM32F103ZET6中进行仿真。

  程序运行后,打开串口调试助手选择正确的串口号,波特率设置为19200,数据位为8、停止位为1,可以观察到串口调试助手2s显示一次读取到的温湿度信息。

  注:本节的实验源码是在“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”的基础上修改。本节对应的实验源码是:“实验3-3-4:DHT11温湿度传感器 - 艾克姆实验助手显示(RS485)”。

  在使用库函数建“实验3-3-4:DHT11温湿度传感器 - 艾克姆实验助手显示(RS485)”工程时,要使用到的c文件及添加头文件包含路径的方法与介绍“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”完全一样,在此不再赘述。

  首先dht.c相关的函数及配置与“实验3-3-1:DHT11温湿度传感器 - 串口调试助手显示(串口1)”的代码完全一样,在此不再赘述。

  然后,在主函数中会对所使用RS485接口进行初始化,并对DHT11传感器DATA引脚进行初始化,后根据艾克姆实验助手解析数据的协议发送实时读取的温湿度信息。