Sensor de Presión Diferencial MPX5010dp

Que tal amigos, excelente tarde.

Llevo poco más de 4 meses en este genial mundo de Arduino, el motivo de esta pregunta es solicitar de su apoyo ya que me pidieron trabajar con un sensor que considero un poco confuso.

Se trata del sensor de Presión Diferencial MPX5010dp de freescale, el asunto es que me encontré con una forma para conectarlo (de la cual anexo una imagen), así mismo, anexo una imágen del código implementado para su lectura, sin embargo, la duda que tengo es saber la UNIDAD DE MEDIDA de los valores que arroja este sensor sin hacer ninguna operación.

En el datasheet me indica que mide desde 0 hasta 10 kPa (kilo pascales), por lo cual, ¿las medidas que me indica son en kilo pascales?

Disculpen mi ignorancia, les agradezco cualquier tipo de ayuda.

Saludos.

San google:

MPX5010 / MPX5100

obteniendo kilopascales

En ese proyecto tienes la explicación y el diagrama, además abajo tiene otro enlace donde puedes ver con el mismo componente un sensor de nivel de agua.

Saludos.

La pregunta es: quieres medir en KiloPascales, o en Kg/cm2, en PSI, en atmósferas o en mmH2O?

El datasheet dice lo que mide 10Kpascales pero tu puedes convertirlo a tu gusto.

Gracias surbyte, te agradezco el tip de las imágenes, ya está modificado el post.

Ahora, reformularé mi pregunta:

Surbyte, tú me puedes decir cual es la unidad de medida que arroja el sensor al puerto análogo, eso es lo único, no necesito saber nada más... la pregunta es... conoces esa información?.

Muchas gracias, excelente día.

Hola spidershad, yo estoy realizando un proyecto con el sensor MPX5700dp la lectura de entrada analógica varia de 0 a 5 V. En el datasheet indica que más o menos en 0,2 se encuentra en 0Kpa y 5V seria 700Kpa. En tu caso supongo que el 0 Kpa seria mas o menos 0,2V y 5V 10Kpa.

Respecto a las equivalencias:
100Kpa equivale a 1 bar.

Te dejo mi post donde indico el código y esta explicado por si te puede ayudar.

https://forum.arduino.cc/index.php?topic=424420.0

Saludos.

Hola Chufi, excelente tarde.

De antemano, te agradezco mucho por tomarte el tiempo de compartir un poco de tu conocimiento, como mencionaba al inicio de este post, llevo apenas 4 meses aprendiendo desde cero arduino, y he ido investigando y probando e incluso adaptando solo lo que requiero hacer funcionar.

En este caso, me llegó el momento de mover unas compuertas de 2 habitaciones en las cuales, me solicitan que debe haber siempre 5 pascales de presión positiva (cuando me dijeron eso me hablaron en chino pues no sabía ni siquiera qué era un pascal), en fin, me puse a investigar, y encontré un sensor de presión de diferencial, (el que hago mención al inicio del post), y cuando estuvo en mis manos, lo conecté de acuerdo a lo que vi en internet, pero al leer información, me llamó la atención que declaran una variable de compensación y le asignan, 101.4, posteriormente cuando leen el valor del sensor en el pin (A0), hacen esta otra operación:

-----> variablePresion = (analogRead(A0)-VariableCompensacion)/100.0

posteriormente al resultado lo llaman KiloPascales (cuando lo ví por primera vez dije, ah pues es muy simple, se parece mucho al sensor de temperatura y humedad dht22(en cuanto a las conexiones), solo tendré que dividir entre 1000 ese valor y listo, ya tengo los pascales), pero cual es mi sorpresa que cuando lo conecto, y utilizo esta formula mencionada, me da unos valores que no creo sean correctos, incluso construí una pequeña habitación para simular la presión con un ventilador, a la cual le hice un par de orificios, en uno le puse la manguera conectada al sensor y otro orificio lo hice para que el aire tenga salida, pero no logro hacer que me de unas lecturas aceptables, ahora bien, de igual manera no tengo de momento contra qué comparar para saber si mis lecturas son como tales "aceptables", solo cuento con este sensor.

Sin embargo, te quiero hacer otra pregunta, veo que en tu código, al valor que lees de tu puerto (A0), lo asignas a una variable y lo multiplicas por una constante (0.00488):

AN0*0.00488; //variacion de voltaje de 0 a 5 V.

Me podrías explicar por qué realizas esto?, en efecto ví que en el datasheet hablan de miliAmperes, y de lecturas en volts, pero la verdad no he terminado de entender esa parte.

Actualmente estoy por conseguir unos adaptadores para hacer funcionar un manómetro que tienen aquí y comparar lecturas, pero mientras tanto sigo buscando.

Te agradezco chufi, saludos.

Hola Spidershad,

Sin embargo, te quiero hacer otra pregunta, veo que en tu código, al valor que lees de tu puerto (A0), lo asignas a una variable y lo multiplicas por una constante (0.00488):

AN0*0.00488; //variacion de voltaje de 0 a 5 V.

Lo que realizo aquí es simplemente añadir datos a la pantalla. Para saber el voltaje que le entra a la entrada analógica de Arduino.
La entrada analógica de Arduino tiene una resolución de 10 bits. Esto quiere decir que tras una conversión, puede tener 1024 valores binarios (2^10). Establezco una relación de tensión analógica a binario. Como la tensión máxima de entrada es 5V y la resolución es de 1024. Es te numero es la división de voltaje máximo/resolución. (5/1024). Por lo tanto cada valor binario equivale a 0.00488 V. Por ejemplo:
Si la entrada analógica de Arduino detecta un valor binario de 100. Quiere decir que a la entrada tenemos 500*0.00488=2,44V. (2,44V a la entrada analógica).

La entrada analógica de Arduino tiene una resolución de 10 bits. Esto quiere decir que tras una conversión, puede tener 1024 valores binarios (2^10). Establezco una relación de tensión analógica a binario. Como la tensión máxima de entrada es 5V y la resolución es de 1024. Es te numero es la división de voltaje máximo/resolución. (5/1024). Por lo tanto cada valor binario equivale a 0.00488 V. Por ejemplo:
Si la entrada analógica de Arduino detecta un valor binario de 100. Quiere decir que a la entrada tenemos 500*0.00488=2,44V. (2,44V a la entrada analógica).

Es cierto que el AD tiene 1024 pasos o 2^10 pero sus valores van desde 0 a 1023 o sea, 1024 pasos.
Si tu haces la cuenta de este modo

5 * analogRead(A0)/1024

cuando el AD esta leyendo su extremo no devuelve 1024 sino 1023. Entonces

5 * 1023/1024 = 4.995 es decir que una lectura a FULL no da 5 sino algo menos. ERROR!!!
Lo correcto es

5*analogRead(A0)/1023.0

Es una sutil diferencia pero este error esta muy generalizado en internet. Muchos tutoriales lo usan y esta mal.
Y ahora si, la cuenta de 5/1023 = 0.00488 da casualmente igual porque olvidamos mas decimales pero la mantisa de la cuenta de 6 digitos para un float incluye estos decimales asi que los demás resultados no darán igual.

La Hoja de datos de los MPX5XXX dice que entrega una tensión desde 0.2V. Toma este valor como tu punto de calibración de cero. Tiens una recta con ordenada al origen. Para Presion = 0 no importa la unidad, tienes 0.2V
Y para el máximo del sensor entrega 4.8V será tu lectura de 1023.

Ahora elige que sistema de unidades de presión deseas usar. Pascales Kpa, bares, milibares, PSI (pound square inch o libra por pulgada cuadrada), Kg/cm2, mmH2O o mmHg. Muchas alternativas

Solo necesitas saber que sensor tienes, cuanto entrega a fondo de escala (4.8V) y podras hacer la conversión que gustes.

Creo que lo hice antes pero lo repito.

El AD del arduino mide entre 0 y 5V
0V => 0
5V => 1023

Entonces 0.2V será aprox = 1023 * 0.2/5.0 = 40.92 pasos o mejor 41
Si todo anduviera bien, 41 sería tu valor de calibración para la salida inferior del sensor.
Por otro lado el sensor nunca llega a 5V sino a 4.8V como dice la hoja de datos

4.8V son aproximamente = 1023 * 4.8V/5.0V= 982 pasos

Conclusión :
41 = Presion minima
982 = Presion máxima

#define ADMIN  41
#define ADMAX 982
const float SensorOffset = 41.0;
// the setup routine runs once when you press reset:
void setup() {
  Serial.begin(9600);    // Inicializa el puerto serie para ver datos en el Monitor
}
 
void loop() {
  float sensorValue = (analogRead(A0)-SensorOffset-512.0)/10.0; 
  Serial.print("Presion: ");  
  Serial.print(sensorValue,2);  // Imprimir el valor que ese lee
  Serial.println(" kPa");
  
  delay(1000);        // demora entre lecturas para estabilidad. 
                            // Para mejores valores reducir este valor y promediar
}

Como esl MPX5100DP es un sensor diferencial. Los valores estarán a uno y otro lado de 2.5V o 512 (1023/2 aprox) pasos del AD.
Si soplas en un puerto del MPX veras valores positivos y si chupas creando vacío o presión negativa verás valores negativos.

Hola, muy buena la información. Justo me encuentro realizando un proyecto similar con el mismo sensor. Hace menos deun mes que incurciono en esto y quizas ustedes puedan ayudarme. Mi duda es acerca de la conexion del sensor a la placa. Se necesita alguna etapa de amplificación para utilizarlo, o algun circuito con capacitores para reducir ruido. Agradezco su ayuda. Saludos!

Que tal amigo, te saludo y no te asustes con estos temas y explicaciones demasiado extensas, cuando comencé a ver este detalle en efecto yo también lo veía en chino, y trataré de explicartelo de una manera que no tengas que recurrir más que a aritmética pura.

Mira, al inicio de este post, (el cual yo inicié), adjunté una imágen, en ella te pongo un arduino uno y un sensor mpx5010dp, solamente ubica en tu sensor la muesca y ese será tu pin de señal, los otros dos son tierra y corriente.

Una vez que ya lo conectaste, inicia un sketch y copia tal cual el código que también pongo de ejemplo, si te fijas, yo tenía conectados 3 sensores, los cuales en cuanto los conectas y te pones a leerlos, te arrojan valores extraños, los cuales NADIE TE VA A EXPLICAR de qué se tratan esos valores.

Pues bien, te cuento que esos valores, se les conocen como PASOS, si le soplas a la toma POSITIVA del sensor, te darás cuenta que dicho valor se incrementa, y si le chupas, veerás cómo el valor se decrementa.

Lo que tu tienes que hacer es, que si el sensor sin ningun tipo de fuerza que sople en el conector positivo te arroja un valor que va desde los 50, 51 o 52, el 51 o 52 sería tu valor CERO, y por lo tanto tendrás que crear una variable que valga 51 o 52 para que cuando leas tu puerto A0 digamos, le restes tu variable y entonces la lectura que imprimas, será de 0 o 1, y así cuando le soples con tu boca o con algún otro dispositivo y se genere una presión positiva, tus valores irán desde cero hasta 1023 menos tu factor de error.

Te repito, todo esto que te digo, lo tuve que deducir ya que como veerás en las explicaciones que me dieron, las cuales en verdad agradezco, aún con esas explicaciones yo no terminaba de entender en qué unidad de medida se encontraban, hasta que después de mucho pero mucho leer, pude comprenderlo.

Si tienes dudas escríbeme a mi email y con gusto te apoyo en lo que pueda.

spidershad@hotmail.com

Saludos.