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.

SensorDHT11 (azul) e DHT22 (branco)
Sensor DHT11 (azul) e DHT22 (branco)

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).

Baixar biblioteca DHTlib - Atualizada em 24/08/2017
Baixar biblioteca DHTlib - Atualizada em 24/08/2017

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":

Imagem explicando como adicionar uma biblioteca

Na janela que abrir, selecione a biblioteca a ser adicionada:

inserindo biblioteca dht.h

Com isso, a nova biblioteca foi instalada. Para utilizá-la, basta ir em "Sketch -> Incluir Biblioteca" e selecionar a biblioteca desejada:

biblioteca dht.h na ide arduino

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

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.

Esquemático do circuito DHT11 com Arduino uno

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

Apostila Arduino Básico