ÍNDICE DE CONTEÚDO
- Franzininho WiFi: Display 7 Segmentos TM1637
- Franzininho WiFi: Primeiros passos na Arduino IDE
- Franzininho WiFi: Explorando as GPIOs com Arduino
- Franzininho WiFi: Leitura de entradas analógicas com Arduino
- Franzininho WiFi: PWM (Pulse Width Modulation) com Arduino
- Franzininho WiFi: Comunicação Serial (UART) com Arduino
- Franzininho WiFi: Servo Motor com Arduino
- Franzininho WiFi: Web Server
- Franzininho WiFi: Display OLED
- Franzininho WiFi: Sensor de temperatura e umidade DHT22
- Franzininho WiFi: Sensor de temperatura DS18B20
- Franzininho WiFi: Display LCD 16×2 com comunicação I2C
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.
Embarcados Experience 2024: Evento Presencial
Participe do Embarcados Experience 2024 em São Paulo. Conhecimento técnico, palestras, workshops e oportunidade de networking com profissionais experientes.
Acesse: Ferramenta -> Gerenciador de Bibliotecas (Tools -> Manager Libraries)
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.
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
1 |
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.
1 |
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.
1 |
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
Para mais informações sobre o sensor consulte o datasheet. Na imagem abaixo temos a referência de cada pino.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
/* 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.
1 2 |
// Inclui a biblioteca do DHT #include "DHT.h" |
Define-se o pino físico utilizado para conectar-se ao sensor.
1 2 |
// 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).
1 2 |
// 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.
1 2 3 4 5 6 7 8 9 10 11 |
// 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).
1 2 |
// 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.
1 2 3 |
// 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.
1 2 3 4 |
// 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!”.
1 2 3 4 |
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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.