DHT11 e DHT22 | Sensor de umidade e Temperatura com Arduino
DHT11 e DHT22, Sensor de umidade e Temperatura com Arduino
Umidade e temperatura são duas grandezas que estão muito relacionadas quando o assunto é climatização. Nesse tutorial você aprenderá a medir essas duas grandezas através do sensor de umidade e temperatura DHT11 ou o DHT22 em conjunto com um Arduino.
[toc]
Sensores de umidade e temperatura DHT11 e DHT22
O sensor DHT11 e o sensor DHT22 são sensores básicos e de baixo custo que utilizam um termistor e um sensor capacitivo para medir a temperatura e a umidade do ar ambiente.
Esses sensores são bastante simples de usar, mas requer cuidado com o tempo entre duas leituras consecutivas, uma vez que é necessário um intervalo de, no mínimo, 1 segundo entre uma leitura e outra.
Existem diferentes versões do DHT, similares na aparência e na pinagem, porém com características diferentes. As características do DHT11 e DHT22, dois modelos populares desse sensor, são:
Sensor DHT11
- Muito baixo custo
- Tensão de alimentação de 3V a 5V
- 2.5mA de corrente máxima durante a conversão
- Bom para medir umidade entre 20% e 80%, com 5% de precisão
- Bom para medir temperaturas entre 0 e 50°C, com ±2°C de precisão
- Taxa de amostragem de até 1Hz (1 leitura por segundo)
- Dimensões: 15.5mm x 12mm x 5.5mm
- 4 pinos com 0.1" de espaçamento entre eles
Sensor DHT22
- Baixo custo
- Tensão de alimentação de 3V a 5V
- 2.5mA de corrente máxima durante a conversão
- Bom para medir umidade entre 0% e 100%, com 2% a 5% de precisão
- Bom para medir temperaturas entre -40 e 125°C, com ±0,5°C de precisão
- Taxa de amostragem de até 0,5Hz (2 leituras por segundo)
- Dimensões: 15.1mm x 25mm x 7.7mm
- 4 pinos com 0.1" de espaçamento entre eles
Como pode ser observado, o DHT22 é um pouco mais preciso e trabalha em uma faixa um pouco maior de temperatura e umidade. Porém, ambos utilizam apenas um pino digital e são relativamente lentos, visto que é necessário um intervalo de tempo relativamente grande entre cada leitura.
Incluindo Bibliotecas
Uma grande vantagem das placas Arduino é a grande diversidade de bibliotecas disponíveis que podem ser usadas em seu programa. Isso faz com o trabalho pesado em programação seja abstraído e resumido em simples comandos.
Com isso, o desenvolvedor não precisa de conhecimento muito aprofundado em programação, podendo gastar menos tempo nisso, resultando em mais tempo para trabalhar com empenho na estratégia de controle.
A seguir, iremos aprender como adicionar uma biblioteca em sua IDE. Esse mesmo procedimento será usado para outros sensores ou módulos.
Incluindo a biblioteca DHT
Para trabalhar de forma fácil com o DHT, podemos baixar uma biblioteca para ele no GitHub do Rob Tillaart (https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib).
Há mais de uma forma de incluir bibliotecas no seu programa, a principal é:
Instalar a biblioteca pelo IDE do Arduino
Esse é o método mais fácil. Primeiramente, faça o download dos arquivos da biblioteca compactados no formato zip. Geralmente as bibliotecas já são distribuídas compactadas, porém às vezes é necessário fazer o download dos arquivos separadamente e compactá-los à parte. Em seguida, basta abrir o IDE e ir em "Sketch -> Incluir Biblioteca -> Adicionar biblioteca .ZIP":
Na janela que abrir, selecione a biblioteca a ser adicionada:
Com isso, a nova biblioteca foi instalada. Para utilizá-la, basta ir em "Sketch -> Incluir Biblioteca" e selecionar a biblioteca desejada:
Observe que o IDE adicionou no início do seu código a linha incluindo a biblioteca no seu programa.:
#include <dht.h>
Outras opções:
Instalar manualmente a biblioteca
Para instalar manualmente uma biblioteca, feche o IDE do Arduino e em seguida descompacte os arquivos da biblioteca. Se os arquivos .cpp e .h não estiverem dentro de uma pasta, crie uma e mova os arquivos para lá. Em seguida, basta mover a pasta para o local:
Windows: "Meus documentos\Arduino\libraries"
Mac: "Documents/Arduino/libraries"
Depois desse processo, a biblioteca estará disponível em "Sketch -> Incluir Biblioteca" na próxima vez que o IDE for aberto.
Incluir a biblioteca sem instalá-la
É possível também utilizar a biblioteca sem instalá-la no IDE do Arduino. Para isso, basta descompactar a biblioteca e colocar os arquivos .h e .cpp no mesmo diretório do programa, incluindo no início do mesmo a linha:
#include "nome_da_biblioteca.h"
Mãos à obra – Usando o Sensor de umidade e temperatura DHT11 com Arduino
Componentes necessários
- DHT11 ou DHT22
- Fios Jumper’s
- Protoboard
- Arduino Uno ou similar
Montando o projeto
Agora vamos conectar os componentes do projeto. Para isso, desligue o cabo USB de seu Arduino e monte seu circuito conforme a figura a seguir.
Conectando o Arduino ao computador
Conecte seu Arduino ao computador e abra a IDE Arduino.
Antes de carregar um programa, você precisa selecionar qual porta você deseja usar para fazer carregar o programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.
Você também precisa garantir que o tipo de placa apropriado está selecionado em Ferramentas(Tools) no submenu Placa (Board).
Programando
Crie um programa (sketch) e salve com o nome de “programa_dht11”.
Com o seu programa salvo, escreva nele o código conforme escrito abaixo.
#include <dht.h> // Inclui a biblioteca no seu código dht DHT; // Cria um objeto da classe dht uint32_t timer = 0; void setup() { Serial.begin(9600); // Inicializa serial com taxa de transmissão de 9600 bauds } void loop() { // Executa 1 vez a cada 2 segundos if(millis() - timer>= 2000) { DHT.read11(A1); // chama método de leitura da classe dht, // com o pino de transmissão de dados ligado no pino A1 // Exibe na serial o valor de umidade Serial.print(DHT.humidity); Serial.println(" %"); // Exibe na serial o valor da temperatura Serial.print(DHT.temperature); Serial.println(" Celsius"); timer = millis(); // Atualiza a referência } }
Após escrever o código, clique em Carregar (Upload) para que o programa seja transferido para seu Arduino.
Colocando para funcionar
Caso tenha ocorrido tudo conforme esperado, poderemos fazer a leitura da temperatura através do monitor serial. Abra o monitor serial para verificar o que está sendo lido na entrada A0.
Entendendo a fundo
Entendendo o Software
millis()
Retorna o número de milissegundos desde a placa Arduino começou a funcionar com programa atual. Este número irá saturar (voltar para zero), após, aproximadamente, 50 dias.
timer = millis(); //Atualiza a referência
Veja que usamos o millis como nossa referência de tempo. Toda vez que a diferença entre o millis e o timer for de 2000 milissegundos, entraremos no if e o timer irá assumir o valor atual de millis.
Desta forma, o programa irá executar o que está dentro do if de 2000 em 2000 milissegundos, ou seja, 2 em 2 segundos.
Esse tipo de estrutura é muito comum e será usada em outras experiências.
Biblioteca dht.h
Na elaboração do software utilizamos a biblioteca dht.h. Esta biblioteca implementa as funcionalidades do sensor DHT11 e DHT22 tornando sua utilização extremamente simples.
Declarando um DHT
Ao usar essa biblioteca trataremos cada sensor DHT como um objeto, dessa forma precisamos declará-lo no início do código.
dht DHT; // Cria um objeto da classe dht
Depois de declarado, sempre que quisermos mexer em alguma função desse DHT, devemos usar o nome da função precedida do nome do DHT e ponto.
DHT.exemplo(); // chama função exemplo() para o objeto DHT
Lendo o sensor
Para ler o sensor basta chamar o método de leitura (read11 se estiver utilizando o DHT11, ou read22 se estiver utilizando o DHT22) e em seguida ler os valores nos atributos temperature e humidity.
Importante: O sensor demora no mínimo 1 segundo de intervalo entre uma leitura e outra.
DHT.read11(A1); // chama método de leitura da classe dht, // com o pino de transmissão de dados ligado no pino A1
Temos o valor de umidade em porcentagem armazenado em:
float umidade = DHT.humidity
Temos o valor de temperatura em graus Celsius armazenado em:
float temperatura = DHT.temperature
Exemplo de aplicação:
// Exibe na serial o valor de umidade Serial.print(DHT.humidity); Serial.println(" %"); // Exibe na serial o valor da temperatura Serial.print(DHT.temperature); Serial.println(" Celsius");
Fechamento
Esperamos que tenham gostado, deixe seu comentário com duvidas, sugestões ou com a foto ou vídeo de seu projeto!! Compartilhe à vontade.
Tutorial feito em parceria com Ronan Largura