首页 > 其他分享 >DHT22湿度和温度传感器与Arduino连接电路图

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

时间:2023-05-30 12:07:17浏览次数:37  
标签:温度传感器 Arduino 引脚 电路图 传感器 print DHT22 Serial display

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

此外,该传感器具有长期稳定性和高可靠性,这使其成为暖通空调等各种应用的完美选择,气象站和室内空气质量监测系统。因此,在本教程中,IC先生网www.mrchip.cn决定将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连接电路图_数据_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连接电路图_数据_06

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

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

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

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

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

DHT22湿度和温度传感器与Arduino连接电路图_数据_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);
}


标签:温度传感器,Arduino,引脚,电路图,传感器,print,DHT22,Serial,display
From: https://blog.51cto.com/u_15579956/6377680

相关文章

  • Arduino开发环境搭建
    软件下载地址:安装板级驱动:C:\Users\88429\Documents\Arduino\hardware\espressif\arduino-esp32-masteresp32wroom32板级驱动为github的链接:安装库文件:旧版(18)库位置:安装位置//aduino//librariesor//hardware或者:c盘的x86programfiles/arduinno/libraries新版的library......
  • 基于Arduino和Java实现的教室桌面控制系统
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]摘要物理实验室类的专业教室目前使用状况十分混乱,为了改变这一现状,我们提出并设计了一个专业教室桌面控制系统。这个系统主要由客户端和服务端两大部分构成。客户端又可以分为门禁机、通信机、桌面机和读卡机四部分。门禁机负责控制......
  • 使用Arduino IDE对ESP32双核进行编程
    使用ArduinoIDE对ESP32双核进行编程 [复制链接]qrcodeESP32 FreeRTOS查看: 22988 | 回复: 0风筝 发表于:2020-1-1722:23:45|只看该作者|只看大图|倒序浏览楼主 ESP模块因其Wi-Fi功能(如ESP8266、ESP-12E等)而广受欢迎。这些都是......
  • arduino esp32 ds18b20 实例代码
    #include<OneWire.h>#include<DallasTemperature.h>//引脚定义#defineONE_WIRE_BUS15//库引用实例OneWireoneWire(ONE_WIRE_BUS);DallasTemperaturesensors(&oneWire);voidsetup(void){Serial.begin(9600);sensors.begin();}voidloop(vo......
  • esp8266,arduino,网页显示dht11温湿度,控制继电器开关,局域网智能家居
    不说了,上代码,用arduino实现esp8266代码#include<ESP8266WiFi.h>#include<WiFiClient.h>#include<ESP8266WebServer.h>#include<SimpleDHT.h>//定义DHT11引脚//VCC:5Vor3V//GND:GND//DATA:2intpinDHT11=D4;SimpleDHT11......
  • Arduino读取DHT11,DHT22,SHTC3温湿度数据
    本文章讲解使用NodeMcu开发板读取DHT11、DHT22、SHTC3这三个温湿度传感器的数据并发送至串口。各传感器我都写了使用第三方库和不用第三方库的例程。ESP8266开发环境搭建教程:https://blog.zeruns.tech/archives/526.html文中所用到传感器购买地址在文章最下面。DHT11DHT11是一款有......
  • arduino篇
    arduino硬件开发认识arduinoarduino开发环境和IDE安装arduino开发板介绍数电基础LED闪烁实验Helloworld实验控制LED灯有源蜂鸣器实验电位器实验PWM调光实验无源蜂鸣器实验光控LED实验一位共阴数码管实验四位共阴数码管实验累加器实验步进电机驱动实验温度传感器LM35实验液晶LCD实......
  • 48V500W通信电源电路图 500W开关电源电路图 发射机 电源电路图 广电电源电路图
    48V500W通信电源电路图500W开关电源电路图发射机电源电路图广电电源电路图ID:822000638385274006......
  • 成都电路板定做:已验证!温度传感器DS18B20的电路和读正负温度的程序
    本文介绍温度传感器DS18B20的电路和能读取正负温度数值的程序(或说明)。日积月累,越来越进步,本文的分享来自查阅与实践,基本已验证成功。1、什么是DS18B20DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。2、DS18B20有什么用温......
  • 西门子PLC1200伺服库卡机器人12工位博图程序例程,组态采用昆仑通态触摸屏,详细中文注释,P
    西门子PLC1200伺服库卡机器人12工位博图程序例程,组态采用昆仑通态触摸屏,详细中文注释,PDF电路图参考,设备操作说明,物料BOM,PLC和一台库卡机器人profinet通讯PTO模式控制松下伺服一共36路模拟量12路模拟量压力检测12路模拟量位置检测12路模拟量压力输出连接26个温控器485总线通......