Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

PIC: MPX4115 e MPX4250

Share:

PIC: MPX4115 e MPX4250



Mais um projeto! neste post iremos utilizar o MPX4115 e o MPX4250 juntamente com o PIC16F876A.

Este dois sensores são projetados para detectar a pressão absoluta do ar, utilizando-o como altímetro ou barômetro. Este sensor da Freescale integra on-chip, amplificadores operacionais e redes de resistores para fornecer um alto nível de sinal de saída analógica e compensação de temperatura. 

MPX4115: opera em 5V e possui um range de 15 à 115 kPa ( ou 2.18 à 16.7 psi ).
MPX4250: opera em 5V e possui um range de 0 à 250 kPa( ou 0 à 36.3 psi ).

É conectado, através do pino 1, em uns dos canais analógicos do microcontrolador. Os pinos 4, 5 e 6 não são utilizados. O pino 2 é o GND e o pino 3 é o VCC.

BIBLIOTECA
MikroC PRO PIC
#define MPX4250_ERROR 3.45
#define MPX4115_ERROR 1.3

//Vout = 5 (P x 0.009 - 0.095)
float MXP4115_Read( char channel )
{
float valor;

      valor = ADC_Read(channel);
      valor /= 204.8;
      valor += 0.475;
      valor /= 0.045;
      return( valor - MPX4115_ERROR );
}

//Vout = 5 * (0.00369 * P + 0.04)
float MXP4250_Read( char channel )
{
float valor;

      valor = ADC_Read(channel);
      valor /= 204.8;
      valor -= 0.2;
      valor /= 0.01845;
      return(valor - MPX4250_ERROR);
}

//Vout = 5 * (0.0012858 * P + 0.04)
float MXP5700_Read( char channel )
{
float valor;

      valor = ADC_Read(channel);
      valor /= 204.8;
      valor -= 0.2;
      valor /= 0.006429;
      return(valor);
}

CÓDIGO
MikroC PRO PIC
//Habilitar as seguintes bibliotecas:
// - ADC
// - Lcd
// - Conversions e C_String

//Pinos do LCD
sbit LCD_RS at RB0_Bit;
sbit LCD_EN at RB1_Bit;
sbit LCD_D4 at RB2_Bit;
sbit LCD_D5 at RB3_Bit;
sbit LCD_D6 at RB4_Bit;
sbit LCD_D7 at RB5_Bit;
sbit LCD_RS_Direction at TRISB0_Bit;
sbit LCD_EN_Direction at TRISB1_Bit;
sbit LCD_D4_Direction at TRISB2_Bit;
sbit LCD_D5_Direction at TRISB3_Bit;
sbit LCD_D6_Direction at TRISB4_Bit;
sbit LCD_D7_Direction at TRISB5_Bit;


//Copie e cole o código da biblioteca aqui!!!


char string[16];

void main()
{
      CMCON = 7;
      
      Lcd_Init();
      Lcd_Cmd( _LCD_CURSOR_OFF );
      Lcd_Cmd( _LCD_CLEAR );
      
      memcpy( string, "P: ", 3 );
      
      while(1)
      {
          //Converte o valor em string
          WordToStr( MXP4115_Read(0)*10, string+3 );
          string[8] = string[7];
          string[7] = '.';
          memcpy( string+9, " kPa", 5 );

          Lcd_Out( 1, 1, string );
          
          
          //Converte o valor em string
          WordToStr( MXP4250_Read(1)*10, string+3 );
          string[8] = string[7];
          string[7] = '.';
          memcpy( string+9, " kPa", 5 );

          Lcd_Out( 2, 1, string );

          Delay_ms( 500 );
      }
}

9 comentários:

  1. amigo, tem como vc tambem atualizar para o mpx5700 , valew

    ResponderExcluir
  2. Tiago, para o MPX4250 tenho um calculo mais rápido que talvez vc consiga adaptar aos outros:

    valor = ADC_Read(channel);
    valor -=54; //Valor inicial de medição para 0 Kpa
    return(valor / 3.77108);

    ResponderExcluir
  3. Boa tarde como eu faria para pressão negativa?
    Desde já agradeço
    Leandro

    ResponderExcluir
  4. como faria para medir o volume de combustivel usando este sensor MPX4250

    ResponderExcluir
  5. Boa tarde Tiago.
    Tu pode colocar dados hex para download ?

    ResponderExcluir