Hacklab ASU logo Hacklab ASUHacer, reparar, aprender juntos
Electrónica

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.

A white temperature and humidity sensor on a breadboard wired to a blue Arduino board with jumper cables on a workbench

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ísticaDHT22DHT11
Rango de temperatura-40 a 80 °C0 a 50 °C
Precisión de temperaturaunos ±0,5 °Cunos ±2 °C
Rango de humedad0 a 100 %20 a 80 %
Precisión de humedad±2 a 5 %±5 %
Lecturasuna cada 2 segundosuna por segundo
Precio aproximado3 a 6 euros1 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:

  1. Pata 1, VCC: a 5 V del Arduino.
  2. Pata 2, datos: al pin digital 2.
  3. Pata 3: no se conecta.
  4. 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:

  1. Incluye la librería DHT.h.
  2. Crea el objeto del sensor indicando el pin 2 y el tipo DHT22.
  3. En setup, inicia el puerto serie a 9600 baudios y llama a dht.begin().
  4. En loop, espera 2000 milisegundos con delay.
  5. Lee la humedad con dht.readHumidity() y la temperatura con dht.readTemperature().
  6. Comprueba con isnan() si alguno de los dos valores es inválido. Si lo es, imprime un aviso y vuelve a empezar el loop.
  7. 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.

LB
Lucía Benítez

Lucía empezó reparando radios viejas en la mesa de la cocina y hoy escribe sobre circuitos, Arduino y radiofrecuencia sin dar nada por sabido.

More posts by Lucía

More in Electrónica

01doorganico 084goad 3hot8 4465456 after5internprogram ahandfulofblessings ahmadpc ahomcybersecurity allodialresources annodex antiquesandperiodcollectibles aotc asianworldkashmir beedlectrics bloggertemplatefree bluefeatheragency bodyweightsolution campaign08blog carfixadvisor catstreetcollective cbstvsports cnfanspurchasing committeeof500yearsofdignityandresistance covertopsdjs cs-kaiyuangame cuestacomunicaciontotal cxoutlet dancebetgame deskgearhub destinyvillastay detectmagazine di33 diamondsteelbuildings donmo dyanadropship emarsysfinance emimattl escapechan eskitarih evautoplay everythingweddings-orlando farmzone feedviewerapp foxstudiosscratch gamevui123 gleasongrade greetingsday haskell iw-kaiyun jagoanproperti jilidskripsi joltbusinessfinance juegodepokergratis juegospucca kaeru-festival latestmehndidesigns lestanzediottaviano litemagazines localcommunityhero lustrsazan mariashebets menswheels newwebstechs1 nikkit ootheday oxigenvpn plurfitness prefetial probudgetcarpetcleaning psychicmrsmartin pyaten qvantor rejoignezlogis rexzbot riselayouts ruchin rwxqsgd5 sakaltime shibiaowang shop-bot skrtips strcoding tetapatrium topselller uneplanteartificielle vipertechcr webtech1223411 wo-kygaming yamaha-mekar yeknava yoybuysheets zenunwa yamaha-mekar jilidskripsi ankertoto ankertoto ankertoto ankertoto