Franzininho WiFi: Sensor de temperatura e umidade DHT22

Este post faz parte da série Franzininho WiFI - Arduino

Introdução

O sensor ‘DHT’ (Digital output relative Humidity & Temperature), ou também conhecido como AM2302, possui um pino bidirecional, responsável por enviar as medidas de temperatura e umidade relativa, bem como receber comandos, tudo isso apenas por um fio. Nesse tipo de comunicação, não existe presença do clock, o que torna a troca de informações lenta devido aos delays dentro do enlace. O protocolo que rege a comunicação é conhecido como One Wire. No invólucro interno do dispositivo, há dois sensores: um de temperatura (NTC) e outro de umidade relativa capacitivo, ambos conectados a um microcontrolador de 8 bits, o qual é responsável por capturar as leituras analógicas e torná-las digitais.

Ao consultar a temperatura ambiente ou nível de umidade relativa no ar, procuramos atender ao conforto térmico ou realizar o monitoramento de um ambiente. Para isso, é necessário ter em mãos um sensor de qualidade. 

Neste artigo vamos desenvolver um exemplo prático para leitura de temperatura e umidade usando o DHT22 com a Franzininho WiFi. 

Instalação da Biblioteca para leitura do DHT22

Antes de iniciar nosso projeto, vamos instalar no Arduino IDE a biblioteca responsável por comunicar-se com o DHT22.

Acesse: Ferramenta -> Gerenciador de Bibliotecas (Tools  -> Manager Libraries)

Figura 1: Acessando o gerenciador de bibliotecas

Após acessar o Gerenciador de biblioteca vai surgir uma janela como apresentada abaixo e vamos digitar no campo de texto: “dht”. Aguarde carregar a lista de bibliotecas e procure por:  DHT sensor library by Adafruit. Por fim clique no botão install.

Figura 2: Instalação da biblioteca

Biblioteca DHT sensor library by Adafruit

Nesta seção vamos abordar os métodos presentes dentro da biblioteca “DHT.h” .

begin()

Configura o pino conectado ao sensor em pull up e tempo 

void dht.begin(uint8_t usec);
  • usec : parâmetro opcional(pode ser omitido ao chamar o método) usado para aguardar o tempo antes de iniciar as leituras.

readTemperatura()

Pega as leituras de temperatura. 

float dht.readTemperatura(bool S,bool force);
  • S : seleciona a escala da temperatura (Celsius – false  e Fahrenheit – true).
  • force : força para entrar no modo leitura.

Retorna o valor de temperatura na escala selecionada.

readHumidity()

Pega as leituras de umidade relativa do ar.

float dht.readHumidity(bool force);
  • force : força para entrar no modo leitura.

Retorna  valor de umidade.

Materiais necessários

Para desenvolver nossa aplicação os materiais utilizados foram:

  • Placa Franzininho WiFi
  • DHT22
  • Resistor 4,7k ohms.
  • Jumpers
  • Arduino IDE 

Circuito para leitura do DHT22

No nosso circuito, é importante ter em mente que o sensor DHT22 possui quatro pinos: um para dados, dois para alimentação (VCC e GND) e outro que não é conectado. Vamos conectar o pino de dados à GPIO4 e utilizar um resistor de pull-up. A imagem abaixo ilustra a conexão para nos auxiliar

DHT22
Figura 2: Esquema de montagem com a Franzininho WiFi e o sensor DHT22

Para mais informações sobre o sensor consulte o datasheet. Na imagem abaixo temos a referência de cada pino. 

DHT22
Figura 3: Pinos de saída do sensor

Código

No projeto proposto, realizaremos a leitura da temperatura e umidade relativa do ar utilizando o sensor DHT22. Abaixo está o código comentado. Caso surjam dúvidas em relação aos métodos utilizados, consulte a seção sobre os detalhes da biblioteca DHT para obter mais informações. 

/*
  Autor : Equipe Embarcados
*/

// Inclui a biblioteca do DHT
#include "DHT.h"

// Define o pino  
#define DHTPIN 4

// Declara o construtor e insere os pâmetros
DHT dht22(DHTPIN,DHT22);

// Estrutura de dados para receber as váriaveis 
// relacionadas ao DHT22
struct data_t
{ 
   float hum;
   float temp;
};

//Delcara a estrutura de dados
struct data_t  dht;

void setup() 
{
  // Inicializa comunicação Serial com baudrate de 115200 bps
  Serial.begin(115200);
  // Inicializa o driver One Wire para comunica-se com o sensor
  dht22.begin();

  Serial.println("Iniciando demo DTH");
}

void loop() 
{

  // Recebe o valor de umidade
  dht.hum  = dht22.readHumidity();
  // Recebe o valor de temperatura
  dht.temp = dht22.readTemperature();
 
  // Caso as leituras não recebam valores válido, então 
  // imprime a informação ("Falha na leitura") 
  if (isnan(dht.hum) || isnan(dht.temp)) 
  {
    Serial.println(F("Falha na leitura!"));
  }
  // Caso contrário então mostra as informações de temperarura e umidade
  else 
  {
    
    Serial.println("Dados climáticos ");
    Serial.print(F("Umidade: "));
    Serial.print(dht.hum);
    Serial.println("% ");
    
    Serial.print(F("Temperatura: "));
    Serial.print(dht.temp);
    Serial.println(F(" °C "));
  } 
// Aguarda 2 segundos
  delay(2000);
}

Simule esse exemplo no Wokwi: https://wokwi.com/projects/366181593139899393

Explicação do Código

Nesta seção, explicaremos o código linha por linha, para garantir uma compreensão completa e entender a finalidade de cada função utilizada.

Incluiu-se a biblioteca do DHT para acessar a classe que inclui todos os métodos utilizados para iniciar a comunicação com o dispositivo.

// Inclui a biblioteca do DHT
#include "DHT.h"

Define-se o pino físico utilizado para conectar-se ao sensor.

// Define o pino 
#define DHTPIN 4

Declaramos o construtor junto aos seus parâmetros de pino (DHTPIN) e o tipo de DHT (DHT11, DHT22 ou DHT21). 

// Declara o construtor e insere os parâmetros
DHT dht22(DHTPIN,DHT22);

Criamos uma estrutura de dados para organizar todos os dados referentes ao DHT (temperatura e umidade). Logo em seguida declaramos a estrutura de dados.

// Estrutura de dados para receber as variáveis
// relacionadas ao DHT22
struct data_t
{
  float hum;
  float temp;
};


//Declara a estrutura de dados
struct data_t  dht;

No setup, configuramos o canal de comunicação serial com Baud Rate de 115200 (bps).

// Inicializa comunicação Serial com baudrate de 115200 bps
 Serial.begin(115200);

Inicializamos o driver do sensor e imprimimos na tela informando que estamos prontos para rodar o programa. Entenda por driver, um código que abstrai muitas a camada mais baixo nível entre o DHT e o Franzininho WiFi. 

// Inicializa o driver One Wire para comunicar-se com o sensor
dht22.begin();
Serial.println("Iniciando demo DTH");

No loop, onde vamos rodar repetidamente o programa, recebemos a leitura da umidade e da temperatura.  

// Recebe o valor de umidade
 dht.hum  = dht22.readHumidity();
 // Recebe o valor de temperatura
 dht.temp = dht22.readTemperature();

Caso uma das leituras não seja valores numéricos, então consideramos a leitura inválida e imprime no Monitor Serial a frase “Falha na leitura!”.

if (isnan(dht.hum) || isnan(dht.temp))
 {
   Serial.println(F("Falha na leitura!"));
 }

Caso contrário, as leituras sendo válidas, imprimiremos os valores de temperatura e umidade. Após essa etapa aguardamos dois segundos, pois a taxa de amostragem de dados é 0.5 Hz (2 segundos).

else
 {
   Serial.println(" Dados climáticos ");
   Serial.print(F("# Umidade: "));
   Serial.print(dht.hum);
   Serial.println("% ");
  
   Serial.print(F("#Temperatura: "));
   Serial.print(dht.temp);
   Serial.println(F(" °C "));
 }
// Aguarda 2 segundos
 delay(2000);

Conclusão

Neste artigo, abordamos o módulo DHT22 e apresentamos um exemplo simples de projeto para realizar a leitura de temperatura e umidade em um ambiente. No entanto, esse módulo possui diversas possibilidades de aplicação, como a criação de algoritmos para controlar o acionamento de refrigeradores ou aquecedores, monitorar estufas e muito mais. Encorajamos os leitores a explorar ao máximo o potencial desse módulo e compartilhar seus resultados e projetos com a comunidade.

Franzininho WiFI - Arduino

Franzininho WiFi: Display OLED Franzininho WiFi: Sensor de temperatura DS18B20
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Arduino » Franzininho WiFi: Sensor de temperatura e umidade DHT22

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: