Saltar al contenido
Control Automático Educación

Sensor de Presión MPX con PIC

Hola controleros y controleras, el día de hoy vamos a aprender a integrar y leer un sensor de presión a nuestro microcontrolador PIC y como aplicación veremos como medir el nivel en el interior de un tanque.

Antes de comenzar te hago la invitación para que veas nuestro CURSO GRATIS DE MICROCONTROLADORES PIC.

También te invito a que te unas a la comunidad de controleros y controleras en YouTUBE para que aprendas sobre programación, microcontroladores, instrumentación y control.

Sensor de Presión Atmosférica MPX con PIC

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.

Una vez entendido como trabaja el principio de medición de la presión, procedamos a conectar un sensor de presión MPX5010DP a nuestro microcontrolador PIC.

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. Esto es debido a que este sensor a diferencia de los otros MPX, está en la capacidad de entregar un voltaje de salida entre 0v y 5v.

MPX5010 puede medir una presión de 10 kPa y MPX5100 puede medir una presión de 100 kPa (14,5 psi).

NOTA: En otra entrada de este sitio WEB del curso de ARDUINO, especificamos el funcionamiento de este sensor, junto con la explicación de como medir la altura de nivel de un tanque usando presión diferencial. Por eso para que entiendas todo ese funcionamiento te invito a que leas esa entrada:

>>> Ver este ejemplo en ARDUINO <<<

El objetivo de esta entrada es simplemente mostrar la traducción del código de Arduino para código en el microcontrolador PIC18F4550 usando el compilador PIC C Compiler.

Medición de Nivel por Presión Diferencial con PIC

Vamos a realizar la medición del nivel de un tanque usando el sensor de presión diferencial MPX5010DP, el microcontrolador PIC18F4550, un LCD16x2 y una inverfaz LCD via I2C para conectar el LCD usando solo 2 hilos.

Para medir la altura del tanque es importante crear un colchón de aire dentro de la manguera que conecta alguna de las entradas del sensor, pues este no puede recibir liquido al interior del mismo, para eso montamos el siguiente circuito:

Sensor de Presión con PIC

El gráfico de medición del Sensor MPX5010DP según el Datasheet es el siguiente:

La ecuación mostrada, para la obtención de la presión es:

P=\dfrac{V_{out}-0.04V_s}{0.09V_s}+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.

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

>> DESCARGAR AQUI <<

El código de implementación es el siguiente, recordando que para verlo solo basta con compartir el contenido de este post, para permitir que más personas aprendan sobre estos temas.

[sociallocker id=”948″]

// ***********************************************************************//
// ***********************************************************************//
// *****       By: Sergio Andres Castaño Giraldo                    ******//
// *****       https://controlautomaticoeducacion.com/              ******//
// *****       Control Engineering                                  ******//
// ***********************************************************************//
// ***********************************************************************//
#include <18f4550.h>
#DEVICE ADC=10
#USE DELAY(crystal=20000000)
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#byte porta = 0xf80 // Identificador para el puerto A. 
#byte portb = 0xf81 // Identificador para el puerto B. 
#byte portc = 0xf82 // Identificador para el puerto C. 
#byte portd = 0xf83 // Identificador para el puerto D. 
#byte porte = 0xf84 // Identificador para el puerto E.
 
#use i2c(Master,Fast=100000, sda=PIN_B0, scl=PIN_B1,force_sw) 
#include <i2c_Flex_LCD.c>
double Level,Vout,P,Vs=4.7;
double aux;
double tolP=-0.27; // Ajusta la medida de presión
int i, rho = 997;
double g=9.8;
void main() {  
lcd_init(0x4E,16,2);
lcd_backlight_led(ON); //Enciende la luz de Fondo
lcd_clear();  //Limpia el LCD
setup_adc_ports(AN0); //Entradas analogas
setup_adc(adc_clock_internal);//Habilito el reloj interno de la conversion
 while (TRUE) { 
   set_adc_channel(0); //especifico q usare el puerto RA0
   //Voltaje del Sensor MPC5010DP
   aux=0;
   for(i=0;i<20;i++){
      aux = aux + (read_adc()*5.0/1023.0);
      delay_ms(5);
   }
   Vout=aux/20.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 = 0.2327*Level + 0.8001;
  
  lcd_gotoxy(1, 1);
  printf(lcd_putc, "Presion: %2.2fkPa    ",P);
  lcd_gotoxy(1, 2);
  printf(lcd_putc, "Altura: %2.2fcm   ",Level); 
  delay_ms(3000);
  
 }
}

[/sociallocker]

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 (7)

Hola , me gustaría saber si el sensor mpx2050Dp serviría para medir el nivel de agua en un tanque cilíndrico?

Responder

Claro, puedes usar siempre cualquier sensor de presión para medir el nivel del agua independiente de la geometria del tanque. En tu caso, vas a tener una medición no lineal pero puedes hacerlo perfectamente.

Responder

hola no se puede usar un pic mas pequeño? para reducir tamaño luego en placa por ejemplo

gracias

Responder

Si claro, puedes emplear otro PIC sin problemas.

Responder

Hola buen día,
Antes que nada darte las gracias por compartir tus videos, me han servido bastante..

y por otro lado quisiera saber si me puedes compartir tu hoja de excel donde haces una calibración vía regresión lineal.

ya la descargue pero no la puedo abrir, solo me aparece un mensaje que el archivo esta dañado.

De antemano muchas gracias..

Responder

Estimado Sergio, muchas gracias por tus videos, me gustaria puedas guiarme con la secuencia de videos que debo seguir para poder ir de manera ordenada y llegar a control PID

Responder

Es solo ir siguiendo el orden de la página del curso, después del Paso 2 encontrarás todas las entradas. Debes abrirlas en orden de izquierda a derecha, de arriba hacia abajo. Saludos. https://controlautomaticoeducacion.com/microcontroladores-pic/

Responder