Cómo usar el sensor DHT22 con Arduino sin lecturas raras
Conectas el sensor, cargas el ejemplo y el monitor serie solo muestra "nan" o una temperatura que salta de 21 a 85 grados sin motivo.

Conectas el sensor, cargas el ejemplo y el monitor serie solo muestra "nan" o una temperatura que salta de 21 a 85 grados sin motivo. Es el problema más habitual cuando alguien usa por primera vez el sensor DHT22 con Arduino, y casi siempre se debe a tres detalles: la resistencia de pull-up, la librería equivocada o leer el sensor demasiado rápido.
En el hacklab lo hemos montado decenas de veces en talleres, estaciones meteorológicas caseras y controladores de humedad para impresoras 3D. Esta guía explica el cableado correcto, el código mínimo que funciona y cómo diagnosticar lecturas raras antes de culpar al sensor.
Qué es el DHT22 y cuándo conviene usarlo
El DHT22, también vendido como AM2302, mide temperatura y humedad relativa con un solo cable de datos. Por dentro lleva un sensor de humedad capacitivo, un termistor y un pequeño microcontrolador que entrega los datos ya digitalizados.
| Característica | DHT22 | DHT11 |
|---|---|---|
| Rango de temperatura | -40 a 80 °C | 0 a 50 °C |
| Precisión de temperatura | unos ±0,5 °C | unos ±2 °C |
| Rango de humedad | 0 a 100 % | 20 a 80 % |
| Precisión de humedad | ±2 a 5 % | ±5 % |
| Lecturas | una cada 2 segundos | una por segundo |
| Precio aproximado | 3 a 6 euros | 1 a 2 euros |
Si vas a medir una habitación, un invernadero pequeño o la caja donde guardas el filamento, el DHT22 compensa la diferencia de precio frente al DHT11. Funciona entre 3,3 y 6 voltios, así que sirve tanto para un Arduino Uno a 5 V como para placas a 3,3 V.
Material y conexión del sensor DHT22 con Arduino
Necesitas un Arduino Uno o Nano, el sensor, una resistencia de 10 kΩ, una protoboard y tres o cuatro cables. Si nunca has montado nada en una, repasa antes cómo usar una protoboard paso a paso.
El sensor suelto tiene cuatro patas. Mirándolo de frente, con la rejilla hacia ti, son:
- Pata 1, VCC: a 5 V del Arduino.
- Pata 2, datos: al pin digital 2.
- Pata 3: no se conecta.
- Pata 4, GND: a tierra.
Entre la pata 1 y la pata 2 va la resistencia de 10 kΩ. Es la resistencia de pull-up que mantiene la línea de datos en nivel alto cuando nadie transmite. Sin ella, la comunicación falla de forma intermitente, que es justo lo que produce lecturas "nan" una vez sí y otra no.
Muchos módulos vienen soldados en una plaquita de tres pines con la resistencia ya incluida. En ese caso solo conectas VCC, datos y GND. Mira la placa: si ves una resistencia pequeña marcada como 103 o 472, ya la tienes.
El código mínimo que funciona
En el IDE de Arduino, abre el gestor de librerías e instala "DHT sensor library" de Adafruit. Te pedirá también "Adafruit Unified Sensor"; acepta instalar las dos. Hay otras librerías con nombres parecidos, y mezclarlas es una causa frecuente de errores de compilación.
El programa tiene esta estructura:
- Incluye la librería DHT.h.
- Crea el objeto del sensor indicando el pin 2 y el tipo DHT22.
- En setup, inicia el puerto serie a 9600 baudios y llama a dht.begin().
- En loop, espera 2000 milisegundos con delay.
- Lee la humedad con dht.readHumidity() y la temperatura con dht.readTemperature().
- Comprueba con isnan() si alguno de los dos valores es inválido. Si lo es, imprime un aviso y vuelve a empezar el loop.
- Si todo está bien, imprime ambos valores en el monitor serie.
La librería trae un ejemplo llamado DHTtester que hace exactamente esto. Ábrelo desde Archivo, Ejemplos, cambia el tipo a DHT22 y el pin al que usaste. Como extra, la función computeHeatIndex calcula la sensación térmica a partir de temperatura y humedad, útil si montas una estación para el balcón.
Si el sensor va a vivir fuera, protégelo de la lluvia y del sol directo, pero sin encerrarlo. Una caja hermética atrapa el calor y la humedad, y las lecturas dejan de representar el aire exterior. En el hacklab usamos una pila de platos de maceta de plástico blanco separados por tornillos largos, una versión casera de las garitas meteorológicas. Cuesta menos de 5 euros y baja el error por radiación solar de varios grados a menos de uno. Si quieres guardar los datos, añade un módulo de tarjeta microSD y escribe una línea cada minuto con los minutos transcurridos, la temperatura y la humedad.
Cómo arreglar lecturas raras
Si el monitor muestra errores, sigue este orden antes de tocar nada más:
- Siempre "nan": revisa la pata de datos y el número de pin en el código. Comprueba también que el tipo sea DHT22 y no DHT11, porque usan formatos de datos distintos.
- "nan" de vez en cuando: falta la resistencia de pull-up o el cable es demasiado largo. Con más de 2 o 3 metros, baja la resistencia a 4,7 kΩ.
- Valores que no cambian: estás leyendo más rápido que cada 2 segundos. El sensor devuelve la última medida guardada.
- Temperatura un par de grados alta: el sensor está pegado al regulador del Arduino o a una pantalla, que calientan. Sepáralo al menos 5 centímetros.
Un multímetro ayuda mucho aquí. Mide que llegan 5 V entre VCC y GND en el propio sensor. Si no sabes por dónde empezar, nuestra guía para usar un multímetro por primera vez lo explica sin complicaciones.
No siempre es el mejor sensor barato
En muchos foros se recomienda el DHT22 como el sensor de humedad definitivo para cualquier proyecto. No estoy de acuerdo. Para un taller o una primera estación es perfecto, pero tiene límites reales.
Es lento, con una lectura cada 2 segundos. Su protocolo de un solo cable es delicado con interrupciones, así que convive mal con tiras LED direccionables o con código que bloquea mucho tiempo. Y en ambientes con humedad cerca del 100 % durante semanas, como un invernadero cerrado, su precisión se degrada.
Si tu proyecto ya usa el bus I2C, por ejemplo con una pantalla LCD I2C con Arduino, un sensor como el SHT31 o el BME280 comparte los mismos dos cables, responde más rápido y suele ser más estable. Cuestan algo más, entre 4 y 10 euros, pero te ahorras un pin y muchos dolores de cabeza.
Preguntas frecuentes
¿El DHT22 necesita resistencia?
Sí, necesita una resistencia de pull-up de entre 4,7 kΩ y 10 kΩ entre VCC y la línea de datos. Si compras el sensor montado en un módulo de tres pines, normalmente ya la lleva incluida. Sin ella, las lecturas fallan de forma intermitente.
¿Por qué mi DHT22 da "nan"?
Casi siempre es un problema de conexión, de pin mal indicado en el código o de tipo de sensor equivocado. También aparece si se lee más de una vez cada 2 segundos o si falta la resistencia de pull-up. Revisa esos cuatro puntos en ese orden.
¿Qué diferencia hay entre el DHT11 y el DHT22?
El DHT22 mide un rango mucho más amplio de temperatura y humedad y con más precisión, sobre todo en temperatura. El DHT11 es más barato y algo más rápido, pero solo cubre de 0 a 50 °C. Para proyectos al aire libre o mediciones fiables, el DHT22 es la mejor opción de los dos.
More in Electrónica
Electrónica
Cómo usar el sensor ultrasónico HC-SR04 con Arduino
Conectaste el módulo, cargaste un ejemplo copiado de un foro y el monitor serie solo muestra ceros, o peor, números que saltan...
Electrónica
Cómo usar una pantalla LCD I2C con Arduino paso a paso
Conectas la pantalla, subes el código, la retroiluminación se enciende y no aparece ni una letra.
Electrónica
Cómo usar un servomotor con Arduino sin que tiemble
Conectas el servomotor con Arduino, subes el ejemplo de barrido y el servo tiembla, zumba o, peor, la placa se reinicia cada...