Magnetometer

A magnetometer measures magnetic field strength, typically of the Earth’s magnetic field, using the Hall Effect. The data from this sensor can be combined with the BMI160 data to provide 9 degrees of freedom for a Sensor Fusion algorithm.

A few select boards, namely the CPro and MetaMotion boards, have the BMM150 geomagnetic sensor, represented by the MagnetometerBmm150 interface.

import com.mbientlab.metawear.module.MagnetometerBmm150;

final MagnetometerBmm150 magnetometer = board.getModule(MagnetometerBmm150.class);

Configuration

Bosch provides 4 recommended configurations for the BMM150 chip that control the data rate, current, and noise. Preset configurations are set by calling usePreset

Preset

ODR

Average Current

Noise

LOW_POWER

10Hz

170µA

1.0µT (xy axis), 1.4µT (z axis)

REGULAR

10Hz

0.5mA

0.6µT

ENHANCED_REGULAR

10Hz

0.8mA

0.5µT

HIGH_ACCURACY

20Hz

4.9mA

0.3µT

import com.mbientlab.metawear.module.MagnetometerBmm150.Preset;

// use the regular preset configuration
magnetometer.usePreset(Preset.REGULAR);

Advanced users can manually configure the device using the BMM150’s ConfigEditor though it is highly recommended that one of the preset modes be used.

Magnetic Field Data

The BMM150 measures magnetic field strength in Tesla (T) and its data is represented by the MagneticField class.

magnetometer.magneticField().addRouteAsync(new RouteBuilder() {
    @Override
    public void configure(RouteComponent source) {
        source.stream(new Subscriber() {
            @Override
            public void apply(Data data, Object ... env) {
                Log.i("MainActivity", data.value(MagneticField.class).toString());
            }
        });
    }
}).continueWith(new Continuation<Route, Void>() {
    @Override
    public Void then(Task<Route> task) throws Exception {
        magnetometer.magneticField().start();
        magnetometer.start();
        return null;
    }
});