Usando el Sensor BME280 de Presión, Humedad y Temperatura

Estoy interesado en medir los parámetros de Humedad, Presión barométrica y Temperatura para recolectar información usando sensores de bajo costo para incorporar a la Red de Sensores Geofísicos para diferentes propósitos.

Así que estoy experimentando con varios sensores de bajo costo para ver cómo se comportan y si son adecuados para la tarea.

En este caso estamos probando el sensor ambiental integrado BME280, en un módulo similar a este. Fue desarrollado específicamente para aplicaciones móviles donde el tamaño y el bajo consumo de energía son restricciones de diseño clave. Mira aquí. Es un sensor de presión de humedad de temperatura, con interface I2C y SPI. Por lo tanto, puede conectarse a través de cualquiera de los dos protocolos.

En este ejemplo utilizamos un Arduino UNO R3 Red compatible y un módulo de presión barométrica de alta precisión GY-BME280-5v. Observe que hay un montón de proveedores de módulos BME280 y tableros compatibles con Arduino, y el orden de los pines puede variar de uno a otro. Así que deben revisar dónde están los pines en su tarjeta. Además este módulo es para alimentación e interface de 5V. Hay otros módulos que son para 3.3V por lo que precisarán divisores de tensión para entradas y salidas, pull-ups, y/o fuente separada.

Utilizamos la biblioteca cactus.io BME280 SPI. Muchos otras bibliotecas también funcionan. Pero tendrán que cambiar la biblioteca declarada en el include y también pueden tener diferentes nombres en la creación de objetos BME y en sus métodos. También la creación del objeto BME_SPI depende de si la placa tiene hardware SPI o no. En este caso no lo tenemos. Así que comenzamos una conexión de software BME_SPI que utilizará los pines especificados para comunicarse con el módulo. Observe que esta biblioteca tiene la opción de agregar parámetros de calibración. La línea «bme.setTempCal (-2);» restará dos grados a cualquier lectura en cualquier escala de temperatura.

Si tiene problemas compilando la biblioteca SPI, es probable que su Arduino IDE no esté actualizado. Descargue la nueva versión e instale con el script adecuado a su sistema operativo.

Su módulo BME280 tiene al menos los siguientes pines:

VCC/VIN //5Volt input
GND // Ground connection
SCK/SCL  // Serial Clock
MISO/SDA/SDI  // Serial Data Out
MOSI/SDO  // Serial Data In
CS/CSB  // Chip Select

Puede tener una salida 3VO que se puede utilizar para alimentar algunos dispositivos de baja potencia 3v. Los nombres de los pines pueden variar según el modelo.

Para el protocolo SPI (conexión de software) debemos conectar SCK/SCL al pin 13 de Arduino UNO, MOSI/SDO al pin 12, MISO/SDA/SDI al pin 11 y CS/CSB al pin 10. Si tiene más de un Módulo se conectan en paralelo en SCK, MISO y MOSI pero conectan el otro CS a otro pin de salida. Hay que ver si la biblioteca que se usa soporta múltiples sensores.

Conecte el módulo Arduino UNO y BME280 como se muestra.

Abra el Arduino IDE y pegue el siguiente código:

***************************************************************************
 BME280 humidity, temperature & pressure sensor test program with SPI bus
 ***************************************************************************/

#include "cactus_io_BME280_SPI.h"
 #include "SPI.h"

// Communications pins order. Depends on your module
 // Vcc Gnd Scl/Sck-13Sdo/Miso-12 Sdak/Mosi-11 Csb/Cs-10
 #define BME_SCK 13 // Serial Clock
 #define BME_MISO 12 // Serial Data Out
 #define BME_MOSI 11 // Serial Data In
 #define BME_CS 10 // Chip Select

// Create the BME280 object with the right pins
 BME280_SPI bme(BME_CS,BME_MOSI,BME_MISO,BME_SCK);

void setup() {
 Serial.begin(115200);
 Serial.println("Bosch BME280 Barometric Pressure - Humidity - Temp Sensor");
 if (!bme.begin()) {
 Serial.println("Could not find a valid BME280 sensor, check wiring!");
 while (1);
 }
 bme.setTempCal(-1);
 Serial.println("Pressure\tHumdity\t\tTemp");
 }

void loop() {
 bme.readSensor();
 //Serial.print(bme.getPressure_MB()); Serial.print("\t\t"); // Pressure in millibars
 Serial.print(bme.getPressure_HP()); Serial.print("\t\t"); // Pressure in hectapascals
 Serial.print(bme.getHumidity()); Serial.print("\t\t");
 Serial.print(bme.getTemperature_C()); Serial.println(" *C\t"); // temperature in Centigrades
 //Serial.print(bme.getTemperature_F()); Serial.println(" *F\t"); // temperature in Fahrebheit
 }

Se compila y corre este programa, y se debería leer las medidas en el Serial Monitor.

Bosch BME280 Barometric Pressure - Humidity - Temp Sensor
 Pressure Humdity Temp
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C
 101966.40 70.76 18.65 *C

Ahora su módulo está funcionando. Si desea utilizar otra biblioteca, este es el mismo ejemplo con la biblioteca de Adafruit. Verifique los métodos y las funciones disponibles para cada biblioteca, para encontrar la que mejor responda a sus necesidades.

***************************************************************************
 BME280 humidity, temperature & pressure sensor test program with SPI bus
 ***************************************************************************/

#include "Adafruit_BME280.h"
 #include "SPI.h"

// Communications pins order. Depends on your module
 // Vcc Gnd Scl/Sck-13 Sdak/Mosi-11 Csb/Cs-10 Sdo/Miso-12
 #define BME_SCK 13 // Serial Clock
 #define BME_MISO 12 // Serial Data Out
 #define BME_MOSI 11 // Serial Data In
 #define BME_CS 10 // Chip Select

// Create the BME280 object with the right pins
 //BME280_SPI bme(BME_CS,BME_MOSI,BME_MISO,BME_SCK);
 Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

void setup() {
 Serial.begin(115200);
 Serial.println("Bosch BME280 Barometric Pressure - Humidity - Temp Sensor");
 if (!bme.begin()) {
 Serial.println("Could not find a valid BME280 sensor, check wiring!");
 while (1);
 }
 Serial.println("Pressure\tHumdity\t\tTemp");
 }

void loop() {
 bme.takeForcedMeasurement(); // has no effect in normal mode
 Serial.print(bme.readPressure() / 100.0F); Serial.print("\t\t"); // Pressure in hectapascals
 Serial.print(bme.readHumidity()); Serial.print("\t\t");
 Serial.print(bme.readTemperature()); Serial.println(" *C\t"); // temperature in Centigrades
 }

Ahora un par de fotos de el conjunto de prueba.

Entradas relacionadas

10 comentarios sobre «Usando el Sensor BME280 de Presión, Humedad y Temperatura»

  1. ISAAC PONCE

    DEMASIADO UTIIIIIIIL, MUCHISIMAS GRACIAS

  2. Juan Carlos Suárez Barón

    Hay una confusión. En la conexión de fritzing usasta la adafruit bmp280 breakout board. Esa placa tiene un level shifting de 5v a 3,3, por lo que si se puede conectar directamente al arduino. En la conexión a tu arduino roja estás usando la GY-BME280-3.3 que, no posee el adaptador de 5 a 3,3 por lo que, si le conectas los 5v del arduino como alimentación lo dañarías.

  3. Juan Carlos Suárez Barón. Sí, es correcto lo que dices. En realidad mi módulo soporta 5v y no es ese que indico allí (solo que es muy parecido). Voy a corregir el artículo. Muchísimas gracias por la corrección.

  4. Estoy tratando de usar el GY-BME280-3.3 conectado al Feather Huzzah pero me ha dado error al crear el objeto bmp.

    Tendrás algun ejemplo con Huzzah o alguna idea de por que no me funcione ?
    SE supone que lo estoy usando como I2C asi que solo conecto Vcc, Gnd, y las dos señales.

  5. No he experimentado con ese componente. El código GY-BME280-3.3 me hace suponer que es de 3.3 voltios. ¿Es lo que te entrega y con lo que funciona el Huzzah? Estás usando el IDE de arduino o LUA?

  6. […] El sensor BME280 utilitza diferents llibreries en funció del projecte que es disseny i del protocol (I2C o SPI) que es vulgui utilitzar. El projecte que proposo usa el protocol I2C i està basat en un exemple de Lambort de Seeedstudio. La llibreria del sensor (Grove_BME280-master.zip) se ha de baixar de Github. Es clica en Clone or download i es baixa el ZIP. Si en lloc del protocol I2C es vol utilitzar el SPI, es pot consultar la pàgina de Enrique Latorres. […]

  7. como le agrego display lcd ???

Los comentarios están cerrados.