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 a través de una resistencia shunt de 500 Ω (4-20 mA pasan a ser 2-10 V en la entrada de 0-10 V), filtra la lectura bruta, 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 y 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, con la cabecera de conexionado, el setup y el bucle principal, listo para adaptar a tu aplicación.

Preguntas frecuentes

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

Conecta el +24 Vdc al + del transmisor y su - a la entrada analógica, y pon una resistencia de 500 Ω entre esa entrada y GND. Las entradas analógicas del ESP32 PLC 38AR miden de 0 a 10 V, así que la resistencia convierte 4-20 mA en 2-10 V. El 0 V de la fuente y el GND del PLC deben ser la misma referencia.

¿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í, y sin resistencia. El ESP32 PLC 14 tiene dos entradas analógicas, AI0.0 y AI0.1, con un modo 4-20 mA que se selecciona por software (datasheet del ESP32 PLC 14). Usa una de ellas en ese modo, adapta el pin y la conversión a mA y mantén la misma lógica de filtrado, escalado y detección de cable roto.

Funcionalidades relacionadas