Saltar al contenido principal

Magnetómetro BMM150

El BMM150 es un magnetómetro digital compacto y de ultra bajo consumo de 3 ejes diseñado para una orientación precisa, aplicaciones de brújula electrónica y navegación inercial. Sus versátiles interfaces I²C y SPI aseguran una fácil integración con plataformas populares como Arduino, ESP32 y Raspberry Pi.

RecursoEnlace
Repositorio GithubRepositorio Github
Resumen del ProductoResumen del Producto
EsquemáticoEsquemático

Características Principales

  • Ejes: 3 (X, Y, Z)
  • Rango de Medición: ±1300 µT
  • Resolución: ~0.3 µT
  • Consumo de Energía: Consumo ultra bajo para dispositivos alimentados por batería
  • Interfaces: I²C y SPI
  • Voltaje de Alimentación: 3.3 V
  • Temperatura de Operación: Amplio rango de operación adecuado para diversos entornos
  • Señales Adicionales:
    • DRDY (Datos Listos)
    • INT (Interrupción Programable)
    • SDO/ADDR (Selección de dirección I²C / SPI MISO)
AplicaciónDescripción
Brújula ElectrónicaDetecta el campo magnético de la Tierra para determinar la orientación del dispositivo.
Navegación Inercial (INS)Se integra con acelerómetros y giroscopios para mejorar la estimación de posición y orientación.
Realidad Aumentada (AR)Ajusta dinámicamente el contenido de AR en dispositivos inteligentes basado en datos de orientación precisos.
Detección de Metales / Sensores de ProximidadMonitorea variaciones en el campo magnético para detectar objetos metálicos y anomalías en maquinaria.
Robótica Móvil y DronesProporciona información confiable de dirección, esencial para navegación interior y operación autónoma.
Dispositivos Portátiles y WearablesMejora la navegación personal en relojes inteligentes, rastreadores de actividad y otros dispositivos portátiles.
Geolocalización InteriorMejora la precisión de posicionamiento interior compensando el desvío e interferencia de sensores.

Código de Ejemplo


#include <Wire.h>
#include "DFRobot_BMM150.h"

// Crear un nuevo bus I2C en los pines GPIO 6 (SDA) y 7 (SCL)
TwoWire I2CBMM = TwoWire(1);

// Dirección I2C por defecto del BMM150 (depende del cableado de CS y SDO)
DFRobot_BMM150_I2C bmm150(&I2CBMM, I2C_ADDRESS_4);

void setup() {
Serial.begin(115200);
delay(1000);

// Iniciar el nuevo bus I2C
I2CBMM.begin(6, 7); // SDA = 6, SCL = 7

// Iniciar sensor
while (bmm150.begin()) {
Serial.println("bmm150 init failed, Please try again!");
delay(1000);
}
Serial.println("bmm150 init success!");

bmm150.setOperationMode(BMM150_POWERMODE_NORMAL);
bmm150.setPresetMode(BMM150_PRESETMODE_HIGHACCURACY);
bmm150.setRate(BMM150_DATA_RATE_10HZ);
bmm150.setMeasurementXYZ();
}

void loop() {
sBmm150MagData_t magData = bmm150.getGeomagneticData();
Serial.print("mag x = "); Serial.print(magData.x); Serial.println(" uT");
Serial.print("mag y = "); Serial.print(magData.y); Serial.println(" uT");
Serial.print("mag z = "); Serial.print(magData.z); Serial.println(" uT");

float compassDegree = bmm150.getCompassDegree();
Serial.print("Compass angle (deg): ");
Serial.println(compassDegree);
Serial.println("------------------------------");

delay(200);
}