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.
Modelado Matemático Tanque Cerrado
Comunicación I2C en Microcontroladores PIC: Guía Completa con Ejemplos
Predictor de Smith con PIC
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:
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
es el voltaje de alimentación () y es el voltaje que entrega el sensor (o sea, el que leemos con arduino en bytes y lo transformamos a voltaje) y 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.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.