Ir al contenido

← Todas las funcionalidades

Piso móvil hidráulico (app BLE)ESP32 PLC 38RGPIOBLEControl

Secuenciado seguro de electroválvulas en un PLC ESP32 con una máquina de estados

Tres electroválvulas y dos direcciones de movimiento pueden producir combinaciones peligrosas si las salidas se conmutan desde puntos dispersos del código. Este ejemplo de control de válvulas con PLC ESP32, destilado de un despliegue real en una máquina hidráulica móvil, canaliza cada actuación a través de una única máquina de estados: carga, descarga o reposo. Cada estado escribe las tres salidas de relé y los LED indicadores de forma atómica, de modo que una condición mixta de carga más descarga sencillamente no puede existir en el firmware.

Una sola función es dueña de las salidas

La función setMotion() es el único lugar de todo el firmware donde se escriben las salidas de las válvulas general, de carga y de descarga. Los botones, los comandos BLE y los timeouts de seguridad solicitan un estado en lugar de tocar los pines directamente, y cada estado escribe las cinco salidas en un solo bloque. Esto hace que la tabla de verdad de las válvulas sea revisable de un vistazo y convierte el "¿por qué se abrieron las dos válvulas a la vez?" de pesadilla de depuración en pregunta imposible.

Botones físicos y control remoto conviven

El ejemplo cablea pulsadores de carga, descarga y paro con una detección de flanco sencilla, mientras que la máquina de producción acepta las mismas tres transiciones por BLE como tramas [M]1*, [M]2* y [M]0* enviadas desde una app de smartphone. Como ambas vías de entrada convergen en la misma máquina de estados, el control remoto y el local nunca pueden discrepar sobre lo que están haciendo las válvulas — y el pulsador físico de paro funciona siempre, incluso con la app conectada.

Timeouts como red de seguridad

Un movimiento hidráulico que no termina nunca suele significar un comando atascado, una conexión BLE perdida o un operario que se ha marchado. Cada cambio de estado registra su instante de inicio, y cualquier movimiento de más de 30 segundos se fuerza de vuelta a reposo automáticamente, sin necesidad de confirmación. Combinado con la parada por sobrepresión del módulo de sensores 4-20 mA de esta serie, el firmware siempre falla hacia la condición segura: todas las válvulas cerradas.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el ESP32 PLC 38R — cópialo libremente:

void setup() {
  Serial.begin(115200);

  pinMode(BTN_LOAD, INPUT);
  pinMode(BTN_UNLOAD, INPUT);
  pinMode(BTN_STOP, INPUT);
  pinMode(OUTPUT_EVG, OUTPUT);
  pinMode(OUTPUT_EVD, OUTPUT);
  pinMode(OUTPUT_EVC, OUTPUT);
  pinMode(LED_LOAD, OUTPUT);
  pinMode(LED_UNLOAD, OUTPUT);

  setMotion(MOTION_NONE);   // always start in safe idle
  Serial.println("Solenoid valve control ready (ESP32 PLC 38R)");
}

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Puede el ESP32 PLC 38R accionar electroválvulas directamente?

Sí, sus salidas de relé conmutan directamente las bobinas típicas de electroválvulas hidráulicas de 12/24 V DC. Comprueba la corriente de la bobina frente al valor nominal del relé y añade supresión flyback para cargas inductivas si no viene ya montada.

¿Por qué usar una máquina de estados en lugar de conmutar las salidas directamente?

Porque cada combinación de salidas se vuelve explícita y revisable. Conmutando directamente, dos caminos del código pueden discrepar y dejar abiertas válvulas en conflicto; con una máquina de estados, las combinaciones ilegales son inalcanzables por construcción.

¿Cómo añado un movimiento nuevo, como un modo de velocidad lenta?

Añade un nuevo valor al enum y un case en setMotion() que defina su combinación exacta de válvulas. No hay que cambiar nada más — los botones o los comandos BLE simplemente solicitan el nuevo estado.

Funcionalidades relacionadas