Existen varios sensores de humedad relativa, entre los cuales el DHT11 y el DHT22 son de los más comunes. El DHT11 es muy barato (alrededor de 2-3€ si lo compras desde China, 8-10€ en España), pero con algo menos de precisión tanto en la humedad como en la temperatura que la que da su hermano mayor, el DHT22, que es algo más caro. Puede verse una tabla comparativa de ambos modelos aquí.
Vamos a empezar conectando el sensor de humedad y temperatura DHT11 a la Raspberry Pi y tomar lecturas. Y después haremos lo mismo con el DHT22.
Hace falta además una resistencia entre el pin de alimentación y el de datos, aunque se puede comprar el sensor en una mini placa con la resistencia incorporada, como el caso del sensor que tengo yo y que se ve en la imagen de arriba.
En muchas páginas se explica cómo conectar el sensor a la Raspberry Pi (ver más abajo), y todas lo hacen al pin GPIO4 (pin 7). Como en el proyecto que estoy haciendo ahora mismo ya tengo conectado ahí un termómetro DS18B20 (ver este post), voy a conectarlo el GPIO5 (pin 29). Bastará con cambiar el código según a dónde lo conectemos.
Entonces lo conecto así:
- GND del sensor a un pin GND de la RPi, en mi caso al 20
- S (datos) al GPIO 5 (pin 29 de la Raspberry Pi)
- 3V3 a uno de los 3V3 de la Raspberry Pi, en mi caso al 17.
Y ahora, el código para tomar las lecturas. Googleando se pueden encontrar varias formas de hacerlo. El problema en todas ellas es que linux no es un sistema operativo de tiempo real, y como el sensor requiere medidas muy rápidas consecutivas, esto puede suponer un problema. He visto varios ejemplos en Python y en C; en C funciona mejor porque es de más bajo nivel. De todas maneras, en todos los casos advierten de que en ocasiones da error en la lectura y hay que intentarlo varias veces.
Vamos a emplear el código de Adafruit. Es necesario hacer lo siguiente:
git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT
Hay que tener instaladas las siguientes librerías (que tal vez ya tengas instaladas):
sudo apt-get update sudo apt-get install build-essential python-dev python-openssl
Y ahora compilamos la librería de Adafruit:
sudo python setup.py install
Tras instalarse, probamos a ver si funciona:
cd examples sudo ./AdafruitDHT.py 11 5
Con esto estoy diciendo que lea los datos del sensor DHT11 (podría ser el DHT22 o el AM2302), conectado al pin GPIO 5.
Y con esto obtenemos la lectura de temperatura y humedad:
Temp=28.0*C Humidity=29.0%
¡Funciona!
Vamos a probar ahora el sensor DHT22. Lo primero que tengo que hacer es soldarle la resistencia. En algunos sitios he visto que la resistencia debe ser de 4.7KΩ, y en otros, que debe ser de 10KΩ.
Y lo conecto a la Raspberry Pi de la siguiente forma:
Sigo los pasos de instalación de más arriba, y cuando ejecuto:
sudo ./AdafruitDHT.py 22 4
Tras un par de segundos obtengo:
Temp=29.0*C Humidity=26.4%
¡Funciona!
Los dos sensores funcionando al mismo tiempo, el DHT22 conectado al GPIO4, y el DHT11 al GPIO5:
Referencias
- http://fpaez.com/sensor-dht11-de-temperatura-y-humedad/
- http://www.uugear.com/portfolio/dht11-humidity-temperature-sensor-module/
- https://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/wiring
Muchisomas gracias.
El primer experimento que realizo con mi raspberry con periféricos conectados a los GPIO y me a funcionado todo al 100%.
Un saludo.
Muchas gracias, Damian, y bienvenido a este entretenido mundillo… 🙂
Gracias. Muy interesante.
Yo quería encontrar un modo económico de obtener varias lecturas de temoeratura y humedad en diferentes dependencias. ¿Sabes si pueden utilizarse varios dht22 en paralelo y la distancia a la que pueden separarse de la raspberry?
Gracias.
Hola. Sí se pueden conectar varios DHT22 a la Raspberry Pi; no sé si en paralelo al mismo puerto, pero sí al resto de puertos que tengas disponibles. Respecto a distancia, pues me imagino que lo largo que te dén los cables, aunque a lo mejor en ese caso podrías plantearte una Raspberry por habitación, u algún otro sistema más específico…
Muchas, muchas, muchas gracias.
Después de probar muchos códigos con Python y demás, esto me ha funcionado sin problemas, a la primera y perfectamente.
Reitero las gracias, hasta el infinito y más allá jjjjjj
Acabo de llegar a este mundillo y me encanta la verdad.
ahora probando con sensor ultrasonido HC-SR04, pero nada. Avisaré si consigo algo.
Saludosssssss
Estimado Carlini, gusto saludarte y decirte gracias por compartir tus conocimientos. En esta ocasion te queria preguntar si es posible instalar ambos sensores a un Raspberry Pi 2 Model B ARM7 , y asi poder tener el control online de estos datos climaticos.
Quedo a tus ordenes deseandote un buen dia.
Un cordial saludo.
Hola, Raúl:
Hasta donde yo sé, sí se puede instalar ambos sensores en una Raspberry Pi 2 Model B.
Un saludo.
Hola, les comparto un proyecto similar en que estuve trabajando:
http://www.creandocosas.com/sensor-de-humedad-con-raspberry-pi/
Me he quedado flipando con eso de que «linux no es un sistema operativo de tiempo real».
Hola, me da error al tratar de compilar la libreria de adafruit…
Estoy tratando instalar el DHT 11, el error que me aparece es el siguiente:
python: can’t open file ‘setup.py’: [Errno 2] No such file or directory
Si alguien puede ayudarme me haría un gran favor.
Un saludo!!
Parece que no estás en el directorio donde descargaste la librería de Adfruit, ¿puede ser? Comprueba que hiciste
tras descargar la librería y antes de compilar…
Gracias por contestar, lo he intentado pero me sigue dando error, concretamente este error:
/usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
# include
^
compilation terminated.
error: command ‘arm-linux-gnueabihf-gcc’ failed with exit status 1
Muchas gracias, espero respuesta.
Un saludo
Alguien sabe como se pueden guardar los datos una vez pones el comando?
Gracias
quisiera saber como leer los datos que envia el dth22 porque tengo una especie de carta de tiempo del 11 pero no se como adquirir los datos que envia el 22
Como yo podria aprovechar los datos del sensor? ej. mi idea es comenzar con el sensor en el baño y ante el vapor del lluvero mas en invierno hacer que encienda el extrator y en verano no..
Gracias..