Objetivos
Material requerido.
Kit inicio UNO | |
Kit Inicio Mega | |
Sensor DHT11 | |
Sensor DHT22 |
Sensores de temperatura y humedad
En la sesion Sensor de temperatura TMP36, vimos cómo medir la temperatura con un sensor TMP36. Es bastante sencillo y no presenta especiales problemas, mas allá de tener cuidado con las operación con números float.
Pero en muchas ocasiones, y especialmente en la industria alimentaria, no basta con medir la temperatura, sino que la humedad relativa es también un factor importante a tener en cuenta.
Por eso se desarrollaron los sensores de la familia DHT. Nos proporcionan de forma digital la temperatura y la humedad, con diferente precisión según el modelo.
Básicamente hay dos variantes DHT11 y DHT22
Las características del DHT11 son:
En cuanto al DHT22:
En cuanto a la forma de conectarlos y programarlos es la misma para ambos modelos y veremos que hay desarrolladas librerías para Arduino que soportan los dos de una forma sencilla.
Destacar que el chip incorpora electrónica para hacer internamente la conversión de temperatura y humedad y nos da un valor de medida de forma digital, es decir, que no necesitamos un pin analógico como en el caso del TMP36, sino que lo leeremos con un pin digital.
Diagramas del circuito
La conexión es trivial, pero cabe destacar que se vende en dos encapsulados, uno de tres pines que son GND, Data y Vcc, y otro 4 pines y uno de ellos, sencillamente sobra y no se conecta. Normalmente viene rotulado en el sensor el nombre de cada pin, y si no ya sabeis, a buscar el manual en Google
Vamos con el esquema por cortesía de Fritzing:
Y aquí tenemos el esquema de protoboard.
El Programa de lectura del DHT11
En primer lugar, tenemos que descargar una librería para manejarlos cómodamente, DX11.zip e importarla. Aquí teneís la librería [highlight variation=»orange»]DHT11.zip
Hacemos el importar la librería DHT11 que nos pondrá:
#include <DHT11.h>
Y definimos una instancia del sensor donde declaramos el pin al que esta conectado.
int pin=2; DHT11 dht11(pin);
Leerlo ahora es muy sencillo:
int error ; float temp, humi; error = dht11.read(humi, temp)
Basta con hacer dht11.read pasandole las variables donde queremos el resultado, y comprobamos que no haya errors (Siempre es buena idea comprobar que no hay error cuando hacemos una llamda). El programa completo seria más o menos algo así:
Prog_24_1
#include <DHT11.h> int pin=2; DHT11 dht11(pin); void setup() { Serial.begin(9600); } void loop() { int err; float temp, hum; if((err = dht11.read(hum, temp)) == 0) // Si devuelve 0 es que ha leido bien { Serial.print("Temperatura: "); Serial.print(temp); Serial.print(" Humedad: "); Serial.print(hum); Serial.println(); } else { Serial.println(); Serial.print("Error Num :"); Serial.print(err); Serial.println(); } delay(1000); //Recordad que solo lee una vez por segundo }
El resultado se envía a la consola y aquí podéis ver una muestra.
Para hacer variar os valores, de humedad y temperatura y comprobar que todo funciona correctamente, podeis, sencillamente, enviar vuestro aliento al sensor, y salvo que estéis en el trópico haréis subir tanto la temperatura como la humedad relativa.
Como veréis, son de lo mas sencillos de utilizar y un componente habitual de vuestro arsenal de sensores
Resumen de la sesión
En este curso arduino hemos aprendido lo siguiente: