0

Como utilizar o sensor DHT11? (Sensor Temperatura e Humidade)

Hoje vamos ver como podemos realizar a aquisição dos valores de temperatura e humidade do ambiente com um simples sensor DHT11.
O DHT11 é um sensor de temperatura e humidade básico de baixo custo que utiliza um termistor e um sensor capacitivo de humidade. A sua utilização com um Arduino revela-se uma tarefa muito simples e que passamos a explicar de seguida neste artigo. Este sensor funciona com alimentação entre 3 e 5,5V.
O projeto que vamos apresentar consiste no envio para a porta série dos valores de temperatura e humidade adquiridos no DHT11 a cada minuto. Para garantir uma medida mais fidedigna vamos realizar 5 medidas de cada uma das variáveis e imprimir a sua média. Com a variável debug igual a true é possível visualizar todas as medidas realizadas pelo sensor.

 

Material necessário:
– 1 Arduino Uno (ou similares)
– 1 Sensor DHT11
– 1 resistência pull-up de 1 kOhm

 

Pinos:

 

Neste projeto vamos conectar o pino DATA do DHT11 ao pino 6 (pinDHT11) do nosso Arduino. Conforme podemos ver no seguinte diagrama:

 

 

Para este projeto vamos necessitar da libraria DHT11 disponível neste link. Esta deve ser instalada no Arduino IDE antes de correr o programa.
Aqui encontra-se o código utilizado para o projeto descrito:

#include "DHT.h"

#define pinDHT11 6                   //pino ligação do DHT11
#define intervaloleituras 1 * 60    //intervalo de n*60, n em minutos para intervalo entre medidas
#define nmedidas 5                  //variavel utilizada para indicar o numero de medidas efetuados
#define debug false

/**************** VARIAVEIS **********************/
DHT dht;                             //variavel do sensor de temperatura e humidade
unsigned int humidade = 0;           //variavel para armazenar valor de humidade
unsigned int temperatura = 0;        //variavel para armazenar valor de temperatura
unsigned long ultimamedida;          //usado para armazenar o valor em milisegundos da ultima medida

/***************************************************/

void setup() {
  Serial.begin(9600);                //velocidade de comunicacao por porta serie com o PC por USB
  dht.setup(pinDHT11);               //definicao do pino de ligacao do sensor DHT11
  Serial.println("A iniciar a leitura de temperatura e humidade...");
  delay(1000);                       //depois de alimentar o sensor aguarda que a tensao estabilize
  temperaturahumidade();
  ultimamedida = millis() / 1000;

}

void loop() {

  if (((millis() / 1000 - ultimamedida)) > (intervaloleituras)) {    //funcao que e despoletada a cada intervaloleituras
    temperaturahumidade();
    ultimamedida = millis() / 1000;
  }

}


void  temperaturahumidade() {

  humidade = 0;                                       //reset à variavel temperatura para não conter valores da última medição
  temperatura = 0;                                    //reset à variavel humidade para não conter valores da última medição

  unsigned int h = 1;                                 //variavel para contar o numero de vezes que é adquirida a temperatura

  while (h <= nmedidas) {                             //ciclo utilizado para adquirir nmedidas de temperatura
    unsigned int Humid = dht.getHumidity();           //variavel utilizada para armazenar a humidade atual
    unsigned int Tempe = dht.getTemperature();        //variavel utilizada para armazenar a temperatura atual
    String  estadosensor = dht.getStatusString();     //variavel utilizada para armazenar o estado do senso
    if (debug) {
      Serial.print("h = ");
      Serial.print(h);
      Serial.print(" TEMP (*C) = ");
      Serial.print(Tempe);
      Serial.print(" HUMID (%) = ");
      Serial.print(Humid);
      Serial.print(" ESTADO = ");
      Serial.println(estadosensor);
    }


    if ((estadosensor == "OK") and (Humid < 100) and (Tempe < 60)) {
      humidade += Humid;
      temperatura += Tempe;
    } else {
      if (debug) {
        Serial.println("Necessario mais uma medida por erro no resultado obtido.");
      }
      h -= 1;
    }
    delay(dht.getMinimumSamplingPeriod());
    h += 1;
  }
  humidade = humidade / (nmedidas);                //média da medida de humidade
  temperatura = temperatura / (nmedidas);          //média da medida de temperatura

  Serial.println("");
  Serial.println("********* VALORES MEDIOS **********");
  Serial.print("   ");
  Serial.print("TEMP (*C) = ");
  Serial.print(temperatura);
  Serial.print(" HUMID (%) = ");
  Serial.print(humidade);
  Serial.println("  ");
  Serial.println("***********************************");


}

Podemos ver os resultados das medições efetuadas:

 

 

Como podem perceber, o esquema de ligações e o código para obter os resultados deste sensor são extremamente simples o que permite criar uma solução muito interessante e low-cost.

Por Carlos Oliveira.

—————
Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo.

Não se esqueçam de fazer like na nossa Página no Facebook.

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

Comments

Comentários

ArduinoPortugal.pt

Deixar uma resposta