DHT11概述

HT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。 单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

主要应用

典型接线

引脚定义

电气特性

单线双向串行通信协议

DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:
    一次完整的数据传输为40bit,高位先出。数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据,传送正确时校验和数据等于“ 8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集,采集数据后转换到低速模式。

通讯过程如图1,2所示


图1

图2

总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。主机发送开始信号结束后, 可以切换到输入模式,或者输出高电平,延时等待20-40us后, 读取DHT11的响应信号。 DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常。

DHT11发送响应信号后,再把总线拉高80us,准备发送数据。每一bit数据都以50us低电平时隙开始,高电平的长短决定了数据位是0还是1。格式见下面图示。当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。

数字0信号表示方法如图4所示


图3

数字1信号表示方法.如图5所示

图4

 

DHT11Arduino程序示例

 1 double Fahrenheit(double celsius)
2 {
3 return 1.8 * celsius + 32; //摄氏温度度转化为华氏温度
4 }
5
6 double Kelvin(double celsius)
7 {
8 return celsius + 273.15; //摄氏温度转化为开氏温度
9 }
10
11 // 露点(点在此温度时,空气饱和并产生露珠)
12 // 参考: http://wahiduddin.net/calc/density_algorithms.htm
13 double dewPoint(double celsius, double humidity)
14 {
15 double A0= 373.15/(273.15 + celsius);
16 double SUM = -7.90298 * (A0-1);
17 SUM += 5.02808 * log10(A0);
18 SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
19 SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
20 SUM += log10(1013.246);
21 double VP = pow(10, SUM-3) * humidity;
22 double T = log(VP/0.61078); // temp var
23 return (241.88 * T) / (17.558-T);
24 }
25
26 // 快速计算露点,速度是5倍dewPoint()
27 // 参考: http://en.wikipedia.org/wiki/Dew_point
28 double dewPointFast(double celsius, double humidity)
29 {
30 double a = 17.271;
31 double b = 237.7;
32 double temp = (a * celsius) / (b + celsius) + log(humidity/100);
33 double Td = (b * temp) / (a - temp);
34 return Td;
35 }
36
37 #include <dht11.h> //加入dht11类库
38 dht11 DHT11; //定义DHT11
39 #define DHT11PIN 2 // DHT11的数字口接控制板的2号引脚
40
41 void setup()
42 {
43 Serial.begin(9600);
44 Serial.println("DHT11 TEST PROGRAM ");
45 Serial.print("LIBRARY VERSION: ");
46 Serial.println(DHT11LIB_VERSION);
47 Serial.println();
48 }
49
50 void loop()
51 {
52 Serial.println("\n");
53 int chk = DHT11.read(DHT11PIN); // 库函数DHT11.read()的返回值
54 Serial.print("Read sensor: ");
55 switch (chk)
56 {
57 case DHTLIB_OK: //没有错误
58 Serial.println("OK");
59 break;
60 case DHTLIB_ERROR_CHECKSUM: //校验错误
61 Serial.println("Checksum error");
62 break;
63 case DHTLIB_ERROR_TIMEOUT: //超时错误
64 Serial.println("Time out error");
65 break;
66 default: //未名的错误
67 Serial.println("Unknown error");
68 break;
69 }
70
71 Serial.print("Humidity (%): ");
72 Serial.println((float)DHT11.humidity, 2);
73
74 Serial.print("Temperature (oC): ");
75 Serial.println((float)DHT11.temperature, 2);
76
77 Serial.print("Temperature (oF): ");
78 Serial.println(Fahrenheit(DHT11.temperature), 2);
79
80 Serial.print("Temperature (K): ");
81 Serial.println(Kelvin(DHT11.temperature), 2);
82
83 Serial.print("Dew Point (oC): ");
84 Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));
85
86 Serial.print("Dew PointFast (oC): ");
87 Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
88
89 delay(2000);
90 }

运行效果:

温湿度传感器DHT11程序示例的更多相关文章

  1. 进阶之路(中级篇) - 016 温湿度传感器DHT11

    如果想使用 Arduino 开发板驱动 DHT11 来获取温湿度的时候建议使用第三方的库,这样可以加快程序的开发速度,而且不容易出错,下面的代码我已经安转了第三方的库了.详细的安装方法请参考极客先锋的 ...

  2. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  3. [转载] 树莓派读取温湿度传感器DHT11

    原文地址: http://blog.csdn.net/liang890319/article/details/8739683 硬件: 树莓派 2.0 DHT模块  接树莓派5V GND GPIO1 功 ...

  4. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  5. 基于CC2530/CC2430 的温湿度采集系统--DHT11

    采用常用的温湿度传感器DHT11 参见论坛中实例视频讲解http://bphero.com.cn/forum.php?mod=viewthread&tid=15&extra=page% ...

  6. 四博智慧物联系统入门示例-1.增加一个DHT11温湿度传感器

    1.准备工作 DOIT农业控制开发板或者esp32模组,并下载 四博智慧物联系统快速入门-2.准备工作 章节中的固件 DHT11连接在端口01 使用快速入门注册的管理账号和用户 2.配置网络 3.绑定 ...

  7. 树莓派使用DHT11温湿度传感器(C语言程序)

    pi4j是基于wiringpi开发的通过java来控制树莓派GPIO口的库文件.在java程序中引入相关类就可以使用已经封装好的方法控制树莓派GPIO口. pi4j官网:http://pi4j.com ...

  8. 树莓派使用DHT11温湿度传感器

    一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...

  9. 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...

随机推荐

  1. Labview学习之路(七)for和while的理论要点

    for循环 循环次数可以为0(N的接线端为) 终止条件:1. 完成N次循环.      2. 添加条件接线端,就像while循环的红点一样,(方法,右键点击边框,添加条件接线端) 数组通过自动索引接入 ...

  2. Mc小冰总结的Android开发工程师面试题以及答案,android程序员必备,详解

    1.请谈一下Android系统的架构. 答:Android系统采用了分层架构,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心层. 2.谈谈android大众常用的五种布局. ...

  3. 攻防世界——web新手练习区解题总结<3>(9-12题)

    第九题simple_php: 看题目说是php代码,那必定要用到php的知识,让我们先获取在线场景,得到如下网页 仔细看这个代码,意思大概是: 1.当a==0且a为真时输出flag1 2.当b为数字退 ...

  4. 攻防世界——web新手练习区解题总结<2>(5-8题)

    第五题cookie: 所需工具:burpsuite(需自行下载) 老规矩看完题,先获取在线场景,得到如下网页 那么什么是cookie呢?大体上就是网站为了识别用户身份而储存在用户本地终端上的数据,类型 ...

  5. Flutter Toast消息提示框插件

    Flutter Toast消息提示框插件 在开发flutter项目中,想必大家肯定会用到toast消息提示,说到这里, 大家肯定会想到https://pub.dev/ 插件库, 但是插件市场上有太多类 ...

  6. Q200510-01: 求部门工资最高的员工

    问题: 求部门工资最高的员工 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+----- ...

  7. 区间查询与等效minus查询

    --表结构 create table hy_emp( id number(4,0) primary key, name nvarchar2(20) not null, edate date) --充值 ...

  8. vue3剖析:响应式原理——effect

    响应式原理 源码目录:https://github.com/vuejs/vue-next/tree/master/packages/reactivity 模块 ref: reactive: compu ...

  9. TP6.0 获取请求对象的五种方式

    目录 1. 门面类 2. 依赖注入 3. 框架提供的基础控制器的 request 属性 4. request() 助手函数 5. app() 超级助手函数 think\Request.think\fa ...

  10. 微信小程序 部署(后台是springboot项目 前后台分流)

    微信小程序的部署需要https 和证书: https 需要反向代理: 这里用 nginx,无论linux,windows 系统都可以安装: 1.安装nginx ,这步自己去做: linux 安装ngi ...