BMP180 sensor de presión con arduino


En este proyecto aprenderás a obtener la presión atmosférica sensor bmp180 con la placa arduino, este sensor cuenta con la funcionalidad de medir esta condición física además de la temperatura

oscar Escrito por oscar 18 July 2021 8634 0

Acerca del proyecto

En este proyecto aprenderás a obtener la presión atmosférica sensor bmp180 con la placa arduino, este sensor cuenta con la funcionalidad de medir esta condición física ademas de la temperatura.

Vamos a explicar el paso a paso, desde lo que necesitamos saber del sensor bmp180 ademas de como conectarlo al arduino y crear el código que obtendrá los datos.

Conocimiento previo

Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.

Proyecto Descripción
Presión atmosférica En este post definimos y explicamos a detalle la presión atmosférica, es muy importante saber que es lo que vamos a medir y cuales son sus aplicaciones.
i2c En este post explicamos el concepto de i2c, ya que la librería para el bmp180 y el mismo sensor usa este tipo de comunicación y es esencial saber como funciona este tipo de comunicación.
BMP180 En este post explicamos los conceptos básicos sobre el sensor bmp180
Librería BMP180 para arduino Esta es la librería con la que vamos a trabajar, en este post explico a detalle cada una de sus funciones.
BMP180 sensor de temperatura con arduino En este post explicamos como usar el mismo sensor para obtener la temperatura.

Sensor BMP180

El BMP180 es el sucesor compatible con funciones del BMP085, una nueva generación de sensores de presión digitales de alta precisión para aplicaciones de consumo.

La electrónica de bajo voltaje y potencia ultrabaja del BMP180 está optimizada para su uso en teléfonos móviles, PDA, dispositivos de navegación GPS y equipos para exteriores. Con un ruido de baja altitud de solo 0,25 m en un tiempo de conversión rápido, el BMP180 ofrece un rendimiento superior. La interfaz I2C permite una fácil integración del sistema con un microcontrolador.

Sus características principales son:

  • Sensor: BMP180
  • Voltaje de alimentación : 1,8 V a 3,6 V
  • Corriente: 0.5uA
  • Interfaz I2C
  • Resolución: hasta 0.02hPa ( 17cm )
  • Amplia gama de presión barométrica
  • Incluye sensor de temperatura
  • Peso: 1,18 g
  • Tamaño : 21mm x 18mm
bmp180 pines
bmp180 pines

Materiales

Estas son los principales materiales que vamos a utilizar para este proyecto

Material Cantidad Descripción
Arduino 1 Usamos la placa uno, pero puede ser cualquiera
BMP180 1 Aunque es un sensor de presión barométrica, también la temperatura
Cables de conexión 4 Cables macho a macho

Circuito

El sensor bmp180 tiene la facilidad de conectarse a cualquier microcontrolador ya que cuenta con un puerto de comunicación i2c, esto permite solamente utilizar dos cables de conexión desde el módulo. Para la alimentación de este circuito lo recomendable es utilizar 3.3 aunque en la hoja de datos nos indica que también soporta 5 voltios. A continuación tenemos el plano de la conexión para que se puedan guiar cómo se realiza:

Circuito bmp180 con arduino esquema
Circuito bmp180 con arduino esquema
Circuito bmp180 con arduino foto
Circuito bmp180 con arduino foto

Recomendaciones del fabricante

  • Como la mayoría de los sensores de presión, el BMP180 mide la presión absoluta, esta es la presión ambiental real que ve el dispositivo, que variará con la altitud y el clima.
  • Antes de tomar una lectura de presión, debe tomar una lectura de temperatura, esto se hace con startTemperature() y getTemperature(), el resultado está en grados C.
  • Una vez que tenga una lectura de temperatura, puede tomar una lectura de presión. Esto se hace con startPressure () y getPressure (). El resultado está en milibares (mb) también conocido como hectopascales (hPa).
  • Si va a monitorear los patrones climáticos, probablemente querrá eliminar los efectos de la altitud. Esto producirá lecturas que se pueden comparar con las lecturas de presión publicadas en otros lugares. Para hacer esto, use la función sealevel (). Deberá proporcionar la altitud conocida a la que se midió la presión.
  • Si desea medir la altitud, deberá conocer la presión a una altitud de referencia. Esta puede ser la presión promedio del nivel del mar o una lectura de presión previa a su altitud, en cuyo caso las lecturas de altitud posteriores serán + o - la línea de base inicial. Esto se hace con la función de altitud().

Código

El código es el ejemplo que se toma de la misma librería, lo he modificado un poco para que solo muestre los valores de presión atmosférica. Ademas lo explico paso a paso para que lo podamos entender:

// Paso 1
#include <SFE_BMP180.h>
#include <Wire.h>

// Paso 2
SFE_BMP180 pressure;

// Paso 3
void setup() {
    Serial.begin(9600);

    // Paso 4
    Serial.println("Sensor de presión y temperatura");
    if (pressure.begin()) {
        Serial.println("BMP180 inicio correctamente");
    } else {
        Serial.println("BMP180 presento un error al iniciar\n\n");
        while(1);
    }
}

void loop() {
    // Paso 5
    char status;
    double temperatura,presion;

    // Paso 6
    status = pressure.startTemperature();
    if (status != 0) {
        delay(status);

        // Paso 7
        status = pressure.getTemperature(temperatura);
        if (status != 0) {
            
            // Paso 8
            Serial.print("temperatura: ");
            Serial.print(temperatura,2);
            Serial.print(" *C, ");
            Serial.print((9.0/5.0)*temperatura+32.0,2);
            Serial.println(" *F");
            
            // Paso 9
            status = pressure.startPressure(3);
            if (status != 0) {
                delay(status);
                
                // Paso 10
                status = pressure.getPressure(presion,temperatura);
                if (status != 0) {

                    // Paso 11
                    Serial.print("presión absoluta: ");
                    Serial.print(presion,2);
                    Serial.print(" mb, ");
                    Serial.print(presion*0.0295333727,2);
                    Serial.println(" inHg");  
                } else {
                    Serial.println("error al recuperar la medición de presión\n");
                }
            } else {
                Serial.println("error al iniciar la medición de la presión\n");
            }
        } else {
            Serial.println("error al recuperar la medición de temperatura\n");
        }
    }
    else Serial.println("error al iniciar la medición de temperatura\n");

    delay(5000);
}
  1. Cargamos la librería del bmp180, ademas de la librería i2c wire para que la comunicación de dos hilos pueda funcionar.
  2. Cargamos la librería como objeto en el entorno para poder acceder a su configuración y funciones.
  3. Creamos el setup donde inicializamos el puerto serial con el fin de poder crear los logs para ver el valor de la temperatura.
  4. Inicializamos la librería y verificamos si esta se cargo correctamente, de haberse presentado un error mostramos un mensaje en la consola.
  5. Creamos las variables que nos servirán para guardar los datos que vamos a obtener.
  6. Con startTemperature iniciamos el proceso de obtener la temperatura, este valor lo guardamos en la variable de estado.
  7. La variable estado permite saber si ya se ha logrado obtener los datos, ya que el sensor demora entre 2 segundos en devolver este valor.
  8. Ahora con la funcióngetTemperature podemos asignarle la temperatura a la variable correspondiente y obtenemos de nuevo el estado para saber si el sensor ha dado un respuesta.
  9. Una vez que tengamos los datos los mostramos por la terminal serial.
  10. Ahora vamos a obtener la presion atmosférica de la misma forma que obtuvimos la temperatura, usaremos la función startPressure para iniciar el proceso de calculo de la presión.
  11. Con getPressure guardamos la temperatura en la variable presión.
  12. Volvemos a pintar los logs con la presion en milibares y calculamos la conversion a pulgadas mercurio.

Prueba funcionamiento

Por ultimo realizamos la compilación de código y lo cargamos al arduino, abrimos la terminal serial y podremos observar que se muestra el log con la temperatura que esta obteniendo el sensor.

Log de temperatura
Log de temperatura

Comentario

Debe aceptar antes de enviar