pression_bmp390.ino

Arduino Nicla Sense ME · Fichier : pression_bmp390.ino · Langage : Arduino · Usage : Suivre la pression et l’altitude (BMP390)

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);
}

← Retour à la fiche