Logo de la página

Sensor BMP180

Información, ejemplos y gráficas

Introducción

En esta sección trataremos de explicar de la forma más clara posible, que es un sensor Bmp180, podremos ver algunos ejemplos de uso, probados con NodeMcu devkit v0.9 y Arduino y realizar gráficas, con los datos acumulados de los sensores.

Contenidos

Que es un sensor bmp180

Módulos bmp180

Un sensor bmp180 es una placa de circuito impreso, que incluye un sensor de presión barométrica/atmosférica absoluta, de alta precisión (la presión atmosférica es la fuerza por unidad de superficie que ejerce el aire sobre la superficie terrestre), tiene un rango de medida de entre 300 y 1100 hPa (Hecto Pascal) y un margen de error de 0.03 hPa, además dispone de sensor de un sensor de temperatura y por medio de software permite calcular la altitud con respecto al mar.

El sensor de presión está basado en tecnología piezo-resistiva de alta eficiencia, linealidad y larga duración, tiene un rango de alimentación de entre 1,8 voltios y 3,6 voltios dc (corriente continua), por lo que si lo vamos a usar con un microcontrolador que funcione a 5 voltios, necesitaremos adaptadores de nivel en los pines SDA (línea de datos) y SCL (línea de reloj) del bus I2C.

Yo actualmente dispongo del modelo de la izquierda y el central, ambos son iguales, a excepción que el módulo central dispone de una fuente de 3.3 voltios integrada, puede ser alimentado a 5 voltios en el pin marcado como Vcc, pero también puede ser alimentado con 3.3 voltios en el pin marcado como 3.3 volvios.

Descargar datasheet de sensor bmp180

Índice de contenidos

Como usar un sensor bmp180

Para usar el sensor de presión barométrica en arduino, que trabaje en 5 voltios, necesitaremos realizar un convertidor de niveles a los pines del bus i2c, como comentamos anteriormente, para no quemar el dispositivo de 3.3 voltios.

Para la realización del convertidor de niveles partiremos del siguiente esquema.

Convertidor de niveles para bus i2c

Descargar datasheet de Bs170

Como vemos, el esquema es muy sencillo y bus I2c queda listo para conectar dispositivos de 3.3 voltios y de 5 voltios.

Para la conexión a arduino de 5 voltios seguimos el siguiente esquema a parte del convertidor de niveles que comentamos anteriormente, para nodemcu simplemte seguimos el siguiente esquema.

Nota: por norma general el sensor bmp180 incluye las resistencias de pullup en la propia placa.

Esquema de conexión de sensor bmp180

Nota: en caso de que nuestro sensor no disponga de resistencias de pullup en bus I2c (SDA y SCL) seguimos el siguiente esquema.

Esquema de conexión de sensor bmp180 con resistencias de pullup en bus i2c

En arduino los pines de I2c tienen soporte hardware por lo que ya están definidos, en los modelos antiguos de arduino y arduino uno el SCL en pin analógico 5 y SDA en pin analógico 4, en modelos nuevos de arduino uno tiene pines adicionales marcados como SDA y SCL pero son compartidos con los analógicos 4 y 5, en modelos como el leonardo los pines SDA y SCL si son específicos no están compartidos, en arduino mega los pines de I2c están en 20 SDA y 21 SCL, en función del arduino que tengamos serán unos u otros.

En Nodemcu no existen pines hardware destinados a I2c, por lo que podemos usar la mayoría, en mi caso he elegido el GPIO 4 como SDA y el GPIO 5 como SCL.

Índice de contenidos

Ejemplo de código de lectura para Arduino y NodeMcu

Nodemcu y Arduino Uno

Lo primero que necesitaremos para hacer funcionar el sensor será tener el ide de arduino instalado y si es para nodemcu añadir soporte en el ide, además de la librería.

Instalar Ide de Arduino y añadir soporte para ESP8266

Descargar librería bmp180 de Arduino para Esp8266 y Nodemcu

Como hemos mencionado anteriormente este sensor se conecta al bus I2c, trataremos más detenidamente que es el bus I2c en otra sección de la página, pero a grandes rasgos el bus I2c es un protocolo de comunicación serie, en el que cada dispositivo tiene una dirección única de identificación, pudiendo llegar hasta los 127 dispositivos conectados en los 2 pines del bus, en el caso de este sensor la dirección no se puede cambiar y siempre será 77 en hexadecimal, por lo tanto, no podremos usar dos sensores de este tipo con el mismo microcontrolador.

Escáner de bus I2C

Para buscar dispositivos en el bus I2c y ver que direcciones están conectadas, podemos usar el siguiente ejemplo, válido para Arduino y Nodemcu.

#include <Wire.h>

void setup(){
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}

void loop(){
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ){
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0){
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4){
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

El ejemplo anterior, nos servirá para saber si hemos hecho bien las conexiones del sensor, y para la búsqueda de cualquier dispositivo en el bus i2c. Si todo está bien, veremos lo siguiente en el puerto serie.

Scanning...
I2C device found at address 0x77  !
done

Sketch para Arduino y Nodemcu

El siguiente ejemplo es el incluido con la librería del sensor BMP180, es un ejemplo perfecto para arduino y Nodemcu para comprobar que el sensor funciona.

#include <Wire.h>
#include <Adafruit_BMP085.h>

/*************************************************** 
  This is an example for the BMP085 Barometric Pressure & Temp Sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> https://www.adafruit.com/products/391

  These displays use I2C to communicate, 2 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 bmp;
  
void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
  }
}
  
void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");
    
    // Calculate altitude assuming 'standard' barometric
    // pressure of 1013.25 millibar = 101325 Pascal
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" meters");

    Serial.print("Pressure at sealevel (calculated) = ");
    Serial.print(bmp.readSealevelPressure());
    Serial.println(" Pa");

  // you can get a more precise measurement of altitude
  // if you know the current sea level pressure which will
  // vary with weather and such. If it is 1015 millibars
  // that is equal to 101500 Pascals.
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" meters");
    
    Serial.println();
    delay(500);
}

El ejemplo anterior funcionando en arduino imprimirá en el puerto serie cada medio segundo lo siguiente.

Temperature = 23.60 *C
Pressure = 95380 Pa
Altitude = 507.07 meters
Pressure at sealevel (calculated) = 95380 Pa
Real altitude = 520.84 meters

En Nodemcu devkit funciona exactamente igual, veamos la impresión que hará dos veces por segundo.

Temperature = 24.60 *C
Pressure = 95636 Pa
Altitude = 484.27 meters
Pressure at sealevel (calculated) = 95641 Pa
Real altitude = 499.02 meters

Índice de contenidos


Gráficas sensor BMP180

Los datos son almacenados en bases de datos y recogidos por Nodemcu devkit que actualiza el valor cada treinta segundos.

Aquí podrás realizar gráficas, con los datos acumulados en la base de datos del sensor bmp180.

Selecciona un sensor, un rango de fecha, o fecha y hora, cambia el tipo de gráfica y pulsa el botón "Solicitar gráfica", para visualizar gráfica de temperatura y presión; del sensor BMP180 elegido.

Índice de contenidos

Seleccione sensor
* Campos obligatorios
Fecha y hora de inicio
*
Fecha y hora de fin
*


Puedes ver nuestra política de cookies, aquí. Si continuas navegando la estás aceptando.
Esta web utiliza cookies