Pluviómetro calcular agua caída
Teoría
Como bien dice su nombre lo que hace es medir la cantidad de lluvia caída en untamaño de superficie determinado. Tiene el mismo funcionamiento que el anemómetro.
Para detectar la lluvia que cae en la superficie del recolector del pluviómetro lo que hace es canalizar toda la lluvia por un agujero puesto en el centro de recolector y dejar caer la lluvia en un depósito de una capacidad aproximada de 1.5 ml el cual por su propio peso vuelca para descargar el agua y se pone el otro deposito en su posición para recoger la lluvia. Cada vez que hace la acción de vertido el sensor envía un pulso a la Raspberry Pi.
Debe estar en una posición nivelada para que los vertidos sean en el momento justo y también que sea estable para evitar lecturas falsas cuando hay fuertes rachas de viento.
Según la ficha técnica del fabricante nos dice que cada vertido equivale a 0.2794L/m3. Lo necesitaremos a la hora de calcular el volumen total de agua caído en cada ciclo.
Cableado
En el caso del pluviómetro solo tendrá dos cables los cuales estarán posicionados en el centro del conector (posiciones 3 y 4 según la siguiente imágen):
La conexión en este caso es bastante simple:
- Cable 3: este se conecta a un pin GND de la placa.
- Cable 4: este se conecta al pin GPIO6 de la placa.
Funcionamiento
La clase se llama Pluviometro
y en este caso solo tenemos que importar la librería gpiozero
. Esta librería nos devolverá nos avisará de que la cubeta ha sido descargada gracias al método when_pressed
que sumará al contador de vertido +1 para determinar al finalizar el ciclo cuantas veces ha vertido.
La medición es continua por lo que el constructor debe iniciarse al inicio del ciclo y devolver la cantidad de lluvia al finalizarlo. Cuando haya finalizado el ciclo nos devolverá la cantidad de lluvia recogida.
Al ser lecturas totalmente analógicas el programa no generará errores cuando el sensor deje de funcionar o algún cable falle.
Código
Test
En este apartado puedes obtener el código test para poder leer los pulsos del pluviómetro.
from gpiozero import Button
puerto_sensor = Button(5)
TAMANO_CUBETA = 0.2794
contador = 0
def cubeta_pulso():
'''muestra la cantidad total de lluvia recogida'''
global contador
contador = contador + 1
print(contador * TAMANO_CUBETA)
# ejecuta la cunfión cada vez que detecta un pulso
puerto_sensor.when_pressed = cubeta_pulso
Clase
El script del pluviometro tiene que cumplir las siguientes condiciones:
- Se creará una clase para que sea más fácil trabajar con el sensor.
- El constructor inicia la variable litros a cero.
- Tener un método get para devolver la cantidad de litros recogidos en una hora.
- Tener la capacidad de reiniciar los valores cuando el porgrama principal se lo pida.
- Calcular la cantidad de lluvia caida conforme los pulsos recibidos y la constante de litros por superficie.
Teniendo todo lo anterior en cuenta esta parte del programa nos queda de la siguiente forma:
from gpiozero import Button
PUERTO_SENSOR = Button(5)
TAMANO_CUBETA = 0.2794
contador = 0
class Pluviometro:
'''Lee la cantidad de lluvia en un intervalo de tiempo'''
def __init__(self):
self.litros = 0
def cubeta_pulso(self):
'''Suma 1 cada vez que la cubeta del pluviometro se vacia.'''
global contador
contador += 1
def calcular_lluvia(self):
'''Devuelve la cantidad de lluvia en litros con un decimal'''
global contador
self.__class__.litros = contador * TAMANO_CUBETA
def get_litros(self):
'''Devuelve los litros de agua acumulados en un metro cúbico
con un solo decimal.'''
return str(round(self.__class__.litros, 1))
def reiniciar_valores(self):
'''Reiniciamos los valores de las variables para empezar de nuevo el siguiente
ciclo.'''
global contador
contador = 0
# Envía un pulso cada vez que la cubeta se vacia
PUERTO_SENSOR.when_pressed = cubeta_pulso