Medir temperatura y humedad con Arduino y sensor DHT11-DHT22


arduino-dht11-dht22

¿Qué es un DHT11 / DHT22?

El DHT11 y el DHT22 son dos modelos de una misma familia de sensores, que permiten realizar la medición simultánea de temperatura y humedad.

Estos sensores disponen de un procesador interno que realiza el proceso de medición, proporcionando la medición mediante una señal digital, por lo que resulta muy sencillo obtener la medición desde un microprocesador como Arduino.

Ambos sensores presentan un encapsulado de plástico similar. Podemos distinguir ambos modelos por el color del mismo. El DHT11 presenta una carcasa azul, mientras que en el caso del sensor DHT22 el exterior es blanco.

De ambos modelos, el DHT11 es el hermano pequeño de la familia, y cuenta peores características técnicas. El DHT22 es el modelo superior pero, por contra, tiene un precio superior.

Anuncio:

Las características del DHT11 son realmente escasas, especialmente en rango de medición y precisión.

  • Medición de temperatura entre 0 a 50, con una precisión de 2ºC
  • Medición de humedad entre 20 a 80%, con precisión del 5%.
  • Frecuencia de muestreo de 1 muestras por segundo (1 Hz)

El DHT11 es un sensor muy limitado que podemos usar con fines de formación, pruebas, o en proyectos que realmente no requieran una medición precisa.

Por el contrario, el modelo DHT22 tiene unas características mucho más aceptables.

  • Medición de temperatura entre -40 a 125, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (2 Hz)

EL DHT22 (sin llegar a ser en absoluto un sensor de alta precisión) tiene unas características aceptables para que sea posible emplearlo en proyectos reales de monitorización o registro, que requieran una precisión media.

Los sensores de temperatura y, aún más, los sensores de humedad, son sensores con elevada inercia y tiempos de respuesta elevados. Es decir, al “lentos” para reflejar los cambios en la medición.

Precio

El DHT11, el modelo inferior en características, es realmente barato. Podemos encontrarlo en vendedores internacionales en Ebay y AliExpress por 0,70€.

Mientras, podemos encontrar el modelo superior DHT22 por 2,40€, considerablemente más caro que su hermano pequeño, pero aún relativamente barato.

arduino-dht11-dht22-componente

Esquema montaje

La conexión del DH11 y el DHT22 son idénticas, ya que como hemos comentado la única diferencia entres modelos son sus prestaciones. En ambos casos, disponemos de 4 patillas, de las cuales usaremos 3, Vcc, Output y GND.

arduino-dht11-dht22-patillaje

Conectar el sensor es sencillo, simplemente alimentamos desde Arduino al sensor a través de los pines GND y Vcc del mismo. Por otro lado, conectamos la salida Output a una entrada digital de Arduino. Necesitaremos poner una resistencia de 10K entre Vcc y el Pin Output.

El esquema eléctrico queda como la siguiente imagen

arduino-dht11-dht22-esquema

Mientras que el montaje en una breadboard sería el siguiente.

arduino-dht11-dht22-montaje

Ejemplos de código

Los sensores DHT11 y DHT22 usan su propio sistema de comunicación bidireccional mediante un único conductor, empleando señales temporizadas.

En cada envío de medición el sensor envía un total de 40bits, en 4ms. Estos 40 bits corresponden con 2 Bytes para la medición de humedad, 2 Bytes para la medición de temperatura, más un Byte final para la comprobación de errores (8bit integral RH data + 8bit decimal RH data + 8bit integral T data + 8bit decimal T data + 8bit check sum)

Para mayor información sobre el funcionamiento y detalles de la comunicación, consultar el datasheet de la serie DHTXX.

Podemos leer los datos del sensor directamente generando y leyendo las señales temporizadas según el protocolo del DHTXX. En general, lo normal es que empleemos una librería existente para simplificar el proceso.

Existen varias librerías disponibles. Por ejemplo, podemos usar la librería de Adafruit disponible en este enlace.

Descargamos e instalamos la librería y cargamos el código de ejemplo, o la siguiente versión simplificada

Cargamos el programa en Arduino, y empezaremos a recibir por el puerto serie los valores de temperatura y humedad.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Programar Arduino Mini Pro con conversor FTDI FT232R
Next Encuentra dónde está la carpeta del menú de inicio en Windows 10
1000
15 Comment threads
14 Thread replies
2 Followers
 
Most reacted comment
Hottest comment thread
14 Comment authors
newest oldest
Ardudroide

Me encanta el diseño de la página web y la claridad de la explicación. Muy ilustrativo!

Hiddenotebook Rules

Perfecto como siempre Muchas gracias!

luisllamas

Gracias a ti!

luisllamas

Teniendo en cuenta que son sensores muy baratos, no me fiaría de ninguno de los dos. Si tengo que fiarme, el DHT22 es sustancialmente mejor al DHT11 (que es poco más que un juguete) Por otro lado, la humedad siempre es una magnitud dificil de medir, sobre todo por la gran inercia que tiene la medición (responde muy lentamente a cambios). Cuando me dedicaba a hacer instalaciones en edificios, para medir la humedad de forma “fiable” tenías que dejar la máquina horas registrando para recoger una medición significativa (y hablo de equipos de mediciones de algunos miles de euros). Imagínate… Read more »

GAPaduan

Gracias!

luisllamas

¿Si el código está bien, la conexión está bien, y el sensor está bien? No 😀

ADRIAN

Gracias por el ejemplo. ¿Cómo sería el código si hay varios sensores DHT22 funcionando juntos? Me sería de gran ayuda

mauricio

podrias poner un ejemplo de al momento de detectar cierta temperatura active una señal

jose

Buenas mauricio, con permiso de Luis si le parece bien te contesto. Pero sería conveniente que fueses más explicito sobre qué te refieres con que se active una señal, entiendo que te refieres a que se active una de las salidas digitales de arduino para obtener los 5V. También he de comentarte que lo que pides, si es lo que te comento anteriormente, es algo muy simple y de tutorial básico. No te estoy echando la bronca ni mucho menos jejeje, a lo que voy es que te interesa antes de lanzarte a trabajar con arduino echar mano de algún… Read more »

jose

Tienes que añadir el siguiente código. Fíjate que te pongo entre qué lineas de código va, del código que pone Luis. Lo hago así porque no cabe todo el código. En la línea del mensaje anterior te recomiendo que, si no encuentras un buen manual, que sigas todos los tutoriales que puedas de Luis desde el más básico y uses la ayuda de la web de arduino (reference) y aprenderás mucho.

jose

Añade: const int DHTPin = 5; // what digital pin we’re connected to const char OUT = 2 //Asignamos a la variable OUT el valor 2 que es la salida que //activaremos. DHT dht(DHTPin, DHTTYPE); [———————-] Serial.println(“DHTxx test!”); pinMode(OUT, OUTPUT) //Ponemos el pin 2 de Arduino como salida. [———————-] return; } if(t>20 || t<25) //Si la temperatura es mayor de 20 *C o menor de… { //25 *C ponemos la salida(pin 2 de Arduino) a nivel alto (5V). digitalWrite(OUT,HIGH) } else {digitalWrite(OUT,LOW)} //Si no está dentro de ese intervalo la mantenemos a nivel bajo (0V) o la ponemos a nivel… Read more »

Miguel

Hola, tengo una duda ¿Cómo sabríamos la humedad y temperatura del lugar sin pantallita que lo muestre?
Un saludo!

Pablo

Hola tengo un problema dice que me falta una librería llamada: Adafruit_sensor.h. me podríais ayudar porfa

Carles

Hola Luis, tienes una web fantastica en que se puede aprender facilmente todo aquello que explicas de forma super-clara.
Me estoy iniciando en esto de arduino y me compre un coche al cual le quiero añadir un dht11 peo nomse como añadirselo y al compilarlo me da un error, sabes como se puede añadir el programa del sensor al ya existente? Gracias y felicidades por la web

Roberto Reyes

Gracias Luis, tu blog es muy claro sencillo e ilustrativo. Aprecio tu esfuerzo de Enseńar a los que no sabemos. Gracias.

Pablo

Hola Luis, me parece estupendo y sencillo tu ejemplo.
Tengo una consulta:
Uso ese codigo, esta funcionando de forma ininterrumpida.
El tema es que ‘se cuelga’, le he porgramado un watchdog al arduino y periodicamente se va riniciando.
Sin el watchdog la placa literalmente se ‘cuelga’.
He cambiado de placa y de fuente de alimentación en varios ocasiones con el mismo resultado,
¿Se te puede ocurrir el porque de este comportamiento ?

jose

Buenas luis tengo un dht pero con 3 pines. Siguiendo todos los pasos del tutorial solo me aparece por monitor serie “Failed to read from DHT sensor!”, además al compilar me indicaba que faltaba adafruit_sensor.h y la he tenido que añadir manualmente a la carpeta de la libreria de dht, se me ha solucionado ese error. Pero el de monitor serie sigue. He intentado imprimir en puerto serie el valor medido de ‘h’ y me pone ‘nan’, es decir no hay valor. Las conexiones están todas hechas siguiendo tus pasos. Encuentro que mi sensor es azul como el dht11 pero… Read more »

jose

Solucionado Luis. He cambiado un cable que he visto un poco raro y ya funciona. Gracias por tu ayuda. Un abrazo.

Eduardo

Hola, Se puede conectar a 3.3v en lugar de 5v ? porque deberia usar la salida de 5v para conectar un humificador y mantener una humedad mas menos uniforme.
Gracias

RUBEN

Hola!! Me encantan tus tutoriales, son de lo más entretenido! El caso es que me he montado en casa un sistema con equipos NodeMCU y sensores DHT22 para poder saber las temperaturas de todas las habitaciones. El caso es que cuando enciendo la luz del baño, por ejemplo, el sensor de ese baño de que “bloqueado” y el NodeMCU no vuelve a leer datos hasta que lo reinicio… Me estoy volviendo loco con esto… Las lámparas son de este estilo: **** link removed *** . Tienen una fuente de alimentación y me imagino que generará algún tipo de interferencia… Cómo… Read more »