En esta entrada te enseñamos como utilizar el sensor DHT11 con Arduino para todos aquellos proyectos en los que no basta conocer solamente la temperatura, sino que se requiere conocer la humedad relativa. Los sensores DHT11 y DHT22 son capaces de realizar mediciones simultaneas de humedad y temperatura, entregandonos su lectura de forma digital. Podemos encontrar aplicaciones para el DHT11 o el DHT22 en el control de invernaderos, monitoreo de centros de datos, climatización de casas y edificios, etc.

Materiales necesarios

Para esta experiencia requerimos los siguientes materiales:

Comunicación del DHT22 o DHT11 con Arduino

El DHT11 no utiliza una interfaz serial estándar como I2C, SPI o 1Wire (es similar a este ultimo). En cambio requiere su propio protocolo para comunicarse a través de un solo hilo. Afortunadamente el protocolo de comunicación del DHT11 es simple y puede implementarse tranquilamente usando los pines de I/O en un Arduino.

El arduino debe iniciar la comunicación con el DHT11 manteniendo la linea 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 linea de datos por otros 80 uS. En la figura de abajo, el pulso de inicio enviado por el microcontrolador esta coloreado en rojo, mientras que la respuesta desde el sensor esta coloreada 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 liberí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 DHT11 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 por DHT11 o DHT22.

En la siguiente ilustración observamos el inicio de una comunicación con el DHT11 o DHT22, 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 ultimo byte es la suma de comprobación (checksum), resultante de sumar todos los bytes anteriores

Diagrama de conexión del DHT11 con Arduino

El siguiente esquema ilustra como debe realizarse la conexión del sensor DHT11 o DHT22 con Arduino. Como podemos ver la conexión es bastante simple y se realiza de la misma forma para el DHT11 y DHT22. Solamente se requiere de un componente externo para la comunicación y es una simple resistencia de 10K o también podemos agregar un cerámico de 100nF cerca de los pines de alimentación del DHT11 para ayudar a reducir los ruidos que puedan filtrarse en la alimentación.

dht11 con arduino diagrama de conexión

Descarga de librería para el DHT11 con Arduino

El programa que encontramos a continuación requiere la instalación de la librería de Adafruit para sensores de la serie DHTXX. Podemos encontrarla en el repositorio GitHub de adafruit o podemos descargarla directamente:

Código de ejemplo DHT11 con Arduino

El siguiente sketch permite poner a funcionar el sensor DHT22 y DHT11 con Arduino.  Incluimos bastantes comentarios en el código de forma que se pueda entender fácilmente. Este programa

Resultado del Ejemplo DHT11

dht11 con arduino salida del programa de ejemplo