当前位置: 首页 > 传感测量产品 > 工业传感器 > 温湿度传感器

类型分类:
科普知识
数据分类:
温湿度传感器

arduino 温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器

发布日期:2022-10-09 点击率:334


arduino <a title=温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器 第1张" title="arduino 温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器 第1张-传感器知识网"/>

arduino 温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器

DHT11温湿度传感器模块简介

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

注意:
(1)避免结露情况下使用。
(2)长期保存条件:温度10—40℃,湿度60%以下。

技术参数
供电电压: 3.3~5.5V DC  输 出: 单总线数字信号?互 换 性: 可完全互换

测量范围: 湿度20-90%RH, 温度0~50℃ ?测量精度: 湿度±5%RH, 温度±2℃

分 辨 率: 湿度1%RH, 温度1℃ ?长期稳定性: 《±1%RH/年

测量时的供电电流为1.0mA, ?待机时的供电电流为0.06mA

应用电路

引脚说明

温湿度采集范围
湿度采集范围5%~ 95%,在环境温度为25℃时,湿度采集精度是±5%。温度采集范围是-20℃~60℃,在环境温度为25℃时,温度采集精度是±2℃。

应用信息
7.1工作与贮存条件
超出建议的工作范围可能导致高达3%RH的临时性漂移信号。返回正常工作条后,传感器会缓慢地向校准状态恢复。要加速恢复进程/可参阅7.3小节的“恢复处理”。在非正常工作条件下长时间使用会加速产品的老化过程。
7.2暴露在化学物质中
电阻式湿度传感器的感应层会受到化学蒸汽的干扰,化学物质在感应层中的扩散可能导致测量值漂移和灵敏度下降。在一个纯净的环境中,污染物质会缓慢地释放出去。下文所述的恢复处理将加速实现这一过程。高浓度的化学污染会导致传感器感应层的彻底损坏。
7.3恢复处理
置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到校准时的状态。在50-60℃和

DHT11温湿度传感器模块的使用
串行接口(单线双向)
DATA用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后, DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后, DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下, DHT11接收到开始信号触发一次温湿度采集如果没有接收到主机发送开始信号, DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。

通讯过程时序图:

时序图解析:
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。(跟程序中是对应的,看程序就懂)

总线为低电平,说明DHT11发送响应信号, DHT11发送响应信号后,再把总线拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,随后总线由上拉电阻拉高进入空闲状态。
数字0信号表示方法如下图所示:

数字1信号表示方法如下图所示:

实验一:温湿度读取
项目要求:
根据时序图直接测得温湿度。

电路搭建

参考程序

实验结果

原理图
arduino 温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器  第2张

arduino 温湿度传感器:Arduino+温度、湿度传感器(附代码)

Arduino语言注解Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们不了解AVR单片机(微控制器)的朋友也能轻松上手。
相比Arduino,也许我们更熟悉“集成电路”这一概念。集成电路是为了实现某种特定功能的计算而设计的微小芯片。对于普通人来说,传统的集成电路应用比较繁琐,一般需要具有一定电子知识基础,并懂得如何进行相关的程序设计的工程师才能熟练使用。但是Arduino的出现让曾经只有专业人士才能使用的集成电路变为平易近人的电子设计工具,即使没有程序设计基础,也可以通过简单的学习,掌握使用Arduino的方法。为了实现这一目标,Arduino从两方面进行了努力与改进。首先,在硬件方面,Arduino本身是一款非常容易使用的印刷电路板。电路板上装有专用集成电路,并将集成电路的功能引脚引出方便我们外接使用。同时,电路板还设计有USB接口方便与电脑连接。其次,在软件方面,Arduino提供了专门的程序开发环境Arduino IDE。其界面设计简洁,对于没有接触过程序设计的“小白”也可以轻松上手。
Arduino--UNO主板

Arduino--IDE

实验一  Hello world
目标效果:打印“Hello world” 字体
硬件准备:Arduino UNO 主板
软件准备:Arduino--IDE
电路连接:Arduino主板——电脑
代码:
void setup() {
// put your setup code here, to run once:
Serial.begin();
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("Hello world !");
delay(1000);
}
实验二 动态显示屏实验
目标效果:显示屏显示打印的文字
硬件准备:
Arduino UNO一块
IIC1602显示模块一个
Arduino UNO底板一块
杜邦线若干
软件准备:Arduino--IDE
电路连接:
GND——GND
VCC——5V
SDA——A4
SCL——A5
代码:
#include

void setup() {
  pinMode(DHT11PIN,OUTPUT);
  lcd.begin (16,2); // for 16 x 2 LCD module 初始横16列、竖2行
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
}

void loop() {
// 读取温湿度传感器的数据
int chk=DHT11.read(DHT11PIN);
// LCD 显示采集的温湿度数据
lcd.setCursor(0, 0);
lcd.print("Tep: ");
lcd.print((float)DHT11.temperature, 2);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print((float)DHT11.humidity, 2);
lcd.print("%");
delay(200);
}
延伸--图形编程软件:Scratch、mBlock
Scratch是一款由麻省理工学院(MIT) 设计开发的一款面向少年的简易编程工具,scratch已经是少儿编程行业的基础软件。
mBlock 是一款面向 STEAM 教育领域的图形化编程学习软件,基于 Scratch 3.0 开发。它不仅能让用户创作有趣的故事、游戏、动画等作品,并且支持 Makeblock 主板和其他 Arduino 硬件的编程。

语法常用参数:
1、pinMode(接口名称,OUTPUT或INPUT)将——接口定义为输入或输出接口,用在setup()函数里。
2、digitalWrite(接口名称, HIGH或LOW)——将数字接口值至高或低。
3、digitalRead(接口名称)——读出数字接口的值。
4、analogWrite(接口名称, 数值)——给一个接口写入模拟值(PWM波)。对于 ATmega168芯片的Arduino(包括Mini或BT),该函数可以工作于 3, 5, 6, 9, 10和 11号接口。老的 ATmega8芯片的USB和 serial Arduino仅仅支持 9, 10和1 1号接口。
5、analogRead(接口名称)——从指定的模拟接口读取值,Arduino对该模拟值进行10-bit的数字转换,这个方法将输入的0-5电压值转换为 0到1023间的整数值。
6、delay()——延时一段时间,delay(1000)为一秒。
7、Serial.begin(波特率)——设置串行每秒传输数据的速率(波特率)。在同计算机通讯时,使用下面这些值:300, 1200, 2400, 4800, 9600, , , , , 或 。你也可以在任何时候使用其它的值,比如,与0号或1号插口通信就要求特殊的波特率。用在setup()函数里
8、Serial.read()——读取持续输入的数据。

arduino 温湿度传感器:Arduino温度湿度传感器-温湿度传感器选择指南

温湿度传感器评测
DS18B20 数字温度防水传感器
防水,长距离,廉价。
TMP100温度传感器(Gadegeteer兼容)
中端价格,优秀性能,适合多种场合,IIC数字输出
MLX9061红外线温度计评估板
昂贵,大量程,曲线光滑,非接触测温
高精度DHT22温湿度传感器
中端价格,温湿度传感器,长距离,性价比高,应用范围广
水分传感器(Water Sensor)
简单易用的水分检测工具
土壤湿度传感器(Arduino兼容)
简单的土壤水分传感器,可插入土壤
红外非接触测温传感器
性价比高,高灵敏,长距离,方便嵌入硬件,非接触
SHT1x温湿度传感器(Arduino兼容)
高端温湿度传感器,快速响应,极高可靠性和长期稳定性,自动休眠,低功耗
DHT11温湿度传感器(Arduino兼容)
价格低廉,适用低要求场景
模拟LM35线性温度传感器(Arduino兼容)
价格低廉,适用低要求场景,模拟温度传感器
DS18B20数字温度传感器
价格低廉,性能优秀,数字温度传感器
注:其中*项由于应用范围明确,就偷懒不比较了。(第一个和最后一个的用的传感器不是一样的嘛!之后会告诉大家这个传感器有多么适合屌丝)
第一部分:基本参数
这部分列出使用时需要的接口,传感器尺寸,工作电压和是否需要焊接,以及预算。
目的:如果已设计好其他元器件,可从剩余物理空间和接口以及剩余的预算中做出最初筛选。
至于那些完全不知道要做什么的人……恭喜你,和我现在站在了同一起跑线上了。
注:焊接指的是在接口处焊接排针。不推荐用热熔胶和双面胶……
第二部分:量程精度
假如你要和我一样把你的传感器放在火上烤的话……一定鲜嫩多汁。所以请工作在官方提示的工作范围内。
首先要确定测量范围,接着测量精度,精度是指在某一指定温度下的值,分段的精度不同,具体参照Datasheet,
若使用场合难以恒温,提出过高测量精度也不合适的,因为会随着温度变化产生湿度或温度漂移。
第三部分:响应时间比较
这部分比较的是MCU发出请求后收到不同传感器的温度的时间,网络中就是RTT。这个数值和写的程序(比如delay)以及通讯方式有很大关系。
最快的是输出电压与温度成正比的LM35,总线通讯的与通讯协议有关,1-Wire相较IIC耗时久一些,同时由于单总线由多个功能部件共用,只能时分复用,可能导致很大的时间延迟,因此不推荐多个设备挂在同一条单总线上。
第四部分:性能(对温度的追踪能力)
基本上是采用一个很不科学的方法,拿到室外等稳定后再取回室内。以此观察在温度骤变的情况下多久达到稳定。
如果有条件的话,可以尝试下开个空调到25°然后拿个冰水混合物,把传感器温柔的带着套的浸入冰水中再取出到室温。
首先是怎么看都高大上的两款红外测温传感器,由于测试时间不在同一时间,大家感受下走向和温度变化的速度就好了。红外测温分辨率很高,又由于与被测对象互不接触,可用于测量运动物体、小目标和热容量小或温度变化迅速(瞬变)对象的表面温度,也可用于测量温度场的温度分布。
总体看,两款红外温度传感器对温度都很敏感,都可以在短时间升高到环境温度。相比较MLX的温度曲线更平稳,抖动更少。
MLX红外线温度传感器
推荐度:★★☆☆☆
优点:
温度曲线平缓,测量温度和工作温度范围大。
有节能模式,可非接触测温。
IIC连接,温度返回快,一条总线可挂多个温度传感器。
缺点:
价格太高。
库很难找,因为是Arduino代理的产品,虽然内置Arduino引导程序可以使用Arduino环境,但是IIC协议不支持用Arduino内置的Wire库所以很蛋疼!
很难用,要自己焊接。
关于这个产品的相关网页
这个产品的原生网页
关于如何在arduino环境下用MLX的教程 含库文件
应用范围:
医疗器具比如体温测量,运动测量,打印机扫描仪等办公设备的温度控制。
数据传输20米以上。而且测量温度比较极限的地方。(注意工作温度和测量温度有差别)
红外非接触测温传感器
推荐度:★★★★☆
优点:
价格合适。
而且瘦长的外观相比刚刚的平板身材更适合做温度测试笔。
温度曲线也不错,灵敏度很高,内含温度补偿。
可以选择分辨率,最高可达1/16°C,精度比较高。
还不要库。
数字量,衰减小。
缺点:
需要自己焊接下排针。
测量范围不是特别高。
需要3个数字口。
应用范围:同上。
接下来有三款传感器都是可以同时返回温度湿度的,放一起比较了。
可以看出来温度有所变化后
SHT1x比较敏感,较早的达到稳定。
DHT11——实在不忍直视这湿度误差。
SHT1x传感器由1个电容式聚合体测湿元件和1个能隙式测温元件组成,同样,DHT22也是电容感湿原件,测温元件采用NTC测温元件,而DHT11是电阻式感湿元件盒NTC测温元件组成的。(NTC为热敏电阻)
DHT11温湿度传感器
推荐度:★★☆☆☆
优点:
不需要焊接,价格在三者中是最便宜的。
达到稳定值也比较快。(毕竟电阻元件)。
数据可传输20米以上,抗干扰强。
缺点:
需要下载库!虽然这个库DHT22也可以共用。曲线和误差也不能忍吧。
不能选择精度。温度误差+/-2°C,湿度误差+/-5%RH。测量范围也比较小。温度0-50°C。
应用范围:农业园艺类,有地理位置的分布,但对湿度温度感应精度要求不需要太高的场景(但假如冬天温度到零下了,还是算了)。
DHT22温湿度传感器
推荐度:★★★★☆
优点:
不需要焊接,和DHT22相差不了多少钱。
曲线平滑。湿度和湿度误差为三个传感器中最小的。湿度误差很小。
工作温度湿度范围最大。
信号传输距离也可达到20米以上。
抗干扰能力强。
缺点:
不够敏感,对温度追踪反应慢。
需要下载库。
应用范围:对环境温度与湿度测量精度要求较高的情况。比如环境监测。
SHT1x温湿度传感器(Arduino兼容)
推荐度:★★★★☆
优点:
不需要焊接,曲线平滑。
温度误差很小。
反应迅速。较快达到稳定。
超低功耗,自动休眠,出色的长期稳定性。
缺点:
需要两个数字口。
湿度误差比较大。
测量范围和DHT11一样。
也需要下载库。
应用范围:对跟踪温度湿度的反应要求较高的场景,精度也能保证。适合长期工作。
接下来是比较三款比较低端(但是有内涵)的温度传感器
由于DS18B20分辨率默认为12,所以看上去那么光滑。而TMP100由于默认为9,所以劣势就看上去比较明显。所以,调整分辨率结果会有不同
从这张图可以看出来。
模拟LM0035线性温度传感器
推荐度:★★★☆☆
优点:
使用简单,一条模拟线就搞定。
不需要外加库。
由于采用半导体测温芯片,输出电压与温度成正比所以速度感应和处理很快。
温度测量范围比较大。
价格非常低廉。
缺点:
没分辨率可调,精确度不高,误差看上去大了点,毛刺多了点。
应用范围:精度要求不高的一般场景都可以用。17元你买不了上当买不了吃亏。
另外比较了下我认为比较高性能的温度传感器。分别有看上去特别好的DS18B20,被迫害的TMP100,和在温湿度测试中表现出色的SHT1x和DHT22。
TMP100温度传感器(Gadegeteer兼容)
推荐度:★★★★☆
优点:
可选分辨率,9~12bit。
IIC协议(可用系统自带库),可在总线上同时连接多个(最多8个)传感器(不过要用跳线设置地址),支持IDC10接口。
第一张图分辨率是默认的9,第二张我设置为10,可以看出平滑了很多。
相比其他传感器较快达到稳定值,是神器。
缺点:
需要焊接。
需要手动设置跳线。
要注意改程序里的地址代码,这个要特别注意的。
官方给出的误差很大。
需要下载库。
应用范围:供电温度检测,计算机相关热防护,热力控制系统等。
DS18B20数字温度传感器
推荐度:★★★★★
优点:
价格低廉。
分辨率可选择,同样也是9-12bit,默认就为12bit。
不需要焊接,连接容易。
测量范围很大。
缺点:
需要库。
案例代码中没有修改分辨率的语句。
单总线连接,影响效率。
达到最后稳定需要时间比较久。
应用范围:应用范围比较广,如家用电器,汽车电子,测量仪器,医疗器具,工业生产。
本文整理于DFRobot wiki  By 毫无愧疚感的小白
arduino 温湿度传感器:Arduino Uno 实验13——DHT11温湿度传感器  第3张

arduino 温湿度传感器:Arduino温湿度传感器程序

double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}
double Kelvin(double celsius)
{
return celsius + 273.15;
}
double dewPoint(double celsius, double humidity)
{
double A0=373.15/(273.15 + celsius);
double SUM=-7. * (A0-1);
SUM +=5. * log10(A0);
SUM +=-1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM +=8.1328e-3 * (pow(10,(-3.*(A0-1)))-1) ;
SUM +=log10(1013.246);
double VP=pow(10, SUM-3) * humidity;
double T=log(VP/0.); // temp var
return (241.88 * T) / (17.558-T);
}
double dewPointFast(double celsius, double humidity)
{
double a=17.271;
double b=237.7;
double temp=(a * celsius) / (b + celsius) + log(humidity/ 100);
double Td=(b * temp) / (a - temp);
return Td;
}
#include

下一篇: PLC、DCS、FCS三大控

上一篇: 电气控制线路图控制原

推荐产品

更多