Barometric Pressure Sensor Arduino Tutorial

barometric-pressure-sensor-arduino

 

Barometric Pressure, in other terms Atmospheric Pressure is the force Exerted by the atmosphere at a given point (the internet said). It is also known as the Weight of the Air. Here this article gives basic idea about barometric pressure senor and arduino interfacing technique.

What is barometric pressure sensor ?

An Air pressure transducer which converts pressure of Air with respect to Altitude above sea level interms of hpa [Barometric pressure].

Here we utilized BMP180 digital pressure sensor from Bosch. it is a SMD device so that better to have breakout board.

BMP180-Digital pressure sensor

The BMP180 is the function compatible successor of the BMP085, a new generation of high precision digital pressure sensor, and it is based on Piezo-Resistive technology for high accuracy.

Features of BMP180

  • Pressure range: 300 … 1100hPa (+9000m … -500m relating to sea level)
  • Supply voltage: 1.8 … 3.6V (VDD)
  • Package: LGA package with metal lid
  • Low power: 5μA at 1 sample / sec. in standard mode
  • Low noise: 0.06hPa (0.5m) in ultra low power mode – 0.02hPa (0.17m) advanced resolution mode
  • Temperature measurement included
  • I²C interface

Block diagram 

digital-pressure-sensor

The BMP 180 sensor has four important internal peripherals they are Sensor Element, ADC (analog to digital converter), Control unit and EEPROM. The sensor element gives transduced & sampled signal to the ADC, then ADC converts signal into digital data, control unit communicates with external peripherals through serial I2C interface. The BMP180 sensor has its own E²PROM capable of 176 bit, this is used to compensate offset, temperature dependence and other parameters of the sensor.

 

BMP 180 Breakout board

bmp180-breakout

 

 

The Arduino Pressure transducer breakout board from Sparkfun.

The small and compact breakout board comes with easy to plugin terminals like +, -, CL and DA. we can directly connect this sensor board with Arduino without any pre-circuits.

 

 

 

Arduino and BMP180 hookup

digital-barometric-pressure-sensor-arduino-hookup

The IO in sensor board represents I/O voltage and we can leave disconnected unless connecting to a lower voltage microprocessor or micro controller. Connect ‘+’ terminal to the Arduino’s 3.3V pin. (Note: Do not connect + to 5V or the sensor will be damaged!). Connect ‘-‘ to ground (GND) terminal of Arduino board. Then connect Serial I²C pins DA (SDA), and CL (SCL) to corresponding pins of your development board in our case we used Arduino uno so ‘CL’ to A5 and ‘DA’ to A4. By interfacing zigbee or wireless transceiver we can make barometric pressure transmitter and receiver.

Arduino Library

Get Arduino library for BMP180 Barometric Pressure sensor here.

Barometric pressure sensor Arduino code

 

/* Code from sparkfun's Library Example*/
#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure;

#define ALTITUDE 1655.0 // Altitude of SparkFun's HQ in Boulder, CO. in meters

void setup()
{
  Serial.begin(9600);
  Serial.println("REBOOT");

  // Initialize the sensor (it is important to get calibration values stored on the device).

  if (pressure.begin())
    Serial.println("BMP180 init success");
  else
  {
    // Oops, something went wrong, this is usually a connection problem,
    // see the comments at the top of this sketch for the proper connections.

    Serial.println("BMP180 init fail\n\n");
    while(1); // Pause forever.
  }
}

void loop()
{
  char status;
  double T,P,p0,a;

  // Loop here getting pressure readings every 10 seconds.

  // If you want sea-level-compensated pressure, as used in weather reports,
  // you will need to know the altitude at which your measurements are taken.
  // We're using a constant called ALTITUDE in this sketch:
  
  Serial.println();
  Serial.print("provided altitude: ");
  Serial.print(ALTITUDE,0);
  Serial.print(" meters, ");
  Serial.print(ALTITUDE*3.28084,0);
  Serial.println(" feet");
  
  // If you want to measure altitude, and not pressure, you will instead need
  // to provide a known baseline pressure. This is shown at the end of the sketch.

  // You must first get a temperature measurement to perform a pressure reading.
  
  // Start a temperature measurement:
  // If request is successful, the number of ms to wait is returned.
  // If request is unsuccessful, 0 is returned.

  status = pressure.startTemperature();
  if (status != 0)
  {
    // Wait for the measurement to complete:
    delay(status);

    // Retrieve the completed temperature measurement:
    // Note that the measurement is stored in the variable T.
    // Function returns 1 if successful, 0 if failure.

    status = pressure.getTemperature(T);
    if (status != 0)
    {
      // Print out the measurement:
      Serial.print("temperature: ");
      Serial.print(T,2);
      Serial.print(" deg C, ");
      Serial.print((9.0/5.0)*T+32.0,2);
      Serial.println(" deg F");
      
      // Start a pressure measurement:
      // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
      // If request is successful, the number of ms to wait is returned.
      // If request is unsuccessful, 0 is returned.

      status = pressure.startPressure(3);
      if (status != 0)
      {
        // Wait for the measurement to complete:
        delay(status);

        // Retrieve the completed pressure measurement:
        // Note that the measurement is stored in the variable P.
        // Note also that the function requires the previous temperature measurement (T).
        // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
        // Function returns 1 if successful, 0 if failure.

        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          // Print out the measurement:
          Serial.print("absolute pressure: ");
          Serial.print(P,2);
          Serial.print(" mb, ");
          Serial.print(P*0.0295333727,2);
          Serial.println(" inHg");

          // The pressure sensor returns abolute pressure, which varies with altitude.
          // To remove the effects of altitude, use the sealevel function and your current altitude.
          // This number is commonly used in weather reports.
          // Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
          // Result: p0 = sea-level compensated pressure in mb

          p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
          Serial.print("relative (sea-level) pressure: ");
          Serial.print(p0,2);
          Serial.print(" mb, ");
          Serial.print(p0*0.0295333727,2);
          Serial.println(" inHg");

          // On the other hand, if you want to determine your altitude from the pressure reading,
          // use the altitude function along with a baseline pressure (sea-level or other).
          // Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
          // Result: a = altitude in m.

          a = pressure.altitude(P,p0);
          Serial.print("computed altitude: ");
          Serial.print(a,0);
          Serial.print(" meters, ");
          Serial.print(a*3.28084,0);
          Serial.println(" feet");
        }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);  // Pause for 5 seconds.
}

Resources

pdf-icon

 

BMP180 datasheet

 

https://github.com/sparkfun/BMP180_Breakout_Arduino_Library

 

https://www.bosch-sensortec.com/bst/products/all_products/bmp180

One Comment

  1. aarav mathur May 7, 2017 Reply

Add a Comment

Your email address will not be published. Required fields are marked *