DHT22湿度和温度传感器与Arduino连接电路图
  OxmBLznM46Rx 2023年11月02日 96 0

DHT22 温湿度传感器是一款多功能且经济高效的传感器,用于测量环境温度和湿度,应用范围广泛。它基于数字信号输出,可以提供高精度测量,温度分辨率为 0.1 摄氏度,湿度分辨率为 0.1%。该传感器采用电容式湿度传感元件和热敏电阻分别测量湿度和温度。DHT22 传感器的功耗也相对较低,可在 3.3V 至 5V 的电压范围内工作,使其适用于电池供电项目

此外,该传感器具有长期稳定性和高可靠性,这使其成为暖通空调等各种应用的完美选择,气象站和室内空气质量监测系统。因此,在本教程中,IC先生网决定将DHT22 与 Arduino UNO 连接起来,在此过程中,我们将让您了解所有细节,所以不用多说,让我们开始吧。

DHT22温湿度传感器模块

DHT22模块共有3个引脚。而DHT22 裸骨传感器有 4 个引脚。如果我们考虑三个引脚中的模块,其中两个是电源引脚,一个是数据引脚。如果我们查看 4 针传感器,则额外的针是 NC 针,它没有任何功能。模块和传感器的引脚图如下所示。

DHT22 模块引出线

下图显示了 DHT22 模块的引脚排列。

DHT22湿度和温度传感器与Arduino连接电路图_数据

DATA用于 1-Wire 通信的数据引脚

GND模块的接地引脚,连接到 Arduino 的接地引脚。

VCC模块的电源引脚。

Not Used在此传感器中,未使用此引脚。

DHT22 传感器模块的零件标记

除传感器外,DHT22 模块在 PCB 上仅包含两个组件。一个上拉电阻和一个去耦电容,DHT22模块的零件标记如下所示。

DHT22湿度和温度传感器与Arduino连接电路图_数据_02

DHT22模块电路图

DHT22温湿度传感器模块完整原理图如下图:

DHT22湿度和温度传感器与Arduino连接电路图_#include_03

DHT22模块的原理图如上所示。如前所述,董事会只有几名成员。VCC 和 GND 引脚直接连接到 DHT22,上拉电阻连接到 DATA 引脚。钽电容和多层电容提供足够的滤波。作为电源指示,在某些 PCB 中,您可以找到 LED 指示灯,但对于大多数电路板来说,LED 是不存在的。

DHT22传感器模块常见问题

问:简而言之,DHT22 是什么?

DHT22 是 DHT11 传感器的更昂贵版本,显然具有更好的规格。其温度测量范围为 -40 至 +125 摄氏度,精度为 +-0.5 度,而 DHT11 温度范围为 0 至 50 摄氏度,精度为 +-2 度。

问:DHT22 是模拟的还是数字的?

DHT-22(也称为 AM2302)是一种数字输出相对湿度和温度传感器。

问:DHT22 防水吗?

不,它不防水。

问:DHT11 传感器的采样率是多少?

DHT22 的采样率为 1Hz。

问:DHT22 使用什么协议?

DHT22 传感器使用专有的单总线通信协议,可以通过计算的定时脉冲发送和接收数据。

DHT22 是如何工作的?

如果您使用的是原装 DHT22 传感器,那么它里面会有一个NTC热敏电阻和传感器模块,但是您在市场上可以找到的大多数传感器大多是非原装零件,并且在里面您会发现一个小传感器,您可以可以在下图中看到。

DHT22湿度和温度传感器与Arduino连接电路图_数据_04

湿度传感元件由夹在两个电极之间的保湿基板组成。当基材吸收水分时,两个电极之间的电阻会降低。两个电极之间的电阻变化与相对湿度成正比。较高的相对湿度会降低电极之间的电阻,而较低的相对湿度会增加电极之间的电阻。这种电阻变化是通过板载 MCU 的 ADC 测量的,并计算出相对湿度。

DHT22湿度和温度传感器与Arduino连接电路图_引脚_05

每个DHT22元件都经过实验室严格校准,湿度校准极其准确。校准系数作为程序存储在 OTP 存储器中,供传感器内部信号检测过程使用。

DHT22单总线通信协议

单总线通信协议用于与 DHT22 和微控制器通信。样本数据大约需要 4 毫秒才能运行完毕。此数据由小数部分和整数部分组成。总数据为 40 位长,为 MSB 格式。数据格式如下:8bit 整数RH 数据+8bit 十进制RH 数据+8bit 整数T 数据+8bit 十进制T 数据+8bit 校验和。如果数据传输正确,则校验和应为“8bit整数RH数据+8bit十进制RH数据+8bit整数T数据+8bit十进制T数据”的最后8bit。

当MCU发送启动信号DHT从低功耗模式变为运行模式,并将所有40位数据转储给微控制器,微控制器读取数据并根据二进制数据计算温度和湿度。

DHT22湿度和温度传感器与Arduino连接电路图_#include_06

上图显示了数据通信如何与微控制器和 DHT22 一起工作。

将 DHT22 传感器与 Arduino 连接的电路图

现在我们已经完全了解 DHT22 传感器的工作原理,我们可以将所有必需的电线连接到 Arduino 并编写代码以从传感器中获取所有数据。下图显示了 DHT22 传感器模块与 Arduino 接口的电路图。

DHT22湿度和温度传感器与Arduino连接电路图_数据_07

连接很简单,只需要三根电线。将模块的 VCC 和 GND 连接到 Arduino 的 5V 和 GND 引脚。然后将DATA引脚连接到Arduino的数字引脚2。我们通过这个引脚与DHT22进行通信。

DHT22湿度和温度传感器与Arduino连接电路图_#include_08

用于连接传感器模块的 Arduino DHT22 代码

现在让我们看看连接 DHT22 传感器的代码。首先通过库管理器安装 Adafruit 的DHT 传感器库和Adafruit 统一传感器驱动程序。然后创建一个空白草图并将本文末尾的代码粘贴到其中。

#include <Wire.h> 
#include "DHT.h" 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h>

一开始,我们包含了所有必要的库,并将传感器类型定义为 DHT22,将传感器引脚定义为数字引脚 2。然后为 DHT 库创建了一个实例。

#define DHTTYPE DHT22
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
unsigned long delayTime;
uint8_t DHTPin = 2;
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
float Temp_Fahrenheit;

接下来,我们有 setup() 函数,在 setup 函数中我们初始化串口用于调试,我们初始化 DHT,我们还初始化显示。我们还设置了文本大小并使显示颜色为白色。

void setup() {
  Serial.begin(115200);
  pinMode(DHTPin, INPUT);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(100);
  display.clearDisplay();
  display.display();
  display.setTextSize(1.75);
  display.setTextColor(WHITE);
}

接下来,我们有循环函数,在循环函数中我们获取湿度、温度以及以摄氏度和华氏度为单位的温度。

void loop(){
  Humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  Temperature = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  Temp_Fahrenheit = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(Humidity) || isnan(Temperature) || isnan(Temp_Fahrenheit)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
}

接下来,我们在串行监视器和 OLED 上打印数据 

Serial.print(F("Humidity: "));
  Serial.print(Humidity);
  Serial.print(F("%  Temperature: "));
  Serial.print(Temperature);
  Serial.print(F("°C "));
  Serial.print(Temp_Fahrenheit);
  Serial.println(F("°F "));
  display.setCursor(0, 0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(Temperature);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(Humidity);
  display.print(" %");
  display.display();
  delay(1000);
}

代码

#include <Wire.h>
#include "DHT.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
  void setup() {
    Serial.begin(115200);
    pinMode(DHTPin, INPUT);
    dht.begin();
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    display.display();
    delay(100);
    display.clearDisplay();
    display.display();
    display.setTextSize(1.75);
    display.setTextColor(WHITE);
  }
void loop(){
  Humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  Temperature = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  Temp_Fahrenheit = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(Humidity) || isnan(Temperature) || isnan(Temp_Fahrenheit)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  Serial.print(F("Humidity: "));
  Serial.print(Humidity);
  Serial.print(F("%  Temperature: "));
  Serial.print(Temperature);
  Serial.print(F("°C "));
  Serial.print(Temp_Fahrenheit);
  Serial.println(F("°F "));
  display.setCursor(0, 0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(Temperature);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(Humidity);
  display.print(" %");
  display.display();
  delay(1000);
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
OxmBLznM46Rx