七、温湿度检测模块——DHT11

发布于:2022-08-09 ⋅ 阅读:(590) ⋅ 点赞:(0)

1、概述

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

2、引脚说明及典型电路

1、VDD 供电 3.3~5.5V DC

2、DATA 串行数据,单总线

3、NC 空脚

4、GND 接地,电源负极

注意:

        1.典型应用电路中建议连接线长度短于 5m 时用 4.7K 上拉电阻,大于 5m 时根据实际情况降低上拉电 阻的阻值。

        2. 使用 3.3V 电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。

        3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取 2 次,但不建议连续多次 读取传感器,每次读取传感器间隔大于 2 秒即可获得准确的数据。

        4. 电源部分如有波动,会影响到温度。如使用开关电源纹波过大,温度会出现跳动。

3、相关参数

4、通信方式(串行半双工

4.1 单总线说明

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

例如:DHT11与STM32F103单片机相连。

4.2 单总线传送数据位定义

DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。         

数据格式: 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。        

注:其中湿度小数部分为 0。

4.3 校验位数据定义

“8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据”

8bit 校验位等于所得结果的末 8 位。

示例一:接收到的 40 位数据为:0011 0101    0000 0000    0001 1000    0000 0100    0101 0001                                                      湿度高 8 位   湿度低 8 位   温度高 8 位    温度低 8 位     校验位

计算: 0011 0101+0000 0000+0001 1000+0000 0100= 0101 0001

接收数据正确:

湿度:

0011 0101(整数)=35H=53%RH

0000 0000(小数)=00H=0.0%RH =>53%RH + 0.0%RH = 53.0%RH

温度:

0001 1000(整数)=18H=24℃

0000 0100(小数)=04H=0.4℃ =>24℃ + 0.4℃ = 24.4℃

◎特殊说明:

当温度低于 0 ℃ 时温度数据的低 8 位的最高位置为 1。

示例: -10.1 ℃ 表示为 0000 1010 1000 0001 温度:0000 1010(整数)=0AH=10℃,0000 0001(小数)=01H=0.1℃ =>-(10℃+0.1℃)= -10.1℃

示例二:接收到的 40 位数据为: 0011 0101    0000 0000   0001 1000   0000 0100  0100 1001                                                         湿度高 8 位  湿度低 8 位   温度高 8 位  温度低 8 位  校验位

计算: 0011 0101+0000 0000+0001 1000+0000 0100= 0101 0001 0101 0001 不等于 0100 1001 本次接收的数据不正确,放弃,重新接收数据。

4.4 时序

 

4.5 外设读取步骤    

        用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束 后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。信号发送如图所示。

步骤一:
        DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。

步骤二:
        微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms(最大不得超过 30ms),然后微处理器的 I/O 设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作出回答信号,发送信号如图所示:

 步骤三:
        DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA引脚处于输出状态,输出 83 微秒的低电平作为应答信号,紧接着输出 87 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 87 微秒的高电平后的数据接收,发送信号如图所示:

 步骤四:                                                                                                                                                   由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据,位数据“0” 的格式为: 54 微秒的低电平和 23-27 微秒的高电平,位数据“1”的格式为: 54 微秒的低电平加 68-74 微秒的高电平。位数据“0”、“1”格式信号如图所示:

结束信号:
        DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 54 微秒后转为输入状态,由于上拉电阻随之变为高电平。但 DHT11 内部重测环境温湿度数据,并记录数据,等待外部信号的到来。

5、代码编写步骤

1.分析硬件

        

 

DHT11:PG11:开漏输出
2.    开时钟:GPIOG
3.    配置IO模式
4.    初始化为高电平;
5.    至少得2S采集1次:
(1)    起始信号:输出
拉低;
延时20ms
拉高
(2)    响应信号:输入
等待:读输入为低:超时机制
等待:读输入为高:超时机制
(3)    读取数据:uint8_t buff[5]
For(5)
{
        For(8)
        {
                等待:读输入为低:超时机制
                等待:读输入为高:超时机制
                        延时30~60us
                If(读高)//buff[i] |=(0x01<<j);高位先填
                                1
                 Else
                                0
        }
}

(4)拉高