Ir al contenido

← Todas las funcionalidades

Bombeo de agua (saneamiento)ESP32 PLC 38ARGPIOAdquisición

Leer una sonda de nivel 4-20 mA en un PLC ESP32, de la forma correcta

Un sensor de nivel 4-20 mA es el estándar industrial para medir depósitos y pozos, y leerlo bien exige algo más que un analogRead. Este ejemplo, extraído de un despliegue real en una estación de bombeo de agua, lee una sonda hidrostática en la entrada I0_11 de un ESP32 PLC 38AR, filtra la señal bruta 0-1023, la convierte a centímetros, detecta un lazo roto y gobierna la bomba con una histéresis bien planteada.

Por qué 4-20 mA empieza en 4 y no en 0

El cero vivo es el diagnóstico. Un lazo sano nunca baja de 4 mA, así que una lectura cercana a 0 mA solo puede significar un cable cortado o un transmisor muerto. El ejemplo marca cualquier valor por debajo de ~3,5 mA como broken wire, enciende el piloto de alarma y conmuta a una boya de rebose cableada en duro: la medida falla, pero la estación sigue segura.

Filtrado y escalado a unidades de ingeniería

Los lazos de corriente captan rizado de contactores y variadores. Una media móvil de 8 muestras suaviza la lectura 0-1023 antes de escalar: se resta el offset de 4 mA (~205 cuentas) y se mapea el resto del rango a la escala de la sonda, 0-250 cm en este caso. Imprime cuentas brutas y centímetros en paralelo: esa traza es la que te permite calibrar la escala a pie de instalación.

Histéresis en lugar de un único umbral

Con un solo umbral la bomba traquetearía cada vez que el oleaje lo cruzara. Dos consignas — arranque por encima de 180 cm, paro por debajo de 60 cm — dan a cada ciclo un volumen definido, menos arranques de motor y mayor vida del contactor. El valor filtrado queda además listo para empaquetarse a nivel de bit en una trama LoRaWAN de monitorización remota.

Un fragmento de la implementación

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

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

  pinMode(I_LEVEL_SENSOR, INPUT);
  pinMode(I_OVERLEVEL, INPUT);
  pinMode(Q_PUMP, OUTPUT);
  pinMode(Q_PILOT, OUTPUT);
  digitalWrite(Q_PUMP, LOW);
  digitalWrite(Q_PILOT, LOW);

  // Preload the filter so it does not start with a zero average
  uint16_t first = analogRead(I_LEVEL_SENSOR);
  for (uint8_t i = 0; i < N_SAMPLES; i++) samples[i] = first;
}

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

Preguntas frecuentes

¿Cómo conecto un sensor 4-20 mA a dos hilos al PLC?

Alimenta el lazo desde la fuente de 24 Vdc a través del transmisor y hasta la entrada analógica, que convierte la corriente en la lectura 0-1023. Comprueba que la entrada está configurada en modo corriente, no tensión.

¿Qué significa una lectura por debajo de 4 mA?

Fallo de lazo — cable roto, sonda desconectada o transmisor muerto. Trátalo como avería, nunca como "nivel cero", y conmuta a un respaldo seguro como una boya cableada en duro.

¿Puedo usar esto en un ESP32 PLC 14?

Sí. Solo cambia el mapa de pines — elige una de las entradas I0_x con capacidad analógica de tu modelo y mantén la misma lógica de filtrado, escalado y detección de cable roto.

Funcionalidades relacionadas