Sensor de Temperatura y Humedad Relativa DHT11 con Arduino

En este artículo aprenderás a utilizar un sensor de temperatura y humedad relativa ambiental DHT11 con tu placa Arduino. Con este sensor podrás crear un sistema bastante bueno para monitorear el ambiente en una casa, oficina, en un invernadero, una incubadora, crear una estación meteorológica, entre muchas otras, el límite es tu imaginación.

Materiales necesarios

Para implementar los ejemplos que verás a continuación, necesitarás el siguiente material:

  • Placa Arduino Uno
  • Sensor DHT11
  • 1 Resistencia de 4.7 KΩ y 1 de 100 Ω
  • 1 Potenciómetro de 1 KΩ
  • LCD 16×2

Sensor de temperatura y humedad relativa DHT11

En un anterior artículo aprendiste a utilizar un sensor de temperatura, si bien este sensor puede medir la temperatura ambiental con una exactitud buena, hay ocasiones en que necesitaremos medir también la humedad relativa (HR) del ambiente. Para ciertas aplicaciones es de mucha importancia medir la HR, ya que el control de ella evitará muchos problemas; por ejemplo, en la industria de alimentos, si la HR es muy alta, se pueden generar hongos y bacterias en los frutos causando que se generen enfermedades y contaminación del resto de productos, al final, esto sería una pérdida. Ciertos ambientes como incubadoras, necesitan un monitoreo constante de la HR para que la calidad del aire sea óptima, entre muchos otros ejemplos.

Una buena manera de mantener un monitoreo, y finalmente un control de la temperatura y HR, es utilizando el sensor digital DHT11, el cual es un sensor bastante económico y sumamente fácil de utilizar —como siempre digo, no?—. El sensor DHT11 lo puedes conseguir desde los $30 pesos (1.3 USD), y lo puedes encontrar en dos presentaciones: el sensor suelto y el sensor montado en un módulo.

Sensor de humedad y temperatura DHT11 suelto y en módulo
Sensor de humedad y temperatura DHT11 suelto y en módulo

La diferencia entre ambos es que el módulo contiene una resistencia pull-up (algunas veces incluye un capacitor como filtro, que no suele ser necesario), si tenemos el sensor suelto (4 pines) tendremos que añadirle la resistencia pull-up, que veremos más adelante. Existe también una versión mejorada de este sensor, el DHT22, que es un poco más costoso pero que brinda mayor exactitud. Si quieres conocer las características de ambos, para que tomes una decisión antes de comprarlo, mira la siguiente tabla:

ParámetroDHT11DHT22
Alimentación3.3 ~ 5.5 VDC3.3 ~ 6 VDC
Consumo de corrienteMedición: 0.3 mA
En espera: 60 µA
Medición: 1 mA
En espera: 40 µA
Tiempo de conversión2 s2 s
Rango de temperaturade 0 a 50 °Cde -40 a 80 °C
Precisión de temperatura± 2 ºC<± 0.5 ºC
Resolución de temperatura1 ºC0.1 ºC
Rango de humedad relativade 20 a 90%de 0 a 100%
Precisión de humedad relativa± 5%± 2%
Resolución de humedad relativa1%0.1%

Recuerda que dependerá de las características de tu proyecto para decidir cuál te conviene, también recuerda siempre consultar la hoja de datos del fabricante (datasheet)

El modo de funcionamiento no lo aboradaremos en este artículo, ya que utilizaremos una librería —como siempre—, para utilizarlo y no complicarnos la existencia.

Pines de conexión del sensor DHT11

Para utilizar el sensor necesitamos de 3 pines con la siguiente configuración:

Pines de conexión del sensor DHT11
Pines de conexión del sensor DHT11

Si utilizas el sensor suelto, tendrás que agregar una resistencia pull-up DATA y VCC. Algunos fabricantes recomiendan que la resistencia pull-up se seleccione dependiendo de la distancia que exista entre el sensor y el Arduino (o cualquier otro sistema). Cuando el cable de conexión sea de 20 metros o menor, se deberá utilizar una resistencia de 4.7 KΩ; cuando la conexión es mayor, se deberá utilizar una resistencia distinta y apropiada a la distancia. Para este último caso, yo te recomiendo realizar pruebas de conexión modificando el valor de la resistencia hasta obtener la medición correcta; además, para estos casos te recomiendo también agregar un capacitor de 100 nF entre las terminales VCC y GND, para que actúe como filtro.

Como observaste en la imagen anterior, solamente necesitamos de 1 pin para comunicarnos con el sensor, por lo que la comunicación es de tipo serie en un solo bus (una línea), por la que se enviarán y recibirán los datos, para lo que utilizaremos la librería DHT.h.

Librería DHT.h con Arduino

Antes de armar nuestro circuito, vamos a preparar las librerías. Para utilizar este sensor vamos a instalar la librería llamada DHT.h desarrollada por Adafruit. El proceso ya lo conoces, en nuestro IDE Arduino, entramos a la pestaña de Herramientas→Administrar Bibliotecas… Buscamos la librería DHT.h

Librería DHT.h
Librería DHT.h

Te recomiendo también que instales la librería llamada Adafruit Unified Sensor de Adafruit, ya que si utilizas la instalada anteriormente, necesitarás esta como complemento.

Librería de Adafruit
Librería de Adafruit

Ahora ya tenemos todo listo para utilizar el sensor DHT11 o el DHT22, el que tengas a la mano. Las funciones que podemos utilizar con esta librería son las siguientes:

  • readHumidity() – Esta función es utilizada para indicarle al sensor que nos entregue el resultado de la medición de humedad relativa.
  • readTemperature() – Utilizada para indicarle al sensor que nos entregue el resultado de la medición de temperatura, nos devolverá la temperatura equivalente en °C.
  • readTemperature(true) – Utilizada para indicarle al sensor que nos entregue el resultado de la medición de temperatura, esta vez, nos devolverá la temperatura equivalente en °F.
  • computeHeatIndex(temperatura, humedad) – Con esta función, podremos obtener lo que se conoce como sensación térmica, la cual depende de la temperatura y la humedad relativa. En el parámetro temperatura, le enviaremos la temperatura en grados Fahrenheit, y en el parámetro humedad le enviaremos la HR (los veremos en un ejemplo más adelante). Esta función devolverá la sensación térmica equivalente en °F.
  • computeHeatIndex(temperatura, humedad, false) – Con esta función, podremos obtener la sensación térmica equivalente en °C, por lo que en el parámetro temperatura se le enviará la temperatura en °C y en humead la HR.

Todas estas funciones, nos devolverán un número en formato float por lo que es necesario que siempre la asignemos a este tipo de variable.

La librería también cuenta con otra función para verificar si la lectura se realizó de manera correcta, esta se llama isnan(parámetro), donde en parámetro le enviaremos la HR, la temperatura en °C o la temperatura en °F (lo veremos más adelante en el ejemplo).

Medir la temperatura y humedad relativa con el sensor DHT11 y Arduino

Ahora vamos a conectar todo siguiendo el diagrama:

Diagrama de conexiones para el sensor DHT11
Diagrama de conexiones para el sensor DHT11

Recuerda conectar la resistencia pull-up de 4.7 KΩ, si no tienes a la mano, puedes utilizar una de 10 KΩ.

Para verificar el correcto funcionamiento del sensor, cargaremos el siguiente código:

Si todo sale bien, deberás de ver algo como esto en el monitor serie:

Monitor serie
Monitor serie

Como se que te gusta saber a detalle como funciona el código, vamos a analizarlo parte por parte.

En la parte de las declarativas al pre-procesador, incluimos la librería DHT.h y definimos dos constantes, una para indicarle cuál será el pin de datos del sensor que llamaremos DHTPIN y, para nuestro ejemplo, utilizaremos el pin digital 2. Declaramos la constante DHTTYPE para indicarle que tipo de DHT utilizaremos, si tenemos el DHT11 o el DHT22.

Posteriormente declaramos las variables donde almacenaremos el resultado de humedad relativa, de temperatura en grados celsius, de temperatura en grados Fahrenheit, la sensación térmica en grados celsius y la sensación térmica en grados Fahrenheit, respectivamente:

Ahora creamos el objeto para controlar el sensor, recuerda que cuando creamos un objeto, en programación, este adquiere todas las funciones que tiene predefinidas la librería a la cual se hace referencia. En este caso, el objeto se llamará sensorDHT el cual adquiere las funciones de la librería DHT, para inicializar este objeto, tenemos que enviarle dos parámetros, cuál será el pin de datos y que tipo de sensor utilizaremos; por lo que le enviamos las constantes previamente declaradas DHTPIN y DHTTYPE.

En la función void, configuraremos el puerto Serie para visualizar los resultados Serial.begin(9600); escribimos un mensaje de bienvenida en el puerto Serie Serial.println("Sensor DHT11, programa de prueba"); y por último, inicializamos el sensor sensorDHT.begin();

En la función loop, tendremos toda la interacción con el sensor. Lo primero que agregamos es un retardo de dos segundos, y esto es necesario para asegurar que el sensor tenga el tiempo suficiente para realizar la conversión —aunque si te soy sincero, nunca me ha fallado aunque le baje mucho el tiempo de espera—. Ahora le indicaremos al sensor que nos entregue las conversiones de HR, de temperatura en °C y °F.

Para indicarle al sensor que el resultado lo queremos en °F, en la función readTemperature() le enviamos el parámetro true. La siguiente parte del código es para verificar si la lectura de los datos se realizó de manera correcta, ya que si por cualquier cosa la lectura fué incorrecta, no se guardará un número en la variable de tipo float. Aquí lo que utilizamos es una comparación if para verificarlo. Verificamos si el contenido de la variable humedad o temperaturaC o temperaturaF no es un número, mediante la función isnan(variable) , el nombre de la función nos lo indica (isnan → is not a number). Observa que para indicarle al if que realice las comparaciones o, utilizamos || que representa el operador lógico OR. Si alguna de estas variables dió verdadera (no número), entonces se entrará al bloque de las siguientes líneas:

Aquí, lo que hacemos es imprimir un mensaje en el puerto Serie, y posteriormente, mediante la palabra reservada return; le indicamos al programa que ya no continúe ejecutando la función loop, y salga. Para este caso, lo que pasaría es que el programa termina, y como la función loop siempre está ejecutándose en los Arduino, entonces volvería a ejecutarse desde el principio, y el resto de líneas del código ya no se ejecutarían, hasta que se repitan las líneas anteriores. Si hay un error en la lectura, observarías algo como esto:

Monitor serie con mensaje de error
Monitor serie con mensaje de error

Si quieres aprender más de estos bloques condicionales, te invito a descargar de manera gratuita la Guía de Inicio Arduino, donde te lo explico más detalladamente

¿Te está gustando este artículo?

Te invito a descargar totalmente gratis la Guía de Inicio en Arduino

Encontrarás mucha información extra, conceptos y sobre todo podrás llevarla contigo en todo momento

Ahora guardamos el resultado del cálculo de la sensación térmica tanto en °C como en °F mediante las siguientes líneas:

Para el resultado en °C, le agregamos el parámetro false a la función computeHeatIndex(temperatura,humedad,X).

Por último, pero no menos importante, mandamos a imprimir en el puerto Serie los resultados de todo lo anterior, escribiendo un mensaje, luego el contenido de la variable, etcétera. Observa bien que en algunas ocasiones utilizo println y en otras print, esto para agregar un enter o no.

Sensor DHT22 con Arduino

Si todo marcha bien, verás que la precisión de los resultados no es del todo tan buena, pero si tienes a la mano un sensor DHT22, el código será exactamente el mismo, solo cambiaremos el DHTTYPE por DHT22.

En mi caso, yo cuento con un DHT22 en módulo, por lo que no le agregaré la resistencia pull-up. Utilizaré el mismo código cambiando el DHTTYPE como te mencioné anteriormente, y este es el resultado:

Monitor serie con DHT22
Monitor serie con DHT22

(Ambos ejemplos fueron implementados en distinto tiempo, por lo que las temperaturas entre ambos es distinta)

Sensor de Temperatura y Humedad Relativa con LCD en Arduino

Ahora para tener un proyecto más completo, agregaremos un LCD, justo como lo vimos en este artículo.

Conectaremos el siguiente diagrama:

Diagrama de conexiones para el sensor DHT11 de humedad relatica y temperatura con LCD
Diagrama de conexiones con LCD

Cargaremos el siguiente código. Observa que hemos movido el PIN de datos del sensor.

Se tomó todo el código del ejemplo anterior, modificando el PIN de datos del sensor y cambiamos al sensor DHT22. También creamos un caracter personalizado para representar el símbolo de grados (°). Si quieres aprender a insertar símbolos personalizados visita este artículo.

Si todo quedó bien, podrás ver el siguiente resultado:

Sensor de temperatura y humedad DHT11 con LCD
Sensor de temperatura y humedad DHT11 con LCD

¿Qué te ha parecido este tutorial? ¡Déjame tus comentarios, tus ideas de proyectos o cualquier duda que te surja, me encantará leerte!!

Recuerda visitar nuestras redes sociales

Deja un comentario