pression_bmp390.ino
Le BMP390 (24 bits, 300-1250 hPa, ±0,5 hPa) est lu via les accesseurs BHY2 : pression en hPa et altitude barométrique dérivée. Le suivi météo local et le détecteur d’escalier tiennent en vingt lignes.
Matériel requis
Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. La carte seule. Pour l’altitude, connaître la pression météo du jour au niveau de la mer (P_MER à ajuster).
Câblage
Aucun câblage. Le BMP390 est sur le bus interne du hub ; éviter les courants d’air directs sur le boîtier qui faussent la mesure.
Fonctionnement
BHY2.enable(PRESSURE_HIGH_ACCURACY) active le capteur dans le firmware ; readPressure renvoie la dernière valeur. La formule barométrique convertit hPa en mètres relatifs à P_MER.
Exécution
Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.
Variantes
Dériver la vitesse verticale (ΔP/Δt) pour détecter un ascenseur ou une chute, caler P_MER en continu sur la station météo locale, ou logger la pression en CSV sur le PC via 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);
}