Sensitivity of BMP180


I loaded a demo file for BMP180 module. In the document of BMP180, the altitude sensitivity of the module is shown as 0.17m (17 cm) but in my application, the deviation changes up to 1 meter. What should i do to reduce the deviation ?


#include "Wire.h"

// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"

#include "BMP180.h"

// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for InvenSense evaluation board)
// AD0 high = 0x69

I2Cdev   I2C_M;

float temperature;
float pressure;
float atm;
float altitude;
BMP180 Barometer;

void setup()
    // join I2C bus (I2Cdev library doesn't do this automatically)

    // initialize serial communication
    // (9600 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)

    // initialize device
    Serial.println("Initializing I2C devices...");

    Serial.println("     ");


void loop()

    temperature = Barometer.bmp180GetTemperature(Barometer.bmp180ReadUT()); //Get the temperature, bmp180ReadUT MUST be called first
    pressure = Barometer.bmp180GetPressure(Barometer.bmp180ReadUP());//Get the temperature
    altitude = Barometer.calcAltitude(pressure); //Uncompensated caculation - in Meters
    atm = pressure / 101325;

    Serial.print("Temperature: ");
    Serial.print(temperature, 2); //display 2 decimal places
    Serial.println("deg C");

    Serial.print("Pressure: ");
    Serial.print(pressure, 0); //whole number only.
    Serial.println(" Pa");

    Serial.print("Related Atmosphere: ");
    Serial.println(atm, 4); //display 4 decimal places

    Serial.print("Altitude: ");
    Serial.print(altitude, 2); //display 2 decimal places
    Serial.println(" m");



the deviation changes up to 1 meter

Can you clarify what that means. Do the readings bounce around ± 1 meter, always read high or low by 1 meter, or ?

In page two of BMP180 datasheet (
it is said that accuracy is 0.17 cm. But our measurement we saw +/-1.00 meter difference (i.e between 779.45 m and 778.40 m) What can we do for +/- 0.2 m difference ?

Average several readings?

It is not stable, for example within one minute, it changes every reading from 778.00 to 779.00 m.

But you must remember the sensor does not actually measure altitude, it measures pressure. That is converted to altitude based either on a "standard" of 1013.25 or the actual qnh which you can get from your nearest airfield and put into your sketch.

If the pressure changes, the calculated altitude will change. The sensor doesn't know that a change is due to a change in altitude or a achange in pressure at the same altitude.

That's why aircraft always ask for the qnh at the airfield: the actual height is known (by land survey) and the qnh is the setting they enter into the altimeter so that it reads the correct altitude, ie the altitude they already know.

If you listen to the traffic controllers on your local airport, they will give a different qnh possibly every call. Similarly, an aircraft will ask for the qnh from airfields along their route, to ensure the altimeter would read the correct known altitude if they were to land.

edit: what you could do is just have it display the pressure: you'll see that changes all the time. That's one of the ways they forecast the weather, after all.