BMP180은 BMP085의 상위모델로 기압센서입니다. 기압 측정값을 이용해서 고도로 변환이 가능합니다.

 

□ BMP180 

 4 pin

 5 pin 

 

 

 

BMP180 특징(Specification) 

항목

범위

 분해능력

 오차

 압력 (Pressure range)

 300 ~ 1100 hPa

 0.01 hPa 

 ± 0.02 hPa ( 약 0.17 m 고도 오차 )

 온도

 -40 ~ 85 도(C)

 0.1 도  

 

□ BMP180 아두이노 회로 구성도( BMP180 Arduino circuit diagram )



 

□ BMP180 와 아두이노 Pin 배열( BMP180 Arduino PIN Mapping )

BMP180 4 pin

BMP180 5 pin

 비고(Remark)

Pin 배열

 Arduino

Pin 배열

 Arduino

 SCL

 A5(SCL)

 SDA

 A4(SDA)

 

 SDA

 A4(SDA)

 SCL

 A5(SCL)

 

 VIN

 +5V  GND  GND  

 GND

 GND

 VDD

 +3.3V (Only)

 

   

 VDDIO

 N/A

 I/O voltage

※ VDD    : 5 pin의 경우 3.3V 연결 

    VDDIO : 특수 저전력 microprocessor용으로, 아두이노의 경우 별도 연결 필요없음

  ( VDD    : Connect the power pins (+ and -) ONLY to a 3.3V supply.

    VDDIO : Leave disconnected unless you're connecting to a lower-voltage microprocessor )

 

BMP180 통신 프로토콜

 

 

BMP180 Sample Source 

  - 기본 라이브러리(Basic Library)

    

 


  - Sample 1

#include <Wire.h>

#include <Adafruit_BMP085.h>


void setup() {

  Serial.begin(9600);

  BMP180init();

}

  

void loop() {

 BMP180exec();

 delay(1000); 

}


Adafruit_BMP085 bmp;

void BMP180init() {

    if (!bmp.begin(BMP085_ULTRAHIGHRES)) {

        Serial.println("BMP180 센서를 찾을 수 없습니다. 연결을 확인해 주세요!");

    }

}

  

void BMP180exec() {

    float Ftemperature = 0.0;    // 온도 측정 값

    float Fpressure    = 0.0;    // 기압 측정 값

    float Faltitude    = 0.0;    // 고도 측정 값

    

    Ftemperature =  bmp.readTemperature();

    Fpressure    =  bmp.readPressure();

    Faltitude    =  bmp.readAltitude( 100560 );     // 101560 : 서울 해면기압, 101325 : 표준기압



    char CAtemperature [20] = ""; 

    char CApressure    [20] = ""; 

    char CAaltitude    [20] = ""; 

    char CAbuffer      [254] = "";

    dtostrf( Ftemperature, 10, 2, CAtemperature );

    dtostrf( Fpressure   , 10, 2, CApressure    );

    dtostrf( Faltitude   , 10, 2, CAaltitude    );

    

    // 온도 압력 고도

    sprintf( CAbuffer, "Temp(C): %s\tPres(PA): %s\tAlt(M): %s", CAtemperature, CApressure, CAaltitude );

    Serial.println( CAbuffer );


    // TEST

    //Serial.print( "temp(C): "    ); Serial.print  ( Ftemperature );

    //Serial.print( "\tpres(Pa): " ); Serial.print  ( Fpressure    );

    //Serial.print( "\talti(M) : " ); Serial.println( Faltitude    );

}

 



  - Sample 2

 

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


void setup() {
  Serial.begin(9600);
  BMP180init();
}
 
void loop() {
 BMP180exec();
 delay(1000);
}


Adafruit_BMP085 bmp;

void BMP180init() {
 if (!bmp.begin(BMP085_ULTRAHIGHRES)) {
  Serial.println("BMP180 센서를 찾을 수 없습니다. 연결을 확인해 주세요!");
 }
}
 
void BMP180exec() {
 float temperature = 0.0;  // 온도 측정 값들
 float pressure    = 0.0;     // 기압 측정 값들
 float altitude    = 0.0;     // 고도 측정 값들

    temperature =  bmp.readTemperature();
    pressure    =  bmp.readPressure();
    altitude =  bmp.readAltitude(101340);
 
    Serial.print("temperature(℃): "); Serial.print(temperature);
    Serial.print("\tpressure(Pa): "); Serial.print(pressure);
    Serial.print("\taltitude(M): ");  Serial.print(altitude);

    /*
     * 고도 계산을 표준 기압 1013.25 millibar를 사용하여 계산합니다.
     * 1013.25 mbar = 101325 Pa(Pascal)입니다.
     */
    Serial.print("\tbase altitude(M): ");   Serial.print(bmp.readAltitude());
    Serial.print("\tSea Level(Pa - X): "); Serial.print(bmp.readSealevelPressure());
    Serial.println( " " );
 
/*
 * 기상청 지역별상세관측자료(AWS)에 들어가면 해면 기압 정보를 얻을 수
 * 있습니다. 이 mbar(millibar)값에 100을 곱하면 Pa(Pascal) 값을 얻을
 * 수 있습니다.
 *
 * 1 hPa =  100 Pa =  1 mbar
 * 1 kPa = 1000 Pa = 10 mbar
 *
 * http://www.kma.go.kr/weather/observation/aws_table_popup.jsp
 *
 * 2014/09/11/22:21 - 1013.4 mbar
 *
 */

 

 

  - Sample 3 

 

/***************************************************
  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
 ****************************************************/
 
#include <Wire.h>
#include <Adafruit_BMP085.h>
 
const int CIrowSize = 20;

int index = 0;                    // 현재 센서값을 넣어야 할 인덱스
float temperatures[CIrowSize];  // 온도 측정 값들
float pressures[CIrowSize];     // 기압 측정 값들
float altitudes[CIrowSize];     // 고도 측정 값들
float totalTemperature = 0.0;     // 온도 총합
float totalPressure = 0.0;        // 기압 총합
float totalAltitude = 0.0;        // 고도 총합
 
/*
 * mode :
 *        BMP085_ULTRALOWPOWER 0
 *        BMP085_STANDARD      1
 *        BMP085_HIGHRES       2
 *        BMP085_ULTRAHIGHRES  3
 *
 */
void setup() {
  Serial.begin(9600);
  BMP180init();
}
 
void loop() {
 BMP180exec();
 delay(1000); 
}


Adafruit_BMP085 bmp;

void BMP180init() {
 if (!bmp.begin(BMP085_ULTRAHIGHRES)) {
  Serial.println("BMP180 센서를 찾을 수 없습니다. 연결을 확인해 주세요!");
 }
 
 for(int i = 0; i < CIrowSize; i++) {
  temperatures[i] = 0.0;
  pressures[i] = 0.0;
 }
}
 
void BMP180exec() {
 

    totalTemperature    =  totalTemperature - temperatures[index];
    temperatures[index] =  bmp.readTemperature();
    totalTemperature    += temperatures[index];
  
    totalPressure   =  totalPressure - pressures[index];
    pressures[index]  =  bmp.readPressure();
    totalPressure   += pressures[index];


    totalAltitude   =  totalAltitude - altitudes[index];
    altitudes[index]  =  bmp.readAltitude(101340);
    totalAltitude   += altitudes[index];

 
    Serial.print("측정 온도(℃): "); Serial.print(totalTemperature / CIrowSize);
    Serial.print("측정 압력(Pa): "); Serial.print(totalPressure / CIrowSize);
    Serial.print("측정 고도(M): ");  Serial.print(totalAltitude / CIrowSize);

    /*
     * 고도 계산을 표준 기압 1013.25 millibar를 사용하여 계산합니다.
     * 1013.25 mbar = 101325 Pa(Pascal)입니다.
     */
    Serial.print("표준 고도(M): ");  Serial.print(bmp.readAltitude());
    Serial.print("해면 기압(Pa - X): ");  Serial.print(bmp.readSealevelPressure());
    Serial.println( " " );
 
/*
 * 기상청 지역별상세관측자료(AWS)에 들어가면 해면 기압 정보를 얻을 수
 * 있습니다. 이 mbar(millibar)값에 100을 곱하면 Pa(Pascal) 값을 얻을
 * 수 있습니다.
 *
 * 1 hPa =  100 Pa =  1 mbar
 * 1 kPa = 1000 Pa = 10 mbar
 *
 * http://www.kma.go.kr/weather/observation/aws_table_popup.jsp
 *
 * 2014/09/11/22:21 - 1013.4 mbar
 *
 */

 
 
    ++index;
   
  // 만약 배열의 끝에 있다면...
  if (index >= CIrowSize)             
    // ...배열의 처음으로 돌아가게 합니다:
    index = 0;
     

}

 


 

반응형

'아두이노 > 센서' 카테고리의 다른 글

I2C Address  (0) 2014.11.21
801s : 진동센서  (0) 2014.11.20
복합 센서  (0) 2014.11.19
GP2Y1010AU0F : 먼지 센서  (0) 2014.11.18
Piezo Disk Sensor  (0) 2014.11.18

+ Recent posts