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
O 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 :
- Requisição: para o sensor enviar os dados, ele deverá ser requisitado;
- Resposta: o sensor envia uma resposta depois de requisitado;
- 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.
O 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