Complementary Filtering High Res Barometer and Accelerometer for Reliable Altitude Estimation

Submitted by fabio on Mon, 2012-09-17 17:59.

This is a simple example of some of the stuff I've been working on recently. This is a demonstration of the soon to be released filtering capabilities of the FreeIMU library using the FreeIMU v0.4.3 as sensor board.

The sensor fusion algorithm estimates the orientation of the board and from that an estimation of the dynamic acceleration is computed by subtracting the gravity from the accelerometer readings. The dynamic acceleration is the fused with the high resolution barometer readings coming from the MS5611 through a complementary filter.

The result, as seen in the graphs is an extremely reliable altitude estimation which can go up to 5-10 cm of precision with almost immediate response to motion.

Graphs programmed in python with pyqtgraph.

Inside an MS5611 high resolution barometer

Submitted by fabio on Thu, 2012-07-19 13:32.

During the tests of the last FreeIMU v0.4.3 batch, which are now available for sale on our online shops, I found out that a faulty MS5611 lost its plastic white package allowing to see what's inside of it.. I took a picture of it using my USB microscope, looks interesting!

Unfortunately, I've been only able to shoot at 20x magnification as I then cracked the inside when trying to shoot at 400x. Maybe next time.

MS5611 picture of the inside

Posted in:

How to connect and test FreeIMU v0.4 with Arduino and the FreeIMU library

Submitted by fabio on Tue, 2012-04-17 10:31.

One of the FreeIMU users, who bought one of our production run FreeIMU boards, shipped me his board as a faulty one. We promptly shipped him a replacement board but when I tested his board I found out that it was working perfectly.

This motivated me enough to record this video (actually using exactly his board) showing you how to correctly connect a FreeIMU board and testing it with the FreeIMU library.

MultiWii support for FreeIMU v0.4 and MPU6050

Submitted by fabio on Sun, 2012-01-08 14:33.

Thanks to myself, timecop and Alexinparis, FreeIMU v0.4 and its MPU6050 are now supported in MultiWii. At the moment, the code doesn't use the DMP due to the lack of documentation for it. The MPU6050 I2C master features are instead used, so the magnetometer is now read directly from the MPU6050.

Code available on MultiWii SVN:
Development discussion:
FreeIMU project:

Updating to Arduino 1.0 APIs and improvements

Last updated on Mon, 2011-12-19 12:33. Originally submitted by fabio on 2011-12-05 18:01.

As you may have heard, the Arduino team just released the version 1.0 of their IDE which comes with quite some changes in the programming APIs. So, I spent some time updating all my Arduino libraries to be used with Arduino 1.0.

From now on, I consider previous versions of the IDE/API no more supported. So, if you are using my libraries, you are strongly suggested to update to Arduino 1.0 and the most recent version of my libraries.

Here are the new versions with the changes made:

  • HMC58X3 library: updated to Arduino 1.0 with a better calibration.
  • MS5611-01BA: better reading functions which cache the results when the sensor can't provide a newer reading, update to Arduino 1.0.
  • FreeIMU library: updated to Arduino 1.0 and to the new algorithm by Sebastian.

Enjoy it!

UPDATE 2011-12-07: The Arduino 1.0 API has a bug in the Wire implementation which throws an error on compiling: call of overloaded 'write(int)' is ambiguous. In order to fix it, search Wire.h within your Arduino install and add the following lines:

inline size_t write(unsigned long n) { return write((uint8_t)n); }
inline size_t write(long n) { return write((uint8_t)n); }
inline size_t write(unsigned int n) { return write((uint8_t)n); }
inline size_t write(int n) { return write((uint8_t)n); }

Your Wire.h will look like this. See the bug report for all the details.

FreeIMU v0.4.1: first prototype built

Submitted by fabio on Mon, 2011-10-31 10:58.

I'm back to developing stuff.. And I can already show you something cool.. here is the very first FreeIMU v0.4.1 prototype, featuring MPU6050, HMC5883L, MS5611. Testing it next days.

FreeIMU v0.4.1 First prototype

100 MS5611-01BA01: aren't them just sexy?

Submitted by fabio on Wed, 2011-08-03 14:57.

Just put out from their package. 100 MS5611-01B01 high resolution pressure sensor. Sexy!

100 MS5611-01BA01

Posted in:

A picture of FreeIMU v0.3.5_MS

Submitted by fabio on Mon, 2011-07-11 09:24.

This is one of the very first FreeIMU v0.3.5_MS I assembled during the past weekend. This is probably one of my best soldering work and PCB design.

FreeIMU v0.3.5_MS

MS5611-01BA Arduino library: first developments results

Last updated on Sun, 2012-09-09 18:08. Originally submitted by fabio on 2011-06-12 20:16.

I spent the last days working on the MS5611-01BA high resolution pressure sensor. I wrote an Arduino library for it which you can find on my bzr repository:

  • browse repository
  • download library
  • use bzr co to get a copy directly using bzr.
  • the MS5611 library is now part of the FreeIMU library. Please refer to the FreeIMU library for newer code.

The library comes associated with a Processing visualization sketch which you can use to visualize a the readings coming from the sensor using a graphical tool.

The results I've got so fare are pretty good. Precision is about 0.02-0.03 mbar and altitude estimation resolution is about 10-15 cm. Relative measurement of altitude using the sensor looks very good but I'm still looking for a better approach on absolute altitude estimation.

In the video below you find an example of my initial developments.

First soldering experiment with the MS5611-01BA: huge fail!

Submitted by fabio on Fri, 2011-05-06 15:05.

This is the result of the first experiment trying to solder the MS5611-01BA on my LibreBB-MS5611-01BA. Looks harder than what I was expecting..

Melted MS5611-01BA

I was trying soldering it with hot air during the cooling down of the solder after reflow, obviously trying not to expose the chip to the hot air flow.. obviously a different path has to be followed... more to come on this.


I did it! Used the pizza oven at 180 deg C using Leaded solder. Tests with Lead Free ROHS compatible solder paste still pending.


Solder joints looks pretty good.

LibreBB-MS5611-01BA solder joints