概述
一、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的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,随后抬高。
注释:发送信号内容 —— 80 微秒的低电平作为应答信号紧接着输出 80 微秒的高电平通知准备接收数据
最后
以上就是贪玩菠萝为你收集整理的DHT11温湿度传感器——学习总结(最详细,最容易适合新手看的资料)一、DHT11的简单介绍二、DHT11与Arduino的连线三、运行程序——arduino环境四、DHT11工作原理的全部内容,希望文章能够帮你解决DHT11温湿度传感器——学习总结(最详细,最容易适合新手看的资料)一、DHT11的简单介绍二、DHT11与Arduino的连线三、运行程序——arduino环境四、DHT11工作原理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复