Bosch BME280

Si quieres medir la Temperatura, Humedad y Presión, entonces el sensor BME280 de Bosch es una versátil solución para integrar en tu proyecto Arduino.

Con un costo inferior a los 10 USD en la tienda de amazon.com, el BME280 es perfectamente accesible e incluso preferible a otras soluciones mas toscas pero clásicas como el viejo DHT22.

El BME280 ofrece una capacidad de programación muy refinada que permite definir valores de Oversampling independiente para temperatura, humedad y presión, tiempo de standby o incluso el nivel de filtro en el resultado para disminuir valores erróneos.

El resultado es una capacidad de entrega de datos con insuperable precisión, prácticamente en tiempo real y con muy poca inercia.

A modo de ejemplo, puedes respirar a 10 o 15 centímetros del sensor BME280 y ver en tiempo real como sube y baja tanto temperatura como humedad en el aire.

Integrando el BME280 a nuestros proyectos Arduino

Primero debemos agregar la librería para el manejo del sensor BME280 en el IDE del Arduino.  Probablemente te encuentren con varios resultados al buscar “bme280” en el Library Manager del IDE.

En mi caso, me he quedado con la librería de Tyler Glenn, luego de probar las otras. Sugiero instales esa misma librería para continuar.

#include <Wire.h>        // Para definir pines del i2c
#include <BME280.h>     // La librería del sensor BME280!

BME280 bme(1,4,3,3,5,2,false,0x76); 

/* Oversampling = temperatura × 1
                   humedad × 4
                   presion ×3
                  forced mode 3
                  tiempo standby 5 = 1000 ms
                  usar filtro 2 = (promediar x4 valores)
                  SPI FALSE
                  address 0x76
*/

bool metric = true;
uint8_t pressureUnit(B001); 
float temp(NAN), hume(NAN), pres(NAN);

/* Valores para definir unidad de presión:
     B000 = Pa
     B001 = hPa
     B010 = Hg
     B011 = atm
     B100 = bar
     B101 = torr
     B110 = N/m^2
     B111 = psi
*/

void setup() {
 Serial.begin(115200);
 Wire.begin(2,14); 

 /* Atención, como yo uso un ESP8266, los pines 
    para leer el SCA y SCL son:
    GPIO2 es D4 y GPIO14 es D5
 */

 //espero a que el BME280 de señales de vida
 while(!bme.begin()){
    Serial.println("Sensor BME280 no responde!");
    delay(1000);
 }
}

void loop() {
    //Hago la lectura del sensor
    bme.ReadData(pres, temp, hume, metric, pressureUnit);
    //Muestro los valores en el puerto serial 
    Serial.println("Temperatura: " + (String)temp + " C");
    Serial.println("Humedad: " + (String)hume + " %");
    Serial.println("Presion: " + (String)pres + " hPa");
    delay(1000);
}

Parámetros para inicializar el sensor BME280

Puedes probar el código de aquí arriba, aunque probablemente te gustaría tener más información sobre los parámetros con los que se inicializa el BME280

BME280 bme(1,4,3,3,5,2,false,0x76);

Parámetros de Oversampling en el BME280

El primero, segundo y tercer parámetro es el oversampling con el que el sensor obtendrá la temperatura, humedad y presión respectivamente, de acuerdo a la siguiente tabla:

ValorOversampling
0No
1oversampling ×1
2oversampling ×2
3oversampling ×4
4oversampling ×8
5oversampling ×16

Parámetro de modo de trabajo del BME280

El cuarto parámetro define el modo o régimen de trabajo que tendrá el sensor BME280 y por lo general puedes usar el modo 3, pero si utilizas el modo 1 y 2, estarás obligando al BME280 a irse a dormir entre sampleo y sampleo.

ValorModo de Funcionamiento
0Sleep mode: no realiza lecturas. Consume la menor energía posible.
1 y 2Forced mode: hace una lectura, guarda el resultado y se va a dormir
3Normal mode: se dedicará tomar lecturas, una detrás de otra, esperando el tiempo de standby indicado

Parámetro de espera o Standby del BME280

El quinto parámetro es el tiempo de espera (o Standby) entre cada lectura que realiza el sensor BME280, de acuerdo a la siguiente tabla:

ValorTiempo de espera (Standby) en milisegundos
00.5
162.5
2125
3250
4500
51000
610
720

Filtro IIR para suavizar o eliminar ruido en el BME280

El sexto parámetro es el filtrado de ruido espurio para los datos de presión y temperatura, que eliminará fluctuaciones pequeñas que puedan ser debidas a un portazo en un cuarto cerrado y causen saltos en los valores. El nivel de filtrado responde a la siguiente tabla.

ValorCoeficiente de Filtrado
0Filtro apagado
12
24
38
416

Por último le indicamos al sensor BME280 que no vamos a utilizar el interface SPI, y que la dirección que debe usar la librería BME280 para comunicarse con el sensor es la 0x76 (este dato pueden corroborarlo en la documentación que encuentran online o junto al sensor, al adquirirlo).

Con esta pequeña introducción y review,  el versátil y pequeñito sensor BME280 nos permitirá saltar a una serie de proyectos más osados.

2 opiniones en “Bosch BME280”

  1. hola! un favor tengo problemas con la libreria del sensor. No reconoce la BME280.h pero si la SPI. Prodrian ayudarme por favor o decirme que puede ser. Descargue y copie en liberies todo el archivo del link.
    Gracias.

    1. Daniela, para que procesador / módulo arduino estás programando ? Las librerias a veces especifican determinada arquitectura (por ejemplo la de los arduinos originales) y por lo tanto la librería no carga o aparece si estás trabajando en un esp8266. El tipo de arquitectura está especificado adentro de la carpeta donde quedan las libs, en un archivo que se llama library.properties … A mi me ha ocurrido en una cantidad de librerías, con mi ESP8266: EN un renglón (usualmente el último) se declara para que arquitecturas puede ser utilizada esa librería. Por ejemplo: architectures=avr,STM32F1,teensy o también architectures=esp8266 o simplemente incluso sumas “esp8266” a la lista de las anteriores: architectures=avr,STM32F1,teensy,esp8266 …

      Lo agregas o editas, grabas … y luego recargas el código (o la lista de librerías) y cruzas los dedos: Ahora, la lib debería ser reconocida.

Deja un comentario

Tu dirección de correo electrónico no será publicada.