Ir al contenido

← Todas las funcionalidades

Monitorización textil (tejeduría)ESP32 PLCGPIOAdquisición

Contar pulsos de producción con interrupciones hardware

Un contador de pulsos de producción es la señal más valiosa que puedes sacar de una máquina industrial: cada pulso es un ciclo, una revolución, una unidad producida. Este ejemplo conecta un sensor de proximidad a la entrada I0_0 de un PLC ESP32 y cuenta los pulsos en una interrupción hardware, de modo que nunca se pierde nada mientras el loop atiende MQTT o el registro en SD. Procede de un despliegue real de monitorización de máquinas textiles sobre tricotosas circulares Terrot.

Interrupciones, no polling

Sondear una entrada dentro de loop() pierde pulsos en cuanto el firmware se pone a escribir en la SD o a reconectar el WiFi. Una interrupción hardware en el flanco de bajada se dispara haga lo que haga el loop, incrementando un contador volatile en unos microsegundos. La ISR hace lo mínimo imprescindible — nada de Serial, nada de reservar String — lo que la mantiene segura aunque se llame miles de veces por segundo.

Antirrebote y lecturas atómicas

Los sensores industriales montados cerca de motores y variadores de frecuencia captan ruido eléctrico, y los contactos mecánicos rebotan. Un filtro de tiempo mínimo entre pulsos dentro de la ISR (30 ms en este ejemplo) rechaza rebotes y picos sin ningún hardware externo. Cuando el ciclo de reporte de 20 segundos lee el contador, envuelve la operación de leer y resetear en un par noInterrupts()/interrupts(), de modo que un pulso que llegue en mitad de la lectura nunca puede corromper ni perder una cuenta.

Cuenta de ciclos, total de turno y RPM

Dos contadores corren en paralelo desde la misma interrupción: uno se resetea en cada snapshot MQTT para dar la producción por intervalo, el otro acumula el turno completo y solo se resetea cuando lo ordena un comando remoto. Extrapolar la cuenta de ciclos a un minuto da una estimación de RPM en vivo — en una tricotosa circular eso se traduce directamente en producción de tejido, y una caída súbita a cero es tu alarma de máquina parada gratis.

Un fragmento de la implementación

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

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

  pinMode(I0_0, INPUT);
  attachInterrupt(I0_0, onPulse, FALLING);   // falling edge of the sensor

  checkWiFi();
  mqtt.setServer(MQTT_HOST, MQTT_PORT);
}

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

Preguntas frecuentes

¿A qué velocidad puede contar pulsos el ESP32?

Con una ISR mínima el ESP32 maneja con holgura miles de pulsos por segundo. El antirrebote de 30 ms de este ejemplo lo limita a unos 33 pulsos por segundo, de sobra para contar ciclos de máquina; bájalo para encoders.

¿Por qué usar variables volatile para los contadores?

Los contadores se modifican dentro de la interrupción y se leen en el loop principal. La palabra clave volatile impide que el compilador cachee el valor en un registro, así que el loop siempre ve la cuenta más reciente.

¿Qué sensor conecto a la entrada?

Sirve cualquier sensor de proximidad industrial de 24 V (inductivo o fotoeléctrico) apuntando a una parte móvil de la máquina. Las entradas del PLC aceptan niveles de tensión industriales directamente, sin acondicionamiento de señal.

Funcionalidades relacionadas