I51开发板第二十二讲 温湿度传感器DHT11

  • 传感器
  • 开发
  • SingleYork
  • LV5工程师
  • |      2016-09-17 23:21:56
  • 浏览量 8065
  • 回复:22
本帖最后由 SingleYork 于 2016-9-18 18:17 编辑 bg7.pngI51开发板第二十一讲 蜂鸣器的应用 https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=66199 (出处: ICKEY BBS)

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个8位单片机相连。该产品具有通信便捷、超快相应、抗干扰能力强等优点。每个DHT11传感器都在OTP内存中存入了在湿度校验室中获得的校准系数。校准系数以程序的形式存储,在传感器内部在检测信号的处理过程中要调用这些校准系数。单总线串行接口,仅需1个I/O口即可实现对温度和湿度的同时测量,使系统集成变得简易快捷,小体积、低功耗,信号传输距离远(20米以上),使其成为一种温湿度测量元件的不错选择。产品外观如下图所示:

上图中,传感器引脚顺序从做到右依次为:VCC、DAT、NC、GND,DHT11的供电电压为3~5.5V传感器上电后,需要等待1秒以上以越过不稳定状态,在此期间无需发任何指令。电源引脚(VCC、GND)之间可增加一个100nF的电容用以去耦滤波。其性能参数如下图所示:

DHT11的电气特性如下图所示(测试条件:VCC=5V,T=25℃):

注意:采样周期不能低于1秒!

DHT11的典型应用电路如下图所示:

根据芯片手册上的建议,连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况选择合适的上拉电阻(若是购买的已集成的模块,一般模块上都已加上拉电阻,使用的时候可以不用再加上拉电阻)。当然,如果想要精简电路的话,STC增强型单片机自带的推挽输出功能不失为一个选择,其相当于外接了一个2K的上拉电阻,但是在设计电路时需要注意:整个单片机的电流推荐不超过55mA,即从MCU-VCC流入的电流不超过55mA,从MCU-GND流出的电流不超过55mA,整体流入、流出的电流均不超过55mA。

实际上,在I51开发板上,本菜用的上拉电阻是10K,实际证明这个电阻也是没有问题的,至于具体为什么,本菜也不是很清楚,根据本菜的理解,这里的电阻仅仅起到的是一个上拉的作用,让这根通信线上产生高低电平,不知道理解的对不对,如有不对之处,还请高手指正。

温湿度传感器DHT11与外部单片机通信采用单总线的串行接口,I51开发板上用的是P34口与其通信,一次通信时间4ms左右,数据分小数部分和整数部分,其中小数部分用于以后扩展,现读出为零,内容如下:

1、一次完整的数据传输为40bit,高位先出。

2、数据格式=8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。

3、数据传送采用求和校验,正确时校验和数据=“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据” 所得结果的末8位(因为数据最大只能为FF,超出部分就溢出了)。

单片机I/O口与DHT11的每次通信都是由单片机主动发起的,单片机发送一次开始信号后,DHT11从低功耗模式转换为高速模式,等待主机开始信号结束后,DHT11发送响应信号,触发一次信号采集,并送出40bit的数据,用户可选择读取部分数据。

从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机开始信号,DHT11不会主动进行温湿度采集,采集数据后转换到待机模式。

空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低的时间必须大于18ms,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号,主机发送开始信号结束后,延时20~40us后,读取DHT11de80us低电平响应信号,主机发送开始信号后,释放总线,输出高电平。

总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,数据位是0还是1由数据线上高电平时间决定,格式如下图所示:

由上图可知,当高电平时间为26~28us时,认为数据为0,当高电平时间为70us时,认为数据为1。如果读取响应信号为高电平,则DHT11没有响应,应检查线路是否连接正常。当最后一位数据传送完毕后,DHT11拉低总线50us,随后总线拉高,进入待机状态。

知道了数据通讯的时序,那么程序就简单了。代码部分在此就不做详细的讲解了,附件中可以下载自行查看,而且网上也很容易找到标准的例程。但是需要注意的是,网上的例程可能并不适用与每款单片机,因为DHT11对时序要求是非常严格的,同样的延时程序,在不同的单片机里的实际延时时间很可能不一样,本菜在这个地方也是摔了不少跟头,用的官方自带的例程应用到开发板上,不管怎么调就是收不到数据,但是用示波器测量的时候,确实能够看到有数据返回,但是单片机就是收不到数据。经过再三查找资料,终于找到了原因,关键原因就是延时不对,于是,只得重新写延时程序,本例中用STC自带的ISP软件计算延时,时间相对比较准些。所以在这个时间上,大家要特别注意!

下面是I51开发板上运行的效果图,分别用的两个四位数码管的低两位来显示温度和湿度的整数部分,小数部位都为零就没有显示了。虽然说用的是官方例程,但是加入了之前的一些知识点,如:数码管、定时器等,也算是一个比较简单的综合应用吧。

最后,给大家奉上源代码(回帖可见):

I51开发板第二十三讲 中断系统

https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=66441

(出处: ICKEY BBS)

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:5
汉云 2016-09-18
这个模块好常用的。
0   回复
举报
发布
kk118a 2016-09-18
老板你的采样周期多少,实际测一下端口时序
0   回复
举报
发布
SingleYork 回复 2016-09-18
自己下载程序去研究:lol
0   回复
举报
huihui163 回复 2016-09-19
不错,需要自己去研究啊
1   回复
举报
单片机万年历 回复 2016-09-19
看看呗
0   回复
举报
suoma 回复 2016-09-19
谢谢分享学习一下
0   回复
举报
荣丰宇 回复 2016-09-20
用过DHT11,它对时序比较苛刻吧
0   回复
举报
gjianw217 回复 2016-09-21
讲的很详细呀,顶顶顶
0   回复
举报
7943603 回复 2016-09-29
认真研究,非常好
0   回复
举报
gjianw217 回复 2016-09-29
点赞,支持
0   回复
举报
溪水泠风 回复 2016-10-08
正在学温湿度传感器
0   回复
举报
snwcw 回复 2016-12-16
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
0   回复
举报
liu_boy 回复 2017-04-02
很详细,加入自己的心得
0   回复
举报
Willianan 回复 2017-04-20
不错不错
0   回复
举报
1052531622@qq.c 回复 2017-09-12
谢谢! 搞回来要自己研究了。
0   回复
举报
ttommorroww 回复 2017-09-26
:):):):):)
0   回复
举报
回复 2017-10-30
谢谢楼主,下载一下研究研究
0   回复
举报
回复 2017-10-30
谢谢,回去研究研究
0   回复
举报
18962039677 回复 2017-11-08
学习学习
0   回复
举报
GUOYUXINTJ 回复 2018-01-01
不错不错,好好学习一下
0   回复
举报
fighter 2016-09-18
点赞,支持
0   回复
举报
发布
LiuYang 2016-09-18
讲的很详细呀,谢谢。
0   回复
举报
发布
灵澈 2016-09-18
点赞,支持
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子