
¿Quiere llevar un registro del clima en su invernadero, construir un sistema de control de humidificador 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 son ideales para estos casos.
Estos sensores vienen calibrados de fábrica y no requieren ningún componente externo para funcionar. Con solo unas pocas conexiones y un poco de código Arduino, puede comenzar a medir la temperatura junto a la humedad relativa 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 solo proporcionan datos nuevos cada segundo o dos, pero por 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. Se ven más o menos 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:

A pesar de que el DHT22 es más exacto, preciso, capaz de operar en un rango más amplio de temperatura y humedad, hay tres áreas en las que el DHT11 supera por completo al DHT22: es más económico, más compacto y tiene un muestreo más alto. tasa. DHT11 toma una lectura una vez por segundo (o frecuencia de muestreo de 1 Hz), mientras que DHT22 toma una lectura cada dos segundos (o frecuencia de muestreo de 0,5 Hz).
A pesar de estas diferencias, la tensión de funcionamiento de ambos sensores oscila 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, lo que significa que, si construye su proyecto con uno, simplemente puede desconectarlo y reemplazarlo por otro. Es posible que su código deba modificarse ligeramente, ¡pero el cableado sigue siendo el mismo!
Dentro del sensor DHT
Si retira la carcasa del sensor, encontrará un termistor NTC y un componente de detección de humedad en el interior.

El componente de detección de humedad tiene dos electrodos con un sustrato que retiene la humedad (generalmente una sal o un polímero plástico conductor) en el medio. A medida que aumenta la humedad, el sustrato absorbe vapor de agua, lo que provoca 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 se puede medir para estimar la humedad relativa.

Estructura interna del sensor de humedad
El sensor también incluye un termistor NTC para medir la temperatura. Un termistor es un tipo de resistencia cuya 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 cambie drásticamente con la temperatura (en 100 ohmios o más por grado). El término “NTC” significa “Coeficiente de temperatura negativo”, lo que significa que la resistencia disminuye a medida que aumenta la temperatura.

Termistor NTC con curva característica
El sensor también incluye un IC empaquetado SOIC-14 de 8 bits. 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 emite una señal digital que contiene la temperatura con la humedad.
Configuración de pines DHT11 y DHT22
Los sensores DHT11 y DHT22 son relativamente fáciles de conectar. Tienen cuatro pines:

VCC : pin proporciona energía al sensor. A pesar de que la tensión de alimentación oscila entre 3,3 V y 5,5 V, se recomienda una alimentación de 5 V. Con una fuente de alimentación de 5V, el sensor se puede colocar hasta a 20 metros de distancia. Con tensión de alimentación de 3,3 V, el sensor se puede colocar hasta a 1 metro de distancia; de lo contrario, la caída de tensión de la línea provocará errores de medición.
Data : pin se utiliza para la comunicación entre el sensor y el microcontrolador.
NC : No conectar
GND : es el pin de tierra.
Observa que nosotros estamos trabajando con los sensores y no con los modulos. Estos se diferencian por tener el sensor soldado a una placa PCB como se muestra en la imagen.

Cableado de sensores DHT11 y DHT22 a un Arduino
¡Ahora es el momento de conectar el sensor al Arduino!
La conexión de sensores DHT a Arduino es sencilla. Tienen pines bastante largos de paso de 0.1 ′, lo que les permite conectarse fácilmente a cualquier placa de pruebas y cables jumper. Conecte el pin VCC a los 5V de Arduino y el pin GND a tierra. Finalmente, conecte el pin de datos al pin digital número 8.
Para garantizar una comunicación adecuada entre el sensor y la MCU, también debe agregar una resistencia pull-up de 10 K Ω 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 contiene una.
Cableado de DHT11 y DHT22 a Arduino

Considera usar una resistencia de 330Ω. Las conexiones se mantienen para ambos tipos de sensores.
Ahora está listo para cargar algo de código y hacerlo funcionar.
Instalación de la biblioteca
Los sensores DHTxx tienen su propio protocolo patentado de transferencia de datos de un solo cable. Este protocolo requiere una sincronización precisa. Sin embargo, no tenemos que preocuparnos demasiado por esto, porque usaremos la biblioteca DHTlib , que maneja casi todo.
Para instalar la biblioteca, vaya a Sketch > Incluir biblioteca > Administrar biblioteca. Espere a que el Administrador de bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.

Filtre su búsqueda ingresando ‘dhtlib’. Solo debe haber una sola entrada. Haga clic en eso y luego seleccione Instalar. En el puerto sereal (parte de abajo del IDE de Arduino) saldra un mensaje cuando se haya instalado correctamente.

Ejemplo 1 de Arduino: visualización de lecturas en un monitor serie
#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);
}
En el bucle, usamos la read22(dataPin)función para leer el DHT22. Esta función toma como parámetro el número de pin de datos del sensor. Cuando trabaje con DHT11, debe usar la read11() función; para hacerlo, solo necesita descomentar la segunda línea.
#¡Descomenta cualquier 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 usando la. notación de puntos.
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 convertir a Fahrenheit (°F) usando la siguiente fórmula:

imprimir la temperatura en 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 los niveles actuales de temperatura y humedad. Entonces, en este ejemplo, también conectaremos la pantalla LCD al Arduino además de los sensores DHT11 y DHT22.
Así es como se ve la salida.

Mediciones de temperatura y humedad en LCD
Si no está familiarizado con las pantallas LCD de 16 × 2 caracteres, considere leer el tutorial a continuación.

Interfaz de módulo LCD de 16 × 2 caracteres con Arduino
El Serial Monitor es una forma conveniente de ver datos de un Arduino, pero ¿Qué sucede si desea que su proyecto sea portátil y ver…
Conexionado
A continuación, conecte la pantalla LCD como se muestra a continuación.

Cableado de DHT11 y LCD de 16×2 caracteres a Arduino UNO

Cableado de DHT22 y LCD de 16×2 caracteres a Arduino UNO
Código Arduino
El esquema a continuación mostrará los valores de temperatura y humedad relativa en la pantalla LCD de 16 × 2 caracteres. Este ejemplo es similar al anterior, excepto que los valores están impresos en la pantalla LCD.
#include incluye la biblioteca LiquidCrystal
#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 de la pantalla LCD y especifica las dimensiones (anchura y altura) de la pantalla
}
void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); Establece la ubicación en la que se mostrará el texto posterior escrito en la pantalla LCD
lcd.print("Temp.: "); Imprime la cadena "Temp." en la pantalla LCD
Imprimir el valor de temperatura en Celcius y Fahrenheit cada ciclo alternativo
if(showcelciusorfarenheit)
{
lcd.print(t); Imprime el valor de temperatura del sensor
lcd.print(" ");
lcd.print((char)223);//Muestra el carácter de los grados
lcd.print("C");
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0);// imprimir la temperatura en Fahrenheit
lcd.print(" ");
lcd.print((char)223);//Muestra el carácter de los grados
lcd.print("F");
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(5000);
}
https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/
Después de instalar la biblioteca, copie y pegue este ejemplo en el IDE de Arduino. El siguiente ejemplo de prueba imprimirá los valores de temperatura y humedad relativa en el monitor en serie. Pruebe el ejemplo y luego lo repasaremos con más detalle.
#include <DHT.h>
#define DHTPIN 8 // Pin al que está conectado el sensor
#define DHTTYPE DHT22 // DHT22/AM2302. Cambia a DHT11 si usas ese modelo
DHT dht(DHTPIN, DHTTYPE); // Crear el objeto DHT
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
// Lee la temperatura en Celsius y humedad
float t = dht.readTemperature();
float h = dht.readHumidity();
// Verifica si las lecturas son válidas
if (isnan(t) || isnan(h)) {
Serial.println("Fallo en la lectura");
} else {
Serial.print("Temperatura = ");
Serial.print(t);
Serial.println(" °C | ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println(" %");
}
delay(2000); // Retraso 2 segundos
}
Después de cargar el ejemplo, debería ver el siguiente resultado en el monitor serie.
CAMBIAR FOTOS

Salida en monitor serie
Explicación del código:
El ejemplo comienza incluyendo la biblioteca DHT. A continuación, especificamos el número de pin de Arduino al que está conectado el pin de datos de nuestro sensor y creamos un objeto DHT.
#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);
}
En el bucle, usamos la read22(dataPin)función para leer el DHT22. Esta función toma como parámetro el número de pin de datos del sensor. Cuando trabaje con DHT11, debe usar la read11() función; para hacerlo, solo necesita descomentar la segunda línea.
#¡Descomenta cualquier 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 usando la. notación de puntos.
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 convertir a Fahrenheit (°F) usando la siguiente fórmula:

imprimir la temperatura en 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 los niveles actuales de temperatura y humedad. Entonces, en este ejemplo, también conectaremos la pantalla LCD al Arduino además de los sensores DHT11 y DHT22.
Así es como se ve la salida.

Mediciones de temperatura y humedad en LCD
Si no está familiarizado con las pantallas LCD de 16 × 2 caracteres, considere leer el tutorial a continuación.

Interfaz de módulo LCD de 16 × 2 caracteres con Arduino
El Serial Monitor es una forma conveniente de ver datos de un Arduino, pero ¿Qué sucede si desea que su proyecto sea portátil y ver…
Conexionado
A continuación, conecte la pantalla LCD como se muestra a continuación.

Cableado de DHT11 y LCD de 16×2 caracteres a Arduino UNO

Cableado de DHT22 y LCD de 16×2 caracteres a Arduino UNO
Código Arduino
El esquema a continuación mostrará los valores de temperatura y humedad relativa en la pantalla LCD de 16 × 2 caracteres. Este ejemplo es similar al anterior, excepto que los valores están impresos en la pantalla LCD.
#include incluye la biblioteca LiquidCrystal
#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 de la pantalla LCD y especifica las dimensiones (anchura y altura) de la pantalla
}
void loop()
{
int readData = DHT.read22(dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
lcd.setCursor(0,0); Establece la ubicación en la que se mostrará el texto posterior escrito en la pantalla LCD
lcd.print("Temp.: "); Imprime la cadena "Temp." en la pantalla LCD
Imprimir el valor de temperatura en Celcius y Fahrenheit cada ciclo alternativo
if(showcelciusorfarenheit)
{
lcd.print(t); Imprime el valor de temperatura del sensor
lcd.print(" ");
lcd.print((char)223);//Muestra el carácter de los grados
lcd.print("C");
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0);// imprimir la temperatura en Fahrenheit
lcd.print(" ");
lcd.print((char)223);//Muestra el carácter de los grados
lcd.print("F");
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(5000);
}
https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/
Preguntas frecuentes
¿Qué miden los sensores DHT11 y DHT22?
Temperatura y humedad. Son sensores de AOSONG ideales para llevar registro del clima en un invernadero, construir un control de humidificador o montar una estación meteorológica.
¿Los sensores DHT necesitan calibración o componentes extra?
No. Vienen calibrados de fábrica y no requieren ningún componente externo para funcionar. Con unas pocas conexiones y algo de código Arduino ya se puede empezar a medir.
¿Cuál es la diferencia entre el DHT11 y el DHT22?
Ambos miden lo mismo y se conectan igual, pero se diferencian en precisión y rango. El DHT22 es el más preciso de los dos; el DHT11 es la opción más económica cuando no se necesita tanta exactitud.
¿Cuántos pines necesita un sensor DHT?
Muy pocos: alimentación, tierra y una sola línea de datos hacia el microcontrolador. Esa simplicidad, sumada a que no requiere componentes externos, es lo que los hace tan populares.
Aprende esto en un curso
Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial:
- Arduino en profundidad: Sensores y actuadores para proyectos reales — nivel intermedio, 12 horas presenciales en Santiago
- Arduino desde Cero: Primeros Pasos en Programación — nivel inicial, 15 horas presenciales en Santiago