Programação do Sensor DHT11

O DHT11 é um sensor de temperatura e umidade digital desenvolvido pela empresa chinesa Aosong Electronics, amplamente utilizado em projetos com microcontroladores como o Arduino. Ele é um sensor de baixo custo utilizado em sistemas para microcontroladores bastante popularizado na plataforma Arduino. Funciona com alimentação entre, 3V e 5V, tornando-o versátil para diferentes aplicações. A programação apresentada abaixo para esse sensor será na plataforma Arduino. Posteriormente, será apresentada também uma aplicação desse sensor mais avançada, mas inicialmente, o objetivo é que esse sensor apenas envie seus dados ao Serial do Arduino. Para iniciar a programação do código será necessário que se chame a biblioteca DHT.h disponível no link abaixo:

https://github.com/adafruit/DHT-sensor-library

Na pasta de arquivos da biblioteca DHT são apresentados todos os arquivos:

Arquivos DHT
Figura 1 – Arquivos da pasta

Focarei nos arquivos mais relevantes que são: DHT.cpp, DHT.h, DHT_U.cpp e DHT_U.h. Os arquivos com extensão .h são arquivos de biblioteca em linguagem C e os arquivos com extensão .cpp são arquivos escritos em C++. Começando pelo arquivo DTH.h, é o arquivo que será incluído no programa principal <#include DHT.h>. Nele estarão incluídos as constantes DHT11 que serão importadas ao programa principal e as funções que serão chamadas readTemperature() e readHumidity().

O próximo arquivo a ser analisado é o arquivo DHT.cpp que possui toda a programação de como as funções se comportarão de acordo com os dados recebidos na entrada digital do Arduino — utilizando bit-banging — que é uma forma de comunicação de dados digitais bastante simples e eficiente. O código do DHT.cpp é um código extenso que cria as classes para leitura dos objetos de temperatura e umidade a serem definidas pelo programador.

Os próximos arquivos DHT_U.h e DHT_U.cpp são arquivos utilizados na versão Unified Sensor, que é um padrão de comunicação da Adafruit, conhecida como Adafruit_Sensor. Abaixo, estão listados esses arquivos para estudo:

Para entender como todos esses arquivos funcionam, começarei abrindo o arquivo DHT.h. Esse arquivo é onde encontram-se as constantes de inicialização do sistema, que serão chamadas de acordo com o tipo de sensor a ser aplicado no seu projeto. Definido o sensor – DHT11 – o código deverá utilizar o identificador 11. A constante estar definida como static é por causa dessa constante só ser acessível dentro desse arquivo. Tudo isso está bem visível na imagem abaixo:

Tipos de sensor
Figura 2 – Tipos de sensor
Agora, deve-se procurar a classe DHT na bilbioteca. Essa classe apresentará as características do objeto que será criado pelo programador. O método construtor para o objeto encontra-se na linha 65 apresentado como DHT(uint8_t pin, uint8_t type, uint8_t count = 6). A variável pin possui 8 bits e determina o pino utilizado pelo Arduino; a variável type o tipo do sensor (o valor inteiro é o identificador) e a variável count = 6, é o parâmetro interno de temporização da classe.

Depois, inicializa-se o sensor antes das leituras a serem realizadas. O parâmetro usec define um tempo em microssegundos para a sincronização da comunicação. Retorna a temperatura lida pelo sensor. Se S = true, retorna em Fahrenheit; caso contrário, retorna em Celsius.

Classe DHT
Figura 3 – Classe DHT

As variáveis a seguir estão na seção private da classe e só podem ser acessadas internamente. O vetor ou array data[5] guarda os bytes recebidos do sensor e _pin e _type guardam o pino e o tipo de sensor.

Private
Figura 4 – Private

O sensor transmite então um pacote de 5 bytes contendo:

  1. Umidade – número inteiro
  2. Umidade – número decimal
  3. Temperatura – número inteiro
  4. Temperatura – número decimal
  5. Checksum – soma dos números para verificação dos bytes anteriores do array

Agora, no programa principal a ser programado pelo usuário, as configurações abaixo definirão que o sensor será ligado no pino digital 2 e que o tipo do sensor é DHT11.

Figura 5 – Declatação das variáveis no programa principal

O próximo trecho criará o objeto sensor da classe DHT e inicializa o sensor no setup() pelo comando sensor.begin().

Figura 6 – Método begin

A seguir será declarado uma variável chamada de temperatura do tipo float que irá receber o valor do método dht.readTemperature() gerado pelo sensor DHT11. Posteriormente, será criada a variável umidade também do tipo float e que irá receber o valor gerado pelo sensor através do método dht.readUmidity().

Figura 7 – Criação das variáveis

Abaixo, é apresentado o código completo dessa aplicação:

Código completo na plataforma Arduino
Figura 8 – Código completo na plataforma Arduino