Publicado el 1 comentario

Sensor DHT11 y DHT22: Medir temperatura y humedad usando Arduino IDE

¿Qué son los sensores DHT11 y DHT22?

Dichos sensores, el DHT11 y el DHT22 (o AM2302) son modelos de una familia de sensores de medición simultánea de temperatura y humedad.

Estos sensores disponen de un procesador interno que realiza el proceso de la medición, proporcionando la medición mediante una señal digital, por lo que es sencillo obtener la medición desde un microcontrolador como un Atmega 328P (El que trae una placa tipo Arduino Uno) o un ESP32, que por el mismo precio cuenta con mayores prestaciones.

Ambos sensores presentan una carcasa plástica similar. Se pueden diferencia ambos modelos por el color del mismo. El DHT11 presenta una carcasa azul, mientras que en el caso del sensor DHT22 el exterior es blanco.

DHT11 es el sensor más básico, y cuenta con características técnicas más básicas. Tiene mayor precisión y rango de temperatura (fundamental para medir la humedad ambiente por encima del 80%), pero a un costo económico mayor.

Las características del DHT11 son realmente escasas, especialmente en rango de medición y precisión.

  • Medición de temperatura entre 0 a 50, con una precisión de 2ºC
  • Medición de humedad entre 20 a 80%, con precisión del 5%.
  • Frecuencia de muestreo de 1 muestras por segundo (1 Hz)

El modelo DHT22 tiene unas características relativamente muy superiores (según aplicaciones en entornos comunes):

  • Medición de temperatura entre -40 a 125 ºC, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (2 Hz)

EL DHT22 (sin llegar a ser un sensor de alta precisión) tiene cualidades que suelen ser más útiles para emplearlo en proyectos reales de monitorización o registro, que requieran una precisión convencional.

/*
Ejemplo de sketchde prueba para varios sensores de humedad/temperatura DHT

REQUIERE las siguientes bibliotecas Arduino:

Biblioteca de sensores DHT: https://github.com/adafruit/DHT-sensor-library
Biblioteca Adafruit Unified Sensor: https://github.com/adafruit/Adafruit_Sensor
*/

#include "DHT.h"
#define DHTPIN 2     // Conectar el sensor a este pin


/*
Conectar una resistencia de 10K desde el pin 2 (datos) al pin 1 (alimentación) del sensor
Inicializa el sensor DHT.
enga en cuenta que las versiones anteriores de esta biblioteca tomaron un tercer parámetro opcional para
ajusta los tiempos para procesadores más rápidos. Este parámetro ya no es necesario
a medida que el algoritmo de lectura DHT actual se ajusta para funcionar en procesos más rápidos.

*/


DHT dht(DHTPIN, DHTTYPE);

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)


void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}