sensor de temperatura e umidade DHT22 (ou AM2302), é uma evolução do DHT11, do qual já falamos algumas vezes aqui no Arduino e Cia. É um sensor bem simples e prático de utilizar tanto com placas Arduino como com placas Raspberry Pi, ESP32, ESP8266, etc.

O Sensor de temperatura e umidade DHT22

O DHT22 é um sensor com baixo consumo de corrente (2,5 mA durante medições, e 100-150µA em standby), e  que possui internamente um sensor de umidade capacitivo e um termistor, além de um conversor analógico/digital para comunicação com o microcontrolador.

Sensor de umidade e temperatura DHT22

O sensor DHT22 (datasheet) é semelhante ao DHT11 (embora um pouco maior). Ambos utilizam apenas 1 pino de dados para conexão ao microcontrolador,  mas internamente eles possuem diferenças significativas.

O DHT22, por exemplo, é mais lento do que o DHT11, porém ele é capaz de medir uma faixa mais ampla de temperatura e umidade.

Para ilustrar isso montei uma tabela com as principais características de cada um:

Tabela comparativa DHT11 x DHT22

Assim como seu antecessor, o DHT22 também possui 4 pinos, dos quais apenas 3 são usados para conexão ao microcontrolador:

DHT22 - Pinagem

Como você pode notar na imagem, recomenda-se deixar o pino 3 livre, ou seja, sem conexão.

Conexão do DHT22 ao Arduino

Utilizar esse sensor com o Arduino é muito fácil. Vamos montar um circuito usando o Arduino Uno e um display LCD 16×2. Um resistor de 10 K é utilizado no pino de dados do sensor como resistor pull-up.O pino de dados do sensor será ligado ao pino digital 7do Arduino:

Circuito Arduino Uno - Sensor de temperatura DHT22

Antes de carregar o programa que vai mostrar o valor da temperatura e umidade no display, como mostrado na imagem acima, baixe a biblioteca DHT nesse link. Descompacte o arquivo, renomeie a pasta para DHT e coloque-a dentro da pasta Libraries da IDE do Arduino.

Essa biblioteca também serve para outros sensores DHT, como o DHT11 e o DHT21. No início do programa, logo após a definição do pino do sensor, altere a linha #define DHTTYPE de acordo com o sensor que você está utilizando.

//Programa: Sensor de temperatura DHT22
//Autor: Arduino e Cia

#include <DHT.h>
#include <LiquidCrystal.h>

//Pino conectado ao pino de dados do sensor
#define DHTPIN 7

//Pinos do display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

//Utilize a linha de acordo com o modelo do sensor
//#define DHTTYPE DHT11   // Sensor DHT11
#define DHTTYPE DHT22   // Sensor DHT 22  (AM2302)
//#define DHTTYPE DHT21   // Sensor DHT 21 (AM2301)

//Definicoes do sensor : pino, tipo
DHT dht(DHTPIN, DHTTYPE);

//Array simbolo grau
byte grau[8] ={ B00001100, 
                B00010010, 
                B00010010, 
                B00001100, 
                B00000000, 
                B00000000, 
                B00000000, 
                B00000000,}; 

void setup() 
{
  //Inicializa o display
  lcd.begin(16, 2);
  lcd.clear();
  //Cria o caracter customizado com o simbolo do grau
  lcd.createChar(0, grau); 
  //Informacoes iniciais no display
  lcd.setCursor(0,0);
  lcd.print("Temp. : ");
  lcd.setCursor(13,0);
  //Mostra o simbolo do grau
  lcd.write(byte(0));
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Umid. : ");
  lcd.setCursor(14,1);
  lcd.print("%");

  Serial.begin(9600); 
  Serial.println("Aguardando dados...");
  //Iniclaiza o sensor DHT
  dht.begin();
}

void loop() 
{
  //Aguarda 2 segundos entre as medicoes
  delay(2000);
  
  //Leitura da umidade
  float h = dht.readHumidity();
  //Leitura da temperatura (Celsius)
  float t = dht.readTemperature();
  
  //Verifica se o sensor esta respondendo
  if (isnan(h) || isnan(t))
  {
    Serial.println("Falha ao ler dados do sensor DHT !!!");
    return;
  }

  //Mostra a temperatura no serial monitor e no display
  Serial.print("Temperatura: "); 
  Serial.print(t);
  lcd.setCursor(8,0);
  lcd.print(t);
  Serial.print(" *C  ");
  //Mostra a umidade no serial monitor e no display
  Serial.print("Umidade : "); 
  Serial.print(h);
  Serial.println(" %");
  lcd.setCursor(8,1);
  lcd.print(h);
}

Caso queira utilizar o circuito sem o display, os dados sobre temperatura e umidade também são enviados ao serial monitor:

Serial Monitor - DHT22

Veja como utilizar este sensor de temperatura também no Raspberry no artigo Como ligar o sensor de temperatura DHT22 ao Raspberry Pi B+.

Avalie este post!