DHT11: Sensor de humedad/temperatura para Arduino

El DHT11 es un sensor de humedad/temperatura de bajo costo y de media precisión, muy útil para los principiantes en el mundo de Arduino

 

Nota: Si se desea utilizar un sensor de humedad/temperatura de alta precisión recomiendo consultar el DHT22, parecido al DHT11 pero mucho más preciso.

En esta ocasión escribiré acerca del DHT11 que es un sensor de temperatura muy económico y muy utilizado por los amantes de la electrónica y los microcontroladores como Arduino. Image El DHT11 es un sensor que proporciona una salida de datos digital. Entre sus ventajas podemos mencionar el bajo coste y el despliegue de datos digitales. Esto supone una gran ventaja frente a los sensores del tipo análogo, como el LM335 por ejemplo, en los cuales las fluctuaciones en el voltaje alteran la lectura de datos.

Entre las desventajas pues, el DHT11 solo lee enteros, no podemos leer temperaturas con decimales por lo que tenemos que pensarlo muy bien a la hora de utilizar este sensor para trabajos en los que se requieran lecturas precisas de temperatura y/o humedad. En fin, vamos a lo que vamos. Para poder leer datos desde este sensor de una forma sencilla necesitamos descargar una librería que ha sido escrita para este propósito.

Hay tutoriales que explican como leer este sensor sin dicha librería, sin embargo el tema es bastante complicado para alguien que no esté acostumbrado a programar. Se necesita leer una onda cuadrada en la cual se envían los bits con separaciones de unos cuantos microsegundos. La verdad prefiero usar la librería DHT11.

Primero descargamos los archivos que conforman esta librería. Los podemos encontrar aquí. Ahora que hemos descargado, nos vamos a la carpeta de nuestro Arduino IDE, buscamos una carpeta llamada “libraries” y ahí descomprimimos el archivo *.rar. Nos debe quedar así:

Sin título Ahora abrimos Arduino IDE y pegamos el siguiente código:

#include "DHT.h" //cargamos la librería DHT
#define DHTPIN 2 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
void setup() {
Serial.begin(9600); //Se inicia la comunicación serial 
dht.begin(); //Se inicia el sensor
}
void loop() {
float h = dht.readHumidity(); //Se lee la humedad
float t = dht.readTemperature(); //Se lee la temperatura
//Se imprimen las variables
Serial.println("Humedad: "); 
Serial.println(h);
Serial.println("Temperatura: ");
Serial.println(t);
delay(2000); //Se espera 2 segundos para seguir leyendo //datos
}

Como podemos observar, no es difícil obtener lecturas de humedad y temperatura con este sensor. Ahora solo necesitamos conectarlo a Arduino e iniciar la lectura de datos.

El GND y el VCC del sensor se conectan en sus correspondientes pines en Arduino (GND y +5V, respectivamente). El pin “data” se conecta al pin 2, que ya declaramos en el código.

2013-02-14-249 2013-02-14-250 2013-02-14-253

Cuando subamos el código al micro, vamos al Monitor Serial y obtenemos el siguiente resultado:

Sin título

Cada 2 segundos obtendremos una nueva lectura.

Espero sus comentarios.

Saludos.

Comments

comments

Antony García González

Nace el 30 de julio del año 1992 en Ciudad de Chitré, provincia de Herrera, Panamá. Crece y recibe su educación primaria y pre media en Guararé. Hacia el año 2008 inicia sus estudios de Bachillerato en Ciencias con Énfasis en Informática en el Instituto Coronel Segundo De Villarreal en la Villa de Los Santos. Se gradúa en el año 2010 e inicia sus estudios de Licenciatura en Ingeniería Electromecánica en la Universidad Tecnológica de Panamá (UTP), sede Azuero. En el 2013 inicia el proyecto Panama Hitek. Actualmente es el director del equipo de autores, cursa el séptimo semestre de su carrera y trabajar para la UTP como asistente de investigación, para la Unidad de Eficiencia Energética

15 Comments:

  1. Consulta: Usas una fuente externa para alimentar la placa o directamente toma alimentacion del puerto USB??

  2. HOLA LA PROGRAMACION NO SIRVE ME PUDE AYUDAR VOTA UN ERROR ACA
    DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor
    me pordria ayudar muchas grax

    • Es probable que no hallas agregado la librería DHT a la carpeta “libraries” en la ruta de Arduino.

      No digas que no sirve ya que el código ha sido probado por muchos usuarios.

      Agrega la librería necesaria en la ruta especificada.

    • ALVARO el problema aparte de la librería puede ser las comillas que se utilizan en la web no son aceptadas por el ide de arduino solo cámbialas y correrá el programa

  3. ALVARO el problema aparte de la librería puede ser las comillas que se utilizan en la web no son aceptadas por el ide de arduino solo cámbialas y correrá el programa

  4. 0.00
    Read failHumedad:
    nan
    Temperatura:
    0.00
    Read failHumedad:
    nan
    Temperatura:
    0.00
    Read failHumedad:
    nan
    Temperatura:
    0.00

    Hola un saludo a todos este es el error que me arroja constantemente, lo he mirado todo y esta puesto tal como lo he visto en la web y nada, sigue saliendo lo mismo todo el rato. A ver si alguien me puede hechar un cable que llevo mas de dos días para intentar mover este sensor.

    Gracias.
    Read failHumedad:
    nan
    Temperatur

  5. BRENDA GUADALUPE GARCÍA TELLO

    Hola, disculpa soy nueva en arduino tu blog es muy bueno, a que te refieres con ir al monitor serial?

    • antony.garcia.gonzalez@gmail.com

      En el programa de Arduino IDE, busca en el menú herramientas donde dice Monitor Serial. Te aparece una ventana donde escribes los caracteres que deseas enviar y Arduino los recibirá e interpretará según el código que hayas colocado en la placa

  6. jorge luis olivari

    Hola amigos, espero puedan ayudarme estoy tratando de leer dos sensores de estos al mismo tiempo y no encuentro un ejemplo del codigo, los quiero conectar a pines diferentes para asi poder llerlos por separado

    • antony.garcia.gonzalez@gmail.com

      Se debe declarar dos veces el DHT11 y establecer diferentes pines para sus funcionamientos. En el comando DHT dht(DHTPIN, DHTTYPE); habría que colocar algo así como DHT dht1(DHTPIN1, DHTTYPE1); y DHT dht2(DHTPIN2, DHTTYPE2); asignando los valores necesarios a DHTPIN y DHTTYPE para que cada sensor tenga sus propios pines

  7. Buenas tardes amigos, es muy interesante esto de Arduino pero soy totalmente nuevo.
    Tendo dos consultas:

    1) Debido a mi ignorancia en el tema, si por ejemplo quiero que los datos de la humedad y temperatura sean leidos por un programa externo (un soft realizado por mi) esto es posible??
    Ya que necesito realizar un soft que lleve estadisticas de las mediciones de las temperaturas de un determinado suelo.. alguna guia para esto.

    2) El DHT11 me puede servir para medir la humedad de un suelo? o estos dispositivos no pueden ser sometidos bajo tierra o al roce con el agua, que puedes recomendarme al respecto..

    Muchas gracias desde ya.. soy desde este momento un seguidor de tu sitio

    Saludos desde ya

Leave a Reply