'Altitude'에 해당되는 글 2건
- 2017.03.09 Hardware | BME280 sensor
- 2017.03.06 Hardware | Arduino BMP280 고도/온도/기압 센서
1. 시작하기
BMP280 을 구동시키면서 googling 해보면, "Humidity = 습도" 값을 표시해주는 글들이 심심치 않게 보였습니다.
그래서 열씸히 Humidity 를 표현하려고 이리저리 시도해 봤습니다.
또, Aliexpress 에서 구입한 BMP280 제품을 보면 GY-BME/P280 이라고 표시되어 있습니다.
할거 다 해봤습니다.
아니 그런뒈.... 그런뒈! (컬투 버전)
2. 알아버렸다
그렇습니다. Humidity 를 하려면, 정확하게 BME280 이 있어야 합니다. BMP280 로는 안되는 것이였습니다.
아놔.
나를 깨우쳐준 글.
정말 되냐 안되냐를 확인할 수 있는 글.
3. 넌 누구냐
직접 확인해 봅니다.
SparkFun 이 제공하는 'I2C_ReadAllData.ino' sketch 를 통해서 0x58 이냐, 0x60 이냐를 확인해 봅니다.
SparkFun Library 를 아래 링크를 통해 다운받고 설치합니다.
- https://github.com/sparkfun/SparkFun_BME280_Arduino_Library
마지막으로 I2C address 를 0x77 > 0x76 으로 바꾸고 실행해 봅니다.
아놔... 넌 BMP280 이구나...
4. BME280 구입
정말 정말 Humidity 수치를 알고 싶습니다.
한꺼번에 구입하지 못 한것을 탓하면서, 다시 주문을 넣습니다.
3주만에 오네요.
2개를 주문해서 앞뒤로 한 샷에 넣어 봅니다.
위의 부분이 센서군요. 보통 Bosch 에서 만든다고 하는데, Bosch 각인은 아닌것 같습니다.
이놈이 진짜 BME280 인지, 바로! 확인해 봅니닷!
오옷! 맞네요.
(정보를 알려준 외국인 친구 감사~!)
5. 구동해 보기
Library 를 다운받아 설치합니다.
- https://github.com/adafruit/Adafruit_BME280_Library
I2C address 를 0x77 > 0x76 으로 꼭 변경해야 합니다.
이거 수정하지 않고 한참 해멨습니다.
이제 example sketch 를 로딩합니다.
소스는 다음과 같습니다.
/*************************************************************************** This is a library for the BME280 humidity, temperature & pressure sensor Designed specifically to work with the Adafruit BME280 Breakout ----> http://www.adafruit.com/products/2650 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. The device's I2C address is either 0x76 or 0x77. Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution ***************************************************************************/ #include#include #include #include #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); Serial.println(F("BME280 test")); bool status; // default settings status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.println("-- Default Test --"); delayTime = 1000; Serial.println(); } void loop() { printValues(); delay(delayTime); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); }
layout 은 다음과 같고, pin 구성은 BMP280 과 같이 I2C 연결과 같습니다.
- VIN : 3.3V
- GND : GND
- SCL : A5
- SDA : A4
빵판에 연결합니다.
6. 결과
얏호~!!!
이제 Humidity 를 볼 수 있어요.
더 사용폭이 많은 BME280 만 만들지, 왜 BMP280 을 만드냐고 살짝 울분을 토해봅니다..
FIN
이제 뭘하지?
'Hardware' 카테고리의 다른 글
Hardware | Arduino nano 조립기 (0) | 2017.03.31 |
---|---|
Hardware | GeForce GTX 560 Ti 수리 실패기 (0) | 2017.03.16 |
Hardware | DSO150 Oscilloscope (0) | 2017.03.07 |
Hardware | Arduino BMP280 고도/온도/기압 센서 (0) | 2017.03.06 |
Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614 (0) | 2017.03.05 |
1. 시작하기
온도, 기압, 고도센서가 하나의 기판에 달려있는, 참 고마원 BMP280 을 가지고 놀아봅니다.
원래는 Adafruit 에서 나온 정식 발매품이 있는 듯 하나, Aliexpress 를 사랑하는 저로서는 clone 품을 가지고 놀아봅니다.
2. Library
2가지 library 를 설치해야 합니다.
- Adafruit Sensor
- Adafruit BMP280
먼저, Adafruit Sensor library 를 설치합니다.
- https://github.com/adafruit/Adafruit_Sensor
그리고, BMP280 용 library 를 다운로드 받아 설치합니다.
- https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout/wiring-and-test
맨 마지막으로, clone 부품을 구동시키기 위해,
"Adafruit_BMP280.h" 파일을, 아래처럼 I2C 어드레스에 대해 0x77 > 0x76 으로 수정해 줘야 합니다.
3. 소스코드
위의 library 를 추가하였으면, "File > Examples > Adafruit BMP280 Library > bmp280test" 를 선택할 수 있습니다.
/*************************************************************************** This is a library for the BMP280 humidity, temperature & pressure sensor Designed specifically to work with the Adafruit BMEP280 Breakout ----> http://www.adafruit.com/products/2651 These sensors use I2C or SPI to communicate, 2 or 4 pins are required to interface. Adafruit invests time and resources providing this open source code, please support Adafruit andopen-source hardware by purchasing products from Adafruit! Written by Limor Fried & Kevin Townsend for Adafruit Industries. BSD license, all text above must be included in any redistribution ***************************************************************************/ #include#include #include #include #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 Adafruit_BMP280 bme; // I2C //Adafruit_BMP280 bme(BMP_CS); // hardware SPI //Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); Serial.println(F("BMP280 test")); if (!bme.begin()) { Serial.println(F("Could not find a valid BMP280 sensor, check wiring!")); while (1); } } void loop() { Serial.print(F("Temperature = ")); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print(F("Pressure = ")); Serial.print(bme.readPressure()); Serial.println(" Pa"); Serial.print(F("Approx altitude = ")); Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase Serial.println(" m"); Serial.println(); delay(2000); }
4. Layout
PIN 배열은 다음과 같습니다.
- VCC : 3.3v
- GND : GND
- SCL : A5
- SDA : A4
5. 결과
잘 나오네요.
실재로 사용시에는 기준값을 조금 수정해야 할 것 같습니다만, 일단 성공입니다.
6. 확장
아래 링크에서는 OLED 를 사용한 방법을 소개하고 있습니다.
- http://www.instructables.com/id/Standalone-Arduino-Altimeter/
바로 따라해 봅니다.
우선 아래 용도로 사용될 BMP280 library 를 다운로드 받고, libraries 폴더에 위치시킵니다.
[BMP280]
----------------------
- VCC : +3.3V
- GND : GND
- SCL : A5
- SDA : A4
- CSB : +3.3V
- SDO : GND
[0.96" I2C IIC Series 128X64 OLED]
----------------------
- SCL : A5
- SDA : A4
- VCC : +3.3V
- GND : GND
#include "U8glib.h" #include "BMP280.h" #include "Wire.h" #define P0 1021.97 //1013.25 BMP280 bmp; // OLED Type U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); char sT[20]; char sP[9]; char sA[9]; char sA_MIN[9]; char sA_MAX[9]; double A_MIN = 0; double A_MAX = 0; void draw(double T, double P, double A) { u8g.setFont(u8g_font_unifont); dtostrf(T, 4, 2, sT); dtostrf(P, 4, 2, sP); dtostrf(A, 4, 2, sA); u8g.drawStr( 5, 10, "Temp: "); u8g.drawStr( 5, 30, "Bar : "); u8g.drawStr( 5, 50, "Alt : "); u8g.drawStr( 50, 10, sT); u8g.drawStr( 50, 30, sP); u8g.drawStr( 50, 50, sA); } void draw2(double A_MIN, double A_MAX) { u8g.setFont(u8g_font_unifont); dtostrf(A_MIN, 4, 2, sA_MIN); dtostrf(A_MAX, 4, 2, sA_MAX); u8g.drawStr( 5, 20, "A Min: "); u8g.drawStr( 60, 20, sA_MIN); u8g.drawStr( 5, 45, "A Max: "); u8g.drawStr( 60, 45, sA_MAX); } void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("BMP init failed!"); while (1); } else Serial.println("BMP init success!"); bmp.setOversampling(4); u8g.setColorIndex(1); u8g.setFont(u8g_font_unifont); } void loop(void) { double T, P; char result = bmp.startMeasurment(); if (result != 0) { delay(result); result = bmp.getTemperatureAndPressure(T, P); if (result != 0) { double A = bmp.altitude(P, P0); if ( A > A_MAX) { A_MAX = A; } if ( A < A_MIN || A_MIN == 0) { A_MIN = A; } // Serial.print("T = \t"); Serial.print(T, 2); Serial.print(" degC\t"); // Serial.print("P = \t"); Serial.print(P, 2); Serial.print(" mBar\t"); // Serial.print("A = \t"); Serial.print(A, 2); Serial.println(" m"); u8g.firstPage(); do { draw(T, P, A); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000); do { draw2(A_MIN, A_MAX); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000); } else { Serial.println("Error."); } } else { Serial.println("Error."); } delay(100); }
값이 잘 바뀌고 있습니다.
FIN
이제 뭘하지?
'Hardware' 카테고리의 다른 글
Hardware | BME280 sensor (0) | 2017.03.09 |
---|---|
Hardware | DSO150 Oscilloscope (0) | 2017.03.07 |
Hardware | Arduino 비접촉 온도센서 GY-906 MLX90614 (0) | 2017.03.05 |
Hardware | Arduino Ambient Light TEMT6000 Sensor (0) | 2017.03.05 |
Hardware | Arduino 로 buzzer 소리내기 (0) | 2017.03.05 |