bclose

Sensores de temperatura DHT11

Sensor de temperatura y humedad

Objetivos

 

 
    • Presentar los sensores DHT11.
    • Mostrar como leerlos utilizando la librería de control.
    • Escribir un programa básico de uso.
 

Material requerido.

Imagen de Arduino UNO  Arduino UNO o equivalente.
ProtoboardconexionesUna Protoboard más cables.
componente Una resistencia de 330Ω.
Sensor temperatura y humedad Un sensor de temperatura DHT11.
tienda online prometec

Sensores de temperatura y humedad

 

En la sesion Sensor de temperatura TMP36, vimos cómo medir la temperatura con un sensor TMP36. Es bastante sencillo y no presenta especiales problemas, mas allá de tener cuidado con las operación con números float.

Pero en muchas ocasiones, y especialmente en la industria alimentaria, no basta con medir la temperatura, sino que la humedad relativa es también un factor importante a tener en cuenta.

Por eso se desarrollaron los sensores de la familia DHT. Nos proporcionan de forma digital la temperatura y la humedad, con diferente precisión según el modelo.

Básicamente hay dos variantes DHT11 y DHT22

Las características del DHT11 son:

 
  • Muy barato, sobre 2€
  • Funciona con 3,3 y 5V de alimentación
  • Rango de temperatura: de 0º a 50º con 5% de precisión (pero solo mide por grados, no fracciones)
  • Rango de humedad: de 20% al 80% con 5% de precisión
  • 1 Muestra por segundo (No es el más rápido del oeste)
  • Bajo consumo
  • Devuelva la medida en ºC
 

En cuanto al DHT22:

 
  • Barato, entre 4 y 5 €
  • Funciona con 3,3 y %V de alimentación
  • Rango de temperatura: de -40º a 125º ±0.5°C
  • Rango de humedad: de 0% al 100% con 5% de precisión.
  • Lee 2 veces por segundo.
  • Bajo consumo.
  • Devuelva la medida en ºC
 

En cuanto a la forma de conectarlos y programarlos es la misma para ambos modelos y veremos que hay desarrolladas librerías para Arduino que soportan los dos de una forma sencilla.

Destacar que el chip incorpora electrónica para hacer internamente la conversión de temperatura y humedad y nos da un valor de medida de forma digital, es decir, que no necesitamos un pin analógico como en el caso del TMP36, sino que lo leeremos con un pin digital.

 

Diagramas del circuito

 

La conexión es trivial, pero cabe destacar que se vende en dos encapsulados, uno de tres pines que son GND, Data y Vcc, y otro 4 pines y uno de ellos, sencillamente sobra y no se conecta. Normalmente viene rotulado en el sensor el nombre de cada pin, y si no ya sabeis, a buscar el manual en Google

Version 4 pines

Version 3 pines
Vamos con el esquema por cortesía de Fritzing:

Esquema electrico

 

Y aquí tenemos el esquema de protoboard.

Protoboard

El Programa de lectura del DHT11

 

En primer lugar, tenemos que descargar una librería para manejarlos cómodamente, DX11.zip e importarla. Aquí teneís la librería  DHT11.zip

Hacemos el importar la librería DHT11 que nos pondrá:

#include <DHT11.h>

Y definimos una instancia del sensor donde declaramos el pin al que esta conectado.

int pin=2;
DHT11 dht11(pin);

Leerlo ahora es muy sencillo:

int error ;
float temp, humi;
error  =  dht11.read(humi, temp)

Basta con hacer dht11.read pasandole las variables donde queremos el resultado, y comprobamos que no haya errors (Siempre es buena idea comprobar que no hay error cuando hacemos una llamda). El programa completo seria más o menos algo así: Prog_24_1

#include <DHT11.h>

int pin=2;
DHT11 dht11(pin);

void setup()
   {
       Serial.begin(9600);
   }

void loop()
   {
       int err;
       float temp, hum;
       if((err = dht11.read(hum, temp)) == 0)    // Si devuelve 0 es que ha leido bien
          {
             Serial.print("Temperatura: ");
             Serial.print(temp);
             Serial.print(" Humedad: ");
             Serial.print(hum);
             Serial.println();
          }
       else
          {
             Serial.println();
             Serial.print("Error Num :");
             Serial.print(err);
             Serial.println();
          }
       delay(1000);            //Recordad que solo lee una vez por segundo
   }

El resultado se envía a la consola y aquí podéis ver una muestra.

Medidas de consola

Para hacer variar os valores, de humedad y temperatura y comprobar que todo funciona correctamente, podeis, sencillamente, enviar vuestro aliento al sensor, y salvo que estéis en el trópico haréis subir tanto la temperatura como la humedad relativa.

Como vereris, son de lo mas sencillos de utilizar y un componente habitual de vuestro arsenal de sensores

 

 

Resumen de la sesión

 

 
  • Hemos visto los sensores DHT11, y montado un circuito de prueba con el
  • Los DHT22, usan el mismo circuito y pines, pero su resolución y velocidad es bastante mejor, aunque para muchas aplicaciones el DHT11 es mas que suficiente.
 

 

 

 

 

(87) Comments

  • Buenos días, en la consola no me aparecen los datos, esto es debido a qué? Qué puedo hacer para arreglar el problema?
    Muchas gracias

    • Hola Dirson, el problema suele ser cables defectuosos o simplemente alguna conexion cambiada

      • Jose

      checá la velocidad del puerto serial que sea la misma de tu consola

  • Buenas,
    en el datasheet del DHT11 veo que el pin de datos del sensor es bidireccional, de ahí la razón que en el setup no se haya declarado el pin 2 como entrada (puesto que ese hecho hace que el sensor pueda tanto enviar como recibir datos). Enviar está claro que son los valores de temperatura y humedad leídos por el mismo, ¿pero que se supone que tiene que recibir por parte del micro? Intuyo que la señal de error, pero si no es así me gustaría ver si alguien me lo puede aclarar.

    Saludos.

    • Hola Luis.

      Ese pin se declara como entrada (INPUT) y se hace desde la propia librería, sin que tenga el usuario que hacerlo. Luego se pone a valor alto (HIGH), y esto también lo hace la librería.
      El DHT no recibe nada de Arduino, sólo envía datos. Arduino devuelve error si está mal conectado o se intenta leer demasiado deprisa entre una lectura y la siguiente. Por eso se debe leer sus datos cada segundo, no menos.

      Saludos.

  • buenas tengo un problema el sensor siempre me muestra como temperatura minima 24°c de hay no baja aque se debe

    • Hola Jose, no se me ocurre una razón para ello. Revisa bien tus conexiones y fíjate que hayas conectado correctamente la resistencia pullup. Un saludo.

  • Amigo el sensor me da el error numero 4, que puedo hacer?

    • Hola Omar. Has conectado la resistencia de pull up?

      • Hola a mi igual me da error numero 4 y no se que hacer???

        • Hola Bastián, normalmente viene por un problema de conexión. Revisa que esté correcto y si no prueba con otro sensor si puedes, por si estuviese estropeado.

    • Claudio salvo

    hola! ecxelente tutorial. El problema es que abro la consola y no sale absolutamente nada. Que podria estar mal? saludos

    • Hola CLaudio, pues normalmente suele ser una conexion incorrecta o a veces tambien puede estar dañado el sensor claro

      • hola, gracias por al respuesta, cuando tengo el sensor conectado no aparece nada, pero al desconectar el pin data sale error num 4 :C

        • No se puede descartar que el sensor no este bien. Yo probaria con otro a ver que pasa

    • Luis pedro

    e estado probando este programa y no me funciona me imagino que los comandos de la librería han cambiado, e incluso la librera en si me cambio.

    • Hola Luis, si has descargado la librería de esta sesión el programa debería funcionarte. Puedes darnos algunas pista sobe tu error? Un saludo.

    • Hola Luis,
      Parece el tipico problema de una version incorrecta de la libreria. Busca en google la ultima version y veras como se corrige

  • Hola a todos, habra forma de enviar los valores de humedad y temperatura por medio de una comunicacion duplex con nRF2401, en donde habrian dos tx y un rx?

    • Hola Irvin, tienes un ejemplo de comunicacion duplex en la seccion de comnicaciones y NRF2401

  • Un saludo a todos. estoy probando un dht11 y me funciona a la perfeccion con 1 º de error en temperatura .Me quiero pasar al dht22 y segun la hoja de datos hay que cambiar la señal baja 18ms para dht11 y 1 ms para dht22
    no es mas .¿porque la temperatura y humadad me dan 00 y no pasa por mas calor que le de ?¿ puede ser el sensor este dañado?Cualquier sugerencia es bien recibida.

    • Hola Jose, prueba esta librería https://github.com/adafruit/DHT-sensor-library. Simplemente abre el ejemplo y descomenta la línea con el tipo de dht que estés usando. Un saludote!

    • Hola Jose, el dht22 es el hermano mayor del dht11 y funciona muy similar, pero en la libreria tienes que indicarle que usas este modelo y si usas el mimso programa no se enterara y por eso seguramente te devuelve valor de 0

  • Hola que tal, ya probé mi sensor y trabaja muy bien, pero quiero conectar 10 sensores a un arduino, ya lo intente con 5, los conecte cada uno a un pin diferente y los declare, las tierras y voltajes al arduino en los 5 casos, funcionan pero me parecen estar en serie pues todos muestran el mismo valor y si aumento la temperatura o humedad en cualquiera de los 5, todos registran el mismo incremento, leí acerca del multiplexor pero no lo entiendo o solo me faltara declarar algo mas?

    • Hola Edgar, nunca use mas d euno a la vez de estos sensores, pero aparentemente basta con conectar cada uno a un pin diferente y declarar una instancia para cada uno:
      DHT11 dht2(2);
      DHT11 dht3(3);
      DHT11 dht4(4);
      DHT11 dht5(5);
      …….

      Y luego leer cada uno

    • Nico

    Hola! felicitaciones al creador del post y a toda la comunidad por sus excelentes posts. Hoy me encuentro con el problema de, tener que habilitar un humificador (tira humedad) cuando la humedad ronde los 79% hasta 83%, le de señal de encender al humificador, y además si es posible, cuando la temperatura varíe, que se encienda un equipo split de aire acondicionado. Será posible?
    Gracias de antemano!

    • Hola Nico, en cuanto a la progrmación no tendría mucho misterio y este sensor te valdría. Y en cuanto al montaje eléctrico, quizás sería un poco más complicado pero no veo por qué no podrías hacerlo. Si quieres abre un tema en la sección de Proyectos del foro cuando te pongas a ello y te intentamos echar una mano. Un saludo.

    • Hola Nico.

      Como dice Ivan, es posible, pero vete reuniendo datos de la potencia del split y del humificador, porque vas a necesitar, entre otras cosas, dos relés de potencia para activar esos aparatos. Si el encendido de alguno de ellos es electrónico la cosa se complica, porque no es como una lámpara que dejas encendida en su interruptor y luego con un relé conmutas. Tendrías que acceder a su circuito de encendido y ya eso implica tener algunos conocimientos de electrónica.

      Saludos.

    • Yoangel

    Hola que tan precisos pueden ser estos sensores?

    • No demasiado john, están pensados par la industria alimentaria donde un grado arriba o abajo no es importante.si requieres un poco más de precisión y rapidez vete al dht22

  • Ya lo ise y quedo muy bien ya solo estoy tratando de que quede un espacio en la pantalla cada vez que se impriman los datos, sera muy dificil conectar los datos a una pantalla lcd?

    • Mike

    Hola, gracias por los tutoriales son de gran ayuda, sabras si puedo utilizar 4 sensores dth 11 y que me den la informacion de los 4 al mismo tiempo? Soy principiante en esto de programar.

    • No lo he probado pero supongo que sí se podrá. En el ejemplo creamos una instancia conectada al pin 8 con la instrucción DHT11 dht8(8);

      Prueba a crear varias de esta forma y a leerlas como en el ejemplo.

      DHT11 dht8(8);
      DHT11 dht9(9);
      DHT11 dht10(10);
      DHT11 dht11(11);

      Un saludote.

    • Marcos Pineda

    Buenas, disculpe me he fijado en su tutorial y lo he hecho, pero al compilar el programa me dice fatal error… y algo en inglés que en español vendría siendo como que “no se encontró directorio o archivo” cómo puedo solucionar esto?

    • Hola Marcos, has instalado e incluido la librería? si es así y sigue dándote el error copianoslo tal cual para que podamos ayudarte.. Un saludote.

    • Me puedes copiar el error exacto que da el compilador porfavor?

      • Pedro

      ola amigo oye me marca el mismp error a mi y me gustaria saver como lo lograste solucionar de antemano gracias

  • Buenas,

    Me gustaría saber como puedo conectar hasta 4 sensores DHT11 para realizar una medida de los 4 a la vez.
    Probé primero con uno solo y perfectamente pero estoy probando con varios y me está siendo imposible que funcione, no llega ni a compilar la mayoría de las veces y si lo consigue una vez en la placa solo leo error…

    Muchísimas gracias,

    Un saludo,

    Eric.

    • Hola Eric,
      No he hecho este intento con mas de un DHT11 pero fijate en esta linea

      DHT11 dht8(8);

      Crea una instancia ed sensor conectado al pin8 que llamamos dht8. COmo es un objeto nada nos impide hacer hacer:
      DHT11 dht8(8);
      DHT11 dht9(9);
      DHT11 dht10(10);
      DHT11 dht11(11);

      Parece confuso, pero es bastante sencillo si lo pinesas. Acabamos de crear 4 senseroes de temperatura DHT11 llamados DHT8, dht9, dht10 y dht11 conectados a sus pines correspondientes. Ahora puedes leer por programa cualquiera de ellos

    • Eduardo Chay

    como activar un Led mediante un sensor de temperatura con comunicación i2c entre Arduinos– maestro-esclavo???
    solución————>>>>

    • No entiendo muy bien la pregunta eduardo

    • Hola Eduardo.

      El maestro puede controlar el LED y el esclavo el sensor de temperatura. El maestro le pide información al esclavo cada cierto tiempo, y el esclavo le envía la temperatura. Cuando supere el margen establecido, el maestro encenderá el LED.

      Seguirá pidiendo información al esclavo para ver cuando apagar el LED nuevamente.

      Saludos.

        • Camilo

        Hola, pregunta técnica:
        porque el pin de la mitad (el de los datos) necesita estar conectado a la fuente?
        Lo probe quitando la resistencia y seguia dando datos.
        Gracias de antemano

        • Hola Camilo. El fabricante ha diseñado este sensor así. El pin de datos debe tener una resistencia de pull-up de 5K1 (según la hoja de datos) para evitar el estado flotante de este pin. Esto no implica que no funcione, pero añadirla no cuesta nada.

          Saludos.

Give a Reply

WordPress Anti-Spam by WP-SpamShield