En este artículo vamos a explicar el sensor DHT11 y como leer datos de temperatura y humedad desde arduino.
¿Para qué sirve el sensor DHT11?
El sensor DHT11 nos permite medir la temperatura y humedad con Arduino.
Una de las ventajas que nos ofrece el DHT11, además de medir la temperatura y la humedad, es que es digital.
A diferencia de otros sensores como el LM35, este sensor utiliza un pin digital para enviarnos la información y por lo tanto, estaremos más protegidos frente al ruido.
¿Cómo funciona?
El DHT11 es un sensor de temperatura y humedad digital de bajo costo. Utiliza un sensor capacitivo de humedad y un termistor para medir el aire circundante, y muestra los datos mediante una señal digital en el pin de datos.
Características técnicas
Respecto a las especificaciones técnicas tenemos las siguientes:
- Voltaje de Operación: 3V – 5V DC
- Rango de medición de temperatura: 0 a 50 °C
- Precisión de medición de temperatura: ±2.0 °C
- Resolución Temperatura: 0.1°C
- Rango de medición de humedad: 20% a 90% RH.
- Precisión de medición de humedad: 5% RH.
- Resolución Humedad: 1% RH
- Tiempo de sensado: 1 seg.
- Interface digital: Single-bus (bidireccional)
- Modelo: DHT11
- Dimensiones: 16*12*5 mm
- Peso: 1 gr.
- Carcasa de plástico celeste
Respecto a los pines de conexión:
- VCC: alimentación
- I/O: transmisión de datos
- NC: no conecta, pin al aire
- GND: conexión a tierra
Leyendo del sensor DHT11
Al contrario que el otro modelo, el DHT11 integrado dentro de un PCB ya viene con la resistencia pull-up integrada. Puede resultar muy útil en ocasiones, pero si añadimos un cable de más de 20 metros, deberemos tener en cuenta este factor.
Este modelo de DHT11 dispone de 3 pines, la toma de tierra GND, para los datos DATA y para la alimentación VCC (de 3,5V a 5V). En la siguiente imagen puedes ver el esquema de conexión con Arduino.
Ahora tenemos que instalar la librería para el sensor de DHT11 de Adafruit. Vamos al gestor de librerías, Sketch -> Include Library -> Manage Libraries , y ahí buscamos por DHT11. Nos saldrán varias librerías pero nosotros instalaremos la de Adafruit.
A continuación tenéis una captura de como hacerlo.
Lo primero que hacemos es utilizar un delay para esperar los 5 segundos recomendados. La librería de Adafruit para el DHT11 nos proporciona datos en grados centígrados y grados Fahrenheit. Para obtener los dos datos utilizamos la misma función, readTemperature().
Si no pasamos ningún parámetro nos devuelve la temperatura en grados centígrados. Si pasamos el valor true nos devuelve la temperatura en grados Fahrenheit. La humedad se obtiene llamando a la función readHumidity().
Es conveniente comprobar que la información no está corrupta y que realmente nos está devolviendo un número. Eso lo hacemos con la sentencia isnan(…). Esto nos dará verdadero si no es un número (isnan, Is Not a Number) y falso en caso contrario.
Por último obtenemos el índice de calor con la función computeHeatIndex(…). Nos puede devolver grados centígrados o grados Fahrenheit. Al final del todo mostramos la información en el monitor serie.
Podéis encontrar el código fuente para este ejemplo aquí .
// Incluimos librería #include <DHT.h> // Definimos el pin digital donde se conecta el sensor #define DHTPIN 2 // Dependiendo del tipo de sensor #define DHTTYPE DHT11 // Inicializamos el sensor DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { // Inicializamos comunicación serie Serial.begin(9600); // Comenzamos el sensor DHT dht.begin(); } void loop() { // Esperamos 5 segundos entre medidas delay(5000); // Leemos la humedad relativa float h = dht.readHumidity(); // Leemos la temperatura en grados centígrados (por defecto) float t = dht.readTemperature(); // Leemos la temperatura en grados Fahrenheit float f = dht.readTemperature(true); // Comprobamos si ha habido algún error en la lectura if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Error obteniendo los datos del sensor DHT11"); return; } // Calcular el índice de calor en Fahrenheit float hif = dht.computeHeatIndex(f, h); // Calcular el índice de calor en grados centígrados float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Índice de calor: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); }
La conexión con el arduino Mega AT2560 y el sensor quedaría tal y como se puede apreciar en la siguiente foto.
El resultado que se puede ver en el serial monitor después de ejecutar el código es el siguiente.
Más información
Podéis encontrar más información sobre este sensor y como utilizarlo en los siguientes enlaces: