Caso práctico: riego de maceta con Raspberry Pi

Caso práctico: plant irrigation pump controlador con — hero

Objetivo y caso de uso

Qué construirás: Un controlador de riego para plantas con Raspberry Pi que lee un sensor digital de humedad del suelo y activa una bomba de agua controlada por relé cuando la tierra está demasiado seca. El sistema realiza ciclos cortos de riego y luego hace una pausa antes de volver a comprobar para evitar el exceso de riego y el traqueteo del relé.

Por qué es importante / Casos de uso

  • Automatiza el riego de una planta de interior, una maceta de hierbas o una pequeña bandeja de plántulas sin necesidad de comprobaciones manuales constantes.
  • Ayuda a mantener condiciones del suelo más consistentes reaccionando en segundos ante una señal de estado seco en lugar de esperar horas o días a la intervención humana.
  • Ofrece una introducción sencilla al control GPIO, la conmutación por relé y la automatización basada en sensores en Raspberry Pi.
  • Útil para configuraciones interiores de bajo voltaje donde una bomba de 5 V puede funcionar en ráfagas cortas, como 2–10 segundos por ciclo.

Resultado esperado

  • Un controlador funcional basado en Python que consulta el sensor de humedad a intervalos temporizados, por ejemplo cada 30–60 segundos.
  • Activación automática de la bomba solo cuando el sensor informa suelo seco, con una ventana de riego controlada de 3–5 segundos.
  • Baja sobrecarga de cómputo en la Raspberry Pi, normalmente muy por debajo del 5% de CPU y sin carga significativa de GPU para esta tarea de automatización sin interfaz gráfica.
  • Un prototipo de bajo voltaje más seguro que mantiene la Pi a 5 V, usa un módulo de relé GPIO aislado y alimenta la bomba desde una fuente independiente adecuada.

Público: Principiantes, estudiantes y makers DIY que construyen su primer proyecto con sensores y actuadores; Nivel: Básico

Arquitectura/flujo: El sensor digital de humedad del suelo detecta estado seco/húmedo → Raspberry Pi GPIO lee la señal digital con umbral → el script de control decide si hace falta regar → la salida GPIO conmuta el relé → el relé alimenta una bomba externa durante un ciclo corto → el sistema espera un período de enfriamiento y luego vuelve a comprobar.

Nota educativa de validación

Antes de publicar este caso, el contenido pasó la puerta automática de validación de Prometeo con estado PASS. El validador comprobó los bloques de código, la estructura del artículo, los comandos copiables y la coherencia con el catálogo de dispositivos soportados.

Evidencia de validación publicada

  • Resultado automático: PASS.
  • Estructura parseada: 3 apartados, 3 tablas y 10 bloques de código detectados antes de publicar.
  • Código comprobado: 4 Python/py_compile, 6 Bash/copy-paste checks.
  • Catálogo soportado: el texto se contrastó contra los perfiles de dispositivo validables de Prometeo y los stacks no soportados bloquean la publicación.
  • Hallazgos del informe: sin hallazgos bloqueantes.

Esta validación confirma compatibilidad sintáctica y de herramientas para el material publicado, pero no sustituye la prueba física sobre tu hardware, cableado y entorno exactos.

Nota educativa de seguridad

Este proyecto es un prototipo educativo, no un producto certificado. Antes de alimentar el montaje, verifica el pinout de la revisión exacta de tu placa ULX3S, mantén las señales de E/S de FPGA a 3.3 V, nunca conectes 5 V directamente a los pines de E/S, desconecta la alimentación antes de cambiar el cableado y utiliza fuentes externas adecuadas para cargas, motores o servos, compartiendo tierra solo cuando el cableado lo requiera.


title: Caso práctico: Controlador de bomba de riego para plantas con Raspberry Pi
slug: practical-case-raspberry-pi
level: Basic


Controlador de bomba de riego para plantas con Raspberry Pi

Este caso práctico muestra cómo construir un controlador de bomba de riego para plantas con una Raspberry Pi. El controlador lee un sensor de humedad del suelo y conmuta una bomba de agua mediante un relé cuando la tierra está seca.

Nota de seguridad

Este es un proyecto educativo de bajo voltaje. Mantén la Raspberry Pi solo a 5 V y utiliza un módulo de relé diseñado para aislamiento GPIO de Raspberry Pi. No conectes tensión de red directamente al GPIO. Alimenta la bomba con su propia fuente adecuada, comparte tierra solo cuando lo requiera el diseño del relé y mantén el agua alejada de la electrónica.

Diagrama de bloques conceptual

Vista de alto nivel: qué entra, qué procesa cada bloque y qué sale del sistema.

Arquitectura funcional

El sensor digital de humedad del suelo de…

Raspberry Pi GPIO lee la señal digital co…

el script de control decide si hace falta…

la salida GPIO conmuta el relé

el relé alimenta una bomba externa durant…

el sistema espera un período de enfriamie…

Flujo conceptual de señales y responsabilidades entre bloques del dispositivo.

Objetivo y caso de uso

Construir un controlador basado en Raspberry Pi que:

  • mida la humedad del suelo,
  • decida si una planta necesita riego,
  • active una bomba durante un ciclo corto de riego,
  • espere antes de volver a comprobar.

Como una Raspberry Pi no tiene una entrada analógica integrada, este tutorial utiliza un módulo digital de humedad del suelo con umbral ajustable y salida digital.

Componentes

  • Raspberry Pi con Raspberry Pi OS
  • Tarjeta MicroSD
  • Módulo sensor digital de humedad del suelo con DO, VCC, GND
  • Módulo de relé de 1 canal y 5 V compatible con disparo GPIO de 3.3 V
  • Bomba de agua DC pequeña
  • Fuente de alimentación externa adecuada para la bomba
  • Cables jumper
  • Protoboard o terminales de tornillo
  • Tubo y recipiente de agua

Cableado

La Raspberry Pi lee la salida digital del sensor y controla la entrada del relé.

FunciónPin del móduloPin de Raspberry PiBCM GPIO
Alimentación del sensor de sueloVCCPin 13.3 V
Tierra del sensor de sueloGNDPin 6GND
Salida digital del sensor de sueloDOPin 11GPIO17
Alimentación del reléVCCPin 25 V
Tierra del reléGNDPin 9GND
Entrada de control del reléINPin 13GPIO27

Cableado del lado de la bomba

El relé conmuta la alimentación de la bomba, no el riel de alimentación de la Raspberry Pi.

Elemento del circuito de la bombaConectar a
Positivo de la fuente de la bombaRelay COM
Relay NOCable positivo de la bomba
Cable negativo de la bombaNegativo de la fuente de la bomba
Relay NCNo usado

Usa NO (normalmente abierto) para que la bomba permanezca apagada cuando la Raspberry Pi esté arrancando o apagada.

Cómo funciona

Un módulo digital típico de humedad del suelo expone una salida de comparador:

  • DO = 0 o 1 según el diseño de la placa y el umbral del trimmer,
  • el trimmer establece el punto de conmutación entre seco/húmedo.

Esta guía asume:

  • GPIO17 == LOW significa suelo seco
  • GPIO17 == HIGH significa suelo húmedo

Si tu sensor se comporta de forma opuesta, el script de prueba de abajo lo mostrará claramente.

Habilitar acceso a GPIO

Actualiza los paquetes e instala la biblioteca GPIO:

sudo apt update
sudo apt install -y python3-gpiozero

Código 1: Prueba de cableado del sensor y del relé

Guarda como sensor_relay_test.py:

#!/usr/bin/env python3
from gpiozero import DigitalInputDevice, OutputDevice
from signal import pause
import time

SENSOR_PIN = 17
RELAY_PIN = 27

sensor = DigitalInputDevice(SENSOR_PIN, pull_up=False)
relay = OutputDevice(RELAY_PIN, active_high=False, initial_value=False)

def state_text() -> str:
    return "WET/HIGH" if sensor.value == 1 else "DRY/LOW"

print("Reading soil sensor for 10 seconds...")
for _ in range(10):
    print(f"Sensor raw state: {sensor.value} ({state_text()})")
    time.sleep(1)

print("Turning pump relay ON for 2 seconds...")
relay.on()
time.sleep(2)
print("Turning pump relay OFF")
relay.off()

Ejecútalo:

python3 sensor_relay_test.py

Resultado esperado

  • Cuando mueves el sensor entre suelo seco y húmedo, el estado impreso cambia.
  • El relé debería hacer clic una vez al encenderse y otra vez al apagarse.
  • Si el comportamiento del relé está invertido, probablemente la configuración active_high=False sea correcta para tu módulo de relé. Muchas placas de relé para Raspberry Pi son activas en bajo.

Código 2: Controlador de bomba de riego para plantas

Guarda como irrigation_controller.py:

#!/usr/bin/env python3
from gpiozero import DigitalInputDevice, OutputDevice
import time
from datetime import datetime

SENSOR_PIN = 17
RELAY_PIN = 27

CHECK_INTERVAL_SECONDS = 30
PUMP_ON_SECONDS = 5
POST_WATERING_DELAY_SECONDS = 60
MAX_CYCLES_PER_HOUR = 6

# Assumption for this tutorial:
# sensor.value == 0 means dry soil
# sensor.value == 1 means wet soil
DRY_SENSOR_VALUE = 0

sensor = DigitalInputDevice(SENSOR_PIN, pull_up=False)
relay = OutputDevice(RELAY_PIN, active_high=False, initial_value=False)

cycle_timestamps = []

def now_text() -> str:
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def is_dry() -> bool:
    return sensor.value == DRY_SENSOR_VALUE

def prune_old_cycles() -> None:
    global cycle_timestamps
    cutoff = time.time() - 3600
    cycle_timestamps = [t for t in cycle_timestamps if t >= cutoff]

def can_water() -> bool:
    prune_old_cycles()
    return len(cycle_timestamps) < MAX_CYCLES_PER_HOUR

def water_once() -> None:
    print(f"{now_text()} Pump ON for {PUMP_ON_SECONDS} s")
    relay.on()
    time.sleep(PUMP_ON_SECONDS)
    relay.off()
    cycle_timestamps.append(time.time())
    print(f"{now_text()} Pump OFF")

def main() -> None:
    print(f"{now_text()} Irrigation controller started")
    while True:
        dry = is_dry()
        print(f"{now_text()} Sensor value={sensor.value} dry={dry}")

        if dry:
            if can_water():
                water_once()
                print(f"{now_text()} Waiting {POST_WATERING_DELAY_SECONDS} s after watering")
                time.sleep(POST_WATERING_DELAY_SECONDS)
            else:
                print(f"{now_text()} Watering skipped: hourly cycle limit reached")
                time.sleep(CHECK_INTERVAL_SECONDS)
        else:
            time.sleep(CHECK_INTERVAL_SECONDS)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        relay.off()
        print(f"{now_text()} Stopped by user")

Ejecútalo:

python3 irrigation_controller.py

Opcional: Iniciar al arrancar con systemd

Copia el script a una ruta estable:

mkdir -p /home/pi/irrigation
cp irrigation_controller.py /home/pi/irrigation/
chmod +x /home/pi/irrigation/irrigation_controller.py

Crea el archivo de servicio:

sudo tee /etc/systemd/system/irrigation-controller.service >/dev/null <<'EOF'
[Unit]
Description=Raspberry Pi Plant Irrigation Pump Controller
After=multi-user.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/irrigation
ExecStart=/usr/bin/python3 /home/pi/irrigation/irrigation_controller.py
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Habilítalo e inícialo:

sudo systemctl daemon-reload
sudo systemctl enable irrigation-controller.service
sudo systemctl start irrigation-controller.service
sudo systemctl status irrigation-controller.service --no-pager

Calibración

El módulo de humedad suele tener un pequeño potenciómetro.

  1. Coloca la sonda en la tierra a la profundidad que quieras supervisar.
  2. Ejecuta python3 sensor_relay_test.py.
  3. Gira el potenciómetro lentamente.
  4. Observa el punto en el que cambia la salida digital.
  5. Ajusta hasta que la salida cambie en el nivel de sequedad que debe activar el riego.

Método de validación

Para respaldar la afirmación de que este proyecto con Raspberry Pi implementa un controlador de bomba de riego para plantas funcional, valídalo con evidencia observable:

ComprobaciónMétodoEvidencia esperada
Detección del sensorMueve la sonda entre suelo seco y suelo húmedo mientras ejecutas sensor_relay_test.pyLa salida de consola cambia entre estados seco y húmedo
Conmutación de la bombaEjecuta sensor_relay_test.pyClic audible del relé y funcionamiento visible de la bomba durante 2 segundos
Riego automáticoColoca la sonda en suelo seco y ejecuta irrigation_controller.pyEl registro con marca de tiempo muestra detección de seco, bomba encendida, bomba apagada
Recuperación tras el riegoHumedece la tierra después de un ciclo de riegoEl controlador registra estado húmedo y deja de activar la bomba
Limitación de frecuenciaMantén el sensor seco de forma continuaEl registro finalmente muestra Watering skipped: hourly cycle limit reached

Solución de problemas

El sensor nunca cambia de estado

  • Comprueba el cableado de VCC, GND y DO.
  • Confirma que el módulo del sensor está alimentado con 3.3 V si su salida va directamente al GPIO de Raspberry Pi.
  • Recalibra el potenciómetro del umbral.

El relé hace clic pero la bomba no funciona

  • Comprueba la fuente de alimentación independiente de la bomba.
  • Confirma que la bomba está cableada a través de COM y NO.
  • Verifica que el voltaje de la bomba coincide con su fuente de alimentación.

La bomba funciona en el momento equivocado

  • La lógica de tu sensor puede estar invertida.
  • Cambia esta línea en irrigation_controller.py:
DRY_SENSOR_VALUE = 0

Si tu módulo informa seco como alto, cámbialo a:

DRY_SENSOR_VALUE = 1

Resultado

Ahora tienes un controlador de bomba de riego para plantas con Raspberry Pi que:

  • supervisa la humedad del suelo,
  • acciona una bomba mediante un relé,
  • riega solo cuando la planta necesita riego,
  • incluye un límite de seguridad simple para reducir bombeos repetidos.

Encuentra este producto y/o libros sobre este tema en Amazon

Ir a Amazon

Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.

Quiz rápido

Pregunta 1: ¿Qué dispositivo principal se utiliza para construir el controlador de riego descrito?




Pregunta 2: ¿Qué tipo de sensor lee el sistema para decidir si debe regar?




Pregunta 3: ¿Cuándo activa el sistema la bomba de agua?




Pregunta 4: ¿Qué componente controla la bomba de agua desde la Raspberry Pi?




Pregunta 5: ¿Por qué el sistema hace una pausa antes de volver a comprobar el sensor?




Pregunta 6: ¿Qué tipo de automatización ofrece este proyecto como introducción sencilla?




Pregunta 7: ¿Qué duración de riego por ciclo se menciona como útil para una bomba de 5 V?




Pregunta 8: ¿En qué tipo de configuraciones resulta especialmente útil este sistema?




Pregunta 9: ¿Qué ventaja aporta reaccionar en segundos ante una señal de suelo seco?




Pregunta 10: ¿Para qué uso doméstico se menciona este controlador de riego?




Carlos Núñez Zorrilla
Carlos Núñez Zorrilla
Electronics & Computer Engineer

Ingeniero Superior en Electrónica de Telecomunicaciones e Ingeniero en Informática (titulaciones oficiales en España).

Sígueme:
Scroll al inicio