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.
Again for ease to use its easier to buy a module with the device fitted to it, here is one that I purchased. You can see the MAG3110 in the middle of the picture
I also found this schematic online of a similar module to the one pictured above. Looking at the schematic it looks very similar to the module
|Raspberry Pi Pin||MAG3110 Pin|
An I2C device so easy to wire up as per the connections above
Save the following code as mag3110.py
import smbus import time bus = smbus.SMBus(1) # MAG3110 I2C address 0x0E # Select Control register, 0x10(16) bus.write_byte_data(0x0E, 0x10, 0x01) time.sleep(0.5) # MAG3110 I2C address 0x0E # Read data back from 0x01(1), 6 bytes data = bus.read_i2c_block_data(0x0E, 0x01, 6) # Convert the data xMag = data * 256 + data if xMag > 32767 : xMag -= 65536 yMag = data * 256 + data if yMag > 32767 : yMag -= 65536 zMag = data * 256 + data if zMag > 32767 : zMag -= 65536 # Output data print "X-Axis : %d" %xMag print "Y-Axis : %d" %yMag print "Z-Axis : %d" %zMag
Run the code above – sudo python mag3110.py