Objetivos

 

  • Presentar el sensor BME280
  • Es un sensor de Presión / Altitud, temperatura y humedad.
  • Mosdtraremos su uso con arduino UNO.
  •  

    Material requerido.

     

    Imagen de Arduino UNO

    Arduino Uno o compatible

     Sesnor BME280Sensor BME280  Sensor BME280

     

    Sensor BME280

     

    En los últimos tutoriales hemos ido viendo el Sensor BMP280 que nos proporcionaba lecturas de temperatura, presión y altitud, mediante un sencillo chip (O breakout) de bajo consumo y pequeño tamaño. Como además el propio sensor nos aisla, muy convenientemente, de todas las complicaciones asociadas con la lectura, el resultado es un excelente sensor que nos proporciona todas esas lecturas mediante el protocolo I2C sin mas complicaciones, lo que lo hace ideal para pequeños proyectos.

    Hoy vamos a jugar con su hermano mayor (Mayor por mas prestaciones, no por viejo ni por tamaño) el sensor BME280 que es muy similar al anterior pero que además nos proporciona lecturas de humedad ambiente lo que definitivamente lo convierte en un claro ganador para proyectos de estaciones meteorológicas o incluirdo en drones y otras maquinas voladoras.

    Detalle del chip y breakout

    El manejo del sensor BME280 es muy similar al de su hermano menor BMP280 aunque el encapsulado que hemos recibido en la tienda Prometec es algo diferente pero igualmente sencillo de configurar y vamos a hacer un par de ejemplos con el mediante un Arduino UNO en esta sesión y con un ESP32 en la próxima.

    El sensor viene predefinido en la dirección I2C de 0x76 pero se puede seleccionar la 0x77 jugando con las soldaduras que podéis ver aquí:

    Detalle de soldaduras para cambio de direccion

    Ademas y por aquello de sacarnos la espinita que nos había quedado en la ultima sesión de no conseguir hacer funcionar las librerías Adafruit con el BMP280 nos hemos puesto las pilas para resolver tan fastidiosa vergüenza y vamos a emplearlas en esta sesión, para que no se diga (Que luego todo se sabe). Vamos pues con el esquema de conexiones a un Arduino UNO.

     

    Arduino UNO y BME280 Esquema de conexión

     

    Vamos a conectar el sensor a nuestro Arduino UNO con I2C por lo que esta sencillo como llevar las salidas del BME280 a los pines correspondientes. Y en esta ocasión para darle un poco más de emoción vamos a usar los pines dedicados del UNO que están a la izquierda del todo de la fila de pines digitales y que suelen ignorarse elegantemente en casi todas partes, asi que vamos a ver si les damos su minuto de gloria.

    La conexión es de lo mas simple y por si alguno se asombra de que usemos estos pines, recordad que los pines I2C están incluidos en el conector ICSP que nuestro venerable Arduino tiene en mitad de la placa para los shields y están replicados en el conecto ICSP2 justo debajo de donde mandamos los cables amarillo y azul.

    ESquema de conexion

     

    Instalando la librería BME280

     

    Lo primero tenemos que descargar e instalar las librerías de Adafruit para el sensor BME280 y aquí hay dos formas básicas de hacerlo. La primera es descargar e instalar la librería desde aquí por el procedimeinto tradicional , pero estas librerías de Adafruit requieren otro par de librerías básicas para sensores, que tendríamos que descargar también a mano si no las tenemos previamente instaladas.

    Por eso vamos a optar por el segundo procedimiento mucho más cómodo y elegante que consiste en ir al menú Programa\Incluir librería\administrar Bibliotecas:

    Menus arduino

    Os aparecerá una pantalla como esta de abajo. Si escribes BME280 (En el recuadro Rojo) en la pestaña de búsqueda y dás Enter buscará las librerías relacionadas:

    Detalle para la seleccion

    Pulsa el botón de instalar (En circulo rojo) y te descargará e instalará la librería requerida y las dependencias adicionales de una tacada y listo.

     

    El programa Arduino y BME280

     

    Una vez descargada e instalada la librería ya podemos seguir con nuestro programa. Lo primero los includes de siempre:

    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>

    La primera línea es para el I2C y la segunda llama a una librería de sensor unificada precisa para casi cualquier librería adafruit. La tercera línea invoc ala librería del BME280 que acabamos de instalar.

    Las lecturas de presión, temperatura y humedad son, mas menos, absolutas con respecto a una referencia interna. Pero como la altitud se calcula por estimación a partir de la presión atmosférica  y esta es una variable dependiente de factores como la humedad ambiente y otras mandangas (Termino científico para designar imponderables varios), necesitamos calibrar la altitud con una referencia de la presión actual a nivel de mar , y eso es lo que hacemos con la línea siguiente:

    #define SEALEVELPRESSURE_HPA (1015)

    Donde definimos la presión a cota cero (Nivel del mar) medida en hectopascales, como 1015. ¡Que bonito! ¿Y porque ese número y 987?. Veamos, la idea teórica es que en condiciones normales (O sea,la de laboratorio, independientemente de las condiciones atmosféricas reales reinantes) a nivel del mar la presión es de 1000 hpa, pero la temperatura y la humedad ambiente afectan a la presión por lo que nos podemos ir arriba o abajo dependiendo de todo eso.

    ¿Cómo se yo que valor poner ahí? Vale. Lo suyo seria cogerte tu Arduino e irte a la playa a ver cuánto mide la presión y calibrarla con precisión, pero como si lo hago en periodo de arresto domiciliario, como el actual (Creo que lo llaman confinamiento) me puede meter un paquete del carajo la Ertzaintza, no tenemos más remedio que estimarlo por procedimiento menos expeditivos como consultar a Google cual es la presión atmosférica actual en la playa más próxima a tu localidad, y en mi caso, hoy me daban esa cifra para la playa de Getxo y como yo soy muy obediente no me he puesto a discutir y la he plantado ahí mismo.

    • Ya veremos luego si la medida tiene sentido o no y haremos las correcciones pertinentes.
      Pero ojo porque variaciones mínimas en esta referencia te llevarán a valores bastante disparatados de altitud y si quieres reírte varía esta calibración con cuidado y verás.
    • El sensor BME280 es muy preciso en la medición de presión, pero calculará la altitud fatal si no tiene un valor preciso de la presión atmosférica a nivel de mar como referencia base. 

    La siguiente linea crea una instancia del sensor y la llamamos bme para variar.

    Adafruit_BME280 bme;

    En el setup() poca cosa:

    void setup()
       {   Serial.begin(115200);
           if (!bme.begin(0x76))
             {  Serial.println("No encuentro un sensor BME280 valido!");
                 while (1);
             }
       }

    Abrimos la Puerta serie e intentamos arrancar el sensor con bme.begin() al que psamos la dirección I2c del sensor y donde puedes cambiarla si habéis toqueteado las soldaduras. Si no se encuentra el sensor  no salimos del bucle.

    Si todo va bien y abrimos el sensor, es ya cuestión de gimnasia ler valores e imprimirlos a la consola:

    void loop()
    {    Serial.print("Temperatura = ");
         Serial.print(bme.readTemperature());
         Serial.println("*C");
         Serial.print("Presion = ");
         Serial.print(bme.readPressure() / 100.0F);
         Serial.println("hPa");
    
         Serial.print("Altitud estimada = ");
         Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
         Serial.println("m");
    
         Serial.print("Humedad = ");
         Serial.print(bme.readHumidity());  
         Serial.println("%");
         Serial.println();
         delay(1000);
    }
    
    Promrama: BME280_y_Arduino_UNO

    ¡Accede al contenido!

    Si corremos el programa veremos algo como esto:

    Salida de lecturas BME280

     

    IMAGEN DE MARCA