Page 1 of 2

HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sensor

Posted: Wed May 25, 2016 10:05 am
by admin
[IMAGE TBA]



Arduino library for the BMP180 temperature/pressure sensor. Currently supported products:

BMP180 GY-68 Digital Baromic Pressure Sensor Module (HCMODU0101) available from hobbycomponents.com

This library can be used to obtain calibrated temperature and pressure reading from a BMP180 sensor or module. The example has been written particularly for the BMP180 GY-68 Digital Baromic Pressure Sensor Module (HCMODU0101) available from hobbycomponents.com but should work with any compatible BMP180 sensor/module.


You will need to download (please log in to download the library) and unzip this library to the Arduino development environments library area.

On Windows:
My Documents\Arduino\libraries\

On Mac:
Documents/Arduino/libraries/

Linux:
Usually found within the users home area under /Arduino/libraries/



Using the HCBMP180 library

To use the library just include the HCBMP180.h header file and then create an instance of the library. E.g:

Code: Select all

#include "HCBMP180.h"
HCBMP180 HCBMP180(I2CBMP180ADD);

To initialise the library add the following line to the setup() section of your sketch:

Code: Select all

HCBMP180.Init();

The following functions are available with this library:

Code: Select all

HCBMP180.Mode(Oss);
Sets the measurement mode. Where Oss is the sampling mode. Valid values are:

ULTRA_LOW_POWER
STANDARD
HIGH_RESOLUTION
ULTRA_HIGH_RESOLUTION

If this function is omitted then the library defaults to ULTRA_HIGH_RESOLUTION


Code: Select all

Temp = HCBMP180.GetTemp();
Gets a calibrated temperature reading from the sensor.

Returns an integer value containing the temperature value in 0.1oC increments. To convert to oC simply multiply the result by 10


Code: Select all

Pressure = HCBMP180.GetPressure();
Gets a calibrated pressure reading from the sensor.

Returns a long integer value containing the pressure in Pascals. To convert to Millibar (mb) simply divide the result by 100.


Code: Select all

Altitude = HCBMP180.Altitude(p, p0);
Calculates the current altitude based the sensors pressure reading. Where:
p is the current pressure in Pascals and can be obtained using the GetPressure() library function.

p0 is the current pressure at sea level in pascals. You can obtain an up to date value by visiting an on-line weather site for your location. To convert a value from Millibar (mb) to Pascals simply multiply the value by 100

Returns a value of type double containing the current altitude of the sensor in meters above sea level.


Code: Select all

Pressure = HCBMP180.SeaLevelPressure(p, a);
Calculates the current pressure at sea level (used for weather forecasting) where:
p is the current pressure in Pascals and can be obtained using the GetPressure() library function.

a is the sensors current altitude above sea level in meters. You can obtain this value by visiting an on-line map that provides altitude information for you location.

Returns a long integer value containing the current pressure in Pascals at sea level. To convert to Millibars simply divide the result by 100.



Image

Code: Select all

/* FILE:    HCBMP180_Example
   DATE:    24/05/16
   VERSION: 0.1
   AUTHOR:  Andrew Davies

   Created by Hobby Components Ltd (HOBBYCOMPONENTS.COM)
   
24/05/16 version 0.1: Original version

   
This is an example of how to use the HCBMP180 Arduino library to obtain measurement 
readings from a BMP180 sensor or module. The example has been written particularly 
for the BMP180 GY-68 Digital Baromic Pressure Sensor Module (HCMODU0101) available 
from hobbycomponents.com 

The example demonstrates how to get the current calibrated temperature and 
pressure reading from the sensor and also how to use the library to obtain current
Altitude above sea level, differential altitude, and baromic pressure at sea level
(useful for weather forecasting). To use the module connect it to your Arduino as 
follows:


BMP180....Uno/Nano

VIN.......+5V (for HCMODU00101) for other BMP180 modules check for correct supply voltage.
GND.......GND
SCL.......A5
SDA.......A4


You may copy, alter and reuse this code in any way you like, but please leave
reference to HobbyComponents.com in your comments if you redistribute this code.
This software may not be used directly for the purpose of selling products that
directly compete with Hobby Components Ltd's own range of products.

THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS MAKES NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/


/* Include the HCBMP180 library */
#include "HCBMP180.h"


/* Current air pressure at sea level in Pascals. Used for calculating the absolute 
 * altitude above sea level. You can obtain an up to date value by visiting an on-line 
 * weather site for your location that also provides current baromic air pressure. 
 * To convert a value from Millibar (mb) to Pascals simply multiply the value by 100 */
#define PRESSURE_AT_SEA_LEVEL 102100


/* Current sensor altitude above sea level in meters. Used for calculating the pressure 
 * at sea level (useful for weather forecasting). You can obtain this value by visiting 
 * an on-line map that provides altitude information for you location. */
#define LOCATION_ALTITUDE 60.29


/* Create an instance of the library */
HCBMP180 HCBMP180(I2CBMP180ADD);

/* Used for the differential altitude example */
double Reference_Altitude;


void setup() 
{
  /* Initialise the HCBMP180 library and the serial interface */
  HCBMP180.Init();
  Serial.begin(9600);

  /* Make an initial altitude measurement which will then be used by the differential 
   * altitude example to calculate any changes in height since the sketch was started */
  Reference_Altitude = HCBMP180.Altitude(HCBMP180.GetPressure(), PRESSURE_AT_SEA_LEVEL);
}



void loop() 
{
  int Temp;
  long Pressure, SeaLevel;
  double Altitude;

  /* Get the current temperature in 0.1oC units */
  Temp = HCBMP180.GetTemp();

  /* Output the temperature to the serial port. Temperature is in 0.1oC units so to 
   * convert to oC simply divide by 10 */
  Serial.print("Temperature (oC): ");
  Serial.println((float)Temp / 10);


  /* Get the current pressure in Pascals */
  Pressure = HCBMP180.GetPressure();

  /* Output the pressure to the serial port in Millibars. To convert from Pascals to
   * Millibars simply divide by 100 */
  Serial.print("Pressure (mb): ");
  Serial.println(Pressure / 100);


  /* Calculate the absolute height above sea level using the current pressure at sea 
   * level */
  Altitude = HCBMP180.Altitude(Pressure, PRESSURE_AT_SEA_LEVEL);

  /* Output the calculated height to the serial port */
  Serial.print("Sensor height above sea level (meters): ");
  Serial.println(Altitude);

  /* Calculate the pressure at sea level in Pascals */
  SeaLevel = HCBMP180.SeaLevelPressure(Pressure, LOCATION_ALTITUDE);

  /* Output the current pressure at sea level to the serial port. Pressure is in Pascals
   * so to convert to Millibar simply divide by 100 */
  Serial.print("Pressure at sea level (mb): ");
  Serial.println(SeaLevel / 100);


  /* Calculate any differences in altitude since the the sketch was started and output it
   * to the serial port */
  Serial.print("Differential altitude (meters): ");
  Serial.println(Altitude - Reference_Altitude);

  Serial.println();
  delay(1000);
}


Image

The HCBMP180 library can be downloaded here (please log in to download):
HCBMP180.zip

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Tue Nov 08, 2016 3:56 pm
by Graywallis
Hi,
Excellent little example but Wire.h has been omitted. (Was this deliberate?)
Graywallis

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Wed Nov 09, 2016 10:32 am
by andrew
The wire library is included within the HCBMP180 library. Are you saying you needed to add it to the main sketch to work? And if so could you let me know what Arduino board are you using?

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Wed Nov 09, 2016 3:25 pm
by Graywallis
I had to include wire.h in the main sketch and I'm using Arduino Uno. Just added the include statement under the include for the HCBMP180 library. IDE complained about no wire.h declarations. Not sure which version of Uno but purchased from Farnell about a year ago as part of 'The Arduino Starter Kit' made in Italy.

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Wed Nov 09, 2016 4:38 pm
by andrew
Thanks for getting back to me with the information. I've just tried the above example sketch and it seems to compile and run for an Uno with no errors. May I ask what version of Arduino IDE are you using? It should say the version in the top left hand corner of the window and will be something like 1.x.x

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Fri Nov 11, 2016 4:21 pm
by Graywallis
Arduino 1.0.5-r2. I had to add the following line: #include "Wire.h" directly below: #include "HCBMP180.h". Otherwise test program worked exactly as advertised.

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Fri Nov 11, 2016 4:51 pm
by andrew
Arduino 1.0.5-r2
Ah yes that's a very old version of the Arduino IDE. I've just tried it out myself on that version and I can replicate what you are reporting. Thanks for pointing it out.

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Thu Nov 17, 2016 12:40 pm
by Graywallis
Ok, moved to v 1.16.12 and all solved (almost); I get suggestion than ' ' is unrecognised in wire.h and becomes 'uncategorised'. All works though.
Next Q: is there a method of adjusting for pressure/altitude drift with time? I get some 50 metres altitude drift over 12 hours and it doesn't seem to correlate with anything obvious, such as temperature.

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Thu Nov 17, 2016 1:26 pm
by Graywallis
Or is this just a weather/pressure change; a bit quicker than the norm?

Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens

Posted: Thu Nov 17, 2016 5:39 pm
by andrew
is there a method of adjusting for pressure/altitude drift with time?
Unfortunately not, to calculate the altitude using the sensor you need to know the current pressure at sea level which the sensor itself can't measure.
I get some 50 metres altitude drift over 12 hours
It's likely it's due to air pressure changes over time. Try and update it with the latest sea level value to see if it gives a more accurate calculation. If it does then that's defiantly the cause.