En este proyecto vamos a utilizar un módulo sensor DHT11, que nos permite registrar la temperatura y la humedad relativa del aire con un sólo módulo un utilizando un solo pin del Arduino, aunque parece algo complicado este es otro de esos proyectos muy fáciles de implementar y de código muy sencillo.
Módulo sensor DHT11
El Sensor DHT11 es un sensor de temperatura y humedad, el cual es muy fácil de utilizar con el Arduino, en general con cualquier microcontrolador, ya que solo utiliza un pin de comunicaciones. Es un sensor un poco lento y no es muy preciso por lo que es ideal para aplicaciones que no necesiten mucha precisión.
Es muy útil para una gran variedad de aplicaciones, como por ejemplo climatización de ambientes, monitoreo de equipos electrónicos, invernaderos, etc.
Especificaciones:
- Voltaje de operación: 3.3 – 5V
- Consumo de corriente: 2.5mA
- Rango de medición de humedad: 20% a 90% RH
- Precisión de medición de humedad: 5%
- Resolución Humedad: 1% RH
- Histéresis de humedad: +-1% RH
- Rango de medición de temperatura: 0 -50°C
- Precisión de medición de temperatura: +-2.0°C
- Resolución temperatura: 0.1°C
- Tipo de salida: Digital
Componentes
Al utilizar el módulo HDT11 las conexiones son muy simples ya que el módulo ya posee una resistencia pull-up y sólo debemos preocuparnos por la tierra, los 5V y la salida del sensor. Hay que revisar bien los pines de los módulos, ya que el que usamos en el proyecto tiene los pines en una distribución diferente a la del KY-015.
Lo primero que vamos a conectar es un cable que va del pin GND del sensor al GND del Arduino, lo siguiente es un cable del pin DATA al pin digital 6 del Arduino y por último el pin VCC del sensor a los 5V del Arduino.
Dado el caso en que se utilice otro sensor diferente al de la imagen, tal como el sensor KY-015 de keyestudio, debemos tener muy claro los pines del sensor, aquí dejamos una tabla con solo pines de los dos modelos.
Pin módulo DHT11 | Pin modulo KY-015 | Pin Arduino |
---|---|---|
DATA | S | 6 |
GND | – | GND |
VCC | + | 5V |
Instalando la librería sensor DHT
Los sensores DHT11, DHT22 (AM2302), DHT21 (AM2301) poseen su protocolo propio de comunicaciones, el cual les permite enviar la información por un sólo pin, pero crear el código para ese comunicarse por este protocolo es mucho trabajo, afortunadamente Adafruit ha creado una librería para lograr esa comunicación y solo usaremos una cuantas líneas de código.
La instalación de la biblioteca, es bastante simple, lo primero es ir al menú Programa> Incluir Librería> Administrar bibliotecas, aquí hay que esperar un poco a que se actualice el indice librerías o bibliotecas instaladas.
Una vez termine de actualizar vamos al cuadro de búsqueda y digitamos «DHT sensor». Nos aparecerían varios resultados, pero seleccionamos las que se llama «DHT sensor library» de Adafruit y le damos instalar.
Código
#include <DHT.h> #define DHTTYPE DHT11 const int DHTPin = 6; DHT dht(DHTPin, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("Probando DHT11!"); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("No se pudo leer el sensor DHT!"); return; } Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C "); }
Explicación del código
Comenzaremos a revisar el código, primero vamos a ver las declaraciones de las variables.
#define DHTTYPE DHT11 const int DHTPin = 6; DHT dht(DHTPin, DHTTYPE);
Lo primero que observamos es la declaración de una constante con DHTTYPE a la que le asignamos el el valor DHT11, #define DHTTYPE DHT11, luego encontramos la declaración de otra constante entera DHTPin a la que asignaremos el valor de 5, el cual sera el pin del Arduino al que irá conectado el sensor. Por último tenemos creamos una instancia de un objeto del tipo DHT, al que llamamos dht y le asignamos el pin y el modelo del sensor.
Función setup()
Serial.begin(9600); Serial.println("Probando DHT11!"); dht.begin();
Como bien sabemos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, el el caso de este proyecto lo primero que vemos es la inicialización de la comunicación serial, la cual utilizaremos para poder ver los valores de nuestro sensor. La línea siguiente nos imprime en el monitor de serie la frase «Probando DHT11!». Por último encontramos la inicialización del objeto dht, con el cual iniciamos la comunicación con nuestro sensor.
Función loop()
delay(2000); //La lectura de la temperatura o la humedad tarda unos 250 milisegundos! float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("No se pudo leer el sensor DHT!"); return; } Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C ");
Iniciamos la función loop con una pausa de 2 segundos delay(2000)
, ya que es lo recomendado entre lectura y lectura, con esto nos aseguramos que haya pasado 2 segundo desde la última lectura. Luego declaramos una variable de punto flotante h float h = dht.readHumidity()
, la cual almacena la lectura de la humedad del sensor dht. De igual manera declaramos otra variable de punto flotante h float t = dht.readTemperature()
, a esta le asignaremos la lectura de de la temperatura del sensor dht.
Ahora encontramos la condicional if (isnan(h) || isnan(t))
, en la que se evalúa que si el valor de la variable h o el valor de la variable t no es un número entonces imprimirá en el monitor serial «No se pudo leer el sensor DHT!» Serial.println("No se pudo leer el sensor DHT!")
y luego vuelve a comenzar la función loop return
.
En la última parte del código del loop encontramos ya la impresión de los valores del sensor. Primero vemos que imprimirnos la palabra «Humedad: «, después imprimimos el valor de h, que es el valor de la humedad relativa (RH), seguido a esto imprimimos una tabulación.
Seguimos con la siguiente línea, la cual es la impresión de un texto «Temperatura: «, la línea que sigue es la impresión del valor de t, variable que contiene el valor en centígrados de la temperatura. Por último, imprimimos » *C» y un salto de línea.
Resumen
Entonces tenemos que para concluir vemos que al iniciar el Arduino comenzaremos a registrar el valor de la temperatura y la humedad relativa (RH) del ambiente donde se encuentra nuestro sensor, los cuales iremos visualizando a través del monitor serial.