Neste tutorial você irá aprender como funcionam todos os sensores da família DHT: DHT11, DHT21 e o DHT22.
Além disso, irei te mostrar como programar o sensor de umidade DHT11 com o Arduino de forma garantida e descomplicada.
Para fechar com chave de ouro, no final deste artigo há um projeto bônus onde você irá aprender a exibir a temperatura coletada pelo sensor DHT11 no visor de um LCD juntamente com o Arduino.
Preparado?
👨💻 Comprar Agora – Kit Iniciante Arduino com Tutorial e + 20 Projetos ✅
Tudo sobre o DHT 11/21/22
Esses componentes são ótimos medidores não só de temperatura, mas, também da umidade.
Seguem abaixo as variações existentes desses sensores de temperatura DHT11, DHT21 e DHT22:

Mas, como funciona o sensor de umidade Arduino?
Você verá que seu princípio de medição é bastante simples.
Eles possuem um sensor de temperatura NTC (Coeficiente de temperatura negativa, sigla em inglês) e um circuito integrado CI como sendo o componente sensitivo à umidade.
Esse CI possui 2 eletrodos e mede a umidade relativa do ar através de um substrato. Observe:

Dessa forma, a umidade do ambiente em que você estiver é medida de acordo com a condutividade do substrato e, por causa disso, a resistência entre ambos eletrodos se altera.
Essa mudança de resistividade é calculada e processada pelo circuito integrado que já prepara os dados para serem lidos pelo microcontrolador.
Portanto, se caso a resistência entre os eletrodos diminuir é sinônimo de que a temperatura sofreu um aumento…
No gráfico abaixo, você consegue enxergar isso melhor:

Veja as principais características do sensor de temperatura e umidade DHT11, DHT21 e do DHT22 na tabela abaixo:
| Especificações | DHT11 | DHT21 | DHT22 |
| Temperatura de trabalho | 0°C até 50°C | -40°C até 80°C | -40°C até 80°C |
| Escala de umidade | 20 – 80% / ± 5% | 0 – 100% / ± 3% | 0 – 100% / ± 2% |
| Tensão de operação | 3.3 – 5V | 3.3 – 5V | 3.3 – 6V |
| Precisão a 25°C | 250 mV | 750 mV | 500 mV |
Pinagem do sensor de temperatura DHT11
Bacana! Agora que você já entende o funcionamento dos sensores DHT, observe como se dá a pinagem do DHT11 que serve também para o DHT22:

– Conecte este pino no +5V do Arduino;
– Já este, conecte-o na porta digital 8 e após, insira um resistor de 10kOhms e ligue-o no VCC;
– Não se preocupe com este pino pois ele não é utilizado para ligar em nada e analisando outros tutoriais na web, percebi que nenhum projeto liga este pino a alguma coisa. Meu palpite é que talvez ele seja utilizado para calibração ou para algum teste de fábrica;
– Como o próprio nome já diz, ligue este pino ao ground do seu Arduino!
Montagem do sensor de temperatura DHT11 com o Arduino
Segue a montagem dos componentes do projeto:

Observe que o sensor possui 4 pinos e que é necessário o uso de um resistor de 5k à 10kOhms para manter a linha de dados estável durante a comunicação com o ATMEGA.
- Este artigo pode te interessar: O que é e como funciona a plataforma Arduino
No entanto, os módulos DHT dispensam a utilização de resistores pois eles já possuem um resistor pull-up embutidos no módulo.

Caso possua um desses, não se preocupe com o resistor. Não será necessário sua utilização na montagem do projeto.
Código utilizado no projeto
O sensor de temperatura DHT11 possui sua própria biblioteca padrão que irá ajudar no processamento e interpretação dos dados no Arduino.
Para fazer a instalação da biblioteca, veja a seguir o seguinte passo a passo:


Feito isso, use o código abaixo para programar seu sistema:
/* Código do projeto sensor de temperatura da família DHT
Monte seus próprios projetos sem dificuldade com programação!
ACESSE: https://flaviobabos.com.br/
*/
#include "DHT.h"
#define PINODHT 8
// Defina o modelo da família do seu DHT
#define MODELODHT DHT11
DHT dht(PINODHT, MODELODHT);
void setup() {
Serial.begin(9600);
// Inicialize o sensor
dht.begin();
Serial.println("Efetuando leituras!");
}
void loop() {
// Aguarde alguns segundos entre as medidas
delay(2000);
// Lendo a umidade
float umi = dht.readHumidity();
// Lendo a temperatura na escala Celsius
float tempC = dht.readTemperature();
// Lendo a temperatura na escala Fahrenheit
float tempF = dht.readTemperature(true);
// Verificando se as leituras falharam
if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
Serial.println("Falha na leitura do seu sensor DHT!");
} else {
Serial.print("Umidade: ");
Serial.print(umi);
Serial.print("%");
Serial.print(" | ");
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.print("°C ~ ");
Serial.print(tempF);
Serial.println("°F");
}
}
Projeto Bônus
Para que você domine por completo o sensor DHT11, preparei esse tutorial do projeto bônus. No final ele se parecerá com a seguinte imagem abaixo:

Este é um projeto simples mas eficaz e que no final você poderá aprender muito com o sensor de temperatura DHT11, com o Arduino e com o Display LCD 16×2.
Vamos ao que interessa.
Montagem do sensor de temperatura DHT11 com LCD
Para construir este projeto presente na imagem abaixo:

Você irá precisar de:
- 1x Arduino;
- 1x Sensor de Temperatura DHT11;
- 1x Display LCD;
- 1x Potenciômetro entre 5k a 10kOhms;
- 15 a 20 jumpers macho-macho;
A montagem de todos esses componentes fica da seguinte forma:

Para este projeto foi utilizado o módulo DHT11 mas você pode utilizar o componente normal, não precisa ser especificamente um módulo para funcionar.
Também atente-se as conexões do display LCD 16×2 nos pinos digitais do Arduino:

Bora programar?
O código para execução do projeto é o descrito abaixo:
/* Código do projeto sensor de temperatura DHT11 e LCD
Monte seus próprios projetos sem dificuldade com programação!
ACESSE: https://flaviobabos.com.br/
*/
// Inclua as bibliotecas dos componentes
#include <LiquidCrystal.h>
#include "DHT.h"
// Defina o pino do seu componente
#define PINODHT 8
// Defina qual o modelo da família do seu DHT
#define MODELODHT DHT11
// Defina as portas utilizadas do LCD
// LiquidCrystal(RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
DHT dht(PINODHT, MODELODHT);
void setup() {
Serial.begin(9600);
// Inicialize o LCD
lcd.begin(16, 2);
// Inicialize o sensor
dht.begin();
Serial.println("Efetuando as leituras!");
lcd.print("Aguarde...");
}
void loop() {
// Aguarde alguns segundos entre as medidas
delay(1000);
// Lendo a umidade
float umi = dht.readHumidity();
// Lendo a temperatura na escala Celsius
float tempC = dht.readTemperature();
// Lendo a temperatura na escala Fahrenheit
float tempF = dht.readTemperature(true);
// Verificando se as leituras falharam
if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
Serial.println("Falha na leitura do seu sensor DHT!");
} else {
// Printando os resultados no Monitor Serial
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.print("°C ~ ");
Serial.print(tempF);
Serial.print("°F");
Serial.print(" | ");
Serial.print("Umidade: ");
Serial.print(umi);
Serial.println("%");
// Printando os resultados no LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(tempC);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print("Umidade: ");
lcd.print(umi);
lcd.print(" % ");
}
}
Entendendo o código a fundo
INCLUA AS BIBLIOTECAS DO PROGRAMA
#include <LiquidCrystal.h> #include "DHT.h"
A primeira coisa antes de tudo é incluir as bibliotecas utilizadas no projeto.
Neste caso é necessário que importemos a biblioteca do LCD e do DHT.
Para o LCD, basta escrevermos o #include pois a biblioteca já vem instalada na IDE do Arduino.
Agora, para a família de sensores DHT você irá precisar instalar direto do Gerenciador de Bibliotecas.
DEFINA ONDE OS COMPONENTES ESTÃO CONECTADOS
const int PINODHT 8 #define MODELODHT DHT11 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); DHT dht(PINODHT, MODELODHT);
O segundo passo é fazer com que o Arduino identifique em quais portas estão cada componente.
Por exempo, usamos const int para definir onde se encontra o nosso DHT11 e já que estamos falando de variável, você já deve saber que as variáveis const int são diferentes das variáveis int.
O que diferencia uma da outra é que a const int é usada apenas para leitura e a int é utilizada para gravar dados ao longo do código.
Por exemplo, os números dos pinos raramente devem ser alterados.
Portanto, eles geralmente são declarados como const ou como #define.
Além disso, vale a pena notar que, se você usar “const” para a variável que for somente leitura, o compilador poderá fazer otimizações, o que inclui a não alocação de armazenamento de dados para a variável.
Não se esqueça também de escrever no programa qual o modelo de DHT que está utilizando e de definir a pinagem do LCD no programa na seguinte ordem:
LiquidCrystal(RS, E, D4, D5, D6, D7)
FUNÇÃO NATIVA SETUP()
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
dht.begin();
Serial.println("Efetuando as leituras!");
lcd.print("Aguarde...");
}
Dentro do setup() iremos fazer o seguinte:
- Inicializar a comunicação serial com o monitor serial a uma taxa de 9600 bits por segundo;
- Especificar o LCD que estamos a utilizar (16 colunas e 2 linhas);
- Inicializar o sensor de temperatura Arduino – DHT11;
- Informar coleta de leituras no monitor serial e no LCD.
Simples assim!
LOOP: VARIÁVEIS TEMPERATURA E UMIDADE
delay(1000); float umi = dht.readHumidity(); float tempC = dht.readTemperature(); float tempF = dht.readTemperature(true);
Já na função void loop() iremos declarar 3 variáveis de ponto flutuante: uma para receber o valor da umidade (umi), outra para identificar a variação de temperatura em graus Celsius (tempC) e mais uma para a escala Fahrenheit (tempF).
Lembrando que esse tipo de variável float é um decimal e é usado para armazenar números não inteiros.
Um delay também é necessário no começo do loop para nos assegurar de coletar medidas assertivas do sistema de temperatura e umidade.
CERTIFICANDO AS LEITURAS
if (isnan(umi) || isnan(tempC) || isnan(tempF)) {
Serial.println("Falha na leitura do seu sensor DHT!");
Essa é uma maneira simples e eficaz de averiguar se obtivemos sucesso na coleta dos dados de temperatura e umidade.
É como um debug: você consegue saber se o erro está nas conexões do seu DHT11, como má conexão de jumpers/fios, ou erro de hardware do próprio componente.
PRINTANDO NO MONITOR SERIAL
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.print("°C ~ ");
Serial.print(tempF);
Serial.print("°F");
Serial.print(" | ");
Serial.print("Umidade: ");
Serial.print(umi);
Serial.println("%");
A função Serial.print () envia informações do Arduino para o computador. Você pode ver essas informações no monitor serial da IDE.
O que estiver dentro das aspas da função, irá ser impresso na tela do monitor serial. Caso você fornecer uma variável como argumento, o imprimirá o valor dessa variável.
Como a variável de umidade é a última coisa que você imprimirá nesse loop, você pode usar um comando um pouco diferente: Serial.println ().
Se você não sabe, esse comando criará uma nova linha no monitor serial após o envio do valor. Isso ajuda a facilitar a leitura das coisas quando elas estão sendo impressas.

PRINTANDO NO DISPLAY LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(tempC);
lcd.print(" C ");
lcd.setCursor(0,1);
lcd.print("Umidade: ");
lcd.print(umi);
lcd.print(" % ");
Primeiramente dê um clear na tela do seu display LCD para limpar todo e qualquer caractere escrito anteriormente.
Após isso ter sido feito, deve-se posicionar o cursor na linha e coluna zero para que a temperatura na escala Celsius seja escrita a partir daí.
Para imprimir a umidade deve-se pular uma linha, indo para a linha debaixo e usar o lcd.print() para imprimir o texto “Umidade” e printar a variável umi logo em seguida.
Considerações finais do Projeto Bônus
Com o código carregado no Arduino, clique no ícone do monitor serial.

Veja as oscilações de leitura da temperatura e da umidade no monitor serial e compare com o visor do seu LCD.
Por exemplo, você pode pegar algo mais quente do que o ambiente em que estiver e posicionar na frente do seu sensor e ver a temperatura aumentar.
Algo simples como pressionar o sensor colocando os seus dedos em volta dele já é suficiente para ver o que acontece com os valores no monitor serial da IDE e na tela do seu display.
Senão, você pode fazer o oposto.
Pegue algo mais frio do que o normal e insira próximo ao sensor e você verá que a tempratura aumenta consideravelmente ao longo do tempo.
- Este artigo pode te interessar: 10 Invenções incríveis com a plataforma Arduino
E aí, o que você achou deste tutorial?
Comenta aqui embaixo para eu saber!