20 maio 2013

Sensor de umidade e temperatura DHT11

O sensor DHT11 é um sensor de temperatura e umidade , que permite medir temperaturas de 0 a 50 Celsius, e umidade na faixa de 20 a 90%. Não é um sensor extremamente rápido e preciso, por isso não é recomendada a utilização em ambientes de alto risco.

Sua faixa de precisão para temperatura é de 2 graus, e de umidade, 5%. Esse sensor pode ser adquirido na FilipeFlop, e o datasheet do DHT11 você encontra aqui.

O sensor em si tem 4 pinos, mas o pino 3 não é utilizado :

sensor de umidade temperatura dht11

O mais comum é encontrá-lo em forma de módulo, onde temos apenas 3 pinos : Vcc, Data e Gnd :
Módulo DHT11
Modulo DHT11 - Fundo

A ligação do sensor é bem simples, utilizando apenas uma porta do Arduino :

Circuito DHT11 e Arduino


O programa abaixo lê as informações do sensor, e apresenta essas informações no serial monitor do Arduino. A biblioteca para uso com o DHT11 você encontra aqui.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Programa : Sensor de umidade e temperatura DHT11
//Autor : Arduino e Cia

#include <dht.h>

#define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1

dht DHT; //Inicializa o sensor

void setup()
{
  Serial.begin(9600);
  delay(1000);//Aguarda 1 seg antes de acessar as informações do sensor
}

void loop()
{
  DHT.read11(dht_dpin); //Lê as informações do sensor
  Serial.print("Umidade = ");
  Serial.print(DHT.humidity);
  Serial.print(" %  ");
  Serial.print("Temperatura = ");
  Serial.print(DHT.temperature); 
  Serial.println(" Celsius  ");

  //Não diminuir o valor abaixo. O ideal é a leitura a cada 2 segundos
  delay(2000);  
}

Execute o programa, abra o serial monitor e você terá uma tela como essa, contendo as informações de temperatura e umidade :

Sensor temperatura DHT11 - Serial Monitor

Aproveitando o post anterior, sobre o display Nokia 5110, que tal juntarmos tudo e apresentarmos esses dados de temperatura e umidade no display ? Assunto para o próximo artigo. Até lá !

72 comentários:

  1. Muito bom o seu blog. Me ajudou muito!

    ResponderExcluir
  2. Obrigado pela visita ! Fico feliz em poder ajudar. Abraço.

    ResponderExcluir
  3. so nao sei onde posso compra placa de arduino.

    ResponderExcluir
    Respostas
    1. O Mercado Livre é uma ótima opção. segue link : http://pmstrk.mercadolivre.com.br/jm/PmsTrk?tool=6248909&go=http://lista.mercadolivre.com.br/arduino-uno

      Abraço.

      Excluir
  4. Oi Amigo, estou fazendo um projeto para medir com 3 sensores, existe um modo de alternar a tela pra mostrar a temperatura medida por cada um deles a cada certo tempo? Se puder me ajudar agradeço mais ainda,pois sua programação já me trouxe bons resultados!!

    ResponderExcluir
  5. Olá Murilo !

    Teoricamente a lógica é simples de implementar, pois bastaria você nomear os 3 sensores (dht_dpin1, dht_dpin2, dht_dpin3), ligar um em cada porta analógica e apresentar os valores alternadamente. Só não sei se a sintaxe é exatamente essa, e se a biblioteca aceitaria ligar vários sensores ao mesmo tempo. Realmente preciso testar para te dizer com certeza.

    Em relação à sensores de temperatura, tenho um artigo sobre o DS18B20 que é bem interessante, pois você pode ligar vários DS18B20 em uma única porta, e endereça-los individualmente. Espero ter ajudado.

    Abraços e obrigado.

    ResponderExcluir
    Respostas
    1. Estou tentando fazer funcionar 2 sensores de forma independente e esbarrei tbm nesse problema, teria que adicionar os valores 1 e 2 pra todas funçoes dessa biblioteca? ex DHT.humidity1, DHT.humidity2, DHT.temperature1, DHT.temperature2 ? e essa DHT.read11(dht_dpin) como fica?

      Excluir
    2. Boa tarde Rodrigo, você pode tentar criar outro define, com outro nome, como por exemplo, dpin2 :

      #define dht_dpin2 A2 //Pino DATA do Sensor 2 ligado na porta Analogica A2

      e depois utiliza-lo no programa assim :

      DHT.read11(dht_dpin2)

      Não tenho 2 sensores para testar aqui, mas creio que o caminho seja esse.

      Depois me diga se conseguiu programar, por favor. Abraço !

      Excluir
    3. Como ficou o codigo
      //Programa : Sensor de umidade e temperatura DHT11
      //Autor : Arduino e Cia

      #include
      #define dht_dpin1 A1 //Pino DATA do Sensor ligado na porta Analogica A1
      #define dht_dpin2 A2 //Pino DATA do Sensor ligado na porta Analogica A1

      dht11 DHT; //Inicializa o sensor

      void setup()
      {
      Serial.begin(9600);
      delay(1000);//Aguarda 1 seg antes de acessar as informações do sensor
      }

      void loop()
      {
      DHT.read(dht_dpin1); //Lê as informações do sensor

      Serial.print("1-Umidade = ");
      Serial.print(DHT.humidity);
      Serial.print(" % ");
      Serial.print("1-Temperatura = ");
      Serial.print(DHT.temperature);
      Serial.println(" Celsius ");

      DHT.read(dht_dpin2); //Lê as informações do sensor

      Serial.print("2-Umidade = ");
      Serial.print(DHT.humidity);
      Serial.print(" % ");
      Serial.print("2-Temperatura = ");
      Serial.print(DHT.temperature);
      Serial.println(" Celsius ");
      delay(2000); //Não diminuir muito este valor. O ideal é a leitura a cada 2 segundos
      }


      O que aconteceu? Quando o sensor 2 (pin a2) é desligado a saida serial me retorna os valores de 255 como se ele fosse desconectado. Quando desconecto o sensor in (pin a1) a saída serial me retorna 255 pros DOIS sensores. Desconfiado resolvi mudar as condições do sensor 1 e manter a do sensor dois, o programa me retornou os valores do sensor 1 no sensor 1 e 2. Ou seja o programa so ta lendo o sensor 1, porem quando o 2 é desconectado ele consegue perceber isso, resumindo nao sei o que fazer. kkkkkkkkkkkk

      Excluir
    4. Oi Rodrigo,

      Entendi.. vou tentar arrumar 2 sensores e ver se consigo testar isso. Mas creio que seja algum detalhe na biblioteca. Abraço !

      Excluir
    5. Olá, você conseguiu resolver esse problema para dois sensores?

      Excluir
    6. Oi Rodolfo !

      Ainda não. Pedi os DHT11 mas ainda não chegaram. :(

      Abraço !

      Excluir
    7. Olá,
      Gostaria de saber se conseguiu fazer 2 sensores funcionarem ao mesmo tempo?
      Se puder me enviar o código no meu email: jessy_nana22@hotmail.com

      Excluir
  6. Como testar o sensor?
    Só obtenho valores 0 como se o analógico não estivesse "lendo"

    ResponderExcluir
    Respostas
    1. Boa tarde. Reveja as ligações e os pinos correspondentes, por favor. Isso parece ser problema de ligação. Abraço.

      Excluir
    2. Estou com o mesmo problema....

      Excluir
    3. Descobri o problema! Na placa do meu sensor, os pinos VCC e Data estão invertidos. Verifique a ligação dos pinos no seu sensor

      Excluir
    4. Boa dica, Otávio ! Muito obrigado. Abraço.

      Excluir
  7. Em alguns tutoriais é sugerido ligar um resistor de 10K entre o pino de sinal e o positivo. Vc tem alguma informação sobre isso? Seu tutorial foi bastante importante. Obrigado

    ResponderExcluir
    Respostas
    1. Ola Jootah !

      Obrigado pela visita. Eu também vi isso em outros tutoriais, creio que funcione como um resistor de elevação para evitar leituras indesejadas do sensor. No meu não aconteceu isso, mas se acontecesse, seria a primeira providencia que eu iria tomar pra tentar estabilizar a leitura. Abraço e obrigado.

      Excluir
  8. Minhas ligações estão corretas, mas continua mostrando 0 nas leituras... o que pode ser ?

    ResponderExcluir
    Respostas
    1. Bom dia Bruno ! Parece ser problema de ligação, pelo que você me fala, mas você disse que já revisou tudo. Estranho, pois ele deveria pelo menos apresentar alguma informação, nem que fosse aleatória. Você por acaso teria outro sensor pra testar ? Abraço !

      Excluir
  9. Amigo copiei o seu código para a ide e me retorna o seguinte erro na hora de copilar;

    sketch_nov02a:4: error: 'dht' does not name a type
    sketch_nov02a.ino: In function 'void loop()':
    sketch_nov02a:14: error: 'DHT' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Bom dia Ramon, parece ser algum problema na instalação da biblioteca, ou então a IDE não foi reiniciada. Abraço.

      Excluir
    2. #include "dht.h"

      Trocar os < > por " "

      Excluir
  10. Boa noite! no meu IDE 1.0.5, não reconhece a biblioteca do sensor, oq devo fazer?

    ResponderExcluir
  11. Caro arduino, se eu ligar este sensor num controlador digital no lugar do sensor de temperatura ele vai fazer a leitura de umidade?

    ResponderExcluir
    Respostas
    1. Bom dia. Qual tipo de controlador digital ?

      Excluir
  12. Olá amigo, testei o código que você desenvolveu e ele não funcionou, ele sempre informa que esta 0°C e 0% de umidade. As ligações estão corretas, existe alguma possibilidade de ser algum outro problema fora o sensor?

    Abraço.

    ResponderExcluir
    Respostas
    1. Bom dia. Se as ligações estão corretas, não vejo outro problema que não seja o sensor. De qualquer forma, certifique-se de que os jumpers estão ok, pois já tive esse problema do sensor não passar dados, e no caso o jumper estava rompido internamente. Acabei de refazer o circuito com um módulo DHT11, e está tudo ok com o programa do artigo. Estou usando a IDE com versão 1.0.5. Se puder, me avise se conseguiu descobrir o que é. Abraço e obrigado !

      Excluir
  13. Bom dia amigo, estou tentando usar o código mas os valores apresentados na serial são sempre os mesmos. teria como me ajudar?
    Umidade = 255.00 % Temperatura = 255.00 Celsius
    Umidade = 255.00 % Temperatura = 255.00 Celsius

    desde já agradeço

    ResponderExcluir
    Respostas
    1. Boa tarde, você está usando o módulo ou apenas o sensor ? Alguns módulos estão vindo com a marcação de Vcc e GND invertidas.

      Excluir
  14. Amigo, muito obrigado! Funcionando perfeitamente...

    ResponderExcluir
    Respostas
    1. Bom dia ! Obrigado pelo retorno. Um abraço e precisando estamos aí. Valeu !

      Excluir
  15. bom dia estou precisando de uma programação de 4 setores de leds com sensor ldr para controlar o brilho, sensor pir para acionar os led se tiver movimento e também um controle ir para apagar e ligar os setores. tenho também 2 cooler que devem ser acionados através sensor de temperatura lm35 ou dht11 desde ja agradeço

    ResponderExcluir
    Respostas
    1. Boa noite Adenilson,

      Eu não tenho nenhuma programação pronta com todos esses componentes, mas no meu blog eu tenho artigos sobre cada um deles.

      Abraços !

      Excluir
  16. Boa noite, copiei teu codigo mas quando mando compilar ele apresenta o seguinte erro

    sketch_sep02a:10: error: 'dht' does not name a type
    sketch_sep02a.ino: In function 'void loop()':
    sketch_sep02a:20: error: 'DHT' was not declared in this scope

    poderia me ajudar? esse é um dos primeiros testes que estou tentando fazer, e quando uso o codigo de exemplo ele da erro na leitura do sensor.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Isso parece ser erro de biblioteca. Você instalou ?

      Abraço.

      Excluir
  17. Olá fiz um projeto unindo o LCD nokia 5110 e o DTH 11 e um RTC só que a leitura da temperatura esta alta 4 graus acima da temperatura lida por um termômetro industrializado.
    Há como regular essa leitura do DHT 11?
    Grato. Silvio Cavalcante

    ResponderExcluir
    Respostas
    1. Boa tarde Silvio,

      Você consegue testar esse DHT11 separadamente ? assim conseguimos ver se o problema está na parte do sensor ou se alguma outra coisa no circuito está interferindo.

      Abraço !

      Excluir
  18. Boa tarde, blz? Vc possui algum tutorial (para dht-11) para quando atingir certa temperatura acionar um rele, pela saida analogica e para quando atingir uma certa umidade acionar outro rele?

    ResponderExcluir
    Respostas
    1. Boa noite Guilherme,

      Não tenho nada pronto, mas é uma boa idéia pra um post. Vou pensar em algo.

      Abraço !

      Excluir
    2. Desde ja, obrigado pela ajuda!
      Abraco!

      Excluir
  19. Boa noite, blz? Entao eu consegui resolver este problema agr o unico problema é q n sei como o dht-11 manda o sinal, se é em binario, hexa, ou algum especifico, exemplo, quero q um rele ligue quando estiver 25 graus, como eu informo esta quantia?
    Tipo...
    If (val > 25 ) liga rele... Em vez deste "25" eu tenho q colocar q numero equivalente a 25 graus, pra ele entender? Vc poderia me ajudar nisso, ja tentei de quase tudo

    ResponderExcluir
    Respostas
    1. Boa noite Matheus,

      Tenta o seguinte. Atribui à uma variável o valor da temperatura lida do sensor. Fica mais ou menos assim :

      Valor_Temperatura = DHT.Temperature

      Depois você faz o if normalmente com essa variável, como você falou :

      if (Valor_Temperatura > 25).....

      Depois me diga se conseguiu, por favor.

      Abraço !

      Excluir
  20. tenho um tcc baseado em nisso, será que seria viável um desses para irrigação automatizada?

    ResponderExcluir
    Respostas
    1. Boa tarde Caique,

      Existe um sensor de solo, que eu acho que seja mais adequado para o seu projeto:

      http://www.filipeflop.com/pd-aa99a-sensor-de-umidade-do-solo-higrometro.html

      Abraço !

      Excluir
  21. Só aparece valores zerados..

    Sera que o meu sensor esta estragado?
    Umidade = 0.00 % Temperatura = 0.00 Celsius
    Umidade = 0.00 % Temperatura = 0.00 Celsius

    ResponderExcluir
    Respostas
    1. Boa noite Dyego,

      É possível. Reveja as conexões e se possível utilize outro tipo de biblioteca.

      Abraço !

      Excluir
    2. Cuidado com alguns sensores : o da Keyes tem pino 1 como dados !

      Excluir
  22. peço ajuda Pf para um sketch
    sensor dht11 para ligar 2 (ou 4) relays com temperaturas diferentes
    desde já obrigado a todos

    ResponderExcluir
  23. Ola! estou com um projeto de uma horta, e gostaria de saber qual programa eu teria que utilizar para funcionar o Sensor De Umidade De Solo Hidrometro Com Haste Arduino Pic

    ResponderExcluir
    Respostas
    1. Boa noite Danilo,

      Tente as informações deste post sobre o sensor de chuva. O funcionamento é o mesmo:

      http://www.arduinoecia.com.br/2014/06/sensor-de-chuva-arduino.html

      Abraço !

      Excluir
  24. Olá. Não consigo utilizar meu sensor de temperatura e unidade DHT11. Está sempre dando o seguinte erro, mesmo depois de eu instalar várias bibliotecas:


    sketch_jul30a:4: error: 'dht' does not name a type
    sketch_jul30a.ino: In function 'void loop()':
    sketch_jul30a:14: error: 'DHT' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa noite,

      Entendo.. ainda assim, me parece que é algum erro na instalação da biblioteca. Tente instalar a IDE do "zero" para ver se o problema permanece.

      Abraço.

      Excluir
  25. ola alguém poderia me ajudar. estou criando uma chocadeira elétrica com dht11, e quando a temperatura cai abaixo de 37,5 teria que acionar uma resistência.alguem poderia me ajudar a acrescentar este IF.

    ResponderExcluir
  26. estou criando uma chocadeira e usarei o sensor dht11 para umidade e temperatura,quando a temperatura cai 37,5 usarei uma resistência. como acrescentar esse IF em minha programação?

    por enquanto fiz apenas isso.

    #include

    DHT dht(A1,DHT11);

    void setup (){
    serial.begin(9600);
    dht.begin();

    }

    void loop () {

    float u = dht.readHumidity();
    float t = dht.readTemperature ();

    serial.println("umidade: ");
    serial.println(u);
    serial.println(" | Temperatura: ");
    serial.println(t);

    delay(2000);



    }

    ResponderExcluir
  27. estou criando uma chocadeira e usarei o sensor dht11 para umidade e temperatura,quando a temperatura cai 37,5 usarei uma resistência. como acrescentar esse IF em minha programação?

    por enquanto fiz apenas isso.

    #include

    DHT dht(A1,DHT11);

    void setup (){
    serial.begin(9600);
    dht.begin();

    }

    void loop () {

    float u = dht.readHumidity();
    float t = dht.readTemperature ();

    serial.println("umidade: ");
    serial.println(u);
    serial.println(" | Temperatura: ");
    serial.println(t);

    delay(2000);



    }estou criando uma chocadeira e usarei o sensor dht11 para umidade e temperatura,quando a temperatura cai 37,5 usarei uma resistência. como acrescentar esse IF em minha programação?

    por enquanto fiz apenas isso.

    #include

    DHT dht(A1,DHT11);

    void setup (){
    serial.begin(9600);
    dht.begin();

    }

    void loop () {

    float u = dht.readHumidity();
    float t = dht.readTemperature ();

    serial.println("umidade: ");
    serial.println(u);
    serial.println(" | Temperatura: ");
    serial.println(t);

    delay(2000);



    }

    ResponderExcluir
  28. Arduino: 1.6.1 (Windows 7), Placa:"Arduino Uno"

    tempe-simples01.ino:4:17: fatal error: dht.h: No such file or directory

    compilation terminated.

    Erro compilando.

    Este relatório deveria ter mais informações
    "Mostrar saída verbosa durante a compilação"
    habilitado em Arquivo > Preferências.

    ResponderExcluir
  29. olá, não funcionou na minha ide.

    ResponderExcluir
  30. Obrigado, já descobri o erro e concertei, o
    Programa tá muito bom!
    Amo muito esse site, Parabéns amigo!

    ResponderExcluir
  31. O meu DHt11 só está aparecendo 0.00 no valor de umidade.. fiz as ligações corretas.. e coloquei ate um resistor de 10 k entre o vcc e o data.. não sei o que fazer.

    ResponderExcluir
    Respostas
    1. Estranho. a temperatura ele mostra normalmente ?

      Excluir
    2. sensor dht11 da Keyes por exemplo tem pino 1 como dados. Este sensor já tem uma resistência embutida.

      Excluir
  32. Alguém saberia me dizer, quando sensor umidade/temperatura faz a leitura invertida?

    ResponderExcluir
  33. Olá alguém saberia me dizer porque o sensor DHT11 está lendo invertido a temperatura com a umidade?

    ResponderExcluir
  34. Gostaria de saber como ver o dados do sensor de temperatura no meu celular, através do esp8266 12e ou modulo Bluetooth, nunca achei nada explicando esse tipo de procedimento.

    ResponderExcluir