Translate

viernes, noviembre 18, 2016

Sensores de humedad y temperatura DHT11 y DTH22 en la Raspberry Pi



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.
Sensor de humedad DTH11
Sensor de humedad DHT11
Sensor de humedad DHT22
Sensores de humedad y temperatura DHT11 y 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Ω.
thumb_IMG_7031_1024
Soldando la resistencia al sensor DHT22
thumb_IMG_7032_1024
Y lo conecto a la Raspberry Pi de la siguiente forma:

thumb_IMG_7033_1024
Sensor DHT22 conectado a la Raspberry Pi
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:
Sensores DHT11 y DHT22 conectados a la Raspberry Pi
Sensores DHT11 y DHT22 conectados a la Raspberry Pi

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

No hay comentarios: