Sensor de presion diferencial MPXxxxxDP

Hola a tod@s,

Necesito medir el nivel de agua en un pozo, realmente es en una tubería de pvc de 125mm de diámetro, que no excederá de los 2,5m de columna de agua.

He empezado a hacer pruebas con un MPX5500DP de Freescale y tengo la impresión de que me he equivocado al elegirlo, pues es para 500Kpa (aproximadamente 50m de columna de agua) y ya tengo pedido un MPX5050DP que seria para 5m.

La idea es colocar el sensor en su placa electrónica en un sitio seguro y desde el mismo llevar los dos puertos con tubo de silicona de 4x6mm hasta la boca del tubo de pvc, la distancia de esos tubos será de unos 5m el mas corto que irá libre en la parte superior de la tubería y el otro en el fondo de la misma, por ello pensé que podría necesitar el 5500, pero como comento arriba creo que me he equivocado con la elección.

Los primeros problemas que estoy teniendo con este sensor es la estabilidad en la medición, quizá porque al ser de tan amplio rango es muy sensible, pero con el sensor en la mesa de trabajo y ambos puertos expuestos a la misma presión tengo variaciones de +- 10mv que se traduce en unos +-10cm de altura de nivel de agua, lo cual no me termina de gustar.

Respecto al hardware, estoy usando un ESP32 con el circuito prototipo realizado con soldaduras en placa perforada sin mucha complicación, alimentación externa a 5V 3A, los condensadores recomendados por NPX en el sensor y en la salida un divisor de voltaje con 3 resistencias de 10k para conseguir los 3.3v en una entrada analógica del ESP, no se si añadiendo algún condensador en esa entrada podría estabilizar un poco mas la señal.

image

image

En cuanto al software, estoy usando 2 filtros, un primer filtro de media móvil en la lectura de la entrada analógica con 20 muestras en cada medición separadas 5ms entre ellas y un segundo filtro de media de 20 mediciones ya convertidas a cm de nivel de agua, con eso consigo estabilizar algo mas los valores, pero aun así tengo variaciones considerables de +- 2cm; el código aun necesita limpieza y algunos retoques, pero el resultado podría ser válido, no necesito precisión milimétrica

// Sensor de presion diferencial MPX5500DP
const int MPX5500DP_PIN = 36;           // PIN del esp32 donde va conectada la salida de voltaje del sensor

double level;                           // Nivel teorico
double level_media;                     // Nivel filtrado
int    samples = 20;                    // Numero de muestras
double voltage_output;                  // Voltaje de salida del sensor
double pressure;                        // Presion
double voltage_supply = 5.0;            // Voltaje de entrada del sensor
double pressure_compensation = 16.75;   // Ajusta la medida de presión
int    water_density = 997;             // Densidad del agua
double gravity = 9.8;                   // Gravedad
double TF_var_1 = 0.0018;               // DataSheet, variable 1 de funcion de transferencia
double TF_var_2 = 0.04;                 // DataSheet, variable 2 de funcion de transferencia

/**
 * @brief Obtener nivel de agua
 */
void getLevel()
{
    double sum_values = 0; // Variable auxiliar para suma de muestreos

    double analog_read = 0; // Variable auxiliar para almacenar lectura analogica
    double sum_analog = 0; // Variable auxiliar para suma de lectura analogica
    static double analog_read_filtered = 0; // Variable auxiliar para almacenar ultima lectura analogica, permanece estática
    double sum_analog_filtered = 0; // Variable auxiliar para suma de lectura analogica filtrada

    double alpha = 0.05; // Filtro media movil

    //Voltaje del Sensor MPX5500DP
    for(int i = 0; i < samples; i++)
    {
        // Filtro media movil - https://www.youtube.com/watch?v=Pl79Ni3NUsY
        // An = a*M+(1-a)*An

        analog_read = analogRead(MPX5500DP_PIN);
        analog_read_filtered = (alpha * analog_read) + ((1 - alpha) * analog_read_filtered);

        //sum_analog += analog_read;
        sum_analog_filtered += analog_read_filtered;

        sum_values += ( float( analog_read_filtered ) * 5.0 / 4095.0 ); //voltios

        delay(5);
    }
    
    voltage_output = sum_values / samples;

    //Presión en Kpa según gráfica 4 del DataSheet
    pressure = ( voltage_output - TF_var_2 * voltage_supply ) / (TF_var_1 * voltage_supply) + pressure_compensation;

    // Nivel de agua en centimetros
    level = ( (pressure * 1000) / (water_density * gravity) ) * 100;
    //level_media = avgAddValue(pressure); // Para calibrar presion de compensacion
    level_media = avgAddValue(level); // Añadir registro a segundo filtro de media, 20 valores

}

Entiendo que las variaciones se reducirán con el MPX5050DP, pero aun así podría intentar filtrar algo mas la entrada en el hardware si me indicáis como (no controlo mucho de electrónica y menos de filtrado de señales).

Sobre la posición del tubo de silicona en la tubería de PVC, he consultado un tema de @Surbyte de 2014 en el que usa una campana en el extremo inferior de la sonda y no termino de entender el motivo, tenía intención de meter el tubo de silicona "tal cual" al fondo de la tubería, pero lo de la campana me hace pensar un poco.

Incluso con el MPX5050 te has equivocado también, bueno no tanto, pero no es el mejor sensor para el fondo de escala que requires.
Hay un MPX5025DP y hay un MPX5010DP
El MPX5010DP aunque te daría un fondo de escala bello (tu me entiendes) te deja con 25 cm fuera de rango.

Mide hasta 10kpa lo que significan 1019.72 mmH2O a 4°C yo creo que si puedes obviar los apenas 5/6 cm que faltan, tendrías el sensor con mejor fondo de escala. Usa la calculadora de presiones link
Ahora sino es suficiente pasa al MPX5025DP pero ahora no lo encuentro, parece que lo soñé y lo que sigue en MPX5050DP.
Tal vez sea en otra familia MPX7025DP o algo así.
EDITADO luego de encontrar la solución que olvidé:
Lo busqué y es este
Mpxv7025dp Mpxv7025 25kpa 0.2v A 4.7v
0.2 a 4.7V la salida 25kpa o sea 2549.291mmH2O

Hola @Surbyte, el 5010 no me serviría, necesito aproximadamente 2,5m de medición y con ese me faltarían 1,5m; el que no había visto es el MPXV7025DP que me iría perfecto para esa altura, probare con el 5050 que me tiene que llegar en breves y veremos si sirve, no necesito gran precisión, y si tengo 10 veces mejor precisión que la que me da el 5500 es mas que suficiente (500kps / 50 kpa = 10)

Puedes comentarme algo sobre la campana inferior que usas tu? merece la pena? mejora la estabilidad?

No se por qué leí 125mm y me quedé con ese dato.
Si es 2.5m ya te he dicho pero entonces el 5050DP se vuelve mas que potable.
Creo que los sensores de Aliexpress con salida 4-20mA son mas accesibles y al tener rosca NTP de mas fácil montaje.

La campana es un dato que extraje de como Flygt (el fabricante Sueco de bombas de profundidad). Mi hermano usa mucho esas bombas en cámaras sépticas. Para medir el nivel colocan una campana metálica con una cadena y de la parte central sale una cañería flexible y resistente (en su caso) que va a un extremo del sensor diferencial. El otro extremo a la atmósfera.
Al introducirla en el tanque la campana se llena de fluido (agua, o lo que sea) comprime el aire.

image
Ahi esta todo explicado.

Actualizo informacion.

Tras cambiar el sensor MPX5500DP por el MPX5050DP la medicion mejoro notablemente, con un error de +- 0,5cm, mas que aceptable para lo que es.

Tuve problemas en las pruebas al meter directamente el tubo (20m) en el agua de una jarra de 1L, inexplicablemente tras unas 8h el tubo iba "absorbiendo" liquido hasta alcanzar la altura fisica de la jarra (con el nivel del agua por debajo), como si chupase por capilaridad y distorsionaba totalmente la medición dando incluso valores negativos donde antes habia una medicion de nivel de 15cm, extraño.

Lo solucione son la campana propuesta, aunque no he podido encontrar de acero inoxidable, en su caso he usado un simple vaso de plastico rigido invertido con un conector PG-7 de los que se usan en instalaciones electricas y no hay ninguna fuga, para mantener el vaso abajo en el pozo he usado un tubo de instalacion electrica de 20mm enganchado al mismo conector PG-7 simplemente por presion y el sistema funciona de maravilla.

Hice una tabla para sacar la ecuacion lineal y ver la desviacion de lo medido con lo real, era muy poca y al final no la he metido en el programa por no merecer la pena; me interesa mas la fluctuacion del nivel que el nivel en si, así que es válido.

Dejo una imagen con el registro de nivel obtenido estos 5 ultimos dias, he ido realizando comprobaciones reales y cuadra con la realidad.

Como lo mencioné funciona perfecto para este sensor.
En mi experiencia desestimé el uso de los MPX porque toda la operación mecánica y neumática es trabajosa.
En cambio un simple sensor como este

image

Rosca NPT 1/4" salida lo que uno quiera
image
Yo elijo 0-3.3V que se ajusta a los ESP32.
Es simplemente perfecto.
Los hay de todas las medidas. Acabo de comprar 3 a 11 USD cada uno con envió gratis a Argentina.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.