I2C barometer

Fra Kommunikation-IT Holstebro HTX
Skift til: navigering, søgning
Barometer sensor baseret på BMP180
Barometer sensor baseret på BMP085

Barometre bruges til at måle det atmosfæriske tryk på et vilkårligt sted. Dette kan i teorien også bruges til at måle højden. Dog er dette frarådet pga. Barometrernes præcision på ± 2,5 hPa, hvilket er lig med en højdepræcision på ca. ± 20 meter . Desuden indeholder barometrerne også en temperatursensor, som den bruger i sine beregninger. Derfor kan man også finde en temperatur med disse typer barometre. Her på HTX har vi to forskellige barometre, BMP180[1] og BMP085[2].

Hardware

Modulet kommer som et færdigt modul. Selve sensoren skal tilsluttes GND og 3,3V, og en del af de moduler vi har hjemme har en 3,3V regulator indbygget. (OBS: Moduler uden regulator må IKKE tilsluttet 5V). Derudover skal SDA tilsluttes til SDA-porten på en arduino, og SCL skal tilsluttes SCL porten. Disse porte kan optræde som A4(SDA) og A5(SCL) på visse arduino modeller

Da du ud fra trykket kan finde den højde, kan man også bruge barometret til dette. Dog skal man regne med en præcision på omkring ± 20m, så man skal kun bruge denne funktion, når man måler store højder. Når du måler trykket, kan du med fordel også medtage det atmosfæriske tryk ved havniveau i beregningerne. Hvis du ikke giver denne information, bruger biblioteket som standard 10135 Pascal. Du kan læse mere om dette i eksemplet.

Software

Når man skal bruge modulerne til sin arduino, kan man med fordel bruge biblioteket [3], som er udvilklet af Adafruit. Dette bibliotek fungerer til begge typer barometer med de samme funktioner.

Bibliotek

Biblioteket kan downloades på Github eller du kan hente en Zip-fil. Derefter skal biblioteket indlæses i Arduino IDE'et for at bruge det. For mere hjælp se Arduinos Biblioteker

For at bruge biblioteket i dit program, skal du også huske at indlæse Wire biblioteket, som kommer indbygger i Arduino IDE'et. Dette gøres ved at skrive

#include <Wire.h>
#include <Adafruit_BMP085.h>

I starten af dit program

Eksempler

I biblioteket ligger følgende eksempel, der kan åbnes under Fil - Eksempler - BMP085test:

#include <Wire.h>
#include <Adafruit_BMP085.h>

/*************************************************** 
  This is an example for the BMP085 Barometric Pressure & Temp Sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> https://www.adafruit.com/products/391

  These displays use I2C to communicate, 2 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4


Adafruit_BMP085 bmp; //The barometer is initialised
  
void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
	Serial.println("Could not find a valid BMP085 sensor, check wiring!");
	while (1) {}
  }
}
  
void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");
    
    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");
    
    // Calculate altitude assuming 'standard' barometric
    // pressure of 1013.25 millibar = 101325 Pascal
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" meters");

    Serial.print("Pressure at sealevel (calculated) = ");
    Serial.print(bmp.readSealevelPressure());
    Serial.println(" Pa");

  // you can get a more precise measurement of altitude
  // if you know the current sea level pressure which will
  // vary with weather and such. If it is 1015 millibars
  // that is equal to 101500 Pascals.
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" meters");
    
    Serial.println();
    delay(2500);
}


Referencer

  1. [1] Datablad for BMP180
  2. [2] Datablad for BMP085
  3. [3] Bibliotek til BMP180 og BMP085