BMP180 : 고도센서, 기압센서, 온도센서 아두이노 실습코드
BMP180은 BMP085의 상위모델로 기압센서다. 기압 측정값을 이용해서 고도로 변환이 가능하다. 우선 BMP180 디지털 압력센서 데이터 쉬트는 아래 링크를 참고한다.
BMP180 Digital pressure sensor - https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
센서 사용법과 데이터 쉬트에 대한 자세한 설명은 아래 링크를 참고한다.
BMP180 고도/압력 Barometer GY-68 3.3/5V 레귤레이터 내장형 센서 메뉴얼 - http://www.jkelec.co.kr/img/sensors/manual/bmp180_gy68/bmp180_gy68_manual.html
일단 라이브러리를 다운 받는데 Git 사이트에 가면 판매처를 안내하는 아래 링크가 있다. 참고 한다.
A powerful but easy to use BMP085/BMP180 Library http://www.adafruit.com/products/1603
라이브러리 다운은 아래에서 하는데 오른쪽 clone or download 버튼을 클릭하고 download zip 항목을 선택하여 다운 받는다.
압축을 풀면 다음 폴더가 생긴다. Adafruit-BMP085-Library-master 폴더를 통채로 카피하여 아두이노가 설치된 폴더의 라이브러리 폴더에 카피한다. 보통 C:\Program Files (x86)\Arduino\libraries 아래에 카피하면 될 것이다.
이름이 180이 아니라 085 인 것은 상관 없다 동일한 결과를 출력한다.
아두이노 스케치를 종료하고 다시 실행시킨다. [파일 - 예제] 항목에서 [모든 보드의 예제] 아래에 보면 방금 라이브러리 폴더에 카피한 Adafruit BMP085 Library 항목을 선택하여 파일 이름이 BMP085test 인 파일을 연다.
연결 회로도는 아래 그림을 참고한다.
BMP180 아두이노 회로 구성도( BMP180 Arduino circuit diagram )
이미지 출처: https://fishpoint.tistory.com/2761 [기린]
아래의 BMP180 Sample Source 코드 샘플 3개를 참고한다.
파이선 소스 출처: https://driz2le.tistory.com/64
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #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 ); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #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 * */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | /*************************************************** 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; } |
'아두이노' 카테고리의 다른 글
랩터(RAPTOR) 프로그램 강의 04 - 연산자 사용하기 (0) | 2019.04.03 |
---|---|
랩터(RAPTOR) 프로그램 강의 03 - 변수 사용하여 프로그램하기 (0) | 2019.04.03 |
안드로이드 스튜디오 3.1 Configuration~ 경고 제거법-compile, implementation, api (0) | 2019.03.04 |
블루투스4.0 BLE 모듈 HM-10 Module 사용법(AT 커맨드 포함) (0) | 2019.03.04 |
Build errors after Android Studio 3.2.1 upgrade 에러- com.android.tools.build:aapt2:3.2.1-4818971 (0) | 2019.03.03 |