Introduction: DIY Arduino Compass
We all know what a compass is and what is it used for. The compass tells us the directions i.e. E-W-N-S . Traditional compass worked with a magnetic needle in the middle. The needle's north pole always points towards earth's geographic north pole with is magnetic south.
The sensor I used MPU 9250 has a magnetometer which can measure the magnetic intensity along a given direction. I limited myself to X and Y axes only so simplify things a bit. Also as I mentioned in the video also, this project as an extension of the previous inclinometer project. Please have a look at the video and the article for the inclinometer. The links for provided are provided below.
Lets get started.
Step 1: Watch the New Video
This video covers a bit of theory of magnets, magnetic fields and some vector algebra. As mentioned earlier, this is an extension of the previous project. Please watch the other video in the introduction.
Step 2: Components
The list of components is fairly straight forward. A simple arduino, (Nano in my Case), MPU 9250 IC, and an OLED display to output the data. As usual, having the monitor is not mandatory but thinking of a laptop eveytime you want to test a surface might be a bit absurd.
I got the MPU 9250 from Ali Express for about $3.5. This is not the cheapest IC but the noise levels were considerably lower. I highly recommend this IC. There's nothing special about the arduino or the wood. Arduino is a clone and works great.
The wood and leveling of IC is not as important as in the inclinoeter project.
You have some room for error. CHILLAX!!!!!!!!!
Step 3: The Structure.
For the main body, I took some simple square wood and cut it to a rough length of around 10cm. I then marked two holes in length of the IC. It is important that you fit the IC correctly. Also, if you do go wrond, please use some other side or even better, use another wood. Do not try to correct a missed hole. The screw may not hold good grip on such hole.
I then cut female headers on appropriate lengths and pasted them with two component adhesive. Once everything fit in place, I was pretty happy with the looks.
Step 4: Wire It All Up
With the I2C protocol, the wiring is always easy peezy.
I then started tinning the wires and the female headers. The wiring is very very simple.
SDA- A4
SCl- A5
Vcc- 5V
GND-GND
Make sure that the wiring connections are secure and proper. Make sure you used enough length of wire.
I made this mistake and trust me, it is very frustrating.
Step 5: Programming
There where the two twin project take on different paths.
The library is the same. Download the same library.
The GitHub link-
https://github.com/bolderflight/MPU9250
Having a look at the serial monitor, it was clear that the values were much more out of phase. I did some testing and finally could produce some decent sine function.
I have provided one of my excel sheets. Check it out if you are interested.
Sine wave is beautiful, isn't it?
Step 6: Enjoy the Project.
I you didn't get the repeating joke in my video, don't take this compass camping with you. Always use trusty instruments. for both reliability and ease of use.
Anyhow, I liked this project.
If you enjoyed, consider liking and subscribing to my instrutables and YouTube channels.
Thanks a lot.!

Participated in the
Build a Tool Contest
4 Comments
4 years ago
Get yourself one of these
https://www.ebay.ie/itm/382053794498
And an 18650 rechargeable battery.
The battery is a 4.2V battery but the IC will charge from standard 5v USB and discharge at 5V also.
Reply 4 years ago
Hi friend,
I checked the link you gave and seems like the IC is similar to TP4056 which I have a few.
The problem is that the 4.2 V that you mentioned is the highest voltage a lipo battery can charge to. Those batteries will also drop their voltage as low as 2.5 V with which the Arduino, the OLED and the MPU would be uncomfortable. I have tested this and arduino would restart if voltage drops near to 4 V.
So if you want to try, use a power bank circuit. That would work great
4 years ago
This is cool - could you recommend a battery you would add if you were to make it wireless?
Reply 4 years ago
Yeah! Thats actually a very good idea.
The Arduino I used was a 5V one. So using a common lipo battery will require a boost converter.
If you plan to add a battery, get yourself a 3.3V Arduino. But I doubt if the Oled display and the 9250 would work on 3.3V