Sensor DHT11 con Arduino: medir temperatura y humedad paso a paso (código y conexión)
¿Quieres que tu Arduino te diga qué temperatura y qué humedad hay en tu cuarto, en el salón de clase o dentro de un invernadero? El sensor DHT11 con Arduino es la forma más fácil y barata de lograrlo: tiene solo tres o cuatro pines, usa un único cable de datos y con una librería gratuita lo tienes funcionando en menos de diez minutos. En esta guía vas a ver cómo conectarlo, qué librería instalar, el código completo listo para copiar, cómo mostrar los datos en una pantalla LCD y qué hacer cuando aparece el temido "Error al leer el sensor".
Qué es el sensor DHT11 y para qué sirve
El DHT11 es un sensor digital que mide temperatura y humedad relativa al mismo tiempo. Por dentro tiene un elemento resistivo que cambia con la humedad, un termistor para la temperatura y un pequeño microcontrolador que convierte todo en datos digitales. Por eso no necesitas leer voltajes analógicos ni hacer cálculos raros: el Arduino recibe los números ya listos por un solo pin.
Se usa mucho en proyectos escolares y caseros: estaciones meteorológicas, control de ventiladores, alarmas de humedad para closets o bodegas, incubadoras sencillas, invernaderos y registros de clima para ferias de ciencia. Es el típico sensor azul con rejilla que viene en casi todos los kits de Arduino.
Tiene sus límites: mide de 0 a 50 °C con una precisión de unos ±2 °C, y humedad de 20 a 90 % con unos ±5 %. Además solo entrega una lectura por segundo. Para aprender y para proyectos de casa es más que suficiente; si necesitas más precisión, más adelante te explico cuándo pasar al DHT22.
Materiales que necesitas
- Un Arduino Uno (también sirve Nano o Mega).
- Un sensor DHT11, ya sea en módulo de 3 pines (sobre una plaquita) o el sensor suelto de 4 pines.
- Una resistencia de 10 kΩ, solo si usas el sensor suelto de 4 pines.
- Cables tipo jumper y una protoboard.
- Opcional: una pantalla LCD 16x2 con módulo I2C para ver los datos sin computador.
Cómo conectar el DHT11 a Arduino

Módulo de 3 pines (el más común)
El módulo ya trae la resistencia de pull-up soldada, así que solo necesitas tres cables. Mira las marcas impresas en la plaquita, porque el orden de los pines cambia según el fabricante:
- Pin + o VCC del sensor al pin 5V del Arduino.
- Pin OUT, S o DATA al pin digital 2 del Arduino.
- Pin − o GND al pin GND del Arduino.
Sensor suelto de 4 pines
Mirando el sensor de frente (con la rejilla hacia ti y las patas hacia abajo), los pines de izquierda a derecha son: 1 VCC, 2 DATA, 3 sin conexión y 4 GND. Aquí sí debes poner una resistencia de 10 kΩ entre DATA y VCC. Esa resistencia mantiene la línea de datos en nivel alto cuando nadie está transmitiendo; sin ella las lecturas fallan o salen al azar.
Instalar la librería DHT en el IDE de Arduino
- Abre el IDE de Arduino y ve a Programa > Incluir librería > Administrar bibliotecas (en el IDE 2 también puedes usar el ícono de libros de la barra izquierda).
- Busca
DHT sensor librarye instala la de Adafruit. - Cuando te pregunte si quieres instalar las dependencias, elige Instalar todo. Así se instala también
Adafruit Unified Sensor, que la librería necesita para compilar.
Si saltaste ese último paso y al compilar aparece un error que menciona Adafruit_Sensor.h, solo busca e instala "Adafruit Unified Sensor" desde el mismo administrador.
Código del DHT11 con Arduino (listo para copiar)
Este programa lee la humedad y la temperatura cada dos segundos y las muestra en el Monitor Serie. También calcula la sensación térmica (índice de calor) con una función que ya trae la librería.
#include <DHT.h>
#define DHTPIN 2 // pin de datos conectado al D2
#define DHTTYPE DHT11 // cambia a DHT22 si usas ese sensor
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("Prueba del sensor DHT11");
dht.begin();
}
void loop() {
delay(2000); // el DHT11 necesita tiempo entre lecturas
float h = dht.readHumidity();
float t = dht.readTemperature(); // en grados Celsius
if (isnan(h) || isnan(t)) {
Serial.println("Error al leer el sensor DHT11");
return;
}
float st = dht.computeHeatIndex(t, h, false); // false = Celsius
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" % Temperatura: ");
Serial.print(t);
Serial.print(" °C Sensación: ");
Serial.print(st);
Serial.println(" °C");
}
Sube el programa, abre el Monitor Serie (lupa de la esquina superior derecha) y selecciona 9600 baudios. Deberías ver una línea nueva cada dos segundos.

Qué hace cada parte del código
#define DHTPIN 2indica en qué pin está el cable de datos. Si lo conectaste en otro pin digital, cambia el número aquí.DHT dht(DHTPIN, DHTTYPE);crea el objeto del sensor con el pin y el modelo.dht.readHumidity()ydht.readTemperature()devuelven la humedad en % y la temperatura en °C. Si quieres grados Fahrenheit usadht.readTemperature(true).isnan()revisa si la lectura falló. Cuando el sensor no responde, la librería entrega "NaN" (no es un número), y así evitas mostrar datos falsos.
Mostrar temperatura y humedad en una pantalla LCD
Una de las búsquedas más comunes es "sensor de temperatura y humedad Arduino DHT11 con pantalla LCD". Si ya tienes una LCD 16x2 I2C conectada (GND, VCC, SDA a A4 y SCL a A5, como explico en la guía de la pantalla LCD 16x2 I2C con Arduino), basta con combinar los dos programas:
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
DHT dht(2, DHT11);
LiquidCrystal_I2C lcd(0x27, 16, 2); // prueba 0x3F si no aparece nada
void setup() {
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.clear();
if (isnan(h) || isnan(t)) {
lcd.print("Error sensor");
return;
}
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(h, 0);
lcd.print(" %");
}
Con esto tienes una mini estación meteorológica que funciona con cualquier cargador USB, sin computador.
DHT11 vs DHT22: diferencias y cuál comprar

| Característica | DHT11 | DHT22 (AM2302) |
|---|---|---|
| Rango de temperatura | 0 a 50 °C | −40 a 80 °C |
| Precisión de temperatura | ±2 °C | ±0,5 °C |
| Rango de humedad | 20 a 90 % | 0 a 100 % |
| Precisión de humedad | ±5 % | ±2 a 5 % |
| Frecuencia de lectura | 1 por segundo | 1 cada 2 segundos |
| Uso recomendado | Aprender, proyectos de interior | Exteriores, neveras, datos más precisos |
Mi recomendación para empezar: el DHT11. Es más barato, viene en los kits y para saber si un cuarto está caluroso o húmedo funciona bien. Si vas a medir afuera en la madrugada, dentro de una nevera o necesitas décimas de grado, compra el DHT22. Lo bueno es que el código es el mismo: solo cambias DHT11 por DHT22 en #define DHTTYPE.
Simular el DHT11 en Tinkercad o Wokwi
Si todavía no tienes el sensor, puedes practicar en un simulador. En Wokwi existe el componente DHT22 y funciona con la misma librería de Adafruit, así que puedes probar el código cambiando solo el tipo de sensor. En Tinkercad Circuits la lista de componentes no siempre incluye sensores DHT; muchos docentes usan allí el sensor de temperatura TMP36 para practicar la lógica del programa y dejan el DHT11 para el montaje real.
Errores comunes y cómo solucionarlos
- Sale "Error al leer el sensor" todo el tiempo. Revisa que el pin de datos coincida con
DHTPIN, que VCC y GND no estén invertidos y que el tipo seaDHT11y noDHT22. Si usas el sensor suelto, confirma la resistencia de 10 kΩ. - Lecturas cada medio segundo que fallan. El DHT11 necesita al menos un segundo entre lecturas. Deja el
delay(2000)o usamillis()si no quieres frenar el programa. - Error de compilación con Adafruit_Sensor.h. Falta la librería "Adafruit Unified Sensor"; instálala desde el administrador de bibliotecas.
- La temperatura sale más alta de lo normal. Aleja el sensor del regulador del Arduino, del cargador o de la luz directa del sol. Los cables largos de más de unos metros también pueden dar problemas.
- Sensor caliente o con olor a quemado. Casi siempre es VCC y GND al revés. Desconecta de inmediato y revisa las marcas del módulo.
- Valores congelados. El DHT11 entrega números enteros y cambia despacio; es normal ver el mismo valor varias lecturas seguidas.
Ideas de proyectos con el DHT11
Una vez que lees temperatura y humedad, puedes tomar decisiones. Por ejemplo, encender un ventilador cuando pase de 28 °C usando un módulo relé con Arduino, prender un LED rojo cuando la humedad supere el 70 % o combinarlo con el sensor ultrasónico HC-SR04 para una mini estación que también mida distancias. Para una feria escolar, una buena idea es registrar las lecturas durante un día y compararlas entre el salón y el patio.
Preguntas frecuentes
¿Qué pin del Arduino uso para el DHT11?
Cualquier pin digital funciona. En esta guía uso el pin 2; si usas otro, cambia el número en #define DHTPIN.
¿El DHT11 funciona con 3,3 V?
Sí, su rango de alimentación va de 3,3 a 5,5 V, por eso también se usa con ESP32 y ESP8266. Con cables largos conviene alimentarlo a 5 V.
¿Necesito la resistencia de 10 kΩ?
Solo con el sensor suelto de 4 pines. Los módulos de 3 pines ya la traen soldada en la plaquita.
¿Cada cuánto puedo leer el DHT11?
Como máximo una vez por segundo. En la práctica, leer cada 2 segundos da resultados más estables.
¿Por qué el DHT11 marca diferente a mi termómetro?
Su precisión es de ±2 °C y ±5 % de humedad, así que una diferencia de uno o dos grados es normal. Si necesitas más exactitud, usa un DHT22.
Conclusión
El sensor DHT11 con Arduino es uno de los mejores primeros proyectos: tres cables, una librería y un código corto te dan temperatura y humedad reales. Empieza con el Monitor Serie, luego pásalo a una pantalla LCD y, cuando te sientas cómodo, úsalo para controlar un ventilador o una alarma. Si te sale algún error, revisa primero el pin de datos y el tipo de sensor en el código: ahí está la causa en la mayoría de los casos.
Comentarios