Código de búsqueda

Código de Arduino y vídeo para el sensor de temperatura y humedad DHT22

Código de Arduino y vídeo para el sensor de temperatura y humedad DHT22

En este tutorial aprenderemos cómo usar el sensor de temperatura y humedad DHT22 con un Arduino. El DHT22, también conocido como AM2302, es capaz de medir temperaturas desde -40 hasta 80 grados Celsius y humedad desde 0 hasta 99 por ciento. Siguiendo esta guía, podrás mostrar la temperatura en Celsius, Fahrenheit o Kelvin, así como el nivel de humedad.

DHT22 sensor with PCB-1

Utilizaremos la biblioteca del sensor DHT para leer fácilmente los datos del sensor. Esta biblioteca simplifica el proceso de comunicación con el DHT22 y nos permite acceder a los valores de temperatura y humedad con solo unas pocas líneas de código. Para una explicación más detallada, te recomiendo ver el video asociado (en el video a las 00:00).

Hardware explicado

El componente principal de este proyecto es el módulo del sensor DHT22, que es un sensor digital de temperatura y humedad. Utiliza un elemento capacitivo de detección de humedad y un termistor para medir el aire circundante. La salida es una señal digital que puede ser leída por un Arduino.

El DHT22 funciona en un rango de voltaje de 3.3 a 5 voltios y se comunica a través de una interfaz de un solo cable, lo que facilita su integración en tus proyectos. También cuenta con una larga distancia de transmisión de hasta 20 metros, lo que permite flexibilidad en la colocación del sensor.

Detalles de la hoja de datos

FabricanteAosong
Número de piezaDHT22 (AM2302)
Voltaje lógico/E/S3.3 - 5 V
Tensión de alimentación3.3 - 5 V
Rango de medición (temperatura)-40 a +80 °C
Rango de medición (humedad)0 a 99 %
Precisión (Temperatura)±0.5 °C
Precisión (Humedad)±2 % a 25 °C
Resolución0.1 °C / 0.1 %
Distancia de transmisiónhasta 20 m
Paquetemódulo de 4 pines

  • Asegúrese de una alimentación adecuada entre 3.3 V y 5 V.
  • Use una resistencia pull-up de 10K entre el pin de datos y la alimentación.
  • Mantenga los cables del sensor cortos para lecturas precisas.
  • Evite sondear con demasiada frecuencia; permita retrasos entre lecturas.
  • Tenga cuidado con los factores ambientales que afectan las lecturas.

Instrucciones de cableado

Arduino wiring for DHT22 sensor
Arduino wiring for DHT22 sensor

Para cablear el sensor DHT22, comience conectando el pin de alimentación (pin 1) del sensor a la salida de 5V del Arduino. A continuación, conecte el pin de tierra (pin 4) a uno de los pines GND del Arduino. El pin de datos (pin 2) debe conectarse al pin digital 2 del Arduino para la comunicación. Además, coloque una resistencia de 10 kΩ entre el pin de datos y el pin de alimentación para asegurar lecturas estables.

En caso de que estés usando un pin diferente para los datos, recuerda actualizar el código en consecuencia cambiando el#define DHTPINvalor para que coincida con el pin seleccionado. La configuración debería ser sencilla; seguir estas conexiones garantizará que su sensor funcione correctamente.

Ejemplos de código y guía paso a paso

El siguiente código inicializa el sensor DHT22 y lee los valores de temperatura y humedad. Primero, incluimos la biblioteca DHT y definimos el pin al que está conectado el sensor:

#include "DHT.h"
#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);

Aquí, la variableDHTPINestá configurado en 2, lo que indica que el pin de datos del sensor está conectado al pin digital 2 del Arduino. ElDHTTYPEdefine el tipo de sensor utilizado, que en este caso es DHT22.

A continuación, en elsetup()función, inicializamos el sensor y el monitor serie:

void setup() {
  Serial.begin(9600);
  dht.begin();
}

Este fragmento de código inicializa la comunicación serie y prepara el sensor DHT para la lectura. ElSerial.begin(9600)establece la velocidad en baudios para la comunicación serial.

En elloop()función, podemos leer y mostrar los valores de temperatura y humedad:

Serial.print("Temperature: ");
Serial.print(getTemp("c")); // Celsius
Serial.print(" *C ");
Serial.print(getTemp("h")); // Humidity
Serial.println(" % ");

Esta parte del código imprime la temperatura en grados Celsius y el porcentaje de humedad en el monitor serie. La funcióngetTemp()Se utiliza para recuperar los datos solicitados en función del parámetro proporcionado.

Demostración / Qué esperar

Una vez que todo esté configurado y el código cargado, deberías ver las lecturas de temperatura y humedad mostradas en el monitor serial. El DHT22 puede tardar un momento en estabilizarse, así que asegúrate de permitir unos segundos entre lecturas (en el video a las 15:00). Si hay algún problema con las lecturas, revisa el cableado y asegúrate de que las conexiones estén firmes. Los errores comunes incluyen asignaciones de pines incorrectas o problemas con la fuente de alimentación.

Marcas de tiempo del vídeo

  • 00:00- Introducción al sensor DHT22
  • 01:30- Cableado del sensor
  • 03:00- Explicación del código
  • 04:30- Demostración de código
  • 06:00- Conclusión

Imágenes

Arduino wiring for DHT22 sensor
Arduino wiring for DHT22 sensor
DHT22 sensor with PCB-1
DHT22 sensor with PCB-1
DHT22 with PCB red
DHT22 with PCB red
DHT22 sensor no PCB
DHT22 sensor no PCB
54-Arduion code DHT22 Temperature and Humidity Sensor Module
Idioma: C++
++
/*
 * This is the Arduino code for the DHT22 module to read temperature and humidity.
 * This code can display temperature in:
 * getTemp("c") is used to get Celsius.
 * getTemp("f") is used to get Fahrenheit.
 * getTemp("k") is used for Kelvin.
 * getTemp("hif") is used to get Fahrenheit.
 * getTemp("hic") is used to get Celsius.
 * getTemp("h") is used to get humidity.
 * Watch the video https://youtu.be/oi_GPSLjgBY
 * Other Arduino library and videos https://robojax.com
 * 
 * Written/updated by Ahmad Shamshiri for Robojax.com Video
 * Date: Jan 08, 2018, in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: This code is "AS IS" and for educational purposes only.
 * 
 * original source code : https://github.com/adafruit/DHT-sensor-library
 */

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain


#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to

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

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster processors.
DHT dht(DHTPIN, DHTTYPE);

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

  dht.begin();
}

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


  // Robojax.com test video
  Serial.print("Temperature: ");
  
  Serial.print(getTemp("c"));
  
  Serial.print(" *C ");
  Serial.print(getTemp("f"));
  Serial.println (" *F");
  Serial.println("-----------------");  
  Serial.print("Heat index: ");
  Serial.print(getTemp("hic"));
  Serial.print(" *C ");
  Serial.print(getTemp("hif"));
  Serial.println(" *F");
  Serial.print(getTemp("k"));
  Serial.println(" *K");
  Serial.println("-----------------");    
  Serial.print("Humidity: ");
  Serial.print(getTemp("h"));
  Serial.println(" % ");
  Serial.println("===========================");
}


/*
 * getTemp(String req)
 * returns the temperature related parameters
 * req is string request
 * This code can display temperature in:
 * getTemp("c") is used to get Celsius.
 * getTemp("f") is used to get Fahrenheit.
 * getTemp("k") is used for Kelvin.
 * getTemp("hif") is used to get Fahrenheit.
 * getTemp("hic") is used to get Celsius.
 * getTemp("h") is used to get humidity.
 */
float getTemp(String req)
{

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's 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);

  // 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);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return 0.0;
  }
  // Compute heat index in Kelvin 
  float k = t + 273.15;
  if(req =="c"){
    return t;//return Celsius
  }else if(req =="f"){
    return f;// return Fahrenheit
  }else if(req =="h"){
    return h;// return humidity
  }else if(req =="hif"){
    return hif;// return heat index in Fahrenheit
  }else if(req =="hic"){
    return hic;// return heat index in Celsius
  }else if(req =="k"){
    return k;// return temperature in Kelvin
  }else{
    return 0.000;// if no request found, return 0.000
  }
 
}

Archivos📁

Bibliotecas de Arduino (zip)

Archivo de Fritzing

Manual del Usuario