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.
Recurso | Enlace |
---|---|
Repositorio Github | Repositorio Github |
Resumen del Producto | Resumen del Producto |
Esquemático | Esquemá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ón | Descripción |
---|---|
Brújula Electrónica | Detecta 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 Proximidad | Monitorea variaciones en el campo magnético para detectar objetos metálicos y anomalías en maquinaria. |
Robótica Móvil y Drones | Proporciona información confiable de dirección, esencial para navegación interior y operación autónoma. |
Dispositivos Portátiles y Wearables | Mejora la navegación personal en relojes inteligentes, rastreadores de actividad y otros dispositivos portátiles. |
Geolocalización Interior | Mejora 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);
}