Sensores DHT11 e DHT22: Guia básico dos Sensores de Humidade e Temperatura

Neste Tutorial aprenderá como funcionam os Sensores de humidade e temperatura, DHT11 e DHT22, e como fazer uma montagem destes sensores com o Arduino.

Humidade é a quantidade de vapor de água na atmosfera. A humidade relativa do ar é uma importante medida usada na previsão do tempo, e indica a possibilidade de precipitação/chuva.

A alta quantidade de vapor de água na atmosfera favorece a ocorrência de chuvas. Já com a humidade do ar baixa, é difícil chover.

A alta humidade durante dias quentes faz a sensação térmica aumentar, ou seja, as pessoas têm a impressão de que está mais calor, devido à redução da eficácia da transpiração da pele, e assim reduzindo o resfriamento corporal.

De acordo com a OMS (Organização Mundial da Saúde), valores de humidade abaixo de 20% oferecem risco à saúde, podendo provocar desidratação nas pessoas.

O instrumento chamado de Higrómetro é usado para a medição da humidade relativa presente na atmosfera.

É utilizado principalmente em estudos do clima, mas também em locais fechados onde a presença de humidade excessiva ou abaixo do normal poderia causar danos, por exemplo dentro de museus, bibliotecas e em laboratórios.

Estas são algumas aplicações para os Sensores de Humidade e Temperatura:

  • Estação Meteorológica;
  • Controle de irrigação para plantas;
  • Controle de humidade e temperatura em ambientes controlados;
  • Frigoríficos;
  • Data Centers;
  • Data loggers, etc.

Neste artigo, vamos ensiná-lo sobre o funcionamento dos Sensores de humidade e temperatura,  DHT11 e DHT22. Veja, também, como fazer uma montagem destes sensores com o Arduino. Confira!

Sensor DHT11

sensor DHT11 é um dispositivo de baixo custo usado para medição de humidade e temperatura do ar.

O sensor de humidade é capacitivo e o sensor de temperatura é um termistor NTC, isto é uma resistência sensível às variações de temperatura.

Dentro do sensor existe um microcontrolador que faz as medições e transmite os valores no formato digital através de um pino de saída.

Segundo o fabricante, a transmissão digital pode ser realizada através de um cabo de até 20 metros. Mas vale a observação de que a longa exposição do sensor ao sol, poderá afetar a performance do mesmo.

Especificações do sensor DHT11

Confira as especificações do sensor DHT11, sempre lembrando que estes valores podem variar dependendo do fabricante:

  • Faixa de humidade relativa: de 20 a 80 %
  • Precisão na humidade: ± 5 % RH
  • Resolução de humidade: 5 % RH
  • Faixa de temperatura: 0 a 50 °C
  • Precisão na temperatura: ± 2 % °C
  • Resolução na temperatura: 2 °C
  • Tempo de resposta: 2 segundos
  • Alimentação: de 3,5V a 5V
  • Consumo máximo de corrente: 2,5 mA
  • DHT11 – Datasheet

Pinout do sensor DHT11

  • VCC = 3,5 a 5V
  • DATA = comunicação de dados
  • NC = sem conexão
  • GND = terra

Sensor DHT11 – Pinout

Sensor DHT22/AM2302

O Sensor DHT22 ou AM2302 também é usado para a medição de humidade e temperatura do ar. Só que com características melhores do que o do DHT11.

Tem maior precisão nas medições e abrange uma faixa maior de temperatura e humidade. Por isso ele é pouco mais caro.

Especificações do sensor DHT22 

Confira as especificações do sensor DHT22, sempre lembrando que estes valores podem variar dependendo do fabricante:

  • Faixa de humidade relativa: de 0 a 100 %
  • Precisão na humidade: ± 2% RH
  • Resolução de humidade: 0,1 % RH
  • Faixa de temperatura: -40 a 80 °C
  • Precisão na temperatura: ± 1 % °C
  • Resolução na temperatura: 0,1 °C
  • Tempo de resposta: < 5 segundos
  • Alimentação: de 3,3V a 5 V
  • Consumo máximo de corrente: 0,5 mA
  • DHT22 – Datasheet

Existem algumas limitações no tamanho do cabo do sensor. Se a tensão de alimentação for de 3,3V, o cabo não pode exceder um metro.

Além disso, uma longa exposição do sensor ao sol, também poderá afetar a performance do mesmo.

Pinout do sensor DHT22

  • VCC = 3,3 a 5V
  • DATA = comunicação de dados
  • NC = sem conexão
  • GND = terra

Sensor DHT22/AM2302 – pinout

Para os curiosos, veja esta imagem do sensor DHT22 aberto e sem a tampa.

Sensor DHT22 aberto e sem a tampa

Interface com os Sensores DHT11 e DHT22

Após alimentar os Sensores DHT11 ou DHT22, aguarde cinco segundos para o circuito estabilizar. Um condensador de 100 uF é recomendado entre o pino VCC e o GND.

No pino de saída, deve ser usado também uma resistência de pullup (4,7K ohms). No caso do módulo sensor DHT11 e do módulo sensor DHT22, estes componentes não são necessários pois já estão montados na placa.

A comunicação dos dados no barramento serial (único pino) ocorre nos dois sentidos, isto é, do sensor para o Microcontrolador e vice-versa.

O protocolo de comunicação pode ser dividido em três partes :

  1. Requisição: para o sensor enviar os dados, ele deverá ser requisitado;
  2. Resposta: o sensor envia uma resposta depois de requisitado;
  3. Leitura de dados: após a resposta do sensor, os dados são enviado em 5 segmentos de 8 bits (40 bits).

Os dois primeiros bytes correspondem à humidade relativa na forma integral e decimal. O terceiro e quarto byte formam a temperatura em graus Celsius na forma integral e decimal. O último byte é o checksum dos dados.

Se quiser saber mais sobre os sensores e os protocolos, sugerimos a leitura dos Datasheets.

Módulo Sensor DHT11 – Pinout

Sensor DHT11 ou DHT22 com Arduino

A montagem dos Sensores DHT com Arduino é muito simples.

Como os fios de ligação são curtos, é recomendado que não conecte o condensador. Se for usar cabos mais extensos, monte o condensador entre o VCC e o terra. Mas a resistência de pullup de 4,7K ohms é necessária.

Diagrama Fritzing abaixo serve para os dois sensores, DHT11 e DHT22, já que eles têm a mesma pinagem.

Mas não se esqueça de configurar no programa, o sensor usado. Já que existem algumas diferenças nos protocolos de comunicação.

Diagrama Fritzing – Arduino e sensores DHT11 e DHT22

Considerando que o módulo DHT11 já tem a resistência de pullup no pino de dados, nem esta resistência é necessária. A alimentação recomendável é de 5 V.

Diagrama Fritzing – Arduino e sensor DHT11

Como instalar a Biblioteca DHT Sensor

Tanto para o uso do Sensor DHT11, quanto para o DHT22, a biblioteca que será usada é a da Adafruit. Ela segue os padrões da IDE Arduino e é bem simples para usá-la.

Para instalar a nova Biblioteca DHT Sensor Library , clique em: Sketch > Incluir Biblioteca > Gerir Bibliotecas 

Após abrir a janela do Gestor de Bibliotecas, refine a busca digitando DHT Sensor Library. Na biblioteca da Adafruit, clique em More Info e depois em Instalar.

Após alguns segundos, ela será automaticamente instalada. Lembre-se que o seu computador precisa de estar conectado à Internet, para poder baixar a biblioteca. Após a instalação da Biblioteca, é necessário que feche e abra novamente o programa Arduino IDE.

Sketch Arduino – Sensor DHT11 e DHT22

O programa também é bem simples. Fizemos uma tradução do exemplo da Biblioteca da Adafruit, para ser mais fácil de entender.

O programa faz com que o Arduino se comunique com o Sensor DHT, para realizar as leituras de humidade e temperatura.

O mesmo programa poderá ser usado para os dois sensores (DHT11 ou DHT22). Mas somente um sensor deverá ser usado de cada vez. É necessário somente a definição do sensor a ser usado no programa.

  • Para usar o Sensor DHT11 , comente o Sensor DHT22

#define DHTTYPE DHT11                 // Sensor DHT11
//#define DHTTYPE DHT22            // Sensor DHT22 ou AM2302

  • Ou para usar o Sensor DHT22, comente o Sensor DHT11 :

//#define DHTTYPE DHT11             // Sensor DHT11
#define DHTTYPE DHT22               // Sensor DHT22 ou AM2302

// Arduino - Sensor DHT - Humidade e Temperatura
// Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor

#include <Adafruit_Sensor.h>           // Biblioteca DHT Sensor Adafruit 
#include <DHT.h>
#include <DHT_U.h>

// para selecionar um sensor, retire as duas barras do seu sensor e coloque no outro
  #define DHTTYPE    DHT11             // Sensor DHT11
//#define DHTTYPE    DHT22             // Sensor DHT22 ou AM2302

#define DHTPIN 2                       // Pino do Arduino conectado no Sensor(Data) 
DHT_Unified dht(DHTPIN, DHTTYPE);      // configura o Sensor DHT - pino e tipo
uint32_t delayMS;                      // variável para atraso no tempo

void setup() {
 Serial.begin(9600);                   // monitor serial 9600 bps
 dht.begin();                          // inicia a função
 Serial.println("A usar o Sensor DHT");
 sensor_t sensor;
 dht.temperature().getSensor(&sensor); // imprime os detalhes do Sensor de Temperatura
 Serial.println("------------------------------------");
 Serial.println("Temperatura");
 Serial.print  ("Sensor:       "); Serial.println(sensor.name);
 Serial.print  ("Valor máximo:    "); Serial.print(sensor.max_value); Serial.println(" *C");
 Serial.print  ("Valor mínimo:    "); Serial.print(sensor.min_value); Serial.println(" *C");
 Serial.print  ("Resolução:   "); Serial.print(sensor.resolution); Serial.println(" *C");
 Serial.println("------------------------------------");
 dht.humidity().getSensor(&sensor);    // imprime os detalhes do Sensor de Humidade
 Serial.println("------------------------------------");
 Serial.println("Humidade");
 Serial.print  ("Sensor:       "); Serial.println(sensor.name);
 Serial.print  ("Valor máximo:    "); Serial.print(sensor.max_value); Serial.println("%");
 Serial.print  ("Valor mínimo:    "); Serial.print(sensor.min_value); Serial.println("%");
 Serial.print  ("Resolução:   "); Serial.print(sensor.resolution); Serial.println("%");
 Serial.println("------------------------------------");
 delayMS = sensor.min_delay / 1000;    // define o atraso entre as leituras
}

void loop() {
 delay(delayMS);                       // atraso entre as medições
 sensors_event_t event;                // inicializa o evento da Temperatura
 dht.temperature().getEvent(&event);   // faz a leitura da Temperatura
 if (isnan(event.temperature)) {       // se algum erro na leitura
   Serial.println("Erro na leitura da Temperatura!");
 } else {                              // senão
   Serial.print("Temperatura: ");      // imprime a Temperatura
   Serial.print(event.temperature);
   Serial.println(" ºC");
 }
 dht.humidity().getEvent(&event);      // faz a leitura de humidade
 if (isnan(event.relative_humidity)) { // se algum erro na leitura
   Serial.println("Erro na leitura da Humidade!");
 } else {                              // senão
   Serial.print("Humidade: ");         // imprime a humidade
   Serial.print(event.relative_humidity);
   Serial.println("%");
 }
}

Estas são as telas do Monitor Serial da IDE , para o Sketch das montagens. Veja as diferenças nas leituras dos dois sensores.

A usar o Sensor DHT11:

Monitor Serial da IDE – Sensor DHT11

E para o uso do Sensor DHT22:

Monitor Serial da IDE – Sensor DHT22