Bombeo de agua (saneamiento)ESP32 PLC 14GPIOControl
Control de bomba de agua con un PLC ESP32 y boyas de nivel
Las estaciones de bombeo son una de las aplicaciones de PLC más habituales: llenar o vaciar un depósito entre dos niveles, detectar fallos de bomba y no quemar nunca un motor en seco. Este tutorial implementa un controlador de bomba completo y probado en campo sobre un ESP32 PLC 14 usando tres boyas de nivel, realimentación del contactor y una máquina de estados limpia — el mismo patrón que usamos en estaciones reales de bombeo de aguas residuales.
Por qué una máquina de estados y no un espagueti de if/else
La lógica de bombas parece trivial hasta que añades la gestión de fallos. Modelarla con tres estados explícitos (
OFF, ON, ERROR) hace auditable cada transición: la bomba solo arranca cuando las boyas de mínimo y máximo están activas, solo para cuando cae la boya de mínimo, y cualquier disparo térmico o falta de confirmación del contactor enclava un error con rearme manual. La misma estructura escala a estaciones de dos bombas con alternancia.Detección de fallos con realimentación del contactor
El ejemplo vigila dos entradas digitales mientras la bomba funciona: el contacto auxiliar del contactor (¿ha arrancado la bomba de verdad?) y el relé térmico (¿está el motor sobrecargado?). Un periodo de gracia de 2 segundos evita falsas alarmas durante el enclavamiento del contactor. Ante cualquier fallo, el controlador desenergiza la bomba, enciende el piloto de alarma y espera un rearme manual — el comportamiento seguro por defecto en estaciones desatendidas.
Preparado para telemetría
Todas las señales se recogen en un array
dades[], listas para empaquetarse y enviarse por LoRaWAN, MQTT o Modbus. Mira más abajo el tutorial de dos bombas con LoRaWAN para la versión completa con monitorización remota.Un fragmento de la implementación
Tal cual del ejemplo desplegado en el ESP32 PLC 14 — cópialo libremente:
void setup() {
Serial.begin(115200);
pinMode(I_FLOAT_MIN, INPUT);
pinMode(I_FLOAT_MAX, INPUT);
pinMode(I_FLOAT_OVERFLOW, INPUT);
pinMode(I_CONFIRMATION, INPUT);
pinMode(I_THERMAL, INPUT);
pinMode(I_RESET, INPUT);
pinMode(Q_PUMP, OUTPUT);
pinMode(Q_PILOT, OUTPUT);
digitalWrite(Q_PUMP, LOW);
digitalWrite(Q_PILOT, LOW);
}El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Puedo usarlo con solo dos boyas de nivel?
Sí — elimina la entrada de rebose y quédate con mínimo y máximo. La lógica de la máquina de estados no cambia.
¿Cómo añado monitorización remota?
Empaqueta el array dades[] en unos pocos bytes y envíalo con el protocolo que encaje en tu instalación: LoRaWAN para estaciones remotas sin red, MQTT si tienes cobertura WiFi o Ethernet.
¿Funciona en otros PLCs de Industrial Shields?
El sketch usa digitalRead/digitalWrite estándar sobre pines I0_x/Q0_x, así que corre en cualquier ESP32 PLC o M-Duino — solo cambia el mapa de pines.