DHT11温湿度传感器——学习总结(最详细,最容易适合新手看的资料)

2023-05-16

一、DHT11的简单介绍

DHT11是一款有已校准数字信号输出温湿度传感器
其精度湿度±5%RH, 温度±2℃,
量程湿度20-90%RH, 温度0~50℃——百度百科

注解:相对湿度(RH)是指单位体积空气中,实际水蒸气的分压与相同温度和体积下水饱和蒸气压的百分比。(实际水蒸气的分压/水饱和蒸汽压)

基本组成

电阻式感湿元件
一个NTC测温元件
一个高性能8位单片机

参数指标:

在这里插入图片描述
注解:
重复性(repeatability):在相同条件下对同一事物进行多次量测所得结果之间的一致性。用标准差表示一致性程度,标准差小表示一致性程度高,标准差大表示一致性程度低

长期稳定性:传感器在规定时间内仍保持不超过允许误差范围的能力。

互换性:指在统一规格的一批零件(或部件)中,不经选择、修配或调整,任取其一,都能装在机器上达到规定的功能要求。

(在现代工业生产中常采用专业化的协作生产,即用分散制造、集中装配的办法来提高生产率,保证产品质量和降低成本。要实行专业化生产保证产品具有互换性,必须采用互换性生产原则)

电气特性

在这里插入图片描述
注解:typ–典型值,标准值
常见应用
暖通空调 测试及检测设备
汽车 数据记录器
消费品 自动控制
气象站 家电
湿度调节器 医疗
除湿器
环境条件
(1)温度:
气体的相对湿度,在很大程度上依赖于温度。因此在测量湿度时,应尽可能保证湿度传感器在同一温度下工作。如果与释放热量的电子元件共用一个印刷线路板,在安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持外壳的良好通风。为降低热传导,DHT11与印刷电路板其它部分的铜镀层应尽可能最小,并在两者之间留出一道缝隙。
(2)光线:
长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低
(3)极限条件工作后的恢复:
置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到校准时的状态。在50-60℃和< 10%RH的湿度条件下保持2 小时(烘干);随后在20-30℃和>70%RH的湿度条件下保持 5小时以上。
(4)注意事项:
(1)避免结露情况下使用。
(2)长期保存条件:温度10-40℃,湿度60%以下
注解:结露就是指物体表面温度低于附近空气露点温度时表面出现冷凝水的现象

二、DHT11与Arduino的连线

(1)引脚说明
在这里插入图片描述
注解
(1)串行数据是一位一位顺序传送得数据,只用很少几根通信线,串行传送的速度低,但传送的距离可以很长,因此串行适用于长距离而速度要求不高的场合。
(形象的说,把通道比作道路,能并排开几辆车的就可以说是“并行”,只能一辆一辆开的就属于“串行”了,很明显,并行的速度要比串行的快得多。)
(2)单总线:它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线
接线图:
在这里插入图片描述
与arduino的接线图:
在这里插入图片描述

三、运行程序——arduino环境

#include <dht. h>
#define dataPin 8//定义八号引脚
dht DHT;
void setup() 
{
  Serial. begin (9600) ;
}
void loop() 
{
  int readData = DHT.read22 (dataPin) ;
  float t = DHT.temperature; 
  float h = DHT.humidity;
  Serial.print("Temperature = ");
  Serial.print(t) ;
  Serial.print(" ℃ ");
  Serial.print("Humidity = ");
  Serial.print(h);
  Serial.println("%") ;
  delay(2000) ;
}

代码参考视频:使用Arduino的DHT11和DHT22温湿度传感器教程[How To Mechatronics]
这个视频讲解质量相对较高,参考下面又评论按照这个代码做出来了,所以我认为比较靠谱。
其他学习视频:《单片机实践项目》之DHT11温湿度传感器详细讲解(51单片机)

另外还有较为简单易懂的靠谱的代码:

#include <dht11.h>     //引用dht11库文件,使得下面可以调用相关参数
#define DHT11PIN 8     //定义温湿度针脚号为8号引脚
void setup()
{         //初始化设置
  Serial.begin(9600);      //设置波特率参数
  pinMode(DHT11PIN,OUTPUT);
}

void loop(){                          //循环
  int chk = DHT11.read(DHT11PIN);     //将读取到的值赋给chk
  int hum=(float)DHT11.humidity;      //将湿度值赋给hum
  Serial.print("hum:");
  Serial.print(hum);
  Serial.print("%/t");
  int tem=(float)DHT11.temperature;   //将湿度值赋给tem
  Serial.print(" tem:");
  Serial.print(tem);
  Serial.println("℃");
 delay(2000);
}

代码源地址:DHT11详细介绍
注:由于直接引用的是DHT的库函数的原因。不需要按照下图的时序输入开始指令
在这里插入图片描述

四、DHT11工作原理

数据的传输与组成

传输

DATA 用于Arduino与DHT11之间的通讯和同步,一次传输40位数据,高位先出。
在这里插入图片描述

组成

数据格式(从前到后):8bit湿度整数数据、8bit湿度小数数据、8bit温度整数数据、8bit温度小数数据+8bit校验位

注:校检位作用——检测温湿度结果是否正确

校检位原理
校验位定义“8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据”结果末八位 =8bit校验位

实例:
在这里插入图片描述
数据解释:
二进制转十进制最后可直接转化为湿度和温度。如下图:

在这里插入图片描述

DHT11的工作步骤

步骤一

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

步骤二

主机先发送开始信号,从机会返回一个相应信号进行应答,随后信号线拉高准备接收数据:
1.Arduino的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms
2.Arduino的 I/O设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作出回答信号

在这里插入图片描述

步骤三

第三步:开始接收数据(一次接收40位)。
1.DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束
2.延迟后 DHT11 的 DATA引脚处于输出状态,并且输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据
3.微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 80 微秒的高电平后的数据接收,发送信号如图
在这里插入图片描述

步骤四

由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据。数据格式如下
在这里插入图片描述
位数据“0”的格式为: 50 微秒的低电平+ 26-28 微秒的高电平。
位数据“1”的格式为: 50 微秒的低电平+ 70微秒的高电平。

步骤五

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

工作步骤演示图

发送开始信号
Arduino
DHT11

注:开始信号——Arduino的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,随后抬高。

接收信号并发送信号准通知后者准备接收数据
DHT11
Arduino

注释:发送信号内容 —— 80 微秒的低电平作为应答信号紧接着输出 80 微秒的高电平通知准备接收数据

DATA引脚发送数据
DHT11
Arduino

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DHT11温湿度传感器——学习总结(最详细,最容易适合新手看的资料) 的相关文章

  • 最短路径问题——基于Dijkstra算法和Floyd算法的最短路径问题

    目录 1 算法介绍 xff08 1 xff09 Dijkstra Algorithm xff08 迪杰斯特拉算法 xff09 xff08 2 xff09 Floyd Algorithm xff08 佛洛依德算法 xff09 xff08 3
  • 2.1.2 进程的状态与转换

    目录 知识总览 1 三种基本状态 xff08 1 xff09 运行态 xff08 Running xff09 xff08 2 xff09 就绪态 xff08 Ready xff09 xff08 3 xff09 阻塞态 xff08 Waiti
  • 合并排序与快速排序算法

    文章目录 算法介绍代码实现1 合并排序2 快速排序 总结 算法介绍 合并排序与快速排序是排序算法中常用的两种排序算法 xff0c 合并排序把数据分为两段 xff0c 从两段中逐个选最小的元素移入新数据的末尾 xff1b 快速排序是在序列中挑
  • 2进制、8进制、10进制、16进制相互转换

    文章目录 介绍1 二进制转其他进制2 八进制转其他进制3 十进制转其他进制4 十六进制转其他进制总结 介绍 百度百科 xff1a 进制也就是进位计数制 xff0c 是人为定义的带进位的计数方法 xff08 有不带进位的计数方法 xff0c
  • Hadoop学习笔记--HBase相关操作指令

    文章目录 引言0 HBase的启动与停止1 创建表2 删除表3 表的其他操作3 1 修改表结构3 2 查看表结构3 3 显示所有用户定义的表3 4 查询表是否存在3 5 查询表是否可用3 6 查询表中记录数 4 插入数据4 1 插入单条数据
  • Hadoop学习笔记--MapReduce

    文章目录 引言1 经典案例分析 xff1a WordCount1 1 Map阶段 xff1a TokenizerMapper类1 2 Reduce阶段 xff1a IntSumReduce类1 3 Driver阶段 xff1a main x
  • Hadoop学习笔记--YARN

    文章目录 引言1 YARN的优势1 1 可扩展性 xff08 Scalability xff09 1 2 可用性 xff08 Availability xff09 1 3 利用率 xff08 Utilization xff09 1 4 多租
  • scala编程--计算级数&统计学生成绩

    目录 案例1 xff1a 计算级数1 1 案例要求1 2 实现代码 案例2 xff1a 统计学生成绩1 1 案例要求1 2 实现代码 总结 案例1 xff1a 计算级数 1 1 案例要求 级数计算函数实现较为简单 xff0c 这里不再赘述
  • RDD本地文件系统读入显示文件不存在fileNotExit

    问题 在从本地文件系统读入数据创建RDD时 xff0c 执行行动操作 xff0c 显示文件不存在 解决方案 从本地文件系统读入时 xff0c 需在所有节点的相同目录下存在该文件 xff0c 如读取文件在 file span class to
  • spark-shell报错:java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to

    目录 问题报错信息原因解决方案 问题 spark shell在执行一段时间后报错 xff1a java io IOException Failed to replace a bad datanode on the existing pipe
  • DPDK-VPP 学习笔记-06 bond 链路聚合 LACP

    DPDK VPP 学习笔记 06 bond 链路聚合 LACP 本笔记主要测试VPP与交换机链路聚合配置 amp 状态 Switch HW CE6880NIC Mellanox CX5 链路聚合简介 以太网链路聚合 Eth Trunk 简称
  • 基于Linux的小项目-在线词典

    接触到的基于Linux的第一个实战小项目 xff0c 在众多大牛的协助下完美实现 在线词典功能的实现 1 用户的注册 2 用户登录 3 单词的查询 4 历史记录的查看 5 用户在登录后修改密码 头文件 span class token ma
  • 树莓派串口通信(C语言wiringPi库)

    串口通信 配置gpio串口wringPi库串口函数代码测试 配置gpio串口 开启gpio串口 输入命令sudo raspi config选择Interfacing找到serial并打开选择OK 树莓派包含两个串口 硬件串口 xff08 d
  • 滑模控制问题总结

    设计切换函数 滑模面S xff08 x xff09 线性 xff1a 滑模面参数确定方法 xff1a Hurwitz 保证多项式为Hurwitz xff0c 即特征值在左半平面 主要适用于速度和精度要求都不高的非线性系统 非线性 滑模变结构
  • ESP8266的测试

    实际测试esp8266 一 线路连接 工具 xff1a WIFI模块1个 xff0c 串口软件1个 xff0c usb转串口工具一个 xff0c 杜邦线若干 1 找到模块的相关资料 xff0c 按照说明连接引脚 先看一下原理图和引脚说明 x
  • 【bug】弹窗列表,每次打开数据回显的选中项不对,已解决

    一个小bug xff0c 还是记录下吧 弹窗列表 xff0c 勾选数据后回显到表单里 xff0c 再次打开要选中状态 其实就是调弹窗数据的时候 xff0c 处理下 获取列表数据 getsalesdata span class token p
  • 【bug】vue-screenfull全屏时页面高度未自适应,已解决

    这个bug花了我下午快3个小时的时间去查找原因以及半个小时左右的时间去解决 xff0c 花了这么多精力 xff0c 值得记录下来 xff0c 避免以后再踩坑 一 vue screenfull是一款插件 xff0c 算是比较常用的插件了 xf
  • vue+el-form,表单内实现@keyup上下左右箭头移动聚焦

    需求是年前提的 xff0c 因为不着急 xff0c 就一直搁置着 xff0c 放在最后弄 年前快放假的时候 xff0c 抽空搜了下 xff0c 在表单内实现上下箭头移动聚焦的没搜到 xff0c 倒是有在表格内如何实现的 xff0c 但没有细
  • 邮件发送,正文内容格式h5,模板字符串拼接使用及赋值,原生js

    一 邮件发送 需求不难 xff0c 传指定的参数给后端 xff0c 调接口就直接发送了 就是参数里有个正文部分 xff0c 一定要用h5写 写vue写习惯了 xff0c 原生的都快忘光了 xff0c 走了些弯路 二 h5 在页面上有个邮件发
  • js如何按某个字符分割字符串,js截取字符串

    每次遇到截取字段串 xff0c 都感觉没那么顺心应手 js的方法要多记录 截取指定位置后的内容 1 假设str 61 aaabbbcccddd 我想要拿到ddd var str span class token operator 61 sp

随机推荐