Leer una sonda de nivel 4-20 mA en un PLC ESP32, de la forma correcta
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
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
Histéresis en lugar de un único umbral
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.