O 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.
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:
Assim como seu antecessor, o DHT22 também possui 4 pinos, dos quais apenas 3 são usados para conexão ao microcontrolador:
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:
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:
Veja como utilizar este sensor de temperatura também no Raspberry no artigo Como ligar o sensor de temperatura DHT22 ao Raspberry Pi B+.