98 - Medir humedad y temperatura con la Raspberry

98 - Medir humedad y temperatura con la Raspberry

Con un sensor combinado puedes medir humedad ambiente y temperatura con la Raspberry registrarlas y hacer un seguimiento de la evolución de estos parámetros

1:25
-3:15

Esto de la climatología es una de las cosas que siempre me ha llamado poderosamente la atención. Una de mis mayores ilusiones sin lugar a dudas, es la posibilidad de tener mi propia estación meteorológica. Poder hacer mis propias mediciones y llevar un seguimiento estadístico de la evolución de temperatura, humedad, velocidad del viento y resto de parámetros, es algo que realmente me fascina. Sin embargo, siempre me ha parecido una afición relativamente cara, y una razón por la que siempre la he dejado de lado. Pero, desde que me he metido con esto de ver la influencia de las condiciones externas en el funcionamiento de la Raspberry Pi 4, no paro de darle vueltas. Así quiero tener un perfecto estudio comparando la temperatura de la Raspberry Pi con la temperatura ambiente para ver como afecta… y desacoplar temperatura ambiente de la evolución de la Raspberry. Vaya, básicamente se trata de medir humedad ambiente y temperatura con la Raspberry, y representarla gráficamente.

Dicho esto, en este nuevo episodio del podcast, quiero explicarte como he incorporado un sensor de temperatura y humedad. El objeto es llevar un seguimiento de estos dos parámetros. Eso si, en el interior de casa. Pero, es que, como he dicho, se trata de conocer la evolución de la temperatura de la Raspberry.

Medir humedad y temperatura con la Raspberry

Medir humedad y temperatura con la Raspberry

Existen diferentes sensores que te permiten conocer la temperatura ambiental. Sin embargo, ya que me metía, he decidido que el sensor también permitiera conocer la humedad relativa. De esta forma, y de una sola lectura podía llevar un seguimiento de ambos parámetros.

Entiendo que en condiciones normales, la humedad relativa no le afectará a la Raspberry. Sin embargo, te puedo asegurar que a mi si que me afecta. Y como me afecta, y la diferencia no es sustancial, he decidido monitorizarlas ambas, durante unos semanas, meses o el tiempo que sea.

El sensor

Para medir temperatura y humedad hay dos sensores que los puedes encontrar en casi cualquier sitio. Se trata del DHT11 y el DHT22. Son dos sensores de una misma familia.

Se trata de sensores muy extendidos, aunque básicos y algo lentos, pero con un precio relativamente bajos. Precisamente esta característica es la que justifica que estén tan extendidos. Al final, lo que tratamos es monitorizar de alguna manera, temperatura y humedad, sin que nos cueste un ojo de la cara.

Con esto de llamarlos lentos a los sensores, simplemente me refiero a que la respuesta a los cambios que se producen no es instantánea si no que requiere de un tiempo.

Cada uno de estos dispositivos está constituido por un sensor de humedad y un termistor. Disponen de un chip que realiza la conversión analógico a digital, de forma que la señal digital es fácilmente legible por cualquier microcontrolador.

Existen algunas diferencias entre el DHT11 y el DHT22. Pero básicamente se reducen a que el segundo tiene una mayor precisión, sobre todo en lo que se refiere a la temperatura y que el rango de temperatura oscila entre los -40 y los 80, mientras que en el caso del hermano económico parte de los 0 hasta los 50 grados celsius. En el caso de las humedades, el mas económico va de 20 a 80% mientras que el DHT22 barre todo el espectro.

En mi caso particular he probado diferentes opciones para estos sensores. He probado únicamente sensores de temperatura y sensores combinados de humedad y temperatura. También he probado un sensor combinado que no requiere de la resistencia que veremos mas adelante porque la lleva incorporado el propio sensor.

1 Wire Interface

Ahora que ya tienes tu sensor que te va a permitir tener información de parámetros como la temperatura o la humedad, queda integrarlos con la Raspberry Pi.

Con este fin la Raspberry tiene un 1-Wire bus, que puedes utilizar a través del GPIO4. Se trata de un bus que tiene una velocidad de lectura lenta, pero es lo mas habitual para la utilización con los sensores que has visto hasta el momento.

1-Wire es un protocolo de comunicaciones del tipo maestro esclavo, con una única línea de datos, y con una referencia a tierra común de todos los dispositivos. La línea de datos requiere de una resistencia conectada a la alimentación, y que verás en muchos esquemas de conexión.

GPIO

Uno de los problemos a los que siempre me enfrento a la hora de cablear la Raspberry es reconocer cual es el GPIO al que tengo que conectar. Siempre termino buscando algún esquema en internet donde quede reflejado todos los GPIO. Sin embargo, no es necesario. Existe un paquete que te pone toda la información que necesitas en el terminal. Se trata de gpiozero. Este paquete lo puedes instalar en tu Raspberry ejecutando la siguiente instrucción,

sudo apt install python3-gpiozero

Una vez instalado, tan solo tienes que ejecutar pinout en la Raspberry que quieras para ver el esquema de coneción, con la posición y nombre para cada uno de los GPIO.

Pero además esta librería de Python te da mucho mas juego, porque te permite integrar diferentes elementos y dispositivos. No te preocupes, porque tarde o temprano volveré a dedicar un nuevo capítulo del podcast. Y si tienes mucha prisa, no tienes mas que darle un vistazo a la documentación del proyecto gpiozero.

Esto es parte de lo que se muestra al ejecutar pinout,

J8:
   3V3  (1) (2)  5V    
 GPIO2  (3) (4)  5V    
 GPIO3  (5) (6)  GND   
 GPIO4  (7) (8)  GPIO14
   GND  (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND   
GPIO22 (15) (16) GPIO23
   3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND   
 GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8 
   GND (25) (26) GPIO7 
 GPIO0 (27) (28) GPIO1 
 GPIO5 (29) (30) GND   
 GPIO6 (31) (32) GPIO12
GPIO13 (33) (34) GND   
GPIO19 (35) (36) GPIO16
GPIO26 (37) (38) GPIO20
   GND (39) (40) GPIO21

Y que te da idea donde tienes que conectar cada elemento.

Montaje para medir humedad y temperatura con la Raspberry

En la siguiente imagen encontrarás un esquema del montaje realizado en el caso de que el sensor de humedad y temperatura no lleve incorporado la resistencia.

Medir humedad y temperatura con la Raspberry. Montaje 1.

Mientras que si tu sensor de humedad y temperatura lleva incorporado la resistencia, el cableado es bastante simple y queda conforme ves en el siguiente esquema de la captura de pantalla.

Medir humedad y temperatura con la Raspberry. Montaje 2.

Mi caso es el segundo, es decir, el sensor lleva incorporada la resistencia, con lo que he prescindido de la placa de pruebas, y los cables van directos desde la Raspberry al sensor.

Un poco de Python

Para la lectura de temperatura y humedad relativa del sensor utilizo un módulo de Python implementado por Adafruit y que está disponible en un repositorio en GitHub, Adafruit_Python_DHT.

La instalacion de este módulo es realmente sencilla. Solo tienes que ejecutar las siguientes instrucciones,

sudo apt update
sudo apt install python3-pip
sudo python3 -m pip install --upgrade pip setuptools wheel
sudo pip3 install Adafruit_DHT

Una vez instalado el módulo he implementado el siguiente script a partir de los ejemplos y la documentación disponible en Adafruit,

#!/usr/bin/python
import sys
import Adafruit_DHT as dht

sensor = dht.DHT22
pin = 4
humidity, temperature = dht.read_retry(sensor, pin)
print('Temp={0:0.1f} *C,  Hum={1:0.1f} %'.format(temperature, humidity))
sys.exit(0)

Integración con RPi Monitor

Como te he comentado al principio del podcast la idea es la de poder independizar las mediciones de temperatura de la Rasbperry 4, de la temperatura ambiente. Para esto, me resultaba necesario mostrar tanto la temperatura ambiente como la humedad relativa en los gráficos de RPi Monitor.

Esto es relativamente sencillo, mas si tenemos en cuenta que RPi Monitor ya tiene una implementación de esto. Sin embargo, como no me podía estar quieto, la he personalizado para mis necesidades. Por un lado, las he mostrado en forma de reloj, tal y como puedes ver en la siguiente captura de pantalla,

Medir humedad y temperatura con la Raspberry. Mediciones

Por otro lado he combinado la lectura de la temperatura ambiente y la humedad relativa, con la temperatura de la Raspberry y otros parámetros, tal y como puedes ver en la siguiente captura de pantalla,

Medir humedad y temperatura con la Raspberry. Estadísticas.

Para hacer esto, he creado un nuevo archivo /etc/rpimonitor/template/dht22.conf para RPi Monitor con la siguiente definición,

# Get dynamic data
dynamic.21.name=living_room_temp,humidity
dynamic.21.source=dht
dynamic.21.regexp=Temp=(\S+) \*C,  Hum=(\S+)
dynamic.21.postprocess=
dynamic.21.rrd=GAUGE

# Add a line of status in page number 2
web.status.1.content.21.name=Ambiente
web.status.1.content.21.icon=cpu_temp.png
web.status.1.content.21.line.1=JustGageBar("Temperatura ambiente", data.living_room_temp+"°C", 10, data.living_room_temp, 60, 100, 80)
web.status.1.content.21.line.2=JustGageBar("Humedad ambiente", data.humidity+"%", 50, data.humidity, 100, 100, 80)


web.statistics.1.content.21.name=Ambiente
web.statistics.1.content.21.graph.1=living_room_temp
web.statistics.1.content.21.graph.2=humidity
web.statistics.1.content.21.ds_graph_options.living_room_temp.label=Temperatura ambiente (deg C)
web.statistics.1.content.21.ds_graph_options.humidity.label=Humedad (%)
web.statistics.1.content.21.ds_graph_options.humidity.yaxis=2
web.statistics.1.content.21.graph_options.legend= { position: "sw"}
web.statistics.1.content.21.graph_options.y2axis={ position: "right", min: 0, max: 100 }

web.statistics.1.content.22.name=Combinada
web.statistics.1.content.22.graph.1=living_room_temp
web.statistics.1.content.22.graph.2=humidity
web.statistics.1.content.22.graph.3=soc_temp
web.statistics.1.content.22.graph.4=cpu_voltage
web.statistics.1.content.22.graph.5=load15
web.statistics.1.content.22.graph.6=cpu_frequency
web.statistics.1.content.22.ds_graph_options.living_room_temp.label=Temperatura ambiente (°C)
web.statistics.1.content.22.ds_graph_options.humidity.label=Humedad (%)
web.statistics.1.content.22.ds_graph_options.soc_temp.label=Temperatura CPU (°C) 
web.statistics.1.content.22.ds_graph_options.load15.label=Load 15min
web.statistics.1.content.22.ds_graph_options.living_room_temp.yaxis=1
web.statistics.1.content.22.ds_graph_options.soc_temp.yaxis=1
web.statistics.1.content.22.ds_graph_options.humidity.yaxis=2
web.statistics.1.content.22.ds_graph_options.cpu_voltage.yaxis=3
web.statistics.1.content.22.ds_graph_options.load15.yaxis=4
web.statistics.1.content.22.ds_graph_options.cpu_frequency.yaxis=5
web.statistics.1.content.22.graph_options.legend= { position: "sw"}
web.statistics.1.content.22.graph_options.y2axis={ position: "right", min: 0, max: 100 }
web.statistics.1.content.22.graph_options.y3axis={ position: "right", min: 0, max: 3 }
web.statistics.1.content.22.graph_options.y5axis={ position: "right", min: 0, max: 2000 }

Conclusión

Con esto ya tengo todos los elementos necesarios para realizar las diferentes pruebas con el objetivo de concluir cual es el mejor sistema para tener la Raspberry Pi 4 perfectamente refrigerada. Pero esto será objeto de un futuro episodio del podcast.


Más información,

3 comentarios en “Medir humedad y temperatura con la Raspberry

  1. LU
    Luis hace 2 años

    he recorrido todos los tutoriales, hasta ahora no las puedo leer la T y H, ya estamos en version python 3.7.9, instalado por raspbian, es eso el problema de no poder leer los resultados de los sensores, hasta he visto que tienen que instalar el python 2.
    ayuda por favor

    1. AT
      atareao hace 2 años

      Lo que he comentado en este artículo es para Python3
      Un saludo.

  2. ED
    eduardo heredia arancibia hace 2 años

    que tipo de sensor utilizaste para tener la resistencia integrada dentro del sensor,
    si pudiera ponerme en contacto me seria de mucha ayuda

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *