boussole_bmm150.ino

Arduino Nicla Sense ME · Archivo : boussole_bmm150.ino · Lenguaje : Arduino · Uso : Lire le magnétomètre BMM150

El BMM150 (12 bits, ±1300/±2500 µT) da el campo magnético crudo: rumbo magnético por atan2, detección de imán o apertura de puerta. Complemento del cuaternión fusionado cuando quieres la materia prima, no la fusión.

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 brújula, alejarla del metal del escritorio y del altavoz del PC durante la lectura.

Cableado

Sin cableado. El BMM150 va en un bus I2C dedicado (docs-db): el hub se ocupa, nada que hacer en los pines.

Funcionamiento

SensorMag sigue el mismo patrón BHY2 (begin/checkNewData/x-y-z en µT). El rumbo = atan2(y,x) llevado a 0-360°; corregirlo por la declinación local para el norte geográfico.

Ejecución

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

Variantes

Calibrar offsets duros/blandos (movimiento en ocho), detectar paso de objetos férreos por desviación de la norma en reposo, o registrar el rumbo para un trazador de trayectoria.

boussole_bmm150.ino

// BMM150 : magnétomètre 3 axes (±1300/±2500 µT) derrière le hub.
// Attention : le hub compense gyro+acc+mag pour l'orientation ;
// ici on lit le champ brut pour une boussole ou un détecteur
// de métal / d'ouverture de porte.

#include "Arduino_BHY2.h"

SensorMag mag(0);

void setup() {
  Serial.begin(115200);
  BHY2.begin();
  mag.begin();
  BHY2.update();
  Serial.println("Magnétomètre prêt (µT)");
}

void loop() {
  BHY2.update();

  if (mag.checkNewData()) {
    float x = mag.x(), y = mag.y(), z = mag.z();

    // Cap magnétique : atan2 sur le plan horizontal
    float cap = atan2f(y, x) * 57.2958;
    if (cap < 0) cap += 360.0;

    Serial.print("X="); Serial.print(x);
    Serial.print(" Y="); Serial.print(y);
    Serial.print(" Z="); Serial.print(z);
    Serial.print(" uT  cap="); Serial.println(cap);
  }
  delay(50);
}

← Volver a la ficha