Código Arduino e vídeo para o sensor de temperatura e umidade DHT22
Neste tutorial, aprenderemos como usar o sensor de temperatura e umidade DHT22 com um Arduino. O DHT22, também conhecido como AM2302, é capaz de medir temperaturas de -40 a 80 graus Celsius e umidade de 0 a 99 por cento. Seguindo este guia, você poderá exibir a temperatura em Celsius, Fahrenheit ou Kelvin, bem como o nível de umidade.

Vamos utilizar a biblioteca do sensor DHT para ler facilmente os dados do sensor. Essa biblioteca simplifica o processo de comunicação com o DHT22 e nos permite acessar os valores de temperatura e umidade com apenas algumas linhas de código. Para uma explicação mais aprofundada, recomendo que assista ao vídeo associado (no vídeo em 00:00).
Hardware Explicado
O componente principal neste projeto é o módulo sensor DHT22, que é um sensor digital de temperatura e umidade. Ele utiliza um elemento capacitivo de detecção de umidade e um termistor para medir o ar circundante. A saída é um sinal digital que pode ser lido por um Arduino.
O DHT22 opera numa faixa de tensão de 3,3 a 5 volts e comunica através de uma interface de fio único, o que o torna fácil de integrar em seus projetos. Ele também possui uma longa distância de transmissão de até 20 metros, permitindo flexibilidade na colocação do sensor.
Detalhes da Ficha Técnica
| Fabricante | Aosong |
|---|---|
| Número da peça | DHT22 (AM2302) |
| Tensão lógica/E/S | 3.3 - 5 V |
| Tensão de alimentação | 3.3 - 5 V |
| Faixa de medição (Temperatura) | -40 a +80 °C |
| Faixa de medição (Umidade) | 0 a 99 % |
| Precisão (Temperatura) | ±0,5 °C |
| Precisão (Umidade) | ±2 % a 25 °C |
| Resolução | 0.1 °C / 0.1 % |
| Distância de transmissão | até 20 m |
| Pacote | módulo de 4 pinos |
- Garanta alimentação adequada entre 3,3 V e 5 V.
- Use um resistor pull-up de 10K entre o pino de dados e a alimentação.
- Mantenha os fios do sensor curtos para leituras precisas.
- Evite consultas rápidas; permita intervalos entre as leituras.
- Esteja atento aos fatores ambientais que afetam as leituras.
Instruções de fiação

Para ligar o sensor DHT22, comece por conectar o pino de alimentação (pino 1) do sensor à saída 5V do Arduino. Em seguida, conecte o pino de terra (pino 4) a um dos pinos GND do Arduino. O pino de dados (pino 2) deve ser conectado ao pino digital 2 do Arduino para comunicação. Além disso, coloque um resistor de 10 kΩ entre o pino de dados e o pino de alimentação para garantir leituras estáveis.
Caso esteja usando um pino diferente para os dados, lembre-se de atualizar o código adequadamente, alterando o#define DHTPINvalor para corresponder ao pino escolhido. A configuração deve ser simples. Seguindo estas conexões, você garantirá que seu sensor funcione corretamente.
Exemplos de Código e Guia Passo a Passo
O código a seguir inicializa o sensor DHT22 e lê os valores de temperatura e umidade. Primeiro, incluímos a biblioteca DHT e definimos o pino ao qual o sensor está conectado:
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);Aqui, a variávelDHTPINestá definido como 2, o que indica que o pino de dados do sensor está conectado ao pino digital 2 do Arduino. ODHTTYPEdefine o tipo de sensor usado, que neste caso é o DHT22.
Em seguida, nosetup()função, inicializamos o sensor e o monitor serial:
void setup() {
Serial.begin(9600);
dht.begin();
}Este trecho de código inicializa a comunicação serial e prepara o sensor DHT para leitura. OSerial.begin(9600)define a taxa de transmissão para a comunicação serial.
Noloop()função, podemos ler e exibir os valores de temperatura e umidade:
Serial.print("Temperature: ");
Serial.print(getTemp("c")); // Celsius
Serial.print(" *C ");
Serial.print(getTemp("h")); // Humidity
Serial.println(" % ");Esta parte do código imprime a temperatura em Celsius e a porcentagem de umidade no monitor serial. A funçãogetTemp()é usado para recuperar os dados solicitados com base no parâmetro passado.
Demonstração / O que Esperar
Assim que tudo estiver configurado e o código for carregado, você deverá ver as leituras de temperatura e umidade exibidas no monitor serial. O DHT22 pode levar um momento para estabilizar, então certifique-se de aguardar alguns segundos entre as leituras (no vídeo em 15:00). Se houver algum problema com as leituras, verifique sua fiação e garanta que as conexões estejam seguras. Armadilhas comuns incluem atribuições de pinos incorretas ou problemas na fonte de alimentação.
Marcas de tempo do vídeo
- 00:00- Introdução ao sensor DHT22
- 01:30- Fiação do sensor
- 03:00- Explicação do código
- 04:30- Demonstração de Código
- 06:00- Conclusão
++
/*
* This is the Arduino code for the DHT22 module to read temperature and humidity.
* This code can display temperature in:
* getTemp("c") is used to get Celsius.
* getTemp("f") is used to get Fahrenheit.
* getTemp("k") is used for Kelvin.
* getTemp("hif") is used to get Fahrenheit.
* getTemp("hic") is used to get Celsius.
* getTemp("h") is used to get humidity.
* Watch the video https://youtu.be/oi_GPSLjgBY
* Other Arduino library and videos https://robojax.com
*
* Written/updated by Ahmad Shamshiri for Robojax.com Video
* Date: Jan 08, 2018, in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: This code is "AS IS" and for educational purposes only.
*
* original source code : https://github.com/adafruit/DHT-sensor-library
*/
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster processors.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx Robojax test!");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Robojax.com test video
Serial.print("Temperature: ");
Serial.print(getTemp("c"));
Serial.print(" *C ");
Serial.print(getTemp("f"));
Serial.println (" *F");
Serial.println("-----------------");
Serial.print("Heat index: ");
Serial.print(getTemp("hic"));
Serial.print(" *C ");
Serial.print(getTemp("hif"));
Serial.println(" *F");
Serial.print(getTemp("k"));
Serial.println(" *K");
Serial.println("-----------------");
Serial.print("Humidity: ");
Serial.print(getTemp("h"));
Serial.println(" % ");
Serial.println("===========================");
}
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* This code can display temperature in:
* getTemp("c") is used to get Celsius.
* getTemp("f") is used to get Fahrenheit.
* getTemp("k") is used for Kelvin.
* getTemp("hif") is used to get Fahrenheit.
* getTemp("hic") is used to get Celsius.
* getTemp("h") is used to get humidity.
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor).
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return 0.0;
}
// Compute heat index in Kelvin
float k = t + 273.15;
if(req =="c"){
return t;//return Celsius
}else if(req =="f"){
return f;// return Fahrenheit
}else if(req =="h"){
return h;// return humidity
}else if(req =="hif"){
return hif;// return heat index in Fahrenheit
}else if(req =="hic"){
return hic;// return heat index in Celsius
}else if(req =="k"){
return k;// return temperature in Kelvin
}else{
return 0.000;// if no request found, return 0.000
}
}
Recursos e referências
Arquivos📁
Bibliotecas do Arduino (zip)
-
Módulo PCB DHT22 vermelho
DHT22-module-red.fzpz0.01 MB
Arquivo Fritzing
-
Sensor de Umidade e Temperatura DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
Módulo PCB DHT22 vermelho
DHT22-module-red.fzpz0.01 MB
Manual do Usuário
-
Manual do usuário do sensor de temperatura e umidade DHT22
robojax-DHT22_manual.pdf0.36 MB