El sensor integrado DHT11 permite obtener datos de la temperatura y humedad ambiente con facilidad. Es utilizable perfectamente en estaciones meteorológicas, locales o remotas, sistemas de control ambiental en el hogar, y equipos de monitoreo de invernaderos, cultivos o jardines.
Una de las ventajas de este sensor es que, a diferencia de otros sensores analógicos, como el LM35, nos envía la información en serie, de modo que se puede conectar a una entrada digital del microcontrolador. Así se evitan los problemas de ruido inherentes a las líneas que conducen señales analógicas.
Rangos de medición y precisión del DHT11:
- Rango de humedad: 20-90% HR (Humedad Relativa)
- Precisión de humedad: ±5% HR (Humedad Relativa)
- Rango de temperatura: 0-50 °C
- Precisión de temperatura: ±2% °C
- Voltaje de funcionamiento: 3 V a 5,5 V.
Veremos primero un poco sobre la Humedad. Luego estudiaremos cómo mide la humedad el DHT11. Después explicaremos cómo conectarlo a un Arduino y mostraremos un código de ejemplo para utilizar el DHT11 en tus proyectos.
¿Qué es la Humedad Relativa?
El DHT11 mide humedad relativa. La humedad relativa es la cantidad de vapor de agua en el aire ( e, o "presión de vapor real" ) respecto al punto de saturación de vapor de agua en el aire ( es , o "presión de vapor estándar", que es el valor correspondiente a 100%). En ese punto de saturación ( es ), el vapor de agua comienza a condensarse y acumularse en las superficies formando rocío.
El punto de saturación cambia con la temperatura del aire. El aire frío puede contener menos vapor de agua al saturarse, y el aire caliente puede contener más vapor de agua al saturarse.
La fórmula para calcular la humedad relativa es:
DHT11, un sensor integrado para la temperatura y humedad
El DHT11 se puede comprar en dos presentaciones: el sensor individual, que es una cápsula plástica integrada como la que se ve en la foto inicial de este artículo, o el mismo módulo básico DHT11 pero soldado en una placa de circuito impreso de base.
Hay una diferencia de precio que, a nuestro entender, no es justificada. La versión con plaqueta base (Printed Circuit Board) viene con un resistor de polarización a VCC (pull-up) y en ocasiones un LED que indica que está alimentado. La versión sin plaqueta base tiene 4 pines y la versión con plaqueta base tenemos 3 pines.
Las conexiones son levemente diferentes, y en cada modelo hay que leer los rótulos en el borde de la plaqueta para identificar bien dónde hacer las conexiones. Lo más importante es determinar cuál es la alimentacion, VCC, generalmente +5V, y cuál es tierra o negativo. El pin de señal, identificado con S, OUT, DOUT, DATA, como es obvio queda determinado por descarte.
DHT11 sin plaqueta base
Los pines de la versión sin PCB del DHT11 son:
- VCC: alimentación
- I/O: transmisión de datos
- NC: no conecta, pin al aire
- GND: conexión a tierra
DHT11 sobre plaquetas
Los pines de la versión con PCB del DHT11 son:
- GND: conexión con tierra
- DATA: transmisión de datos
- VCC: alimentación
Características técnicas del DHT11
Siempre es aconsejable dar una mirada a la hoja de características técnicas para ver detalles de funcionamiento el DHT11.
Modelo | DHT11 |
---|---|
Alimentación | de 3,5 V a 5 V |
Consumo | 2,5 mA |
Señal de salida | Digital |
Temperatura | |
Rango | de 0°C a 50°C |
Precisión | a 25°C ± 2°C |
Resolución | 1°C (8-bit) |
Humedad | |
Rango | de 20% RH a 90% RH |
Precisión | entre 0°C y 50°C ± 5% RH |
Resolución | 1% RH |
¿Cómo envía datos el DHT11?
La señal de salida es digital, enviada en serie por una sola línea.
Hay al menos dos versiones del sensor de temperatura y humedad DHT11, veremos cómo tendríamos que conectarlo a un Arduino. En cualquiera de los casos, ingresamos a un pin digital.
La alimentación puede ser de 3,5V a 5V. No es problema al conectarlo a un Arduino estándar, ya que tenemos salida de 5V. No funcionará alimentándolo con la salida de 3,3 V, ya que el valor está por debajo de las especificación de alimentación del módulo.
Antes de conectar el sensor es conveniente ver estas consideraciones:
- La hoja de datos recomienda un resistor de polarización (pull-up) de 5 kΩ para un cable de longitud de hasta 20 metros. No es un valor que se consiga fácil, por lo que utilizaremos un valor estándar de 4.7KΩ, o mejor 5.6KΩ.
- Se recomienda tomar mediciones cada 5 segundos. Un periodo menor puede ocasionar que los datos no sean precisos.
Una vez leídas y entendidas las consideraciones, veremos los diagramas para los dos modelos.
Conexionado para el DHT11
Para conectar el circuito de una aplicación típica con un DHT11, debemos poner un resistor de polarización (pull-up) conectado a la salida digital.
El sensor tiene 4 pines: VCC (de 3,5V a 5V), la entrada/salida digital, un pin sin uso (NC, no conectado), y la toma de tierra GND.
El diagrama de conexión es el siguiente:
Conexionado para el DHT11 sobre una plaqueta base
El DHT11 ya soldado en un PCB posee el resistor pull-up. 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 módulo con DHT11 dispone de 3 pines: la toma de tierra GND, DATA para los datos, y la alimentación VCC (de 3,5V a 5V). En la siguiente imagen se puede ver el esquema de conexión con Arduino.
Diferentes versiones del módulo DHT11 montado sobre una plaqueta
Debido a la amplia variedad de montajes que se encuentran en el mercado, todas ellas con diferentes disposiciones de señales al exterior, es importante leer la indicación impresa en la plaqueta. Por lo general se observa un signo +, un signo -, y la señal marcada como S, OUT, DOUT o DATA. Es recomendable mirar muy bien las indicaciones antes de conectar, en especial dónde se debe aplicar la alimentación: GND o tierra y VCC o 3,5 a 5V
Programando el DHT11 desde el IDE de Arduino
Mostrar Humedad y Temperatura en el Monitor SeriePara trabajar con el DHT11 en el Arduino, lo más práctico es instalar la biblioteca DHTlib, que ya viene con todas las funciones necesarias para obtener las lecturas de humedad y temperatura del sensor.
Es fácil de instalar, simplemente descargue el archivo DHTlib.zip en el enlace a continuación y abra el IDE de Arduino. Luego vaya a Sketch > Include Library > Add .ZIP Library y seleccione el archivo DHTlib.zip
Una vez que se ha instalado, cargue este programa de ejemplo en Arduino y abra el monitor serie:
#include <dht.h> dht DHT; #define DHT11_PIN 7 void setup(){ Serial.begin(9600); } void loop(){ int chk = DHT.read11(DHT11_PIN); Serial.print("Temperatura = "); Serial.println(DHT.temperature); Serial.print("Humedad = "); Serial.println(DHT.humidity); delay(5000); }
Si todo funciona correctamente, debería ver las lecturas de humedad y temperatura a intervalos de 5 segundos.
Si no desea utilizar el pin 7 para la señal de datos, puede cambiar el número de pin en la línea 5 donde dice #define DHT11_PIN 7.
Uso de los datos en otros programas
¿Qué sucede si no desea solo tomar las lecturas reales de Humedad y Temperatura, pero las necesita para calcular o controlar otras cosas? El siguiente código es el mínimo necesario para inicializar el sensor. Puede agregar esto a los programas existentes y usar DHT.humedad y DHT.temperatura como variables en cualquier función.
#include <dht.h> dht DHT; #define DHT11_PIN 7 void setup(){ // sin contenido } void loop(){ int lectura = DHT.read11(DHT11_PIN); // aquí líneas de código para utilizar los datos en la variable 'lectura' delay(1000); }
Referencia de distribución de pines: ESP8266, qué pines GPIO usar
ESP8266 (WiFi): Hacer que parpadee un LED desde el IDE de Arduino
Programar ESP8266 desde el IDE Arduino y con sus librerías
Servidor web básico NodeMCU con IDE de Arduino