Sensor de temperatura y humedad con el módulo DHT11 y Arduino

Hola, hoy voy a explicar como usar el sensor de temperatura y humedad DHT11 con Arduino.

El módulo que voy a usar es el siguiente:

Existen otros módulos similares y también se puede usar el sensor directamente. Las salidas del sensor son:

Da igual el modulo que usemos, lo importante es conectar correctamente las patillas Vcc, Data y Gnd.

Las conexiones son muy sencillas: Vcc a +5V, GND a GND y Data a una entrada digital, en nuestro caso la entrada 2. Entre la patilla data y Vcc conectaremos una resistencia de 5K.

Para realizar el programa de Arduino nos vamos a apoyar en la librería DHT de Adafruit, para descargar directamente hacer click aquí.

Una vez descargada tendremos que guardar los archivos “DHT.cpp” y “DHT.h” en una carpeta que llamaremos DHT dentro de “/Documents/Arduino/libraries/” en MAC o “My Documents/Arduino/libraries” en Windows.

El código para leer el sensor con Arduino es el siguiente:

// Lectura del sensor DHT11 http://zygzax.com
 
#include "DHT.h"
 
#define DHTPIN 2 // Establecemos la entrada digital en la que tenemos 
 // conectada la salida data del sensor.
#define DHTTYPE DHT11 // Definimos el sensor que vamos a usar DHT 11 
 
DHT dht(DHTPIN, DHTTYPE); // Configuramos la entrada y el sensor
 
float tmax=0, tmin=50, hmax=0, hmin=95; // Creamos las variables para los
 // valores criticos.
 
void setup() {
 Serial.begin(9600); // Configuramos la conexion serie
 Serial.println("Comenzando la transmision"); //Mandamos el primer mensaje
 dht.begin();
}
 
void loop() {
 // La lectura de la temperatura y la humedad dura mas o menos de 250ms
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 
 // Comprobamos que los datos obtenidos son validos,
 // si no son un numero, existe un fallo.
 if (isnan(t) || isnan(h)) {
 Serial.println("Fallo en la lectura del sensor");
 } else {
 // Imprimimos los datos actuales.
 Serial.print("Humedad: "); 
 Serial.print(h);
 Serial.print(" %\t");
 Serial.print("Temperatura: "); 
 Serial.print(t);
 Serial.println(" *C");
 }
 // Comprobamos si el valor es un maximo o un minimo y lo guardamos.
 if(t>=tmax){tmax=t;}
 if(t<=tmin){tmin=t;}
 if(h>=hmax){hmax=h;}
 if(h<=hmin){hmin=h;}
 // Imprimimos los maximos y minimos
 Serial.print("Temp Max: ");
 Serial.print(tmax);
 Serial.print(" *C\t");
 Serial.print("Temp Min: ");
 Serial.print(tmin);
 Serial.println(" *C");
 Serial.print("Hum Max: ");
 Serial.print(hmax);
 Serial.print(" %\t");
 Serial.print("Hum Min: ");
 Serial.print(hmin);
 Serial.println(" %");
 Serial.println();
 // Tiempo de espera de 2s hasta la siguiente lectura y transmision
 delay(2000);
}

Para ver los datos tenemos que abrir en el ordenador el monitor serial de la aplicación Arduino y seleccionar abajo a la derecha 9600 baudio.

Ya deberíamos de tenerlo todo listo y poder visualizar las mediciones de nuestro sensor de humedad y temperatura.

Fuentes: Adafruit

10 pensamientos en “Sensor de temperatura y humedad con el módulo DHT11 y Arduino

  1. Joan

    Supongo que ya estarán resuelto los problemas de lectura, pero hay que tener en cuenta que algunas entradas de Arduino están flotando, es decir se programan para entradas o salidas y cuando son entradas hay que poner una resistencia a positivo. Técnicamente se llaman resistencias de PullUp. Ahora no sabría decir que patillas son, pero cuando no reconoce la entrada es porque le falta saber el estado y si no estan a positivo, siempre lee el valor “0”

    Saludos.

  2. Timoteo

    Nicolas,
    conectalo en el digital #3 y ejecuta este ejemplo:
    ——————
    #include “DHT.h”
    #define DHTPIN 2 // Establecemos la entrada digital en la que tenemos
    // conectada la salida data del sensor.
    #define DHTTYPE DHT11 // Definimos el sensor que vamos a usar DHT 11
    DHT dht(DHTPIN, DHTTYPE); // Configuramos la entrada y el sensor
    float tmax=0, tmin=50, hmax=0, hmin=95; // Creamos las variables para los
    // valores criticos.
    void setup() {
    Serial.begin(9600); // Configuramos la conexion serie
    Serial.println(“Comenzando la transmision”); //Mandamos el primer mensaje
    dht.begin();
    }
    void loop() {
    // La lectura de la temperatura y la humedad dura al mas o menos de 250ms
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    // Comprobamos que los datos obtenidos son validos,
    // si no son un numero, existe un fallo.
    if (isnan(t) || isnan(h)) {
    Serial.println(“Fallo en la lectura del sensor”);
    } else {
    // Imprimimos los datos actuales.
    Serial.print(“Humedad: “);
    Serial.print(h);
    Serial.print(” %t”);
    Serial.print(“Temperatura: “);
    Serial.print(t);
    Serial.println(” *C”);
    }
    // Comprobamos si el valor es un maximo o un minimo y lo guardamos.
    if(t>=tmax){tmax=t;}
    if(t=hmax){hmax=h;}
    if(h<=hmin){hmin=h;}
    // Imprimimos los maximos y minimos
    Serial.print("Temp Max: ");
    Serial.print(tmax);
    Serial.print(" *Ct");
    Serial.print("Temp Min: ");
    Serial.print(tmin);
    Serial.println(" *C");
    Serial.print("Hum Max: ");
    Serial.print(hmax);
    Serial.print(" %t");
    Serial.print("Hum Min: ");
    Serial.print(hmin);
    Serial.println(" %");
    Serial.println();
    // Tiempo de espera de 2s hasta la siguiente lectura y transmision
    delay(2000);
    }
    —————-

    Los resultados los miras por consola: CTRL + MAYUSCULA + M

  3. Nicolas

    Holaa! Gracias por responder, no leí al principio de la página que había que importar esa librería.
    Ahora no da error al verificar, pero tengo un grave problema: no lee los datos! Inclusive cargué el programa que da el fabricante del sensor, pero algo anda mal. ¿Puede ser que el sensor esté quemado?
    Cuando realizé otras pruebas, jamás use una resistencia entre Vcc y Data, los conectaba directamente al Arduino.
    Te comento que uso el Arduino NANO, v3.0 /w ATmega328 y un Sensor DHT11; este lo puse al pin analógico 0.
    El Monitor Serial muestra: “fallo en la lectura del sensor” y todos los valores estan en 00 salvo el que dice 95.
    Revisé todo y está bien conectado; creo que el sensor está mal, pero ¿qué crees que pueda ser?
    Saludos!

    1. jasirgo Autor

      Siento no haber respondido antes, a mi me funciona correctamente pero no sabría decirte como solucionar tu problema.
      La resistencia la recomiendan poner en el el datasheet del fabricante pero dependiendo del módulo que uses igual tienes que usarla o igual ya te viene en él.
      Hay otros códigos y formas de utilizar este sensor, para mi módulo el que me funcionó correctamente es este, había otros que me daban el error que tu dices, así que te recomendaría probar con otros códigos.

  4. Nicolas

    Buenas, te comento que al verificar el programa tengo 6 errores. Creo que no está declarado “dht” y no reconoce la librería que llamaste “DHT.H” con comillas, ¿me podrás ayudar por favor? Gracias!

    1. jasirgo Autor

      Hola, ¿Has instalado la librería de Adafruit?
      https://github.com/adafruit/DHT-sensor-library
      Una vez instalada en “My DocumentsArduinolibrariesDHT” (Si no tienes la carpeta deberías crearla) deberían desaparecerte los errores y funcionar perfectamente.
      Existen otras librerías para usar el sensor DHT pero esta de Adafruit es la que mejor me funciona con la versión actual del programador de Arduino.
      Si sigue sin funcionarte pégame por favor los errores que te da.
      Un saludo y espero que instalando la libreria se te solucione.

Los comentarios están cerrados.