O DHT11 e o DHT22 são sensores fabricados pela Aosong, com uma saída digital para medições. Neste post é mostrado como usá-los no Arduino.
Como funciona?
O sensor de temperatura é um termistor NTC e o sensor de umidade relativa é capacitivo. Ou seja, um capacitor que muda a capacitância quando muda a umidade do ar. Os sinais dos sensores vão para um microcontrolador de 8 bits, que envia um sinal serial através de um único pino de dados (Signal) para um microcontrolador como o Arduino, Raspberry Pi, etc.
A umidade relativa é a pressão do vapor no ar dividido pela pressão de saturação do vapor, o quociente é multiplicado por 100 para o resultado ficar em %.
Parâmetros do DHT11
- Faixa de tensão de alimentação: entre 3,5V e 5,5V.
- Corrente de operação: 3mA, 60μA no modo stand-by.
- Faixa de medição de temperatura: 0ºC a 50ºC.
- Precisão da medição de temperatura: ±2ºC.
- Repetibilidade da medição de temperatura: ±0,2ºC.
- Faixa de medição de umidade relativa: 20% a 90%.
- Precisão da medição de umidade: 5%.
- Repetibilidade da medição de umidade: ±1%.
- Tempo de amostragem: 2 segundos.
Repetibilidade é a capacidade do sensor de repetir a mesma medida para um valor, quando é aplicado várias vezes.
Usando o DHT11 no Arduino
Para facilitar, abaixe a biblioteca “dht.h” para incluir na IDE do Arduino, o link está aqui. Abaixo é o algoritmo para testar este sensor de temperatura e umidade.
#include <dht.h>
#define outPin 8 // Define o nome do pino digital 8.
dht DHT; // Cria o objeto DHT
void setup() {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read11(outPin);
float t = DHT.temperature; // Ler a temperatura.
float h = DHT.humidity; // Ler a umidade.
Serial.print("Temperature = ");
Serial.print(t);
Serial.print("°C | ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println("% ");
Serial.println("");
delay(2000); // Espera 2 segundos antes de medir novamente.
}
E se não funcionar?
Pode acontecer do DHT11 mostrar medidas sem sentido, como por exemplo, temperatura de 0ºC e umidade de 0% em um ambiente que se sabe que não está nestas condições. Pode ser necessário verificar a conexão com o Arduino ou trocar o DHT11, este foi o meu caso.
O sensor DHT22
É uma versão melhorada do DHT11, as melhorias segundo o datasheet são:
- Faixa de medição de umidade e temperatura: entre 0 e 100% e entre -40ºC e 125ºC, respectivamente.
- Precisão da medição de temperatura: ±0,5ºC.
Para usar o DHT22, é preciso baixar outra biblioteca, que permite usar tanto o DHT11 quanto o DHT22, o link se encontra aqui. A seguir, o algoritmo que testa este sensor.
#include <DHT.h>
#define outPin 8 // Define o nome do pino digital 8.
//#define DHTTYPE DHT11
#define DHTTYPE DHT22
DHT dht(outPin,DHT22);// Cria o objeto DHT. Especificando o tipo e o pino de sinal
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float t = dht.readTemperature();// Ler a temperatura.
float h = dht.readHumidity();// Ler a umidade.
Serial.print("Temperature = ");
Serial.print(t);
Serial.print("°C | ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println("% ");
Serial.println("");
delay(2000); // Espera 2 segundos antes de medir novamente.
}
DHT11 e DHT22 com display LCD no Arduino
Este projeto mostra as medições de temperatura e umidade relativa em um display LCD. Caso não saiba usar o display no Arduino, leia a parte 7 do tutorial de Arduino.
Tutorial de Arduino (Parte 7, display LCD)Clique aqui
O código apenas junta comandos mostrados neste post e no tutorial 7.
#include <dht.h>
#include <LiquidCrystal.h>
#define outPin 8 // Define o nome do pino digital 8.
dht DHT; // Cria o objeto DHT
LiquidCrystal lcd(12,11,5,4,3,2);
void setup() {
lcd.begin(16,2);
}
void loop() {
int readData = DHT.read11(outPin);
lcd.clear();
float t = DHT.temperature; // Ler a temperatura.
float h = DHT.humidity; // Ler a umidade.
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(t);
lcd.print("\337C"); // Para mostra °C no display LCD.
lcd.setCursor(0,1);
lcd.print("Humidity:");
lcd.print(h);
lcd.print("%");
delay(2000); // Espera 2 segundos antes de medir novamente.
}
Para usar o DHT22, basta trocar o sensor, ligando os mesmos terminais e carregar o algoritmo abaixo.
#include <DHT.h>
#include <LiquidCrystal.h>
#define outPin 8 // Define o nome do pino digital 8.
//#define DHTTYPE DHT11
#define DHTTYPE DHT22
DHT dht(outPin,DHT22);// Cria o objeto DHT. Especificando o tipo e o pino de sinal
LiquidCrystal lcd(12,11,5,4,3,2);
void setup() {
lcd.begin(16,2);
dht.begin();
}
void loop() {
lcd.clear();
float t = dht.readTemperature();// Ler a temperatura.
float h = dht.readHumidity();// Ler a umidade.
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(t);
lcd.print("\337C"); // Para mostrar °C no display LCD.
lcd.setCursor(0,1);
lcd.print("Humidity:");
lcd.print(h);
lcd.print("%");
delay(2000); // Espera 2 segundos antes de medir novamente.
}
Vídeo mostrando o funcionamento de ambos os sensores.
Parabéns Pedro pelo tutorial, claro e objetivo!
Obrigado.