El DHT22, que también se vende como AM2302, es un sensor digital de temperatura y humedad. Mide de -40 a 80 °C con una precisión mejor que ±0,5 °C, y de 0 a 100 %HR con ±2 %HR (±5 %HR como máximo), funciona de 3,3 a 6 V y envía los dos valores por un solo hilo de datos, con una lectura nueva cada 2 segundos. Para leerlo con un PLC industrial como el M-Duino 21+, aliméntalo desde el pin de 5 V del PLC, conecta DATA a un pin directo (Pin 2) con una resistencia de pull-up a 5 V y usa la librería DHT de Adafruit en el Arduino IDE.
Esta guía da los valores del datasheet, el patillaje, la conexión al PLC y un sketch que lee la humedad y la temperatura. La primera versión de este post daba un rango de hasta 125 °C, 2 muestras por segundo y una resolución de 8 bits: el datasheet indica de -40 a 80 °C, una lectura cada 2 segundos y una resolución de 0,1, y los valores de abajo están corregidos.

Características del DHT22 según el datasheet
| Parámetro | Valor |
|---|---|
| Tensión de alimentación | 3,3 a 6 V CC (5 V típico) |
| Salida | Señal digital por un solo bus |
| Rango de temperatura | -40 a 80 °C |
| Precisión de temperatura | Mejor que ±0,5 °C |
| Rango de humedad | 0 a 100 %HR |
| Precisión de humedad | ±2 %HR (±5 %HR como máximo) |
| Resolución | 0,1 °C y 0,1 %HR |
| Repetibilidad | ±0,2 °C y ±1 %HR |
| Histéresis de humedad | ±0,3 %HR |
| Estabilidad a largo plazo | ±0,5 %HR por año |
| Tiempo entre lecturas | 2 s o más |
| Arranque | Espera 1 s después de alimentarlo antes de la primera lectura |
Fuente: datasheet del DHT22 (AM2302).
Patillaje del DHT22
| Pin | Nombre | Función |
|---|---|---|
| 1 | VDD | Alimentación, 3,3 a 6 V |
| 2 | DATA | Datos serie, necesita una resistencia de pull-up a VDD |
| 3 | NC | Sin conexión |
| 4 | GND | Masa |
El dibujo muestra el encapsulado de 4 pines de la familia DHT, con los pines contados desde la izquierda mirando la rejilla. Las placas de 3 pines suelen llevar ya la resistencia de pull-up.

Conexión del DHT22 a un PLC M-Duino
| DHT22 | M-Duino 21+ |
|---|---|
| Pin 1, VDD | Pin de 5 V del PLC |
| Pin 2, DATA | Pin 2 (pin directo), con una resistencia de 4,7 kΩ a 10 kΩ entre DATA y 5 V |
| Pin 3, NC | Sin conexión |
| Pin 4, GND | GND del PLC |
- Alimenta el PLC con 12 a 24 V CC como siempre. El sensor toma sus 5 V del PLC, nunca de la alimentación de 24 V.
- Conecta DATA a un pin directo de 5 V del PLC, no a una entrada industrial como I0.0. Las entradas industriales son de 24 V y solo de entrada, y la línea de datos del DHT22 va en los dos sentidos a nivel lógico.
- En el M-Duino 21+, el pin 2 es el mismo pin del microcontrolador que la entrada de interrupción I0.5. Usa el conector directo Pin 2 y comprueba en la guía de usuario de tu modelo si el pin se tiene que habilitar con un interruptor. La guía de OneWire lista los pines directos de cada familia.
- Mantén el cable corto y lejos de los cables de potencia. El datasheet da hasta 20 m de transmisión, pero una línea larga de un solo hilo dentro de un armario capta ruido.
Instala la librería DHT para Arduino
- En el Arduino IDE, abre Sketch > Include Library > Manage Libraries e instala DHT sensor library de Adafruit. Acepta la dependencia Adafruit Unified Sensor.
- Instala las placas de Industrial Shields (consulta cómo instalarlas en el Arduino IDE) y selecciona Tools > Board > Industrial Shields AVR Boards > M-Duino family y el modelo M-Duino 21+.
La librería se encarga de los tiempos del protocolo de un hilo, así que el sketch solo pide los valores.
Sketch: leer la humedad y la temperatura
#include "DHT.h"
#define DHTPIN 2 // Pin 2 del M-Duino, donde va DATA
#define DHTTYPE DHT22 // DHT22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT22 test");
dht.begin();
}
void loop() {
delay(2000); // el DHT22 necesita 2 s entre lecturas
float h = dht.readHumidity();
float t = dht.readTemperature(); // grados Celsius
float f = dht.readTemperature(true); // grados Fahrenheit
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from the DHT22");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" % Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.println(" *F");
}
El sketch lee cada 2 segundos, que es el tiempo mínimo entre lecturas del DHT22. Si una lectura falla, la librería devuelve NaN y el sketch muestra un error en lugar de un valor erróneo. Esta versión compila para el M-Duino 21+ con DHT sensor library 1.4.7. Abre el Serial Monitor a 9600 baudios para ver los valores.

DHT22 para pruebas, un transmisor para la planta
El DHT22 es un buen sensor para prototipos, laboratorios y el interior de un armario: es pequeño, fácil de conectar y lo bastante preciso para condiciones de confort y de almacén. En una instalación de producción, un transmisor de humedad y temperatura con salida de 4-20 mA o Modbus RTU es más fácil de cablear a larga distancia, tolera mejor el ruido eléctrico y puede venir con certificado de calibración. El PLC lo lee en una entrada analógica o en el puerto RS-485, como en la guía de Modbus RTU.
Temperatura y humedad en proyectos reales. En el caso de estudio del centro de datos, varios PLC leen la temperatura y la humedad al pie de cada rack, encuentran los puntos calientes y lanzan alarmas, para que la climatización enfríe solo donde hace falta. En el simulador de cámara frigorífica, un Raspberry PLC 21 controla una cámara con termostato, desescarche, alarmas de puerta y registro de la cadena de frío.
Leer el caso del centro de datosAbrir el simulador de cámara frigorífica
Preguntas frecuentes sobre el DHT22
¿El DHT22 y el AM2302 son el mismo sensor?
Sí. El datasheet llama al sensor DHT22 y AM2302. Algunos vendedores usan AM2302 para la versión con cables y carcasa.
¿Cada cuánto puedo leer el DHT22?
Como mucho una vez cada 2 segundos. Las lecturas más rápidas devuelven el valor anterior o fallan.
¿Por qué obtengo NaN o "Failed to read"?
Revisa la resistencia de pull-up en DATA, la alimentación de 5 V y GND, que DHTPIN sea el pin que has conectado y que DHTTYPE sea DHT22 y no DHT11. Espera también 2 segundos entre lecturas y 1 segundo después de alimentarlo.
¿Puedo conectar el DHT22 a una entrada digital de 24 V del PLC?
No. El sensor funciona de 3,3 a 6 V y su línea de datos la tiene que leer y escribir el microcontrolador. Usa un pin directo de 5 V.
¿Cuál es el rango de temperatura del DHT22?
De -40 a 80 °C, con una precisión mejor que ±0,5 °C. Por encima de 80 °C usa otro sensor, por ejemplo una PT100 o un termopar con transmisor.
Más sensores con un PLC
- Sensor de temperatura Dallas DS18B20 con un Arduino PLC
- Leer la temperatura con un sensor PT100
- Sensor de corriente ACS712 con un Arduino PLC
- Sensores IoT: 25 tipos y cómo se conectan a un PLC
- Aplicaciones industriales: 50 ejemplos reales por sector
Consulta las entradas y salidas del M-Duino 21+ y el resto de la familia Arduino PLC.