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:
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:
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.
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.
Observação:
O sensor transmite então um pacote de 5 bytes contendo:
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.
O próximo trecho criará o objeto sensor da classe DHT e inicializa o sensor no setup() pelo comando sensor.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().
Abaixo, é apresentado o código completo dessa aplicação: