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.