pression_bmp390.ino

Arduino Nicla Sense ME · Archivo : pression_bmp390.ino · Lenguaje : Arduino · Uso : Suivre la pression et l’altitude (BMP390)

El BMP390 (24 bits, 300-1250 hPa, ±0,5 hPa) se lee vía los accesores BHY2: presión en hPa y altitud barométrica derivada. El seguimiento meteorológico local y el detector de escaleras caben en veinte líneas.

Hardware

Una Arduino Nicla Sense ME (nRF52832, solo BLE) con hub Bosch BHI260AP, BMM150, BMP390, BME688, LED RGB en driver I2C y cargador LiPo. La placa sola. Para la altitud, conocer la presión meteorológica del día al nivel del mar (ajustar P_MER).

Cableado

Sin cableado. El BMP390 está en el bus interno del hub; evitar corrientes de aire directas sobre la carcasa que falsean la medida.

Funcionamiento

BHY2.enable(PRESSURE_HIGH_ACCURACY) activa el sensor en el firmware; readPressure devuelve el último valor. La fórmula barométrica convierte hPa en metros relativos a P_MER.

Ejecución

Programación desde Arduino IDE (core ArduinoCore-mbed); librerías Arduino_BHY2 y Nicla_System; USB por puente serie.

Variantes

Derivar la velocidad vertical (ΔP/Δt) para detectar ascensor o caída, calibrar P_MER en continuo con la estación local, o registrar la presión en CSV por USB.

pression_bmp390.ino

// BMP390 : baromètre 24 bits (300-1250 hPa) derrière le hub.
// Les capteurs « d'environnement » du Sense ME se lisent via les
// accesseurs statiques BHY2 après activation.

#include "Arduino_BHY2.h"

const float P_MER = 1013.25;   // pression de référence au niveau de la mer

void setup() {
  Serial.begin(115200);
  BHY2.begin();
  BHY2.enable(BHY2_ENABLE_PRESSURE_HIGH_ACCURACY);
  BHY2.update();
}

void loop() {
  BHY2.update();

  float pression = BHY2.readPressure();       // hPa
  // Formule barométrique (approximation valide en dessous de ~1 km)
  float altitude = 44330.0 * (1.0 - powf(pression / P_MER, 0.190295));

  static unsigned long t = 0;
  if (millis() - t > 1000) {
    t = millis();
    Serial.print("P="); Serial.print(pression, 2); Serial.print(" hPa");
    Serial.print("  alt≈"); Serial.print(altitude, 1); Serial.println(" m");
  }
  delay(5);
}

← Volver a la ficha