라즈베리파이 피코보드에서 고정밀 기압센서 및 온도센서인 BMP280 사용하기

라즈베리파이 피코보드에서 고정밀 기압센서 및 온도센서인 BMP280 사용하기

1. BMP 280 대기압 센서

알리에서 라즈베리 파이 피코 보드에 사용할 센서들을 찾다가, BMP280이라는 이름의 디지털 방식 기압 센서 모듈을 발견하였다. 크기가 11mm x 13mm 정도로 소형이면서, 디지털 입력을 제공하는 센서이고, 통신 방식 역시 배선이 간결한 I2C 방식이었다.

엄밀하게 말하면 BMP280은 다음과 같이 센서 모듈의 핵심칩(2×2.5mm)을 의미하는데,

이 센서칩 자체의 성능은 다음과 같다고 한다. 압력의 경우 사용 방식에 따라 대략 0.16Pa의 해상도를 가지며(참고 = 대기압은 약 101325 Pa에 해당), 함께 측정 가능한 온도의 경우 섭씨 0.01도의 측정 해상도를 가진다고 한다.

다만, 실제 사용을 위해서는 모듈화된 형태로 구입하게 되는데, 이러한 BMP280 모듈은 여전히 매우 높지만 센서칩 자체에 비해서는 조금 완화된 수준의 정밀도를 가지게 된다. (0.12~1hPa = 0.12~1 mbar 정도의 정확도)

한편 가격은 착해서, 해외 직구 시 배송비를 포함한 가격이 개당 2000원 내외로 저렴했다.

실제로 배송받은 제품은 다음과 같은 형태인데, 핀은 직접 납땜해야만 했다. (접속용 핀을 납땜한 이후 사진임)

센서 모듈의 뒤편은 다음과 같은 형태이다. (접속용 핀을 납땜한 이후 사진임)

2. 피코 보드에 적용

납땜이 된 센서의 핀들을 다음과 같이 피코 보드에 연결하여 회로를 구성했다. I2C의 SDA(파란색 선)를 GP0에, I2C의 SCL(녹색 선)을 GP1에 연결했고, 3.3V(적색 썬)와 GND 배선(오렌지색 선)을 연결했다.

각각의 선들은 센서 모듈의 접속 핀에 맞도록 연결했다.

그리고, Github에서 “BMP280″과, “python” 키워드로 검색하여 관련 라이브러리를 찾아 이중 다음 라이브러리를 선택했다.

선택한 항목으로 들어가 BMP280 라이브러리를 찾아 Thonny IDE로 내용을 복사한 후, 피코 보드에 동일한 이름으로 저장해 두었다.

참고로 이 라이브러리는 다음과 같은 License 조항처럼 해당 내용만 밝히면 자유로운 사용을 허용하고 있다.

여기에 해당 라이브러리 파일을 첨부해 둔다.

첨부파일

bmp280.py

파일 다운로드

그리고, 다음과 같은 간단한 코드로, 이 센서의 측정값을 읽어 보았다.

from machine import Pin,I2C
import utime
from bmp280 import *

sda = Pin(0)
scl = Pin(1)

i2c = I2C(0,scl=scl,sda=sda,freq=200000)
bmp = BMP280(i2c)
bmp.use_case(BMP280_CASE_INDOOR)
while True:  
    temp=bmp.temperature
    p_Pa=bmp.pressure                 #압력 기본 측정 단위는 Pascal
    
    p_bar=p_Pa/100000          # 압력단위변환   1 bar = 100,000 Pa
    p_atm=p_bar/1.013          # 압력단위변환   1 atm(기압) = 1.013 bar
    p_mmHg=p_atm*760           # 압력단위변환   1 atm(기압) = 760 mmHg
    p_psi=p_atm*14.7           # 압력단위변환   1 atm(기압) = 14.7 psi
    
    print("Temperature Celcius : " , round(temp, 2))
print("Pressure            : " , round(p_Pa,2), "Pa  (" , round(p_bar,2),"bar", round(p_atm,2),"atm",round(p_psi,2),"psi )" )
print("")
    utime.sleep(2)

참고로 이 라이브러리는 측정 환경에 따라 대기압 측정치가 영향을 받기도 하는 점을 고려하여, 사용 환경에 대한 인자를 넣을 수 있게 되어 있는데, 본 예제에서는 실내 측정이라, BMP_CASE_INDOOR를 사용했다.

이 프로그램을 실행시키면 다음과 같은 결과를 얻게 되는데,

관련 동작 모습은 다음과 같다.