Saltar al contenido

Medidor de Nivel de Agua por Presión con Arduino

Hola controleros y controleras, les doy la bienvenida a otra entrada del sitio WEB donde vamos a aprender a Medir el Nivel de Agua de un tanque usando un sensor de presión (MPX5010DP) y CUALQUIER microcontrolador (En este caso usaremos la placa de desarrollo de ARDUINO)

Antes de comenzar, te hago la invitación de que veas nuestro CURSO GRATUITO DE ARDUINO (CLICK AQUI)

Y también de que te suscribas al Canal de YouTUBE si quieres seguir aprendiendo sobre microcontroladores, sensores, programación y teoria de instrumentación y control:

Medición de Nivel de Agua

En esta entrada vamos a discutir una de las formas más económicas de realizar la medición del nivel de un tanque realizado por medio de un sensor de presión diferencial.

En este sitio WEB y en el canal de YouTube, ya hemos hablado de los SENSORES de PRESIÓN. Por eso te recomiendo de que le des un vistazo a esa entrada.

Como vimos en esa entrada anterior, ya sabemos que es la presión, las diferentes presiones que existen y sobre todo que

El nivel y el caudal pueden ser derivados de una medida de presión. Por ejemplo, para medir nivel tenemos que:

\Delta P= P_H - P_L =\rho g h
Medicion del nivel por presión diferencial

Por eso a pesar de no emplear un sensor de nivel de agua en este proyecto, es posible realizar la medición de nivel empleando otra característica de la física por medio de un sensor de presión diferencial de aire con arduino.

Sensor de Nivel con PIC

Sensor de Presión MPX con PIC

Arduino con Simulink

Arduino con Simulink

Sensor de Presión MPX5010DP

Existen diferentes sensores de presión diferencial en el mercado de los microcontroladores conocidos como Sensores de presión tipo MPX, MPX53DP, MPX53GP, MPX2010DP, MPX2010GP, MPX2050DP, MPX10DP, MPX5010DP, etc, y básicamente varían en la capacidad de presión que es capaz de medir el sensor.

Dependiendo de nuestra aplicación deberemos seleccionar el sensor adecuado, recordando que muchos de esos sensores necesitarán ser acoplados a circuitos amplificadores de voltaje para poder ser leidos por un microcontrolador (en este caso nuestro Arduino).

Por eso les recomiendo conseguir el MPX5010DP que ya entrega en su salida un voltaje de 0v – 5v ideal para microcontroladores, a diferencia de su hermano el MPX10DP hasta 50mV lo que requerirá de un amplificador operacional para tratar su señal.

MPX5010DP con Arduino

El transductor piezo-resistivo de la serie MPX5010 es un sensor de presión de silicio monolítico de última generación diseñado para una amplia gama de aplicaciones, pero particularmente aquellas que emplean un microcontrolador o microprocesador con entradas ADC. Este transductor patentado de elemento único combina técnicas avanzadas de micromaquinado, metalización de película delgada y procesamiento bipolar para proporcionar una señal de salida analógica precisa y de alto nivel que sea proporcional a la presión aplicada.

MPX5010 puede medir una presión de 10 kPa y MPX5100 puede medir una presión de 100 kPa (14,5 psi). Da salida lineal sobre el rango como se muestra en la figura extraída de la hoja de datos.

Voltaje vs Presión MPX5010DP

Claro está que las aplicaciones de este sensor NO se limitan únicamente a la medición de Nivel, que es el objetivo de esta entrada.

Como vemos en el gráfico anterior, la ecuación para obtener la presión del sensor viene dada por:

P=\dfrac{V_{out}-0.04V_s}{0.09V_s}\pm Tol

V_s es el voltaje de alimentación (V_s=5v) y V_{out} es el voltaje que entrega el sensor (o sea, el que leemos con arduino en bytes y lo transformamos a voltaje) y Tol es la tolerancia, un ajuste que debemos hacerle al sensor para calibrar la medida.

Medición de Nivel por Presión Hidrostática

En este caso vamos a valernos de la presión hidrostática presentada anteriormente para la medición del nivel al interior de un tanque.

El pinado del sensor de presión MPX5010DP se muestra a continuación:

IMPORTANTE: Según el datasheet, el sensor no puede entrar en contacto directo con el liquido, por lo tanto debemos crear un colchón de aire en el interior del tubo que esta conectado al sensor para evitar que el liquido entre al interior del mismo.

Circuito Nivel Tanque

Vamos a valernos de que el sensor de presión presenta una medición lineal, según lo pudimos observar en su datasheet y en la gráfica de arriba donde muestra la relación voltaje – Presión. Sin embargo, puedes perfectamente calibrar tu sensor usando una regresión lineal, como la que hicimos el el video con el sensor de temperatura con PIC.

Tomando como base la ecuación de presión diferencial que relaciona la altura (recordando que la presión a la atmosfera es cero):

P=\rho g h

donde P es la presión, \rho es la gravedad y h es la altura o nivel del tanque.

h=\dfrac{P}{\rho g}

Las unidades que necesitamos saber aqui son, la del Pascal:

Pa=\dfrac{kg}{m.s^2}

densidad del agua (aprox)

\rho_{(agua)}=1000\dfrac{kg}{m^3}

gravedad (aprox)

g=10\dfrac{m}{s^2}

EJEMPLO: Supongamos que estamos leyendo 1kPa=1000Pa, la altura sería:

h=\dfrac{1000\dfrac{kg}{m.s^2}}{1000\dfrac{kg}{m^3}10\dfrac{m}{s^2}}=0.1m=10cm

Descargar hoja de excel de calibración via regresión lineal

>> DESCARGAR AQUI <<

Nota que con esta aplicación de medición de nivel usando un sensor de presión diferencial podríamos pensar en realizar un Control PID Arduino de Nivel.

A continuación te dejo el código para que lo copies y lo pegues en tu compilador, recuerda que para tener acceso a él, solo basta con compartir el contenido de este post, de esa forma ayudas que este sitio web siga aportando más contenidos gratuitos y de calidad.

/*=================================================
https://controlautomaticoeducacion.com/arduino/ - 2020
By: Sergio Andres Castaño Giraldo
=================================================*/
double Level,Vout,P,Vs=5.0;
double aux;
double tolP=0.04; // Ajusta la medida de presión
int i, rho = 997;
double g=9.8;
void setup()
{
  Serial.begin(9600);
}
void loop() 
{
   //Voltaje del Sensor MPC5010DP
   aux=0;
   for(i=0;i<10;i++){
    aux = aux + (float(analogRead(A0))*5.0/1023.0); //v
    delay(5);
   }
   Vout=aux/10.0;
  
  //Presión en Kpa según gráfica 4 del Datasheet
  P = ( Vout - 0.04*Vs ) / (0.09 * Vs) + tolP; //kPa
   
  Level = ((P*1000)/(rho*g))*100;  //Medida de Nivel del tanque
  Level = 1.081349*Level + 0.219574;
  Serial.print("\n\nVoltaje:");
  Serial.print(Vout);
  Serial.println(" v");
  Serial.print("Presión:");
  Serial.print(P);
  Serial.println(" kPa");
  Serial.print("Nivel:");
  Serial.print(Level);
  Serial.println(" cm");
  
  delay(3000);
}

¿Cómo saber si mi sensor MPX sirve para determinado tanque?

Una pregunta bastante común que recibo es como saber cuanto es el nível máximo que aguanta el sensor MPX5010DP o cualquier otro sensor de presión MPX que existe en el mercado. Para saber eso, debemos partir de la ecuación expuesta anteriormente, donde debemos conocer la presión máxima que alcanza el sensor (el cual lo ves en el datasheet) y debes conocer la densidad del líquido que va a contener el tinaco o tanque.

Por ejemplo, el sensor MPX5010DP según su datasheet mide una presión máxima de 10kPa. Si queremos realizar la medición de nivel de agua con arduino, sabemos que la densidad del agua es \rho=997\ {\rm Kg/m^3} y consideramos la gravedad como g=9.8\ {\rm m/s^2}, por lo tanto si sustituímos en la ecuación tenemos que:

h=\dfrac{P}{g\rho}=\dfrac{10kPa}{\left(9.8\ {\rm m/s^2}\right) \left(997\ {\rm Kg/m^3}\right)}
h=\dfrac{10000\ {\rm Kg/(m.s^2)}}{\left(9.8\ {\rm m/s^2}\right) \left(997\ {\rm Kg/m^3}\right)}
h=1.023 \rm m

Lo que indica que el MPX5010DP solo puede ser empleado para medir como máximo un tanque de 1.023 metros de altura de agua. El mismo procedimiento puedes hacerlo para otro tipo de sensor o otro tipo de líquido.

Ejemplo de medición de nivel de agua con Arduino en Tanque Esférico

Vamos a realizar otro ejemplo similar, sin embargo en este caso usamos el sensor de presión diferencial para la medicón de nivel al interior de un tanque esférico:

La imagen anterior muestra un sensor de caudal al interior del tubo de alimentación que usaremos en otro proyecto. Pero lo importante es colocar el sensor de presion para determinar la altura de nivel de agua al interior de este tanque esférico. El circuito a implementar es el siguiente:

El circuito anteiror muestra la conexión del sensor MPX5010DP al pin A0 del arduino. Adicionalemente se muestra la activación de dos bombas empleando dos drivers de potencia diferente las cuales son moduladas con la señal PWM de Arduino. Sin embargo, para el proyecto actual, solo vamos a emplear la bomba conectada al BTS7960 que está en los pines 4 y 6 del arduino.

Para conectar una bomba (o motor) al BTS7960, generalmente necesitas realizar las siguientes conexiones:

  1. Alimentación (VCC y GND): El BTS7960 necesita una fuente de alimentación que puede variar típicamente entre 5V y hasta más de 20V, dependiendo de las especificaciones del motor. Asegúrate de conectar VCC al positivo de la fuente y GND al negativo.
  2. Conexiones al Motor: El BTS7960 tiene dos salidas para el motor, marcadas como MA y MB o a veces como B+ y B-. Conecta estas salidas a los dos cables del motor.
  3. Señales PWM (RPWM y LPWM): Para controlar la velocidad del motor, el BTS7960 utiliza señales de modulación de ancho de pulso (PWM). Las señales RPWM y LPWM controlan la velocidad y la dirección del motor. En el código proporcionado a continuación, la bomba (motor) se activa con una señal PWM en el pin RPWM1 y se coloca un nivel bajo (LOW) en el pin LPWM1 para mover el motor en una dirección. Si quisieras mover el motor en la dirección opuesta, invertirías los niveles de señal.
  4. Habilitación (Enable): El BTS7960 puede tener también pines de habilitación, que permiten activar o desactivar el driver. Estos pines suelen estar marcados como ENA y ENB o simplemente EN, asegurate de que estén en un estado lógico alto (HIGH) para habilitar el funcionamiento del motor.

El código es el siguiente:

//***************************************************//
//***************************************************//
//*****   Medidor de nivel en Tanque Esferico   *****//
//*****                                         *****//
//***** by: Sergio Andres Castaño Giraldo       *****//
//***** https://controlautomaticoeducacion.com/ *****//
//*****                                         *****//
//***************************************************//
//***************************************************//



// BTS7960 - 1 (Bomba 1)
byte RPWM1 = 4;
byte LPWM1 = 6;

// l298 - 1 (Bomba 3)
byte IN3_L1 = 24;
byte IN4_L1 = 25;
byte BEN_L1 = 5;

// Sensor YF-S201 
byte flowSensor1Pin = 2;
volatile unsigned long pulseCount1 = 0;
float flowRate1 = 0.0;
unsigned long oldTime = 0;

// Sensor MPX5010DP (Presión Diferencial)
byte MPX1 = A0;

//Estructura da Bomba L298
typedef struct{
  byte enPin1;
  byte enPin2;
  byte pwmPin;
}BombaL;

//Estructura da Bomba BTS7960
typedef struct{
  byte pwmA;
  byte pwmB;
}BombaBTS;


//Crear las bombas con las estructuras
const BombaBTS bomba1 = {RPWM1, LPWM1};
const BombaL   bomba3 = {IN3_L1, IN4_L1, BEN_L1};


float inputValue  = 0;
int   velocity = 0;
float tankLevel = 0;

String inputString = "";         // Una cadena para mantener los datos recibidos
boolean stringComplete = false;  // Ya se recibió toda la cadena?


void setup() {
  Serial.begin(9600); //Comunicación Serial
  inputString.reserve(200); // Reserva espacio para la cadena
  pinMode(flowSensor1Pin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(flowSensor1Pin), flowSensor1Interrupt, RISING);
}

void loop() {
   //Activar la bomba con el dato del serial
  velocity = map(inputValue, 0, 100, 0, 255); //Define el PWM de la Bomba
  digitalWrite(bomba1.pwmA, LOW);
  analogWrite(bomba1.pwmB, velocity); //PWM
  
  /*
  // Ativar bomba3 (BombaL) 
  digitalWrite(bomba3.enPin1, HIGH);
  digitalWrite(bomba3.enPin2, LOW);
  analogWrite(bomba3.pwmPin, velocity);
  */  

  //Leitura da altura via pressão
  tankLevel = readPressureLevel(MPX1, 5.0, 0.03);
  Serial.print("Nivel Tk1 = ");
  Serial.println(tankLevel);

  //Calcular flujo cada 1segundo
  if ((millis() - oldTime) > 1000) { 
    detachInterrupt(digitalPinToInterrupt(flowSensor1Pin));

    flowRate1 = (pulseCount1 * 60.0) / 7.5; // L/min (YF-S201: 1 pulso = 2.25 mL)

    // Reiniciar conteo de pulsos y tiempo
    pulseCount1 = 0;
    oldTime = millis();

    attachInterrupt(digitalPinToInterrupt(flowSensor1Pin), flowSensor1Interrupt, RISING);
  }
  delay(1000);
}

// Esta función se llama cada vez que el puerto serie recibe un byte:
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read(); // Obtiene el nuevo byte
    inputString += inChar; // Añade el byte a la cadena
    if (inChar == '\n') { // Si es un byte de nueva línea, la entrada está completa
      inputValue = inputString.toInt(); // Convierte la cadena a int
      // Si inputValue está en el rango de 0 a 100
      if(inputValue > 100){inputValue = 100;}
      if(inputValue < 0){inputValue = 0;}
      inputString = ""; // Limpia la cadena
    }
  }
}



//Función de la interrupción
void flowSensor1Interrupt() {
  pulseCount1++;
}


//Lectura sensor de presion
double readPressureLevel(byte mpxPin, float Vs, float tolP) {
  // mpcPin = Pino do sensor
  // Vs = 5.0 Voltagem de alimentação (pode botar o valor exato para maior presição)
  // tolP = Tolerancia do sensor, usado para ajustar a medida
  
  double Vout, P, aux = 0;
  const int numSamples = 10;
  double rho = 997;
  double g=9.8;

  // Ler voltagem do sensor (filtro de meia móvel)
  for (int i = 0; i < numSamples; i++) {
    aux += (double(analogRead(mpxPin)) * 5.0 / 1023.0);
    delay(5);
  }
  Vout = aux / numSamples;

  // Calcular a pressão em kPa segundo equação do DataSheet (Gráfico)
  P = (Vout - 0.04 * Vs) / (0.09 * Vs) + tolP;

  // Calcular o nível do tanque em cm
  double Level = ((P * 1000) / (rho * g)) * 100;

  return Level;
}

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (34)

Hola me gustaría que me ayudarás a entender como conectar una sola bomba al BTS7960 porque no entiendo bien en el segundo circuito que pusiste soy nuevo en esto

Responder

En el sitio web, antes de mostrar el código, incluí una explicación de la conexión del BTS7960.

Responder

Hola buen día , me gustaría dar gracias por la información me a resultado muy útil. Me gustaría saber si este sensor podría utilizarse para determinar el nivel de sólidos ?

Responder

Para Solidos no, solo liquidos.

Responder

Muchisimas gracias por tu aportación, me has ahorrado la formula del datasheet y parte del código, ademas de la regresión de mínimos cuadrados, excelente. En mi caso quiero medir la presión dentro de una esfera de goma. Saludos

Responder

Gracais Marco, que bueno que te ha sido de utilidad. Saludos.

Responder

Hola Sergio. Excelentes tus aportes a nuestros conocimientos!!. Me surge una inquietud. ¿Cómo puedo determinar el audal de salida de un tanque con el MPX5010DP?. Hago esta pregunta porque en este desarrollo se enuncia que «El nivel y el caudal pueden ser derivados de una medida de presión.»
Estoy trabajando con un caudalimetro pero me interesó ese comentario y de esa manera puedo utilizar este sensor para estas mediones: Presión manométrica y Caudal.
Muchas gracias por tu respuesta

Responder

Para Medir el caudal debes colocar una restricción dentro de la tubería para generar una perdida de carga y un diferencial de presión, el cual vas a leer posteriormente con tu sensor. Para ajustar la medida, tendrás que tener algun método que te entregue el caudal como por ejemplo emplear el método del aforo. Aquí en el sitio web ya hemos hablado también sobre el funcionamiento de los medidores de caudal, que quizas te pueda servir.

Responder

Sergio muchas gracias por el tiempo para compartir tu conocimiento, me pareció muy interesante este tema y me gustaría saber, si es posible, o que puedas explicar en un video, o si ya lo tienes, decirme cual, como obtener la información del sensor. Por ejemplo yo puedo hacer un software y abro el puerto para capturar la información pero me sale fuera de timming, muy desordenada, no se si tiene que ver con la sincronización de la información en el código del software. Gracias nuevamente por tu tiempo

Responder

Hola Alvaro, no entendí de que software o de que sensor estás hablando. Estas tratando de implementar esta práctica de Arduino para medir el nivel de un tanque? O estas programando un software?

Responder

Hola Sergio

Perfecto lo que tu me indicas! Estas en lo cierto.

Te hago una pregunta Sergio. Necesito medir entre 0 a 60 pascales. ¿Puedo realizar esa medida con ese sensor ya que al ver su gráfica se puede establecer esa medida? Saludos.

Responder

Hola Gian teoricamente ese rango está dentro de las capacidades del MPX5010DP sin embargo requieres de un rango muy bajo, por lo tanto no te va a dar una buena resolución, debes buscar otro sensor para trabajar con presiones más bajas.

Responder

he estado viendo tu Blog y es muy interesante pero tengo algunas dudas respecto a tu trabajo.

Se supone que en el datasheet del sensor mpx5010dp tiene una ecuación de transferencia que determina la tensión de salida en función de la presión se esta midiendo, correcto?

Entonces veo que usted despeja la variable P (la presión) de la ecuación de manera directa en función de Vo (salida de tensión del sensor). Como usted se da cuenta que el voltaje Vo es el correcto? veo que lees la tensión le haces un proceso de conversión ADC y después lo promedias.

No debería primero calcular la Vo del sensor ya que la FT (Función de transferencia) esta presente y con eso creería que se puede tener una salida estable Vo. Si 0 kPa equivalen a 0 voltios y que los 10kpa sean los 5 voltios. Con esa tasa de voltaje hay si creo que se puede determinar mucho mejor y ajustar el termino con la tolerancia Vfss

Con eso se puede validar tu ecuación que despejas para determinar la presión con el Vo correcto.

Eso creeria yo jaja

Saludos

Responder

Hola Gian, no entendí muy bien la secuencia que sugieres.
Si quisiéramos calcular Vo, necesitaríamos saber la presión que esta siendo ejercido en el sensor en ese momento. (en caso de conocer la presión, pues directamente partiriamos a determinar la altura sin necesidad de calcular Vo)
La idea del sensor mpx es que me entrega un voltaje en base a la presión que recibe, por lo tanto se lee el voltaje con el arduino y en base al voltaje leído es que podemos saber cual es la presión ejercida en ese momento sobre el sensor para posteriormente calcular la altura.

Responder

Sergio buenas, la línea 28 no entiendo que haces con esos valores, con que fin (Level = 1.081349*Level + 0.219574;) para que son esos valores en el calculo del nivel, gracias

Responder

Leyder, esa es la ecuación de la regresión lineal, esa etapa esta explicada en detalle en el video que se encuentra al comienzo del post. Saludos.

Responder

Buenos días como seria la conexión del amplificador y la lógica para un sensor de presión diferencial MPXV7002DP 1V/kPa.-2kPa, 2kPa, 5V
Muchas Gracias…

Responder

Es un buen proyecto para la asignatura de control, me gustaría saber si el modelo matemático es lo único mostrado, o alguno parecido sobre temperatura?

Responder

Tengo uno de temperatura con Arduino, basta con darle click al enlace. Saludos.

Responder

si compre un mpx5010dp para llevar acabo el proyecto tiene una desventaja esta limitado de 0 a 10 kpa y el mpx10dp no tiene esa limitación e podido medir de 0 a 22 kpa. solo que no e podido hacer lo me manera estable e usado el ad620 ad623 lm358 solo con un modulo ad620 otro problema del mpx5010dp es su precio 4 veces mas caro que el mpx10dp espero y algun día haga un tutorial de amplificadores operacionales
un saludo desde queretaro mx

Responder

Buenos dias ..una consulta ..puedo usar este método para medir el nivel de un tanque de gasoil de 1500 litros …

Responder

No es recomendable. Para esos procesos debes conseguir la instrumentación adecuada pues es un proceso inflamable.

Responder

Hola yo tengo un mpx10dpsu señal es muy baja solo 35mv por kpa no tendras algun diagrama para usarlo con arduino
un saludo desde queretaro mx

Responder

Hola Sergio,
Gracias por su aporte, me gustaría saber si la agitación moderada del fluido en el recipiente afectará la medición de nivel den sensor de presión?

Responder

Ciao Sergio,
scrivo in italiano perché mi spiego meglio.
Ho utilizzato il tuo esempio per misurare la pressione in un cilindro di mosto di birra in fermentazione.
Successivamente ho calcolato la densità (in kg/m3) tramite la legge di Stevino sapendo che il cilindro è alto 35 cm.
Dopodiché ho convertito la densità in gravità specifica (mio target).
Ho però valori molto distanti tra ciò che dice il sensore e il densimetro.
Li correggo tramite regressione lineare ma il sensore non è così preciso come vorrei.

Esiste in commercio uno più preciso?
Il mio range di pressione (comparato alla scala di gravità specifica del densimetro) dovrebbe essere tra 3420 Pa e circa 3900 Pa.

Se non sono stato chiaro posso provare a tradurre in inglese.

Grazie,
Tommaso

Responder

(Google translate)
Ciao Tommaso,

Il serbatoio del mosto è un serbatoio aperto o chiuso? Ricorda che nel caso di un serbatoio chiuso è meglio misurare la pressione differenziale nella parte superiore e inferiore del serbatoio.

Si può provare ad utilizzare il circuito consigliato dal datasheet posizionando i condensatori su Vs e Vout per migliorare la misura. Puoi anche provare a programmare un filtro passa-basso software per vedere se la tua lettura migliora.

Vi lascio qui sotto il codice del filtro passa basso dove dovete modificare il valore di alpha tra 0 e 1 a seconda di quanto segnale volete filtrare.

int adc_filtrado = 0;
int adc_raw = 0;
#define alpha 0.6
void loop() 
{
   adc_raw = analogRead(A0);
   adc_filtrado = (alpha*adc_raw) + ((1-alpha)*adc_filtrado);
   Vout = (float(adc_filtrado)*5.0/1023.0); //v
}

(Español)
Hola Tommaso,

El tanque del mosto es un tanque abierto o cerrado? recuerda que en el caso de ser un tanque cerrado lo mejor es medir la presión diferencial en la parte alta y baja del tanque.

Puedes intentar usar el circuito recomendado por el datasheet colocando los condensadores en Vs y Vout para mejorar la medida. También puedes intentar programar un filtro pasa bajos por software para ver si tu lectura mejora.

Te dejo el código del filtro pasa bajos a continuación donde debes modificar el valor de alpha entre 0 y 1 dependiendo de cuanta cantidad de señal quieres que filtre.

Responder

(Italiano)
Ciao Sergio,
il serbatoio del mosto è aperto, uso un cilindro di test senza tappo.
Quindi potrei usare anche un semplice sensore di pressione senza misurare la pressione differenziale.

Ho provato ad utilizzare il circuito raccomandato nel datasheet ma non migliora di molto.

Hai idea se esiste in commercio un sensore più preciso per un range di pressione tra 3420 Pa e circa 3900 Pa?

(Spagnolo)
Hola Sergio,
el tanque de mosto está abierto, utilizo un cilindro de prueba sin tapa.
Entonces también podría usar un sensor de presión simple sin medir la presión diferencial.

Intenté usar el circuito recomendado en la hoja de datos, pero no mejora mucho.

¿Tiene alguna idea de si hay un sensor más preciso en el mercado para un rango de presión entre 3420 Pa y aproximadamente 3900 Pa?

Responder

Hola Sergio,
Una consulta deseo medir el nivel del mismo modo que tu lo hiciste, con un tanque abierto pero el agua estara a 60gradosC, habra algun problema por la temperatura?

Responder

talvez tengas problemas, según el datasheet ese sensor no debe mojarse, en tu caso con el vapor del agua seguramente el interior del sensor va a humedecerse.

Responder

Hola Sergio, gracias por tu respuesta.
Vuelvo a insistir en el dispositivo mpx5010dp, para ver si lo puedo emplear en mi proyecto. Se podrá obtener una precisión de 1 mm con dicho sensor realizando una toma de datos de 0 a 35 mm, es decir 35 datos y con ellos realizar la regresión lineal y además utilizar una sonda de 70 mm?
Gracias.
Saudos!

Responder

Puedes intentarlo, te recomiendo uses el circuito del datasheet que incluye unos condensadores en los pines para la eliminación del ruido, también que uses una sonda metálica si es posible y que comiences con 1 solo sensor para ver que tal te trabaja. Y talvez implementar un filtro pasa bajos en el arduino, si te da mucha variación.

Responder

Gracias Sergio por tus sugerencias, lo tendré en cuenta.
Saludos!

Responder

Buenas tardes estimado Sergio Andrés Castaño Giraldo,
Antes que nada te quiero felicitar por el excelente trabajo que realizas brindando información que permite a los demás a realizar sus proyecto.
Me presento, mi nombre es Luis Mariano Campos de Argentina – Tucumán, estoy realizando un trabajo final en el cual debo medir el nivel de agua en un rango de 0 a 35 mm con una precisión de 1 mm, mi pregunta con el sensor que empleaste en tu explicación mpx5010dp y además realizando el valor promedio, la corrección según en el data sheet y la regresión lineal se puede obtener una la precisión de 1 mm con dicho sensor?. Al final del vídeo, no puedo apreciar si el nivel de agua se corresponde con lo que el firmware arroja por pantalla. Además te realizo esta consulta porque quiero estar seguro para realizar el gasto, ya que desde un principio necesito dos de estos sensores para mi es un poco costoso. O quizás existe otro sensor de esta misma familia que posee mayor precisión. Apelo a tu sabiduría y experiencia.
Desde ya te agradezco de antemano cualquier detalle que me puedas facilitar.
Un cordial saludo!

Responder

Hola Luis, realmente tu spam es pequeño y tu tolerancia pequeña, no te recomendaría usar este método pues a veces es engorroso tener una precisión tan elevada. Ahora este sensor mide hasta 100 cm, lo que está muy por encima de lo que necesitas y para tu caso habría que usar uno que aguente menos presión. Quizas este sensor (click) te pueda servir, pero debes verificar la precisión que tiene.

Responder