Sensores de Temperatura e Umidade – DHT11/DHT22

DHT11/DHT22 (AM2302)

Estes sensores da Aosong Electronics Co, combinam um sensor de umidade e um sensor de temperatura no mesmo invólucro. De baixo custo e fácil implementação, o DHT11 é mais barato que o DHT22 que por sua vez é mais preciso, segundo dados do fabricante.

DHT11 e DHT22
DHT11 e DHT22

A biblioteca que usamos foi desenvolvida (e é mantida) pela equipe da Adafruit. O download pode ser feito do repositório da Adafruit ou no final deste artigo.

Instalando a biblioteca DHT

Com as versões mais recentes da IDE do Arduino (a partir da 1.6.2), a instalação de bibliotecas de terceiros pode ser feita pelo menu Sketch, Include Library, Manage Libraries…

Gerenciando bibliotecas
Gerenciando bibliotecas

Neste exemplo vamos  apresentar uma forma alternativa de instalação, ou seja,   vamos mostrar como adicionar  uma biblioteca manualmente.

Considerando o ambiente operacional Microsoft Windows e se você optou pela instalação padrão do IDE do Arduino, a pasta que contém as bibliotecas de terceiros está localizada no seu perfil de usuário.

Ao fazer o download de uma biblioteca qualquer (geralmente está compactada – .zip), extraia os arquivos e copie para a pasta libraries do seu perfil de usuário. Note que os nomes das bibliotecas  compactadas geralmente apresentam a palavra master como parte  do nome. Por exemplo: DHT-sensor-library-master.zip. Após você descompactar este arquivo, renomeie a pasta para DHT.

gerenciando_libraries_DHT
gerenciado libraries

Após a cópia, se você estiver com o IDE aberto, saia e abra novamente para que o Arduino carregue as bibliotecas instaladas.

Montagem do circuito

A montagem é muito simples, o circuito é o mesmo do DHT11 e DHT22. Você vai precisar de um sensor e um resistor de 10KΩ. Veja as imagens a seguir (oriente-se pelo pino 1 marcado na imagem):

montagem na protoboard
montagem na protoboard
esquemático

Recursos da biblioteca DHT

Infelizmente a documentação, de um modo geral, não é clara ou até mesmo não existe nas bibliotecas de terceiros. Colocamos aqui a funções da biblioteca DHT da Adafruit. Se vocês encontrarem alguma inconsistência, escreva/comente para que possamos corrigi-las.

begin()   configuração inicial do sensor.

readTemperature( true/false )   lê a temperatura e retorna um valor do tipo float em Celsius, se parâmetro false, ou Farenheit, se parâmetro true.

 readHumidity()   retorna um valor (percentual) do tipo float que representa a umidade relativa do ar.

computeHeatIndex( temperatura_Farenheit , umidade )   retorna um valor em Farenheit do tipo float que representa a sensação térmica. Você deve passar os parâmetros de temperatura em Farenheit e umidade (ambos do tipo float).

convertCtoF( temperatura_Celsius )

convertFtoC( temperatura_Farenheit )   converte respectivamente Celsius em Farenheit e Farenheit em Celsius (ambos do tipo float).

Exemplos

Exemplo com DHT11

#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("EADuino - teste DHT11");
  dht.begin();
}

void loop() {

  float umidade         = dht.readHumidity();
  float temperatura     = dht.readTemperature();
  float temperaturaF    = dht.readTemperature(true);
  float sensacaoTermica = 0;

  sensacaoTermica = dht.computeHeatIndex(temperaturaF, umidade);
  sensacaoTermica = dht.convertFtoC(sensacaoTermica);

  Serial.print("Umidade: ");
  Serial.print(umidade);
  Serial.print("%\t");
  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print("C\t");
  Serial.print("Sensacao termica: ");
  Serial.print(sensacaoTermica);
  Serial.println("C");
  delay(1000);
}

Exemplo com DHT22

#include <DHT.h>

#define DHTPIN    2
#define DHTTYPE   DHT22   // AM2302

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("EADuino - teste DHT22");
  dht.begin();
}

void loop() {
  float umidade = dht.readHumidity();
  float temperatura = dht.readTemperature();
  float temperaturaF = dht.readTemperature(true);
  float sensacaoTermica = 0;

  sensacaoTermica = dht.computeHeatIndex(temperaturaF, umidade);
  sensacaoTermica = dht.convertFtoC(sensacaoTermica);

  Serial.print("Umidade: ");
  Serial.print(umidade);
  Serial.print("%\t");
  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print("C\t");
  Serial.print("Sensacao termica: ");
  Serial.print(sensacaoTermica);
  Serial.println("C");
  delay(1000);
}