Descripción
El sensor DHT11 es un componente electrónico que permite medir humedad relativa y temperatura ambiente. Su funcionamiento está basado internamente en un termistor para medir temperatura y un material cuya capacitancia cambia dependiendo de la humedad en el ambiente (sensor capacitivo).
El sensor integra un convertidor analógico a digital (ADC) en su interior, por lo que aquellos microcontroladores y microprocesadores que no dispongan de un ADC podrán tomar mediciones con este sensor sin requerir hardware adicional. La entrega de la medición a otros circuitos se realiza mediante una interfaz serial digital de un hilo similar a 1-wire.
Existen librerías en el ecosistema de Arduino que permiten una fácil integración de este sensor en cualquier proyecto, por lo cual se ha vuelto un componente muy popular. Si se desean mejores características en cuanto a precisión, rango y velocidad, el sensor DHT22 es recomendable como sustituto de este componente.
En esta página puedes adquirir el sensor DHT11 suelto para integrar en tus circuitos impresos y proyectos o el módulo KY-015 que facilita la conexión del sensor con cables tipo dupont o el protoboard e incluye la resistencia pull-up necesaria para la comunicación, también puedes adquirir el sensor montado en un módulo compatible con el sistema Grove de Seeed Studio.
Características y especificaciones
- Marca: ASAIR (AOSONG)
- Tipo de sensor: temperatura, humedad relativa
- Principio de funcionamiento: termistor, sensor de humedad capacitivo
- Voltaje de alimentación: 3.5 a 5.5 VDC
- Corriente típica en operación: 300 uA
- Corriente típica en reposo: 60 uA
- Especificaciones de sensor de humedad:
- Rango: 20 a 90 % RH
- Resolución: 16 bits
- Precisión: ± 5% RH (a 25 °C)
- Especificaciones de sensor de temperatura:
- Rango: 0 a 50 °C
- Resolución: 16 bits
- Precisión: ± 2 °C
- Frecuencia de muestreo: 1 vez cada dos segundos (0.5 Hz)
- Conector: 4 pines con espaciado de 0.1 pulgadas
- Interfaz: 4 conexiones
- VDD
- DATA
- NC
- GND
- Peso: 2.7 gramos
- Dimensiones
- Largo: 15.5 mm
- Ancho: 12 mm
- Alto: 5.5 mm
Protocolo de comunicación de sensor DHT11
En este apartado explicaremos cómo funciona el protocolo de transmisión de datos de los sensores DHT11 para poder implementarlo en software. Esta información facilita el desarrollo de la comunicación con el sensor si no estamos utilizando una librería.
Inicio de la transferencia de datos
El microcontrolador debe iniciar la comunicación con el sensor manteniendo la línea de datos en estado bajo durante al menos 18 ms. Luego el DHT11 envía una respuesta con un pulso a nivel bajo (para indicar su presencia) de 80 uS y luego deja “flotar” la línea de datos por otros 80 uS.
En el diagrama a continuación se observa la secuencia de inicio de la comunicación. El pulso de inicio enviado por el microcontrolador esta marcado en rojo, mientras que la respuesta desde el sensor esta marcada en azul. 
Codificación de bits
La codificación de datos esta basada en un esquema de ancho de pulso (se toma en cuenta el ancho del estado alto): Un pulso ancho representa un 1 lógico, un pulso corto representa un 0 lógico.
Todos los bits comienzan con un pulso bajo de 50 uS. Las librerías de comunicación con el DHT11 aprovechan este pulso para la sincronización. Luego viene un pulso alto que varía según el estado lógico o el valor del bit que el se desea transmitir:
- Se utilizan pulsos de 26-28 microsegundos para un “0”
- Se utilizan pulsos de 70 microsegundos para un “1”
Significado de los bits transmitidos
En la siguiente ilustración observamos el inicio de una comunicación, resumiendo lo que hemos hablado con anterioridad:
Una transmisión completa comienza como ya describimos y se compone de 40 bits (5 bytes) que incluyen todos los datos que el sensor puede proporcionar. En cuanto a los datos que se transmiten, su interpretación es como sigue:
- El primer byte que recibimos es la parte entera de la humedad relativa (RH).
- El segundo byte es la parte decimal de la humedad relativa (no se utiliza en el DHT11, siempre es 0).
- El tercer byte es la parte entera de la temperatura.
- El cuarto byte es la parte decimal de la temperatura (no se utiliza en el DHT11, siempre es 0).
- El último byte es la suma de comprobación (checksum), resultante de sumar todos los bytes anteriores.
Pinout DHT11 o KY-015
La distribución de los pines en el sensor se muestra en la siguiente imagen:

Existen distintas variantes de módulos KY-015 en el mercado (sensores montados en PCB). Recomendamos que revises las indicaciones en cada modelo de PCB para evitar daños al sensor. Normalmente si el sensor viene montado en un PCB, ya no será necesario agregar una resistencia pull-up externa.
Esquema de conexión

Código de ejemplo con Arduino
El siguiente ejemplo muestra las lecturas de humedad y temperatura en el monitor serial de Arduino. Para su funcionamiento se requiere tener la librería DHT sensor de Adafruit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | /** Geek Factory - "Dale vuelo a tus proyectos" www.geekfactory.mx PROGRAMA DE PRUEBA PARA SENSOR DE HUMEDAD Y TEMPERATURA DHT11 CONSULTA EL ARCHIVO LICENCIA.TXT PARA CONOCER MÁS SOBRE LOS DERECHOS DE DISTRIBUCIÓN DE ESTE MATERIAL O LA SIGUIENTE URL: HTTPS://WWW.GEEKFACTORY.MX/LICENCIA-CONTENIDO. PUBLICADO BAJO LICENCIA ATTRIBUTION-NONCOMMERCIAL-SHAREALIKE 4.0 INTERNATIONAL (CC BY-NC-SA 4.0). GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. Resumen: Realiza la medición de temperatura y humedad con un sensor DHT11. El resultado se muestra en el monitor serial. Se utiliza la librería DHT de Adafruit, que deberá estar instalalda en nuestro IDE para que pueda compilar de forma satisfactoria. */ #include <DHT.h> // constructor del objeto dhtsensor recibe el pin en el que se conecta el sensor // y también una constante que define el tipo de sensor que conectaremos // en nuestro caso el sensor estará conectado al pin 12 y será un DHT11 DHT dhtsensor(12, DHT11); /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // preparar la comunicación serial Serial.begin(9600); // preparar la librería para comunicarse con el sensor dhtsensor.begin(); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // esperar entre mediciones, es necesario para el buen funcionamiento del sensor delay(2000); // leer la humedad utilizando la función readHumidity() y la temperatura // con readTemperature(), almacenamos los resultados en variables (h y t) float h = dhtsensor.readHumidity(); float t = dhtsensor.readTemperature(); // revisar que tengamos valores numéricos válidos // si la comunicación falla, no será así y podemos detectar un error if (isnan(h) || isnan(t)) { Serial.println(F("Falla al leer el sensor DHT11!")); // volver al inicio del loop() return; } // imprimir la humedad y temperatura medida al monitor serial Serial.print(F("Humedad: ")); Serial.print(h); Serial.print(F(" % ")); Serial.print(F("Temperatura: ")); Serial.print(t); Serial.println(" *C"); } |
Documentación
Información relacionada con este producto
- Archivos EAGLE módulo DHT11 grove
- Proyecto de estación meteorológica usando el sensor DHT11
- Tutorial para uso de sensor DHT11 con microcontroladores PIC
- Tutorial externo para el sensor de humedad y temperatura con Arduino
- Tutorial DHT11 en Adafruit (en inglés)
- Repositorio de la librería de Adafruit DHT Sensor
- Sitio web de fabricante










