El sensor GY-68 BMP180
En este artículo vamos a explicar el sensor GY-68 BMP180 y todo lo relativo a como leer la presión atmosférica y la temperatura desde arduino.
¿Para qué sirve el sensor GY-68 BMP180?
Con el sensor GY-68 BMP180 podemos leer la presión atmosférica y la temperatura. Este sensor es un barómetro y un termómetro ambiente. Gracias a la relación que existe entre la presión atmosférica y la altura este sensor se puede utilizar también para conocer la altitud a la que nos encontramos.
¿Cómo funciona?
El sensor GY-68 BMP180 tiene un barómetro integrado en la circuitería tal y como se aprecia en la imagen. Por medio de ese barómetro se conoce la presión atmosférica que después será traducida a impulsos que se enviarán por el puerto I2C. Con el sensor de temperatura ocurre exactamente lo mismo.
En la siguiente imagen se muestra como debería ser el conexionado del sensor con el puerto I2C de arduino.
Leyendo del sensor GY-68 BMP180
Llegados a este punto vamos a intentar leer los datos del sensor de datos y nuestro arduino.
Lo primero que tenemos que hacer es descargarnos la librería de arduino para el sensor BMP180 que podéis encontrar en este enlace de github.
Tenemos que instalar la librería en nuestro Arduino IDE, Sketch -> Include Library -> Add .ZIP Library .
Tenemos que conectar los pines VCC y GND del sensor a los pines VCC (5V) y GND de la placa arduino, y los pines SCL y SDA del sensor a los pines SCL (21) y SDA (20) de la placa arduino.
El resultado del conexionado es el que podemos ver a continuación.
El programa
El código fuente del programa lo podeis encontrar en github y a continuación.
#include <SFE_BMP180.h> #include <Wire.h> SFE_BMP180 pressure; #define ALTITUDE 1655.0 // Altitude of SparkFun's HQ in Boulder, CO. in meters void setup() { Serial.begin(9600); Serial.println("REBOOT"); if (pressure.begin()) Serial.println("BMP180 init success"); else { Serial.println("BMP180 init fail\n\n"); while(1); // Pause forever. } } void loop() { char status; double T,P,p0,a; Serial.println(); Serial.print("provided altitude: "); Serial.print(ALTITUDE,0); Serial.print(" meters, "); Serial.print(ALTITUDE*3.28084,0); Serial.println(" feet"); status = pressure.startTemperature(); if (status != 0) { delay(status); status = pressure.getTemperature(T); if (status != 0) { // Print out the measurement: Serial.print("temperature: "); Serial.print(T,2); Serial.print(" deg C, "); Serial.print((9.0/5.0)*T+32.0,2); Serial.println(" deg F"); status = pressure.startPressure(3); if (status != 0) { delay(status); status = pressure.getPressure(P,T); if (status != 0) { // Print out the measurement: Serial.print("absolute pressure: "); Serial.print(P,2); Serial.print(" mb, "); Serial.print(P*0.0295333727,2); Serial.println(" inHg"); p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO) Serial.print("relative (sea-level) pressure: "); Serial.print(p0,2); Serial.print(" mb, "); Serial.print(p0*0.0295333727,2); Serial.println(" inHg"); a = pressure.altitude(P,p0); Serial.print("computed altitude: "); Serial.print(a,0); Serial.print(" meters, "); Serial.print(a*3.28084,0); Serial.println(" feet"); } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); delay(5000); // Pause for 5 seconds. }
Como resultado de ejecutar este programa podemos ver la salida que se genera en el monitor serial.
Como podéis apreciar este sensor nos da la temperatura y la presión atmosférica. Basándose en que la presión disminuye con la altura en este caso nos dice que estamos a 1655 metros de altura.
En realidad estamos a unos 500 metros de altura pero al ser un día de baja presión el programa concluye que estamos a más altura.
Más información
Podéis encontrar más información sobre este sensor y como utilizarlo en los siguientes enlaces:
- GY-68 BMP180 Barometric Pressure Breakout Board Tutorial With Arduino Uno
- Guide for BMP180 Barometric Sensor with Arduino