Arduino怎么使用DHT22温度湿度传感器

看了这篇教程,包你学会怎么连接Arduino和DHT22温度湿度传感器的电路,使用DHT库读取传感器的数据。

DHT库还可以与其他几个DHT传感器一起使用,如DHT22、DHT21和DHT11等,这也是一个功能强大,使用方便的库。

设备清单

必备设备

  • Arduino Uno
  • 面包板
  • 面包板线
  • DHT22湿度传感器
  • 10k欧姆电阻

DHT22湿度和温度传感器

DHT22温湿度传感器有很多优点,让我选择它。

首先它体积小,价格便宜

DHT22具有较长的传输距离,电缆长度可以达到20米。这个距离使得该传感器非常适用于的Arduino处于中心位置的项目。

该传感器是数字式的,因此不需要与Arduino的模拟引脚打交道。数字化也使得DHT22在较长的距离内不容易受到电噪声的影响。

该传感器唯一的缺点之一是它的轮询率相当慢。只能每隔两秒从湿度传感器中检索一次数据。

要利用DHT22与Arduino一起使用,你需要在数据线上使用一个10k欧姆电阻作为上拉电阻。

DHT22引脚

DHT22-Temperature-Sensor-with-numbering

  • 引脚1为VCC(电源)
  • 引脚2是DATA(数据信号)
  • 引脚3为NULL(不要连接)
  • 引脚4为GND(接地)

连接Arduino温湿度传感器电路

这个传感器的电路相当简单,不需要复杂的零件和接线。

  • 将10k电阻从引脚1到引脚2放在湿度传感器上。
  • 将引脚1接至Arduino上的5v引脚。
  • 将引脚2接至Arduino上的引脚2。
  • 不要使用传感器上的3号针脚。
  • 最后将4号针脚连接到Arduino上的GND。

下图将帮助你正确地组装DHT22电路与Arduino Uno。Arduino-Uno-DHT22-Wiring

Arduino DHT22湿度传感器代码

我们将使用两个库来实现。第一个是Adafruit DHT传感器库,第二个是Adafruit统一传感器库。

导入Sensor和DAdafruit Unified Sensor库

首先,在Arduino IDE中打开库菜单,进入Sketch (1.) ->Include Library (2.) ->Manage Libraries(3.)Arduino-Sketch-Manage-Libraries

在这个窗口中,搜索DHT(1.),找到Adafruit公司的DHT传感器库(2.)。点击 “install”(3.)按钮安装最新版本的传感器库,如下图所示。DHT-Sensor-Library

现在,在同一个窗口中,搜索Adafruit Unified Sensor(1.),找到库(2.)。找到后,按 “install”(3. )按钮进行。DHT-Adafruit-Unified-Sensor-Library

现在我们需要的所有的库都导入进来了。

编写代码

多亏了Adafruit的DHT库,我们需要编写的代码非常简单,因为库里的大部分工作它已经帮我们完成了。

下面,我们将向您介绍代码,并解释每个部分的作用。

如果你想获得完整的代码而不需要解释,你可以跳到本节的最后。

#include <DHT.h>

首先我们需要做的是导入我们在教程中获得的DHT库的头像。你可以手动输入,也可以在Sketch -> Include Library -> DHT 传感器库下选择 这个库包含了我们在Arduino上处理DHT22传感器所需要的所有代码。

#define dataPin 2
#define DHTType DHT22

现在我们需要定义两个常数值。第一个是我们的dataPin常数。这个常数保持着你连接DHT22的引脚号。这个常数的值应该是2,除非你在Arduino上使用不同的数字输入引脚。

另外,我们要定义我们所使用的湿度传感器的型号,这个常数被分配到DHTType常数。我们所使用的库支持DHT22、DHT21和DHT11传感器。

DHT dht = DHT(dataPin, DHTType);

接下来,我们利用我们在脚本开始时定义的dataPin和DHTType常量实例化DHT库。

这段代码将准备DHT库与DHT22传感器交互,并将准备好的对象存储在我们的 “dht “变量中。

void setup() {
    Serial.begin(9600);
    dht.begin();
}

setup函数使用9600的波特率来初始化串行监控器,这样我们就可以利用串行监控器从Arduino读回数据。

其次,我们对之前实例化的dht对象进行调用,运行它的begin函数。运行DHT库的begin函数,就可以让它开始从传感器中读取数据。

void loop() {
    delay(2000);
    float h = dht.readHumidity();

    float t = dht.readTemperature();

在这里,我们首先将脚本延迟2000毫秒(2秒),这样做是因为我们每隔2秒才能轮询一次DHT22的新信息。

接下来,我们使用我们的”dht”对象从传感器读取湿度。我们将得到的值存储在”h”变量中。

同样的,对于温度,我们使用温度来获取这个值,并将其存储在”t”变量中。

if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from the DHT sensor, check wiring.");
        return;
    }

在这部分代码中,我们要做一些检查,以确保我们所读取的值是我们所期望的。

使用isnan()函数,我们检查”h”和”t”变量是否是数字。如果其中一个变量不是数字,我们就通过串行连接打印一条消息,然后返回到循环的开始。

 Serial.print("Humidity: ");
    Serial.print(h);
    //Print out the Temperature
    Serial.print("% || Temperature: ");
    Serial.print(t);
    Serial.print("°C ");

    //Print new line
    Serial.println();
}

在最后一段代码中我们再次利用串口连接,但这次我们打印出从传感器收到的湿度和温度值。

使用Arduino IDE等串行监控器,能够看到到Arduino输出的这些值。

测试arduino DHT22传感器代码

  1. 上传代码到arduino中,点击”Verify”按钮,然后点击”Upload”按钮.Arduino-DHT22-Verify-and-upload如果你遇到问题,就要检查代码是不是正确的了。

另外,确认Arduino是否连接好了,并在工具->端口下选择了它。

  1. 你的Arduino湿度传感器现在应该已经启动并记录了。现在是时候加载串行监控器,这样就可以看到温度和湿度测量结果。

点击 “Tooles”(1.)打开Arduino串行监控器软件,然后点击 “Serial Monitor”(2.)Arduino-DHT22-Serial-Monitor

  1. 在串行监控器内,你应该会看到像下面这样的结果。Arduino-DHT22-Serial-Monitor-Results

希望你一切正常,如果有什么问题,请不要吝啬在文章下面留言寻求帮助。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » Arduino怎么使用DHT22温度湿度传感器

赞 (0)

评论

6+2=