温湿度传感器DHT11程序示例
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
DHT11的Arduino程序示例
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程序示例的更多相关文章
- 进阶之路(中级篇) - 016 温湿度传感器DHT11
如果想使用 Arduino 开发板驱动 DHT11 来获取温湿度的时候建议使用第三方的库,这样可以加快程序的开发速度,而且不容易出错,下面的代码我已经安转了第三方的库了.详细的安装方法请参考极客先锋的 ...
- STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题
1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...
- [转载] 树莓派读取温湿度传感器DHT11
原文地址: http://blog.csdn.net/liang890319/article/details/8739683 硬件: 树莓派 2.0 DHT模块 接树莓派5V GND GPIO1 功 ...
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
- 基于CC2530/CC2430 的温湿度采集系统--DHT11
采用常用的温湿度传感器DHT11 参见论坛中实例视频讲解http://bphero.com.cn/forum.php?mod=viewthread&tid=15&extra=page% ...
- 四博智慧物联系统入门示例-1.增加一个DHT11温湿度传感器
1.准备工作 DOIT农业控制开发板或者esp32模组,并下载 四博智慧物联系统快速入门-2.准备工作 章节中的固件 DHT11连接在端口01 使用快速入门注册的管理账号和用户 2.配置网络 3.绑定 ...
- 树莓派使用DHT11温湿度传感器(C语言程序)
pi4j是基于wiringpi开发的通过java来控制树莓派GPIO口的库文件.在java程序中引入相关类就可以使用已经封装好的方法控制树莓派GPIO口. pi4j官网:http://pi4j.com ...
- 树莓派使用DHT11温湿度传感器
一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...
- 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...
随机推荐
- Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码
Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...
- Mono集成中使用api获取当前mono 调用堆栈的方法
// 在mono源代码层级中加如下两个api 可以获取堆栈字符串 这两个api我新加的,原来没有.基于原来的代码改的. // add by bodong#if PLATFORM_WIN32 __dec ...
- Laptop(线段树+离散化)
链接:https://ac.nowcoder.com/acm/contest/16/A来源:牛客网 题目描述 FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷. 但是重点在于 ...
- MPI Maelstrom (Dijstra+atoi函数转换整数)
BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distribute ...
- [BUUOJ记录] [GXYCTF2019]BabySQli
有点脑洞的题,题目不难,主要考察注入和联合查询的一个小特点 进入题目是一个登录框,看看源代码,在search.php文件中发现了这个 大写的字母和数字很明显是base32,先用base32解码一下,发 ...
- 给EmpMapper开放Restful接口
本文例程下载:https://files.cnblogs.com/files/xiandedanteng/gatling20200428-3.zip 接口控制器代码如下: 请求url和响应都写在了每个 ...
- MyBatis开发重点知识
1.1为什么需要ORM框架? 传统的JDBC编程存在的弊端: ü 工作量大,操作数据库至少要5步: ü 业务代码和技术代码耦合: ü 连接资源手动关闭,带来了隐患: MyBatis前身是iBatis, ...
- layui表单引入ueditor遇坑记
1. 错误示例:表单容器是div标签则无法获取ueditor的内容 注:对于普通的表单元素表单容器是div也都能获取 <!DOCTYPE html> <html> <he ...
- Linux:nginx负载均衡
前提:web服务器框架已搭建好lamp/lnmp),已配置好虚拟主机名(这个的配置在上几章中有写). nginx做负载均衡主要的模块是upstream. 1.在新的机器上安装nginx 创建用户ngi ...
- NOIP2017 Day1 T1 小凯的疑惑
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小凯想知道在无法准确支付的物品中,最贵的价 ...