Reply to topic  [ 10 posts ] 
HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sensor 
Author Message
Site Admin

Joined: Sun Aug 05, 2012 4:02 pm
Posts: 650
Post HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sensor
[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:
#include "HCBMP180.h"
HCBMP180 HCBMP180(I2CBMP180ADD);



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

Code:
HCBMP180.Init();



The following functions are available with this library:


Code:
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:
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:
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:
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:
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:
/* 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):

Attachment:
HCBMP180.zip


You do not have the required permissions to view the files attached to this post.


Wed May 25, 2016 10:05 am
Profile

Joined: Tue Nov 08, 2016 2:39 pm
Posts: 5
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
Hi,
Excellent little example but Wire.h has been omitted. (Was this deliberate?)
Graywallis


Tue Nov 08, 2016 3:56 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 659
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
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?

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Wed Nov 09, 2016 10:32 am
Profile

Joined: Tue Nov 08, 2016 2:39 pm
Posts: 5
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
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.


Wed Nov 09, 2016 3:25 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 659
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
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

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Wed Nov 09, 2016 4:38 pm
Profile

Joined: Tue Nov 08, 2016 2:39 pm
Posts: 5
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
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.


Fri Nov 11, 2016 4:21 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 659
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
Quote:
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.

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Fri Nov 11, 2016 4:51 pm
Profile

Joined: Tue Nov 08, 2016 2:39 pm
Posts: 5
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
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.


Thu Nov 17, 2016 12:40 pm
Profile

Joined: Tue Nov 08, 2016 2:39 pm
Posts: 5
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
Or is this just a weather/pressure change; a bit quicker than the norm?


Thu Nov 17, 2016 1:26 pm
Profile
Site Admin

Joined: Sun Aug 05, 2012 4:15 pm
Posts: 659
Post Re: HCBMP180 - Arduino Library for the BMP180 Temp/Pres Sens
Quote:
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.

Quote:
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.

_________________
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.


Thu Nov 17, 2016 5:39 pm
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 10 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Thank you to phpBB.com & phpBB.ro.
Design created by Florea Cosmin Ionut.
© 2011 All contents of this site are © Hobby Components LTD