Sensores de temperatura DHT11, DHT22

Los sensores de temperatura DHT11, y DHT22 son sensores que nos permiten obtener la humedad relativa y la temperatura en un formato digital, esto significa que no es necesario calibrar el sensor para obtener datos confiables dentro de sus márgenes de confiabilidad.

La diferencia entre estos dos tipos de sensores son sus rangos de operación, pero en general su operación es diferente. Los detalles se mostrarán más adelante en la sección características.


Conexiones

La conexión del sensor con Arduino se realiza por medio de una interfase serial a través de un pin que se utiliza tanto para recepción como para la transmisión de datos, esto significa que adicionalmente se requiere utilizar la interfase serial del Arduino.

A continuación se muestra la conexión de un dispositivo Arduino Leonardo con el sensor:


Programación

Arduino tiene una interfaz muy útil que permite comunicarnos y realizar operaciones útiles con la información recibida del sensor y otras fuentes.

El Driver del sensor es una clase de objeto DHT para hacerlo es necesario crear una instancia, para crearlo es necesario indicar el pin al que estará conectado el sensor y por otro lado el tipo, el cual puede ser DHT11 o DHT22 como se muestra a continuación donde se crea una instancia de tipo DHT conectada al pin 4 y de tipo DHT22

const int DHTPIN = 4;    
const int DHTTYPE = DHT22 ;  // o DHT11 o DHT21

DHT sensor(DHTPIN, DHTTYPE);

Una vez creado el objeto es necesario inicializar el sensor, esto se hace en la parte setup del programa Arduino, debido a que el DHT es un sensor digital que se comunica con una interfase serial, se requiere inicializar la comunicación sérielos como se muestra a continuación.

void setup() {
  Serial.begin(9600);
  Serial.println(F("¡Iniciando!"));
  sensor.begin();
}

Esto inicializa la comunicación con el sensor a una velocidad de 9600 bus, e inicializa el sensor con el tiempo de reinicio por defecto

El resto de las operaciones se usa dentro de la parte repetitiva del programa Arduino, esto se ubica en la función loop, entre las funciones que se ocupan son «readHumidity», «readTemperature», «computeHeatIndex»

El siguiente ejemplo lee la humedad, temperatura en grados Celsius y Fahrenheit, si no hay errores en la lectura calcula el índice de calor en unidades Celsius y Fahrenheit.

Adicionalmente tiene dos funciones de conveniencia para convertir de grados Celsius a Fahrenheit «convertCtoF» y viceversa «convertFtoC», y una función para leer «read» que adquiere los datos necesarios del sensor.


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"));
}

Características

TipoDHT11DHT22
Rango de temperatura (°C)0-50 +-2-40-125 +- 0.5
Rango de humedad (%)20-80 +-50-100 +- 2.5
Tasa de muestreo (Hz)10.5
Tamaño del elemento (mm)15.5X12X5.515.1X25X7.7
Voltaje de operación (V)3-53-5
Máxima corriente durante la operación (mA)2.52.5
Características sensores DHT11 y DHT22

Métodos públicos de la clase DHT

class DHT {
public:
    /*
     El constructor requiere tres parámetros obtenidos del diseño del circuito,
     uno es el pin donde el sensor está conectado, el tipo de sensor, y un parametro cuenta ahora ignorado
     */
  DHT(uint8_t pin, uint8_t type, uint8_t count = 6);
    /*
     El parametro usec representa el tiempo en microsegundos antes de tomar la primera muestra, el valor por defecto es de 55 microsegundos

     */
  void begin(uint8_t usec = 55);
    /*
     Lee la temperatura en la escala seleccionada S: true Fahrenheit, false Celsius
     force true si en modo force
     */
  float readTemperature(bool S = false, bool force = false);
    /*
     Convierte un valor en grados Celsius a Fahrenheit
     */
  float convertCtoF(float);
    /*
     Convierte un valor de grados Fahrenheit a grados Celsius
     */
  float convertFtoC(float);
    /*
     Calcula el indice de calor que es la temperatura aproximada sentida por
     una persona dadas la temperatura y humedad relativa en el lugar
     isFahrenheit es true si la escala solicitada es grados Fahrenheit
     de otra manera es en grados Celsius
     */
  float computeHeatIndex(bool isFahrenheit = true);
    /*
     Calcula el indice de calor que es la temperatura aproximada sentida por
     una persona dadas la temperatura y humedad relativa pasados como argumento
     isFahrenheit es true si la escala solicitada es grados Fahrenheit
     de otra manera es en grados Celsius
     */
  float computeHeatIndex(float temperature, float percentHumidity,
                         bool isFahrenheit = true);
    /*
     Lee la humedad relativa en el lugar
     */
  float readHumidity(bool force = false);
    /*
     Lee datos del sensor fuerza la lectura si force es true de otra manera regresa el ultimo valor retenido.
     */
  bool read(bool force = false);
}

Deja un comentario

Acerca DE

Soy una persona apasionada por la ciencia y la informática, con estudios en ciencias de la información y física. Actualmente, estoy embarcado en una maestría en física médica. Mi vida está marcada por diversos intereses, desde la cocina hasta la astronomía. Disfruto explorando mi creatividad a través del dibujo, la pintura y la música, y también me sumerjo en la escritura, encontrando un equilibrio entre la ciencia y las artes.

Descubre más desde Ballena Azul Research

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo