Cómo instalar un sistema de riego por gravedad (con gestión remota)
Si dispones de pozo en tu vivienda, finca o terreno, o simplemente quieres instalar un riego por goteo y no tener que preocuparte por la sobrepresión de la red de suministro, a continuación te mostramos cómo hemos instalado un sistema de riego por gravedad para un huerto de unos 300 m². Utilizaremos materiales sencillos y domótica low cost accesible a cualquiera (una simple Raspberry Pi), sin las complicaciones de los sistemas de riego propietarios, caros y complejos.
Esquema y partes de la instalación
- Depósito IBC de 1.000 litros (en Wallapop los hay a patadas, son relativamente baratos). Si es de material opaco, mejor.
- Interruptor de flotador reed. Con uno es suficiente, si bien podemos colocar dos.
- Adaptador para el tapón del depósito IBC. Verifica bien las dimensiones y la rosca de salida para después conectar con el tubo de 32mm.
- Tubo de polietileno de 32mm agrícola (el que tiene pintada una raya verde), y sus correspondientes accesorios (tés, codos, etc.).
- Filtro de agua con malla, de al menos 1″.
- Collarín de 32mm para las salidas a tubo de 16mm, y sus correspondientes accesorios.
- Cinta de riego por goteo y sus accesorios (empalme con tubo de 16mm y tapones).
- Raspberry pi, para el control del encendido y apagado de la bomba o electroválvula.
- Cable de red para exteriores, cualquier categoría, para conectar los interruptores de flotador con la raspberry pi.
Ejecución de la instalación
Lo primero y más importante es elegir la ubicación del depósito de agua. Cuanto más se eleve, mejor. Si bien el sistema podría funcionar a alturas más bajas, recomendamos instalarlo a metro y medio de altura como mínimo, lo que nos dará una presión aproximada de 0,1 bares. En nuestro caso la altura será de unos 2 metros, que es más que suficiente para las cintas de goteo. Si optas por otro sistema de goteo, asegúrate de que funciona a muy bajas presiones (por ejemplo los autocompensantes suelen requerir 0,5 bares como mínimo).
Para elevar el depósito, y considerando que puede llegar a pesar una tonelada estando lleno de agua, es imprescindible una buena base. En nuestro caso hemos optado por reutilizar unos tubos de riego de aluminio que el cliente tenía en la finca, realizando una buena cimentación y rellenando dichos tubos con hormigón y varilla de acero de 8mm, convirtiéndolos en un buen pilar. Asegúrate de excavar bien profundo y de que la base de hormigón sea suficiente para que los pilares tengan buena estabilidad, y por supuesto vigila que estén rectos con un nivel y que queden exactamente a la misma altura. A la hora de verter el hormigón, apuntala bien los tubos con hierros o maderas auxiliares puesto que también lo vamos a verter dentro de los mismos, y van a acabar pesando muchísimo.
También se han colocado unos perfiles en cruz (los típicos de estantería metálica) entre los pilares, para dar estabilidad al conjunto. En total han sido 5 pilares, incluyendo uno en el medio, dado que el pallet de plástico que viene con el depósito cuenta con esos 5 apoyos. El resultado es espectacular, mucho más sólido y robusto de lo que inicialmente imaginamos.
Una vez colocado el depósito en su sitio, debemos canalizar el agua desde el pozo o grifo hasta el mismo. En este caso hemos optado por instalar tubo de polietileno agrícola de 50mm, dado que la bomba que se instalará tiene un caudal considerable. El tubo se colocará desde la bomba sumergida hasta la abertura superior del depósito. Esto dependerá mucho de cada situación, pero si vas a utilizar una bomba para extraer de un pozo asegúrate de que la misma puede elevar el agua hasta la altura deseada, así como del caudal de salida de la misma para elegir el diámetro de tubo apropiado. En este caso en particular utilizaremos una bomba sumergible Sulzer J5W, monofásica a 230V, con una elevación de hasta 11 metros y un consumo estabilizado de 0.48kW. Debe asegurarse una buena sujeción de la bomba, de forma que no quede suspendida del tubo, por ejemplo con una cadena.
Una vez resuelta la alimentación del depósito, comenzamos con el sistema de riego en si. Lo más recomendable es sacar un codo de 90° desde el adaptador para el tapón de salida del depósito, y desde el mismo un tubo recto de polietileno agrícola de 32mm hasta el suelo (o hasta una cota inferior si se quiere realizar la distribución enterrada, como en este caso). Es importante no colocar más elementos en este tramo, dado que la presión del sistema depende directamente de la columna de agua en línea recta. De colocarlos aquí, sufriremos pérdidas de carga considerables que harán que toda la instalación que funcione a gravedad tarde o no llegue a coger la presión necesaria.
Es muy recomendable, ya en el tramo de tubo horizontal en el suelo y preferiblemente dentro de una arqueta, colocar un filtro de agua con malla. Esto evitará que cualquier suciedad proveniente del agua del pozo nos atasque los goteros. En este sentido, es importante cubrir el depósito de agua con un plástico opaco (o adquirirlo directamente opaco), para evitar la formación de algas que pueden obturar el filtro en cuestión de días. Dicho filtro deberá ser fácilmente accesible, dado que es conveniente limpiarlo cada semana, de nuevo para evitar pérdidas de presión.
Desde aquí, ya podemos realizar el reparto en tubo de 32mm hasta donde se considere, y finalmente sacar las líneas de riego con tubo de 16mm utilizando los correspondientes collarines. El tubo de 32mm es más que suficiente para 300 m² de zona a regar. En nuestro caso, se ha decidido instalar todo el reparto enterrado, dado que el huerto en cuestión consiste de bancales elevados y queda mucho más estético y cómodo. Debe asegúrase que se colocan las llaves de paso necesarias para abrir o cerrar determinadas zonas de riego o la instalación entera si se ha de hacer mantenimiento.
Gestión remota del riego
Para llevar a cabo el llenado del tanque se utilizará una Raspberry Pi (en este caso un modelo 3B). Es necesario instalar el sistema operativo Raspberry Pi OS, en este caso sin escritorio, lo que quiere decir que gestionaremos todo a través de línea de comandos abriendo una sesión SSH. Hay miles de tutoriales para instalar el sistema operativo y conectarte al cacharro vía SSH. También es necesario instalar el interruptor de flotador reed en la parte superior del depósito (y opcionalmente otro en la parte inferior), simplemente perforándolo con cuidado de respetar el diámetro del mismo, y conectar los dos cables del mismo a la Raspberry Pi según los esquemas que mostramos más adelante. La lógica del sistema será la siguiente:
- Se dará (o se programará) la orden de llenado del depósito.
- Un relé de 5V activará un contactor.
- El contactor alimentará una toma de enchufe schuko a la que estará conectada la bomba del pozo (o electroválvula si llenamos desde un grifo).
- El depósito comenzará a llenarse hasta que se cierre el interruptor de flotador reed. En este momento, el relé de 5V dejará de alimentar al contactor, lo que apagará la bomba / electroválvula.
- Adicionalmente instalaremos un interruptor manual por si queremos activar la bomba o electroválvula de forma manual.
- En todo momento habrá un script monitorizando el interruptor de flotador reed, y el estado del contactor, para asegurar que se apaga cuando debe.
El esquema de instalación será el siguiente.
- Conectamos las sonda superior del depósito al GPIO 25 (gpiosondasuperior).
- Conectamos la sonda inferior del depósito al GPIO 22 (gpiosondainferior).
- Conectamos el relé 1 de 5V (IN1) al GPIO 23 (gpiobomba).
- Conectamos el relé 2 de 5V (IN2) al GPIO 24 (gpiobombamanual).
- Conectamos las bornas comunes de ambos relés (COM1 y COM2) a la fase de la instalación.
- Conectamos la borna de salida del relé 2 normalmente cerrada (NC2) a la entrada del interruptor manual.
- Conectamos la borna de salida del relé 1 normalmente abierta (NO1) y la salida del interruptor manual a una de las entradas de la bobina que activa el contactor.
- Conectamos la otra entrada de la bobina al neutro de la instalación.
- Conectamos el secundario del contactor al GPIO 26 (gpiocontactor), para monitorizar el estado del mismo.
- Conectamos la parte contactora al suministro eléctrico y a la bomba / electroválvula.
Una vez realizadas todas las conexiones, es momento de conectarse a la Rasberry Pi abriendo una sesión SSH desde otro ordenador. Los siguientes scripts en Python servirán para llenar el depósito y para monitorizar el estado de las sondas y el contactor. Naturalmente pueden ser adaptados a las necesidades de cada situación, al fin y al cabo la finalidad en este caso es disponer de un sistema de riego fiable que se pueda activar en remoto o programar. Los ficheros se ubicarán en la carpeta del usuario pi (/home/pi), y generarán sus respectivos logs en este mismo directorio.
Script para monitorizar el estado de las sondas y del contactor: es fundamental para poder comprobar el nivel del deposito de agua, así como si la bomba se encuentra encendida. Además actuará en caso de que detecte la sonda superior y el contactor de la bomba activados para evitar que el agua rebose, incluso si activamos el contactor con el interruptor manual y nos olvidamos de apagarlo.
#!/usr/bin/env python3
import logging
import RPi.GPIO as GPIO
import time
from time import sleep
#set up logging
logging.basicConfig(filename='sondas.log', encoding='utf-8', level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S %p')
#set up GPIOs
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
gpiosondainferior = 22
gpiosondasuperior = 25
gpiocontactor = 26
gpiobomba = 23
gpiobombamanual = 24
GPIO.setmode(GPIO.BCM)
GPIO.setup(gpiosondainferior, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(gpiosondasuperior, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(gpiocontactor, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(gpiobomba, GPIO.IN)
GPIO.setup(gpiobombamanual, GPIO.IN)
previoussondainferior = "null"
previoussondasuperior = "null"
previouscontactor = "null"
logging.info('**** El sistema ha comenzado a monitorizar ****')
while True:
statesondainferior = GPIO.input(gpiosondainferior)
if statesondainferior == False and previoussondainferior == "open" or statesondainferior == False and previoussondainferior == "null":
logging.info('Sonda inferior activada.')
previoussondainferior = "closed"
if statesondainferior != False and previoussondainferior == "closed" or statesondainferior != False and previoussondainferior == "null":
if statesondainferior != False and previoussondainferior == "closed" or statesondainferior != False and previoussondainferior == "null":
logging.info('Sonda inferior desactivada.')
previoussondainferior = "open"
statesondasuperior = GPIO.input(gpiosondasuperior)
if statesondasuperior == False and previoussondasuperior == "open" or statesondasuperior == False and previoussondasuperior == "null":
logging.info('Sonda superior activada.')
previoussondasuperior = "closed"
# Para evitar desbordamiento de agua (espera 30 segundos):
sleep(30)
statecontactor = GPIO.input(gpiocontactor)
if statecontactor == False:
logging.warning('Sonda superior activada y contactor activado tras 30 segundos.')
logging.info('Se procede a desactivar el rele de la bomba y el interruptor manual. Restablezca el interruptor manual ejecutando reset_manual_switch.py')
GPIO.setup(gpiobomba, GPIO.OUT)
GPIO.output(gpiobomba, 0)
GPIO.setup(gpiobombamanual, GPIO.OUT)
GPIO.output(gpiobombamanual, 1)
statecontactor = GPIO.input(gpiocontactor)
if statecontactor == False:
logging.warning('Fallo grave: sonda superior activada y contactor activado tras desactivar bomba e interruptor manual.')
else:
logging.info('Contactor bomba DESACTIVADO')
previouscontactor = "open"
if statesondasuperior != False and previoussondasuperior == "closed" or statesondasuperior != False and previoussondasuperior == "null":
if statesondasuperior != False and previoussondasuperior == "closed" or statesondasuperior != False and previoussondasuperior == "null":
logging.info('Sonda superior desactivada.')
previoussondasuperior = "open"
statecontactor = GPIO.input(gpiocontactor)
if statecontactor == False and previouscontactor == "open" or statecontactor == False and previouscontactor == "null":
logging.info('Contactor bomba ACTIVADO.')
previouscontactor = "closed"
if statecontactor != False and previouscontactor == "closed" or statecontactor != False and previouscontactor == "null":
logging.info('Contactor bomba DESACTIVADO.')
previouscontactor = "open"
sleep(20)
GPIO.cleanup(gpiosondainferior)
GPIO.cleanup(gpiosondasuperior)
GPIO.cleanup(gpiocontactor)
GPIO.cleanup(gpiobomba)
GPIO.cleanup(gpiobombamanual)
Como se puede ver en el (rudimentario) código, si la sonda superior está activada a la vez que el contactor que activa la bomba durante más de 30 segundos, este script ordenará desactivar el relé 1 (que activa el contactor de forma automática) y activar el relé 2 (que inhabilita el interruptor manual, por si se acciona y se olvida apagarlo). Todo quedará reflejado en el fichero sondas.log.
Script para ejecutar un riego: este script accionará la bomba durante el tiempo que se determine en el propio código, o hasta que la sonda superior se active, indicando que el depósito está próximo a llenarse. La secuencia de comandos quedará registrada en el fichero riegos.log.
#!/usr/bin/env python3
import logging
import RPi.GPIO as GPIO
import time
from time import sleep
#set up logging
logging.basicConfig(filename='riegos.log', encoding='utf-8', level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %H:%M:%S %p')
#set up GPIOs
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
gpiosondainferior = 22
gpiosondasuperior = 25
gpiocontactor = 26
gpiobomba = 23
GPIO.setup(gpiosondasuperior, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(gpiosondainferior, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(gpiocontactor, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Establecer el tiempo de bombeo aquí:
pumpingtime = 7
#turn on the pump
print('**** Comienza riego ****')
logging.info('**** Comienza riego ****')
print('BOMBA CONECTADA')
logging.info('BOMBA CONECTADA')
GPIO.setup(gpiobomba, GPIO.OUT)
GPIO.output(gpiobomba, 1)
# Bucle hasta que la sonda superior se active, o se llegue al tiempo de bombeo establecido
statesondasuperior = GPIO.input(gpiosondasuperior)
t_end = time.time() + pumpingtime * 60
while statesondasuperior != False and time.time() < t_end:
statesondasuperior = GPIO.input(gpiosondasuperior)
print('Sonda superior desactivada, bomba en funcionamiento')
logging.info('Sonda superior desactivada, bomba en funcionamiento.')
sleep(10)
#Apaga el contactor
print('**** Finalizando riego... ****')
logging.info('**** Finalizando riego... ****')
print('BOMBA DESCONECTADA.')
logging.info('BOMBA DESCONECTADA.')
GPIO.output(gpiobomba, 0)
GPIO.cleanup(gpiobomba)
sleep(5)
#Comprueba que efectivamente el contactor esté apagado
statesondainferior = GPIO.input(gpiosondainferior)
statesondasuperior = GPIO.input(gpiosondasuperior)
statecontactor = GPIO.input(gpiocontactor)
if statesondainferior == False:
print('Sonda inferior activada.')
logging.info('Sonda inferior activada.')
else:
print('Sonda inferior desactivada. Deberia estar activada tras ejecutar un riego.')
logging.info('Sonda inferior desactivada. Deberia estar activada tras ejecutar un riego.')
if statesondasuperior == False:
print('Sonda superior activada.')
logging.info('Sonda superior activada.')
else:
print('Sonda superior desactivada. Es normal dado que ha podido activarse momentaneamente y parar la carga de agua.')
logging.info('Sonda superior desactivada. Es normal dado que ha podido activarse momentaneamente y parar la carga de agua.')
if statecontactor == False:
print('Contactor bomba ACTIVADO. AVISO GRAVE, EJECUTAR PARO MANUAL. Se intentara enviar el comando... Ejecute despues deteccion_sondas.py')
logging.warning('Contactor bomba ACTIVADO. AVISO GRAVE, EJECUTAR PARO MANUAL. Se intentara enviar el comando... Ejecute despues deteccion_sondas.py')
GPIO.setup(gpiobomba, GPIO.OUT)
GPIO.output(gpiobomba, 0)
GPIO.cleanup(gpiobomba)
else:
print('Contactor bomba DESACTIVADO.')
logging.info('Contactor bomba DESACTIVADO.')
print('Riego terminado.')
logging.warning('Riego terminado.')
Script para resetear el interruptor manual: en caso de que accionemos el interruptor manual para activar el bombeo o la electroválvula y nos olvidemos, el circuito permite inhabilitar dicho interruptor activando el relé 2 para evitar un desbordamiento de agua. Esto hace que la bobina del contactor, conectada a la salida normalmente cerrada del relé a través del interruptor, deje de estar alimentada y por consiguiente apaga la bomba. Cuando esto ocurre el relé 2 queda excitado, por lo que es necesario resetearlo si queremos volver a usar el interruptor (y lógicamente apagar el interruptor).
#!/usr/bin/env python3
import logging
import RPi.GPIO as GPIO
import time
from time import sleep
#set up GPIOs
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
gpiobombamanual = 24
GPIO.setup(gpiobombamanual, GPIO.OUT)
GPIO.output(gpiobombamanual, 0)
GPIO.cleanup(gpiobombamanual)
Y llegados a este punto, estamos preparados para conectarnos a la Raspberry Pi y regar. El resultado de esta instalación ha sido un precioso huerto.
Como posible mejora, se puede crear una web o similar para controlar la ejecución de los scripts de forma visual y mucho más sencilla. Si estás interesado en este tipo de sistemas, o tienes alguna duda o sugerencia, te leo en comentarios!