Arduino关于DHT11和DHT22湿度和温度传感器的完整指南

您所在的位置:网站首页 温度传感器规格型号怎么区分 Arduino关于DHT11和DHT22湿度和温度传感器的完整指南

Arduino关于DHT11和DHT22湿度和温度传感器的完整指南

2024-07-07 19:47:47| 来源: 网络整理| 查看: 265

Arduino关于DHT11和DHT22湿度和温度传感器的完整指南

原文地址:https://gndtovcc.home.blog/2020/04/16/complete-guide-for-dht11-dht22-humidity-and-temperature-sensor-with-arduino/

本文是Arduino上流行的DHT11和DHT22温度和湿度传感器的指南。我们将解释其工作原理,展示其某些功能并分享一个Arduino项目示例,您可以对其进行修改以在自己的项目中使用。

DHT11和DHT22]

有关其他流行传感器的更多指南,请查看我们对60多个Arduino教程和项目的汇编: 60多个Arduino项目和教程。

介绍DHT11和DHT22传感器

DHT11和DHT22传感器用于测量温度和相对湿度。这些在制造商和电子爱好者中非常受欢迎。

外链图片

这些传感器包含一个芯片,该芯片进行模数转换,并随温度和湿度发出数字信号。这使得它们非常易于与任何微控制器一起使用。

外链图片

DHT11和DHT22

DHT11和DHT22非常相似,但规格不同。下表比较了DHT11和DHT22温度和湿度传感器的一些最重要的规格。要对这些传感器进行更深入的分析,请检查传感器的数据表。

DHT11DHT22在这里插入图片描述在这里插入图片描述温度范围0至50ºC +/- 2ºC-40至 80ºC+/-0.5ºC湿度范围20至90% +/- 5%0至100% +/- 2%解析度湿度:1% 温度:1ºC湿度:0.1% 温度:0.1ºC工作电压3 – 5.5 V直流直流3 – 6 V供电0.5 – 2.5毫安1 – 1.5毫安采样期1秒2秒

DHT22传感器具有更好的分辨率以及更宽的温度和湿度测量范围。但是,它有点贵,并且您只能以2秒的间隔请求读数。

DHT11的范围更小,准确度也更低。但是,您可以每秒请求一次传感器读数。它也便宜一些。

尽管它们有所不同,但它们的工作方式相似,您可以使用相同的代码读取温度和湿度。您只需要在代码中选择要使用的传感器类型。

DHT引脚排列

DHT传感器具有四个引脚,如下图所示。但是,如果将DHT传感器放在分线板上,则它只有三个引脚,引脚2上带有内部上拉电阻。

img

下表显示了DHT22和DHT11的引脚排列。当传感器面对您时,插针编号从左到右从1开始

DHT引脚连接到1个5伏2个任何数字GPIO; 还连接一个10k欧姆上拉电阻3不要连接4地线 带Arduino的DHT11温湿度传感器

在本节中,我们将使用Arduino构建一个简单的项目,该项目读取温度和湿度并将结果显示在串行监视器上。

所需零件

要完成本教程,您需要以下组件:

Arduino UNO –阅读最佳Arduino入门套件DHT11温湿度传感器面包板4.7k欧姆电阻跳线 原理图

按照下一个示意图将DHT11(或DHT22)温度和湿度传感器连接到Arduino。 在这里插入图片描述 这里是连接(从左到右):

DHT引脚Arduino的pin15伏pin2D2或任何其他数字引脚pin3不要连接pin4地线

注意: 如果您使用的模块带有DHT传感器,则通常仅带有三个引脚。引脚上应标有标签,以便您知道如何对其进行接线。此外,这些模块中的许多模块已经带有内部上拉电阻,因此您无需在电路中增加一个。

安装库

要读取DHT传感器,我们将使用Adafruit的 DHT库。要使用此库,您还需要安装 Adafruit Unified Sensor库。请按照以下步骤安装这些库。

打开您的Arduino IDE并转到 “草图” >“ 包含库” >“ 管理库”。图书馆管理器应打开。

在“搜索”框中搜索“ DHT ”,然后从Adafruit安装DHT库。

外链图片

从Adafruit安装DHT库后,在搜索框中键入“ Adafruit Unified Sensor ”。一直向下滚动以找到该库并进行安装。

外链图片

安装库后,重新启动Arduino IDE。

代码

安装必要的库之后,您可以从库中上传示例代码。

在您的Arduino IDE中,转到“ 文件” >“ 示例” >“ DHT传感器库” >“ DHTtester”

以下代码应加载。它读取温度和湿度,并将结果显示在串行监视器中。

// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain // REQUIRES the following Arduino libraries: // - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library // - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor #include "DHT.h" #define DHTPIN 2 // Digital pin connected to the DHT sensor // Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- // Pin 15 can work but DHT must be disconnected during program upload. // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins) // Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins) // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor. // Note that older versions of this library took an optional third parameter to // tweak the timings for faster processors. This parameter is no longer needed // as the current DHT reading algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println(F("DHTxx test!")); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!")); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("°C ")); Serial.print(f); Serial.print(F("°F Heat index: ")); Serial.print(hic); Serial.print(F("°C ")); Serial.print(hif); Serial.println(F("°F")); } 代码如何工作

首先包括DHT库:

#include "DHT.h"

然后,定义DHT传感器连接的引脚。在这种情况下,它连接到数字引脚2。

#define DHTPIN 2 // what digital pin we're connected to

然后,您需要定义您正在使用的DHT传感器类型。在我们的示例中,我们使用的是DHT11。

#define DHTTYPE DHT11 // DHT 11

如果您正在使用其他DHT传感器,则需要注释上一行,并取消注释以下其中一项:

//#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301)

然后,使用引脚和您先前定义的类型初始化一个名为dht的DHT对象:

DHT dht(DHTPIN, DHTTYPE);

在setup()中,以9600的波特率初始化串行监视器,以进行调试。

erial.begin(9600); Serial.println("DHTxx test!");

使用.begin()方法初始化DHT传感器。

dht.begin();

在loop()的开头,有2秒的延迟。需要此延迟,以使传感器有足够的时间进行读数。DHT22的最大采样率为2秒,DHT11的最大采样率为1秒。

delay(2000);

读取温度和湿度非常简单。为了获得湿度,您只需要在dht对象上使用readHumidity()方法。在这种情况下,我们将湿度保存在h变量中。请注意,readHumidity()方法返回的是float类型的值。

float h = dht.readHumidity();

同样,要读取温度,请使用readTemperature()方法。

float t = dht.readTemperature();

要获取以华氏度为单位的温度,只需将true传递给readTemperature()方法,如下所示:

float f = dht.readTemperature(true);

该库还提供了以华氏度和摄氏度计算热量指数的方法:

// Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false);

最后,所有读数都显示在串行监视器上。

Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); 示范

将代码上传到Arduino之后,以9600的波特率打开Serial Monitor。您应该每两秒钟获取一次传感器读数。这是您在Arduino IDE串行监视器中应该看到的内容。

img

故障排除–无法从DHT传感器读取

如果您尝试从DHT11 / DHT22传感器读取温度和湿度,并且在串行监视器中收到错误消息,请按照以下步骤查看是否可以使传感器正常工作(或阅读我们专用的 DHT故障排除指南) 。

“无法从DHT传感器读取!” 或Nan读数

如果您的DHT传感器返回错误消息“无法从DHT传感器读取!” 或DHT读数返回“ Nan”:

img

请尝试以下故障排除提示之一:

接线: 构建电子项目时,需要仔细检查接线或引脚分配。在检查并测试电路是否正确连接后,如果仍然无法正常工作,请继续阅读以下故障排除提示。电源: DHT传感器的工作范围为3V至5.5V(DHT11)或3V至6V(DHT22)。如果您是通过3.3V引脚为传感器供电,则在某些情况下,以5V为DHT供电可以解决该问题。USB端口或USB电缆 损坏**:**有时仅通过PC USB端口直接为Arduino供电是不够的。尝试将其插入由外部电源供电的USB集线器。这也可能有助于用更好或更短的USB电缆代替USB电缆。拥有可提供足够电力的USB端口或使用良好的USB电缆通常可以解决此问题。电源: 如前一技巧中所述,您的Arduino可能无法提供足够的功率以正确地从DHT传感器读取数据。在某些情况下,您可能需要使用提供更多电流的电源为Arduino供电。传感器类型: 仔细检查您的代码中未注释/注释过的项目适用的传感器。在这个项目中,我们使用的是DHT22: //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) 采样率: DHT传感器获取读数的速度非常慢(传感器读数最多可能需要2秒钟)。在某些情况下,增加两次读数之间的时间可以解决该问题。DHT传感器油炸或破碎: 不幸的是,这些便宜的传感器有时看起来完全正常,但它们却被油炸/破碎。因此,即使您组装了正确的电路和代码,它仍将无法获得读数。尝试使用其他传感器,看看它是否可以解决您的问题。错误的波特率或无法上传代码: 如果您在Arduino IDE串行监视器中没有看到任何内容,请再次检查您是否选择了正确的波特率,COM端口或您是否成功上传了代码。

在构建项目时,我们在DHT方面遇到了类似的问题,始终可以通过采用上述方法之一来解决它。

致命错误:Adafruit_Sensor.h:没有此类文件或目录

当您尝试编译代码时,还会发生一个常见错误。如果收到以下错误:

fatal error: Adafruit_Sensor.h: No such file or directory #include

您需要安装Adafruit Unified Sensor驱动程序库。在您的Arduino IDE中,输入搜索框“ Adafruit Unified Sensor ”,一直向下滚动以查找该库并进行安装。

img

安装库之后,重新启动Arduino IDE,并且代码应该编译而不会出现错误消息。

包起来

DHT11和DHT22传感器为使用Arduino提供温度和湿度测量提供了一种简单而廉价的方法。接线非常简单–您只需要将DHT数据引脚连接到Arduino数字引脚即可。

借助DHT库,编写获取温度和湿度的代码也很简单。获取温度和湿度读数就像使用readTemperature()和readHumidity()方法一样简单。

希望本指南对您有所帮助。DHT11 / DHT22温湿度传感器的其他指南:

ESP8266 DHT11 / DHT22温湿度Web服务器– Arduino IDE带有DHT11 DHT22温度湿度Web服务器的ESP32 – Arduino IDEMicroPython:带DHT11 / DHT22温湿度传感器的ESP32 / ESP8266MicroPython:带DHT11 / DHT22 Web服务器的ESP32 / ESP8266


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭