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!