DHT11 y DHT22. Sensores de temperatura y humedad
Los DHT11 y DHT22 son sensores digitales que entregan medidas de temperatura y humedad ambientales simultáneamente. Aunque se usan de la misma forma, el DHT11 es el más básico y tiene menor precisión. Internamente tienen un sensor capacitivo de humedad y un termistor para medir la temperatura. Además, incluyen un procesador interno que convierte las señales analógicas de los sensores en señales digitales listas para su uso.
Las características de ambos sensores son las siguientes:
Características generales
DHT11 | DHT22 | |
Alimentación | 3 – 5 VDC | 3 – 5 VDC |
Consumo | 2,5 mA | 2,5 mA |
Humedad | 20 – 80% (5% precisión) | 0 – 100% (2 – 5% precisión) |
Temperatura | 0 – 50 ºC (2 ºC precisión) | -40 – 125 ºC (0,5 ºC precisión) |
Muestreo | 1 Hz (una medición por segundo) | 2 Hz (dos mediciones por segundo) |
Como vemos, el DHT22 es más preciso y tiene rangos de medición mayores, tanto en temperatura como en humedad.
Conexión
Las conexiones de ambos sensores son idénticas. Los dos tienen sendos pines de alimentación VCC y GND más un pin de datos DATA. Si usamos los sensores como componente, es necesario añadir una resistencia de 10K entre los pines VCC y DATA. Si usamos los módulos de los sensores (como en las imágenes anteriores), esta resistencia ya viene incluida en el módulo y no necesitamos ponerla.
Arduino | Sensor |
5V | VCC |
GND | GND |
D2 | DATA |
Código Arduino
La comunicación entre los sensores y Arduino se hace mediante una única línea que usa un protocolo de comunicación propio. En cada medición se envía un paquete de 40 bits que podemos interpretar fácilmente con la librería adecuada, por ejemplo podemos usar la librería DHT proporcionada por Adafruit.
#include "DHT.h"
// Descomente la línea del sensor que desea usar.
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
const int DHTPin = 2; // Pin DATA al que hemos conectado el sensor
DHT dht(DHTPin, DHTTYPE);
void setup() {
dht.begin();
}
void loop() {
// Es necesario esperar algunos segundos entre mediciones
delay(2000);
// Tomamos las lecturas humedad y temperatura
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
return;
}
// Ahora tenemos la humedad en la variable h
// y la temperatura en la variable t
}
Comentarios recientes