Componentes eletrônicos, Hobby, Microcontroladores, Projetos, Sensores, Temperatura

DHT11 e DHT22, sensores de temperatura e umidade

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.

DHT11
A frente (Front) e a parte de trás (Back) do DHT11 sem a capa azul. Fonte: (Subashini et al, 2018).

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

Teste com DHT11
A conexão do DHT11 sem o shield com o 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.
}
Como deve aparecer na tela Serial.

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

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

DHT11, LCD e Arduino

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.

About Pedro Ney Stroski

2 thoughts on “DHT11 e DHT22, sensores de temperatura e umidade

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *