pression_bmp390.ino
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);
}