实验中的温湿度传感器是树莓派基础实验套件里其中一个模块,
后面会讲解里面其他的实验,感兴趣的可以看看。
有地方需要纠错改正的敬请联系我或发在评论区哦
概述
- DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个8位单片机控制一个电阻式感湿元件和一个 NTC测温元件。
- 与DS18B20数字型温度传感器相比,DHT11既能检测温度又能检测湿度。DHT11传感器采用单线制串行接口,其Dout引脚接上一个5K的上拉电阻后可直接与单片机的I/O口连接。信号传输距离可达20米以上,具有抗干扰能力强、性价比极高、响应速度快等优点。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。
- 主要用途是检测环境温湿度。
参数/接口说明
工作电压:3V-5.5V
湿度测量范围:20%-95%RH
湿度精度:士5%RH
温度测量范围:0°C-50°C
保存条件:10~40°C,湿度60%以下
温度精度:士2°C
引脚1:数字输出引脚
引脚2:电源正极(3~5.5v)
引脚3:电源负极
使用示例及原理图
DHT11温湿度传感器因其超小的体积、极低的功耗,可以很方便地接到单片机电路中,基于arduino可以DIY简易的温湿度电子钟。
原理图:
如何操作
下面,以接入我们的开发板为例。
① 将配套程序下载到相应的开发板中。
② 将串口线和模块接入开发板,给开发板上电,打开串口调试软件。
模块与开发板连接如下表所示:
串口配置如下表所示:
③ 打开串口调试软件,串口输出对应的湿度和温度数据。例如:
Humidity=33
Temperature=28
①DHT11初始化
- 主机发送复位信号
- 总线空闲状态为高电平,主机将总线拉低等待DHT11响应,拉低时间必须大于18ms,保证DHT11能检测到复位信号。
- 主机在发送复位信号结束后,将总线拉高或切换为输入模式,延时时间为20~40us,此时复位信号发送完毕,主机等待接收DHT11的响应信号。
- DHT11发送响应信号
-
DHT11检测到复位信号后,触发一次采样,并拉低总线80us表示响应信号,告诉主机数据已经准备好了。
-
DHT11发送80us响应信号后会拉高总线80us,之后开始传输数据。
②数据传输
DHT11在拉高总线80us后开始传输数据。每1bit数据都以50us低电平时隙开始,告诉主机开始传输一位数据了。以高电平的长短定义数据位是0还是1,如果检测到响应信号为高电平,则DHT11初始化失败,请检查线路是否连接正常。当最后1bit数据传送完毕后,DHT11 拉低总线 50us,表示数据传输完毕,随后总线由上拉电阻拉高进入空闲状态。
- 数据‘0’时序
- 当DHT11发送50us低电平时隙过后拉高总线,高电平持续26~28us,则表示数据“0”。
- 数据‘1’时序
- 当DHT11发送50us低电平时隙过后拉高总线,高电平持续70us,则表示数据“1”。
- 总时序
- 主机把总线拉低大于18ms,保证DHT11能检测到起始信号;
- 主机发送复位信号结束后,将总线拉高或改为输入模式,延时等待20-40us后,读取DHT11的响应信号;
- 主机检测到总线被拉低时(DHT11发送的起始信号),每隔1us计数一次,直至总线拉高,计算低电平时间是否为80us。若读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常;
- 主机检测总线被拉高后,重新计数检测高电平时间,如果检测到响应信号之后的高电平时间为80us,则准备开始接收数据。
- 主机接收的每一bit数据都是以50us低电平时隙开始的,高电平的长短定了数据位是0还是1。
- 当主机接收完最后一bit数据后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
- 注意
- 实际上DHT11的响应时间并不是标准的80us,往往存在误差,当响应时间处于 20~100us 之间时就可以认定响应成功。
- 由于 DHT11 时序要求非常严格,所以在操作时序的时候,为了防止中断干扰总线时序,先关闭总中断,操作完毕后再打开总中断。
- DHT11只有在接收到复位信号后才触发一次温湿度采集,如果没有接收到主机发送复位信号,DHT11不主动进行温湿度采集。
- 0/1时序区分
Arduino、树莓派程序
Arduino:
实验现象:串口输出DHT11传感器的测量数据
电路连接:
程序运行:
树莓派:
电路连接:
程序运行:
-
安装gpiozero库
-
其它树莓派上的系统可以使下面命令来安装该库:
-
运行以下语句可以查看树莓派GPIO口定义
-
安装adafruit-circuitpython-dht库
-
下载树莓派参考例程,将文件解压后拷贝放在用户名目录下,运行
-
此时可看见树莓派在正确运行DHT11程序,打印检测到的温度和湿度值。若想退出,按ctrl+C即可
-
更多指令请查看gpiozero文档