Los sensores DHT11 y DHT22 son herramientas esenciales para medir la temperatura y la humedad en proyectos de electrónica. En este artículo, aprenderás cómo conectar estos sensores a un Arduino para obtener lecturas precisas y utilizar esta información en tus propios proyectos. ¡Sigue leyendo para descubrir cómo aprovechar al máximo estas potentes herramientas de medición!
¿Quiere registrar el clima en su invernadero, construir un sistema de control de humidores o realizar un seguimiento de los datos de temperatura y humedad para un proyecto de estación meteorológica? ¡El sensor de temperatura y humedad DHT11 o DHT22 de AOSONG podría ser justo lo que necesita!
Estos sensores están calibrados de fábrica y no requieren ningún componente externo para funcionar. Con sólo unas pocas conexiones y algo de código Arduino, puedes empezar a medir la humedad relativa y la temperatura de inmediato.
Proporcionan lecturas de temperatura y humedad con una precisión de un decimal, lo cual es una ventaja. El único inconveniente es que sólo proporcionan datos nuevos cada uno o dos segundos, pero dado el precio y el rendimiento, es difícil quejarse.
DHT11 frente a DHT22
El DHT11 y el DHT22 son los dos sensores más utilizados de la serie DHTxx. Parecen iguales y tienen el mismo pinout, pero sus especificaciones son diferentes.
De los dos, el DHT22 es más caro y sin duda tiene mejores especificaciones. El DHT22 puede medir temperaturas de -40°C a +125°C con una precisión de ±0,5°C, mientras que el DHT11 puede medir temperaturas de 0°C a 50°C con una precisión de ±2°C. Además, el sensor DHT22 puede medir la humedad relativa del 0 al 100 % con una precisión del 2 al 5 %, mientras que el sensor DHT11 solo puede medir la humedad relativa del 20 al 80 % con una precisión del 5 %.
Aquí están las especificaciones:
DHT11 | DHT22 | |
Tensión de funcionamiento | 3 a 5V | 3 a 5V |
Corriente máxima de funcionamiento | 2,5 mA máx. | 2,5 mA máx. |
Rango de humedad | 20-80% / 5% | 0-100% / 2-5% |
Rango de temperatura | 0-50°C/±2°C | -40 a 80°C / ± 0,5°C |
tasa de muestreo | 1Hz (lee cada segundo) | 0,5Hz (Leyendo cada 2 segundos) |
altura | 15,5 mm x 12 mm x 5,5 mm | 15,1 mm x 25 mm x 7,7 mm |
Ventaja | Costo extremadamente bajo | Más preciso |
A pesar de que el DHT22 es más exacto y preciso y puede funcionar en un rango más amplio de temperaturas y humedad, hay tres áreas en las que el DHT11 supera completamente al DHT22: es más barato, más compacto y tiene una frecuencia de muestreo más alta. DHT11 mide una vez por segundo (o frecuencia de muestreo de 1 Hz), mientras que DHT22 toma una medición cada dos segundos (o frecuencia de muestreo de 0,5 Hz).
A pesar de estas diferencias, el voltaje de funcionamiento de ambos sensores está entre 3 y 5 voltios, con una corriente máxima de 2,5 mA (durante la conversión). La mejor parte es que los sensores DHT11 y DHT22 son intercambiables. Entonces, si crea su proyecto con un sensor, simplemente puede desconectarlo y reemplazarlo por otro. Es posible que sea necesario ajustar ligeramente su código, ¡pero el cableado seguirá siendo el mismo!
En el sensor DHT
Si retira la carcasa del sensor, encontrará un termistor NTC y un componente del sensor de humedad en el interior.
El componente del sensor de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente una sal o un polímero plástico conductor) entre ellos. A medida que aumenta la humedad, el sustrato absorbe vapor de agua, lo que libera iones y reduce la resistencia entre los dos electrodos. Este cambio de resistencia es proporcional a la humedad, que se puede medir para estimar la humedad relativa.
El sensor también contiene un termistor NTC para medir la temperatura. Un termistor es un tipo de resistencia cuyo valor de resistencia varía con la temperatura.
Técnicamente, todas las resistencias son termistores en el sentido de que su resistencia cambia ligeramente con la temperatura, pero el cambio suele ser muy pequeño y difícil de medir.
Los termistores están diseñados para que su resistencia varíe mucho con la temperatura (100 ohmios o más por grado). El término «NTC» significa «coeficiente de temperatura negativo» y significa que la resistencia disminuye a medida que aumenta la temperatura.
El sensor también contiene un IC de 8 bits en el paquete SOIC-14. Este IC mide y procesa la señal analógica utilizando coeficientes de calibración almacenados, convierte la señal analógica en digital y genera una señal digital que contiene la temperatura y la humedad.
Distribución de pines DHT11 y DHT22
Los sensores DHT11 y DHT22 son relativamente fáciles de conectar. Tienen cuatro pines:
VCC El pin suministra energía al sensor. Aunque el voltaje de alimentación está entre 3,3 V y 5,5 V, se recomienda un suministro de 5 V. Con una fuente de alimentación de 5V, el sensor se puede colocar a una distancia de hasta 20 metros. Con una tensión de alimentación de 3,3V, el sensor se puede colocar a una distancia de hasta 1 metro; de lo contrario, la caída de tensión de la red provocará errores de medición.
Datos El pin se utiliza para la comunicación entre el sensor y el microcontrolador.
CAROLINA DEL NORTE No conectado
Tierra es el pin de tierra.
Cableado de los sensores DHT11 y DHT22 a un Arduino
¡Ahora es el momento de conectar el sensor al Arduino!
Conectar sensores DHT a Arduino es sencillo. Tienen clavijas bastante largas con un paso de 0,1'', por lo que se pueden conectar fácilmente a cualquier placa. Conecte el pin VCC a los 5V del Arduino y el pin GND a tierra. Finalmente, conecte el pin de datos al pin digital n.° 8.
Para garantizar una comunicación adecuada entre el sensor y la MCU, también necesita agregar una resistencia pull-up de 10K entre la línea de datos y VCC (para mantener la señal ALTA). Si tiene una placa de conexión para el sensor, no necesita agregar una resistencia pull-up externa, ya que ya incluye una.
Ahora puedes cargar el código y ponerlo en funcionamiento.
Instalación de biblioteca
Los sensores DHTxx tienen su propio protocolo de transmisión de datos de un solo cable. Este protocolo requiere una sincronización precisa. Sin embargo, no tenemos que preocuparnos demasiado por eso ya que eso es lo que vamos a utilizar. biblioteca DHTlibque se encarga de casi todo.
Para instalar la biblioteca, navegue hasta Bosquejo > Incluir biblioteca > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo 'dhlib'.Solo debe haber una entrada. Haga clic en él y luego seleccione «Instalar».
Ejemplo 1 de Arduino: visualización de lecturas en el monitor serie
Después de instalar la biblioteca, copie y pegue este boceto en el IDE de Arduino. El siguiente boceto de prueba imprime los valores de temperatura y humedad relativa en el monitor de serie. Pruebe el boceto y lo repasaremos con más detalle.
#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object
void setup()
{
Serial.begin(9600);
}
void loop()
{
//Uncomment whatever type you're using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity
// Printing the results on the serial monitor
Serial.print("Temperature = ");
Serial.print
Serial.print(" ");
Serial.print((char)176);//shows degrees character
Serial.print("C | ");
Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit
Serial.print(" ");
Serial.print((char)176);//shows degrees character
Serial.println("F ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println(" % ");
Serial.println("");
delay(2000); // Delays 2 secods
}
Después de cargar el boceto, debería ver el siguiente resultado en el monitor serie.
Explicación del código:
El boceto comienza con la integración de la biblioteca DHT. Luego especificamos el número de pin Arduino al que está conectado el pin de datos de nuestro sensor y creamos un objeto DHT.
#include <dht.h>
#define dataPin 8 // Defines pin number to which the sensor is connected
dht DHT; // Creats a DHT object
En la configuración inicializamos la comunicación serie.
void setup() {
Serial.begin(9600);
}
En el bucle utilizamos el read22(dataPin)
Función para leer el DHT22. Esta función utiliza el número de pin de datos del sensor como parámetro. Si está trabajando con DHT11, debe usarlo read11()
Función; Todo lo que necesitas hacer es comentar la segunda línea.
//Uncomment whatever type you're using!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
Ahora podemos obtener los valores de humedad y temperatura accediendo a las propiedades del objeto DHT mediante el punto .
Notación.
float t = DHT.temperature; // Gets the values of the temperature
float h = DHT.humidity; // Gets the values of the humidity
El objeto DHT devuelve la temperatura en grados Celsius (°C). La conversión a Fahrenheit (°F) se puede convertir fácilmente usando la siguiente fórmula:
t(°F) =T(ºC) × 9/5 + 32
//print the temperature in Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);
Ejemplo 2 de Arduino: visualización de lecturas en la pantalla LCD
Si está construyendo su propia incubadora o un proyecto similar, necesitará una pantalla LCD de 16 × 2 caracteres en lugar de un monitor en serie para mostrar las lecturas actuales de temperatura y humedad. Entonces, en este ejemplo, además de los sensores DHT11 y DHT22, también conectamos la pantalla LCD al Arduino.
Así es como se ve el resultado.
Si no está familiarizado con las pantallas LCD de 16×2 caracteres, debería leer el siguiente tutorial.
LECTURAS SUGERIDAS
alambrado
A continuación, conecte la pantalla LCD como se muestra a continuación.
código arduino
El siguiente boceto muestra los valores de temperatura y humedad relativa en la pantalla LCD de 16×2 caracteres. Este boceto es similar al anterior excepto que los valores están impresos en la pantalla LCD.
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;
void setup()
{
lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
}
void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Temp.: "); // Prints string "Temp." on the LCD
//Print temperature value in Celcius and Fahrenheit every alternate cycle
if(showcelciusorfarenheit)
{
lcd.print
lcd.print(" ");
lcd.print((char)223);//shows degrees character
lcd.print("C");
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit
lcd.print(" ");
lcd.print((char)223);//shows degrees character
lcd.print("F");
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(5000);
}
Conexión de sensores DHT11 y DHT22 a Arduino
¿Quieres llevar un registro del clima en tu invernadero, construir un sistema de control de humedad para un humidor, o seguir los datos de temperatura y humedad para un proyecto de estación meteorológica? El Sensor de Temperatura y Humedad DHT11 o DHT22 de AOSONG podría ser la elección perfecta para ti.
Diferencias entre DHT11 y DHT22
El DHT11 y el DHT22 son los dos sensores más utilizados en la serie DHTxx. Se ven algo iguales y tienen el mismo diseño de pines, pero sus especificaciones son diferentes.
En cuanto a especificaciones, el DHT22 es más caro y sin duda tiene mejores características. El DHT22 puede medir temperaturas de -40°C a +125°C con una precisión de ±0.5°C, mientras que el DHT11 puede medir temperaturas de 0°C a 50°C con una precisión de ±2°C. Además, el sensor DHT22 puede medir la humedad relativa de 0 a 100% con una precisión de 2-5%, mientras que el sensor DHT11 solo puede medir la humedad relativa de 20 a 80% con una precisión de 5%.
Especificaciones:
- DHT11:
- · Voltaje de Operación: 3 a 5V
- · Corriente de Operación Máxima: 2.5mA máx.
- · Rango de Humedad: 20-80% / 5%
- · Rango de Temperatura: 0-50°C / ± 2°C
- · Tasa de Muestreo: 1 Hz (muestra cada segundo)
- DHT22:
- · Voltaje de Operación: 3 a 5V
- · Corriente de Operación Máxima: 2.5mA máx.
- · Rango de Humedad: 0-100% / 2-5%
- · Rango de Temperatura: -40 a 80°C / ± 0.5°C
- · Tasa de Muestreo: 0.5Hz (muestra cada 2 segundos)
A pesar de que el DHT22 es más preciso, exacto y capaz de operar en un rango más amplio de temperatura y humedad, hay tres áreas donde elDHT11 supera por completo al DHT22: es más asequible, más compacto y tiene una tasa de muestreo más alta.
Estructura Interna del Sensor
Si quitas la carcasa del sensor, encontrarás un termistor NTC y un componente sensor de humedad en su interior.
El componente sensor de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente sal o polímero conductor). A medida que la humedad aumenta, el sustrato absorbe el vapor de agua, lo que resulta en la liberación de iones y una disminución de la resistencia entre los dos electrodos. Este cambio en la resistencia es proporcional a la humedad, que puede medirse para estimar la humedad relativa.
El sensor también incluye un termistor NTC para medir la temperatura. Un termistor es un tipo de resistor cuya resistencia varía con la temperatura. Los termistores están diseñados para que su resistencia cambie drásticamente con la temperatura. El término «NTC» significa «Coeficiente de Temperatura Negativo», lo que significa que la resistencia disminuye a medida que la temperatura aumenta.
Esquema de Pines de DHT11 y DHT22
Los sensores DHT11 y DHT22 son bastante fáciles de conectar. Tienen cuatro pines:
- VCC: proporciona alimentación al sensor.
- Data: se utiliza para la comunicación entre el sensor y el microcontrolador.
- NC: no se conecta.
- GND: es el pin de tierra.
Conexión de Sensores DHT11 y DHT22 a Arduino
Conectar los sensores DHT a Arduino es sencillo. Tienen pines con una longitud razonable que permite conectarlos fácilmente a cualquier protoboard. Conecta el pin VCC a los 5V de Arduino y el pin GND a tierra. Finalmente, conecta el pin Data al pin digital #8.
Para garantizar una comunicación adecuada entre el sensor y el microcontrolador, debes agregar una resistencia pull-up de 10K entre la línea de datos y VCC (para mantener la señal en ALTO). Si tienes una placa de pruebas para el sensor, no necesitas agregar una resistencia pull-up externa, ya que ya contiene una.
Instalación de la Biblioteca
Los sensores DHTxx tienen su propio protocolo de transferencia de datos de un solo cable. Este protocolo requiere un temporizado preciso. Sin embargo, no tenemos que preocuparnos demasiado por esto, ya que utilizaremos la biblioteca DHTlib, que maneja casi todo.
Para instalar la biblioteca, ve a Sketch > Include Library > Manage Libraries… Espera a que el Administrador de Bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda ingresando ‘dhtlib’. Debería haber una única entrada. Haz clic en ella y elige Instalar.
Ejemplo de Arduino 1 – Mostrar Lecturas en el Monitor Serial
Después de instalar la biblioteca, copia y pega este sketch en el IDE de Arduino. Este sketch de prueba imprimirá los valores de temperatura y humedad relativa en el monitor serial. Prueba el sketch y luego lo revisaremos con más detalle.
«`cpp
#include
#define dataPin 8 // Define el número de pin al que está conectado el sensor
dht DHT; // Crea un objeto DHT
void setup()
{
Serial.begin(9600);
}
void loop()
{
//Elimina el comentario del tipo que estás usando!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
float t = DHT.temperature; // Obtiene los valores de la temperatura
float h = DHT.humidity; // Obtiene los valores de la humedad
// Imprimiendo los resultados en el monitor serial
Serial.print(«Temperatura = «);
Serial.print(t);
Serial.print(» «);
Serial.print((char)176);//muestra el caracter de grados
Serial.print(«C | «);
Serial.print((t * 9.0) / 5.0 + 32.0);//muestra la temperatura en Fahrenheit
Serial.print(» «);
Serial.print((char)176);//muestra el caracter de grados
Serial.println(«F «);
Serial.print(«Humedad = «);
Serial.print(h);
Serial.println(» % «);
Serial.println(«»);
delay(2000); // Retrasa 2 segundos
}
«`
Después de subir el sketch, deberías ver la siguiente salida en el monitor serial.
Explicación del Código:
El sketch comienza incluyendo la biblioteca DHT. Luego, especificamos el número de pin de Arduino al que está conectado el pin Data de nuestro sensor y creamos un objeto DHT.
«`cpp
#include
#define dataPin 8 // Define el número de pin al que está conectado el sensor
dht DHT; // Crea un objeto DHT
«`
En la función setup, inicializamos la comunicación serial.
«`cpp
void setup() {
Serial.begin(9600);
}
«`
En el loop, usamos la función read22(dataPin) para leer el DHT22. Esta función toma como parámetro el número de pin Data del sensor. Cuando trabajamos con el DHT11, debes usar la función read11(); para hacerlo, solo debes quitar el comentario de la segunda línea.
«`cpp
//Elimina el comentario del tipo que estás usando!
int readData = DHT.read22(dataPin); // DHT22/AM2302
//int readData = DHT.read11(dataPin); // DHT11
«`
Ahora podemos recuperar los valores de humedad y temperatura accediendo a las propiedades del objeto DHT utilizando la notación de punto.
«`cpp
float t = DHT.temperature; // Obtiene los valores de la temperatura
float h = DHT.humidity; // Obtiene los valores de la humedad
«`
El objeto DHT devuelve la temperatura en grados Celsius (°C). Es fácil convertirlo a Fahrenheit (°F) usando la siguiente fórmula:
T(°F) = T(°C) × 9/5 + 32
«`cpp
//muestra la temperatura en Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);
«`
Ejemplo de Arduino 2 – Mostrar Lecturas en un LCD
Si estás construyendo un incubador u un proyecto similar, necesitarás una pantalla LCD de caracteres 16×2 en lugar de un monitor serial para mostrar los niveles actuales de temperatura y humedad. Por lo tanto, en este ejemplo, conectaremos también el LCD a Arduino además de los sensores DHT11 y DHT22.
El resultado se ve así:
Si no estás familiarizado con las pantallas LCD de caracteres 16×2, considera leer el siguiente tutorial:
Interfaz de módulo LCD 16×2 con Arduino
El Monitor Serial es una forma conveniente de ver los datos de un Arduino, pero ¿qué pasa si quieres llevar tu proyecto contigo y ver…
Conexiones
A continuación, conecta el LCD como se muestra a continuación.
Código Arduino
La siguiente es una referencia sobre cómo se verá y se comportará el codigo Arduino con la finalidad de mostrar lecturas sobre la temperatura y la humedad en el LCD.
«`cpp
#include
#include
#define dataPin 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Crea un objeto LCD. Parámetros: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;
void setup()
{
lcd.begin(16,2); // Inicializa la interfaz con la pantalla LCD y especifica las dimensiones (ancho y alto) del display
}
void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); // Establece la ubicación donde se mostrará el texto en la LCD
lcd.print(«Temp.: «); // Muestra el texto «Temp.» en el LCD
//Muestra el valor de temperatura en Celsius y Fahrenheit en ciclos alternados
if(showcelciusorfarenheit)
{
lcd.print(t); // Muestra el valor de temperatura del sensor
lcd.print(» «);
lcd.print((char)223);//muestra el caracter de grados
lcd.print(«C»);
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0); // Muestra la temperatura en Fahrenheit
lcd.print(» «);
lcd.print((char)223);//muestra el caracter de grados
lcd.print(«F»);
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print(«Humi.: «);
lcd.print(h);
lcd.print(» %»);
delay(5000);
}
«`
Este sketch mostrará los valores de temperatura y humedad relativa en la pantalla LCD de caracteres 16×2. Este sketch es similar al anterior, excepto que los valores se imprimen en el LCD.
¡Muy útil la info para los que estamos empezando en el mundo de Arduino! ¡Gracias por simplificarlo!
¡Gracias por compartir este tutorial! Me ayudó un montón a entender cómo conectar los sensores DHT11 y DHT22 a Arduino. ¡Muy útil para mis proyectos!
¡Qué buena guía! Ayuda mucho a conectar los sensores DHT11 y DHT22 a Arduino. ¡Gracias por compartir!
¡Muy claro y fácil de seguir! Gracias por explicar cómo conectar los sensores DHT11 y DHT22 a Arduino. ¡Me ha sido de gran ayuda! 🙌🏼 ¡Sigue así!