Ir al contenido

Sensor de temperatura y humedad DHT22 (AM2302) con un PLC

Valores del datasheet, patillaje, conexión a un PLC M-Duino y un sketch de Arduino
8 de junio de 2020 por
Sensor de temperatura y humedad DHT22 (AM2302) con un PLC
Andrei Postolache

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.

Sensor de temperatura y humedad DHT22 (AM2302) en su carcasa blanca con cuatro pines

Características del DHT22 según el datasheet

ParámetroValor
Tensión de alimentación3,3 a 6 V CC (5 V típico)
SalidaSeñal digital por un solo bus
Rango de temperatura-40 a 80 °C
Precisión de temperaturaMejor que ±0,5 °C
Rango de humedad0 a 100 %HR
Precisión de humedad±2 %HR (±5 %HR como máximo)
Resolución0,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 lecturas2 s o más
ArranqueEspera 1 s después de alimentarlo antes de la primera lectura

Fuente: datasheet del DHT22 (AM2302).

Patillaje del DHT22

PinNombreFunción
1VDDAlimentación, 3,3 a 6 V
2DATADatos serie, necesita una resistencia de pull-up a VDD
3NCSin conexión
4GNDMasa

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.

Patillaje de un sensor DHT de 4 pines: Vcc, Output con una resistencia de pull-up de 4,7 k a Vcc, NC y GND

Conexión del DHT22 a un PLC M-Duino

DHT22M-Duino 21+
Pin 1, VDDPin de 5 V del PLC
Pin 2, DATAPin 2 (pin directo), con una resistencia de 4,7 kΩ a 10 kΩ entre DATA y 5 V
Pin 3, NCSin conexión
Pin 4, GNDGND 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

  1. En el Arduino IDE, abre Sketch > Include Library > Manage Libraries e instala DHT sensor library de Adafruit. Acepta la dependencia Adafruit Unified Sensor.
  2. 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.

Serial Monitor del Arduino IDE a 9600 baudios con la humedad y la temperatura en Celsius y Fahrenheit leídas del DHT22 por un M-Duino 21+
Salida de la primera versión del sketch, que imprimía "%t" por error entre los dos 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.

Buscar en nuestro blog

Sensor de temperatura y humedad DHT22 (AM2302) con un PLC
Andrei Postolache 8 de junio de 2020
Compartir esta publicación

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs