Artículos recientes

Novedades

Tutorial sensor de presión barométrica BMP180

Tutorial sensor de presión barométrica BMP180

El sensor de presión barométrica BMP180 está diseñado para leer la presión atmosférica y de esta forma estimar indirectamente la Altura sobre el nivel del mar. La presión atmosférica es la fuerza que ejerce el aire (atmósfera) sobre la superficie de la tierra. La presión atmosférica se debe al peso de la columna de aire sobre determinada área, es por esta razón que al medir la presión atmosférica en puntos con mayor altitud, el valor de la presión es menor por ser menor la cantidad de aire. La presión atmosférica también varía con el clima, principalmente con la temperatura, pues esta hace cambiar la densidad del aire, que se ve reflejado en un cambio en el peso y por consiguiente en un cambio de presión.

Entonces, la presión atmosférica varía con la temperatura y la altitud, estas dos variables son las más representativas para el cambio de presión. Factores como la humedad relativa y la velocidad del viento también influyen en la presión atmosférica en menor forma y pueden ser obviados.

Lo que mide el sensor BMP180 es la presión absoluta (Barométrica) y la temperatura, al sensar la temperatura podemos compensar su influencia en la presión y asi determinar con mayor exactitud la altitud.

Nuestro módulo BMP180 incluye además del sensor BMP180, un regulador de voltaje (5V a 3.3V), resistencias pull-up y capacitores by-pass. El Modulo puede alimentarse directamente de la salida de 5V de Arduino. Posee un formato pequeño y de bajo consumo de corriente. 

Módulo Barómetro BMP180

Librería para el sensor de presión  BMP180

Para este tutorial utilizaremos la librería desarrollada por Sparkfun, dicha librería lo pueden descargar en: https://github.com/sparkfun/BMP180_Breakout/...

Es necesario descargar e importar la librería a nuestro IDE de Arduino, antes de empezar con los ejemplos explicaremos las funciones que utilizaremos:

begin()

Inicializa el sensor BMP180, nos retorna 1 si la inicialización es correcta o 0 si ha fallado               

startTemperature()

Función para iniciar una medición de temperatura y nos retorna el tiempo en milisegundos que necesitamos esperar antes de obtener la lectura. Si nos retorna un 0, es porque ha fallado el inicio de la medición de temperatura

getTemperature(T)

Obtener la temperatura en la variable T, antes de usar esta función es necesario llamar a la función startTemperature() y que haya transcurrido el tiempo adecuado para la lectura; retorna 1 o 0 si la lectura se ha realizado con éxito o no respectivamente

startPressure(Sobremuetreo);

Función para iniciar una medición de presión, hay que indicar la cantidad de muestras adicionales  (de 0 a 3) que el sensor debe tomar para la lectura de la presión y nos retorna el tiempo en milisegundos que necesitamos esperar antes de obtener la lectura. Si nos retorna un 0, es porque ha fallado el inicio de la medición de presión

getPressure(P, T);

Obtener el valor de la medición iniciado previamente con startPressure(); es necesario darle como parámetro la temperatura T el cual servirá para compensar la influencia de la temperatura en el cálculo de la presión, el valor de la presión absoluta se guarda en la variable P. Retorna 1 o 0 si la lectura se ha realizado con éxito o no respectivamente

altitude(P, Po);

Calcula la altitud entre el punto donde se ha tomado la lectura de presión P (en mbar) con respecto a un punto de referencia con presión Po (en mbar). Nos retorna el valor de la altitud en metros                         

sealevel(P, A);

Esta función realiza el cálculo inverso a altitude(P, Po) , Dado una presión P (en mbar) y una altitud A (en metros) calcula la presión al nivel del mar o punto desde donde se mide la altura. Retorna el valor de la presión en mbar

 

Explicado esto procedemos a realizar nuestros ejemplos:

 

Conexiones entre Arduino y módulo BMP180

Las conexiones son como cualquier conexión I2C:

Adaptador LCD a I2C

Arduino Uno, Nano, Mini.

Arduino Mega , DUE

Arduino Leonardo

  VCC

5V

5V

5V

  GND

GND

GND

GND

  SCL

A5

21

3

  SDA

A4

20

2

   

Conexion de Modulo BMP180

  

1. Realizar lecturas de presión y temperatura con el BMP180

Realizar esta tarea es sumamente sencillo, basta con iniciar la lectura, esperar el tiempo que dura la lectura y obtener dicho valor. Realizaremos el mismo procedimiento tanto para temperatura y presión.


A continuación se muestra el Sketch correspondiente:

 

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 bmp180;

void setup()
{
  Serial.begin(9600);

  if (bmp180.begin())
    Serial.println("BMP180 iniciado correctamenten");
  else
  {
    Serial.println("Error al iniciar el BMP180");
    while(1); // bucle infinito
  }
}

void loop()
{
  char status;
  double T,P;

  status = bmp180.startTemperature();//Inicio de lectura de temperatura
  if (status != 0)
  {   
    delay(status); //Pausa para que finalice la lectura
    status = bmp180.getTemperature(T); //Obtener la temperatura
    if (status != 0)
    {
      status = bmp180.startPressure(3); //Inicio lectura de presión
      if (status != 0)
      {        
        delay(status);//Pausa para que finalice la lectura        
        status = bmp180.getPressure(P,T); //Obtenemos la presión
        if (status != 0)
        {                  
          Serial.print("Temperatura: ");
          Serial.print(T,2);
          Serial.print(" *C , ");
          Serial.print("Presion: ");
          Serial.print(P,2);
          Serial.println(" mb");          
        }      
      }      
    }   
  } 
  delay(1000);
}

  

El resultado que obtenemos por el monitor serial es el siguiente:

Lectura de presion y temperatura con BMP180

  

2. Estimar la Altitud con el BMP180

En este caso calcularemos la altitud de nuestra posición sobre el nivel del mar, para esto es necesario medir tanto la presión como la temperatura de nuestra posición, además como dato necesitamos la presión atmosférica sobre el nivel del mar.


EL sketch para obtener la altura es el siguiente:

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 bmp180;

double PresionNivelMar=1013.25; //presion sobre el nibel del mar en mbar

void setup()
{
  Serial.begin(9600);

  if (bmp180.begin())
    Serial.println("BMP180 iniciado correctamenten");
  else
  {
    Serial.println("Error al iniciar el BMP180");
    while(1); // bucle infinito
  }
}

void loop()
{
  char status;
  double T,P,A;
  
  status = bmp180.startTemperature();//Inicio de lectura de temperatura
  if (status != 0)
  {   
    delay(status); //Pausa para que finalice la lectura
    status = bmp180.getTemperature(T); //Obtener la temperatura
    if (status != 0)
    {
      status = bmp180.startPressure(3);//Inicio lectura de presión
      if (status != 0)
      {        
        delay(status);//Pausa para que finalice la lectura        
        status = bmp180.getPressure(P,T);//Obtenemos la presión
        if (status != 0)
        {                  
          Serial.print("Temperatura: ");
          Serial.print(T);
          Serial.print(" *C , ");
          Serial.print("Presion: ");
          Serial.print(P);
          Serial.print(" mb , ");     
          //-------Calculamos la altitud--------
          A= bmp180.altitude(P,PresionNivelMar);
          Serial.print("Altitud: ");
          Serial.print(A);
          Serial.println(" m s.n.m.");    
        }      
      }      
    }   
  } 
  delay(1000);
}

 

A continuación se muestra los datos recibidos por el monitor serial.

Lectura presion, temperatura y altitud con BMP180

  

3. Calculando la altura entre dos puntos

Para este caso tomaremos un punto inicial, para nuestra altura h=0, y a partir de aquí, conforme nos desplazamos verticalmente mediremos la altura, en este caso la precisión es de aproximadamente 0,5m. Para esto necesitamos medir tanta presión y temperatura en el punto de la posición inicial, como en los demás posiciones:

EL sketch para realizar esto es:

#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 bmp180;

double Po; //presion del punto inicial para h=0;
char status;
double T,P,A;
void setup()
{
  Serial.begin(9600);

  if (bmp180.begin())
  {
    Serial.println("BMP180 iniciado correctamentenTomando medidadas del punto de referncia...n");
    status = bmp180.startTemperature();//Inicio de lectura de temperatura
    if (status != 0)
    {   
      delay(status); //Pausa para que finalice la lectura
      status = bmp180.getTemperature(T);//Obtener la temperatura
      if (status != 0)
      {
        status = bmp180.startPressure(3);//Inicio lectura de presió
        if (status != 0)
        {        
          delay(status);//Pausa para que finalice la lectura        
          status = bmp180.getPressure(P,T);//Obtenemos la presión
          if (status != 0)
          {                  
            Po=P; //Asignamos el valor de presión como punto de referencia
            Serial.println("Punto de referncia establecido: h=0");  
          }      
        }      
      }   
    }
    
  }
  else
  {
    Serial.println("Error al iniciar el BMP180");
    while(1); // bucle infinito
  }
}

void loop()
{

  status = bmp180.startTemperature();//Inicio de lectura de temperatura
  if (status != 0)
  {   
    delay(status); //Pausa para que finalice la lectura
    status = bmp180.getTemperature(T);//Obtener la temperatura
    if (status != 0)
    {
      status = bmp180.startPressure(3);//Inicio lectura de presión
      if (status != 0)
      {        
        delay(status);//Pausa para que finalice la lectura        
        status = bmp180.getPressure(P,T);//Obtenemos la presión
        if (status != 0)
        {                    
          //-------Calculamos la altura con respecto al punto de referencia--------
          A= bmp180.altitude(P,Po);
          Serial.print("h=");
          Serial.print(A);
          Serial.println(" metros");    
        }      
      }      
    }   
  } 
  delay(1000);
}

  

A continuación mostramos la salida del monitor serial, en la primera imagen lecturas de nuestro punto de referencia y en la segunda imagen lecturas después de  subir dos pisos.

 Altura entre dos puntos con BMP180

  

En este caso nuestro punto de referencia es la posición inicial en donde encendemos o reiniciamos nuestro Arduino. Pero podemos trabajarlo como un punto fijo en caso sea necesario, para esto tenemos que tener como dato la presión de dicho punto.

 

Pueden adquirir los materiales usados en este tutorial en nuestra tienda:

Arduino Uno R3

Módulo Barómetro BMP180

41 Comments

    • Avatar
      David Alan Rubio Rojas
      may 22, 2017

      una pregunta porque lo ponen 3 al status = bmp180.startPressure(3) y como pudeo ponerlo como punto fijo, como dice al final.

      • Avatar
        Naylamp
        may 30, 2017

        Hola David, el valor 3 es para especificar el modo de medición, 3 es para la máxima precisión (mayor número de muestras), Puedes cambiar a 0 para disminuir el tiempo de lectura y consumo de corriente. En el último ejemplo, con punto fijo nos referimos a no medir la presión de la posición inicial, sino en tener dicho valor como dato, similar al ejemplo 2.

    • Avatar
      Luis Zuñe
      jun 13, 2017

      En el datasheet del BMP180, indica que trabaja con 3.3V.

      • Avatar
        Naylamp
        jul 29, 2017

        Hola Luis, el módulo usado tiene un regulador de 3.3V

    • Avatar
      german
      sep 9, 2017

      Hola, quisiera conectar 2 sensores al mismo puerto serie. como debería hacerlo? por otro lado, puedo conectar varios sensores en diferentes patas que no sean solamente la A4 y A5?

    • Avatar
      Iván
      oct 30, 2017

      Me pueden explicar el "chat status"

    • Avatar
      Jairo
      nov 2, 2017

      Si la interfaz I2C del sensor trabaja a 3.3V porque se conecta directamente al arduino si este tiene niveles logicos de 5v?

    • Avatar
      Máximo
      nov 4, 2017

      Hola. Antes de nada, agradecerte esta página por la información tan importante que aportas sobre el sensor BMP180.Estoy usando este sensor con la placa Wemos y no va bien. Quiero decir que las medidas no son lógicas, por ejemplo más de cien grados de temperatura y presiones negativas. El Sketch que he usado es el ejemplo de la librería. Mi pregunta es si has usado este sensor con una placa Wemos.Muchas gracias.

    • Avatar
      Máximo
      nov 5, 2017

      Hola. Antes de nada, agradecerte esta página por la información tan importante que aportas sobre el sensor BMP180.Estoy usando este sensor con la placa Wemos y no va bien. Quiero decir que las medidas no son lógicas, por ejemplo más de cien grados de temperatura y presiones negativas. El Sketch que he usado es el ejemplo de la librería. Mi pregunta es si has usado este sensor con una placa Wemos.Muchas gracias.

    • Avatar
      jose
      mar 29, 2018

      Hola, Buenas tardes, un gusto saludarte, disculpa de casualidad podrias indicarme como puedo conectar dos sensores mbp180, debido a que al parecer la libreria ya trae configurada los puertos A4 y A5 pra este caso, te lo agradeceria.

    • Avatar
      Christer
      may 28, 2018

      Hola, Tengo dos preguntas: 1.- ¿En que medida me da la presion? 2.- ¿Donde encuentro las librerías para este sensor?

    • Avatar
      Jorge
      nov 23, 2018

      Hola. alguien sabe si hay algún sensor que pueda medir altas presiones, del orden de 30000hPa?? Es para una aplicación relacionada con aires acondicionados. Muchas gracias!

    • Avatar
      Martin
      feb 12, 2019

      Tengo una honda elwmwnt 2003 y marca en codigo al escaner ob2 el codigo p2227..e preguntado y me dise que es el sensor barometrico de precion no se en que parte se encuentra podrian decirme por favor en que parte del motor esta por favor

    • Avatar
      sdfsdf
      mar 19, 2019

      este tutorial es copiado de otra pagina

    • Avatar
      jorge
      abr 28, 2019

      Hola, conecte el sensor bmp 180, pero no varia mucho la presion y si varia la altura, y estoy en un punto fijo, se puede asignarle una altura fija para que funcione mejor el sensor de presion. Saludos

    • Avatar
      Kate Shetty
      dic 25, 2019

      Thanks for the information you shared, it helped my work a lot, I still need more information. krunker

    • Avatar
      run 3 game
      ene 9, 2020

      Thanks for the informative post! its usefull for us: slope game

    • Avatar
      muneera ahmed
      ene 19, 2020

      This is my first time visit to your blog and I am very interested in the articles that you serve. Provide enough knowledge for me. Thank you for sharing useful and don't forget, ispace1 keep sharing useful info:

    • Avatar
      muneer ahmed
      ene 28, 2020

      This is my first time visit to your blog and I am very interested in the articles that you serve. Provide enough knowledge for me. Thank you for sharing useful and don't forget, keep sharing useful info: magnesium deficiency

    • Avatar
      muneera ahmed
      ene 28, 2020

      Great post full of useful tips! My site is fairly new and I am also having a hard time getting my readers to leave comments. Analytics shows they are coming to the site but I have a feeling “nobody wants to be first”. cbd oil for sale

    • Avatar
      muneer ahmed
      feb 1, 2020

      Regular visits listed here are the easiest method to appreciate your energy, which is why why I am going to the website everyday, searching for new, interesting info. Many, thank you post to instagram from pc

    • Avatar
      muneer ahmed
      feb 4, 2020

      I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. In fact your creative writing abilities has inspired me to start my own BlogEngine blog now. Really the blogging is spreading its wings rapidly. Your write up is a fine example of it. upload free files

    • Avatar
      iorr
      feb 6, 2020

      Es necesario darle como parámetro la temperatura T el cual servirá para compensar la influencia de la temperatura en el cálculo de la presión, el valor de la presión absoluta se guarda en la variable P. Free game online wings io

    • Avatar
      muneer ahmed
      feb 10, 2020

      I really loved reading your blog. It was very well authored and easy to undertand. Unlike additional blogs I have read which are really not tht good. I also found your posts very interesting. In fact after reading. I had to go show it to my friend and he ejoyed it as well! click here for more info

    • Avatar
      ayoub
      feb 15, 2020

      I really appreciate the kind of topics you post here. Thanks for sharing us a great information that is actually helpful. Good day! jcpenney jtime

    • Avatar
      muneer ahmed
      feb 17, 2020

      I simply wanted to thank you a lot more for your amazing website you have developed here. It can be full of useful tips for those who are actually interested in this specific subject, primarily this very post. EZ solutions

    • Avatar
      ayoub
      feb 18, 2020

      This is my first time i visit here and I found so many interesting stuff in your blog especially it's discussion, thank you. menards employee login

    • Avatar
      muneer ahmed
      feb 20, 2020

      Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info indian visa online

    • Avatar
      ayoub
      mar 5, 2020

      This is my first visit to your web journal! We are a group of volunteers and new activities in the same specialty. Website gave us helpful data to work. Thunderstorm Sounds

    • Avatar
      ayoub
      mar 9, 2020

      Intriguing post. I Have Been pondering about this issue, so a debt of gratitude is in order for posting. Entirely cool post.It 's extremely exceptionally decent and Useful post.Thanks Best DJ Speakers

    • Avatar
      ayoub
      mar 11, 2020

      Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking. wmlink 2step

    • Avatar
      ayoub
      mar 11, 2020

      Hello, this weekend is good for me, since this time i am reading this enormous informative article here at my home. Christmas Hits

    • Avatar
      ayoub
      mar 12, 2020

      Thank you because you have been willing to share information with us. we will always appreciate all you have done here because I know you are very concerned with our. Sa gaming

    • Avatar
      Jopseh Russo
      mar 15, 2020

      Excellent post! I would like to thank for the efforts you have made in writing such a great post about this technology. Ferrari Finance

    • Avatar
      amna seo
      mar 20, 2020

      This is what commonly happens to the newbies in the business industry who do not know how to effectively market their product or service or service.trueintech.com

    • Avatar
      Russo
      mar 25, 2020

      I like this article.I was searching over search engines and found your blog and its really helps thank you so much jual tv stand

    • Avatar
      Maheen
      abr 1, 2020

      Cool you write, the information is very good and interesting, I'll give you a link to my site. https://writeapp.me

    • Avatar
      ayoub
      abr 1, 2020

      I wanted to thank you for this in your liking ensnare!! I particularly enjoying all tiny little bit of it I have you ever bookmarked to check out delivered stuff you pronounce. employee payslip

    • Avatar
      Real Estate
      abr 4, 2020

      Together with 90% of homebuyers using online sources when searching for a home, it's never been more clear that will the Internet plays a great important role in your own audience's buyer's journey. real estate seo services In case you want to achieve more of your audience online, you've got in order to boost your visibility about search engines like Search engines. The best way to do this would be to increase your search engine optimization with a real estate digital marketing agency

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: