Freescale’s MAG3110 is a small, low-power, digital 3-axis magnetometer. The device can be used in conjunction with a 3-axis accelerometer to realize an orientation independent electronic compass that can provide accurate heading information. It features a standard I2C serial interface output and smart embedded functions.
The MAG3110 is capable of measuring magnetic fields with an output data rate (ODR) up to 80 Hz; these output data rates correspond to sample intervals from 12.5 ms to several seconds. The MAG3110 is available in a plastic DFN package and it is guaranteed to operate over the extended temperature range of -40°C to +85°C.
You have a micro:bit so you already have one on the board
Code
You need to import the Sparkfun library for the MAG3110 to run this example – https://github.com/sparkfun/SparkFun_MAG3110_Breakout_Board_Arduino_Library/archive/master.zip
#include <SparkFun_MAG3110.h>
MAG3110 mag = MAG3110();
void setup()
{
Serial.begin(9600);
mag.initialize(); //Initializes the mag sensor
mag.start(); //Puts the sensor in active mode
}
void loop() {
int x, y, z;
//Only read data when it's ready
if(mag.dataReady())
{
//Read the data
mag.readMag(&x, &y, &z);
Serial.print("X: ");
Serial.print(x);
Serial.print(", Y: ");
Serial.print(y);
Serial.print(", Z: ");
Serial.println(z);
Serial.println("--------");
delay(1000);
}
}
Testing
Open the serial monitor and move your micro:bit through the various axis, you should see something like this
X: 218, Y: 65109, Z: 65274
——–
X: 71, Y: 64965, Z: 49
——–
X: 598, Y: 65036, Z: 248
——–
X: 423, Y: 65338, Z: 564
——–
X: 348, Y: 61, Z: 565
——–
X: 413, Y: 65532, Z: 576
——–
X: 502, Y: 65024, Z: 65352