STEMMAで広がるArduinoの世界②Step1 気圧センサ ±0.03hPa BMP390
ボッシュのMEMS気圧センサは古くから製品があるようです。現在入手しやすい気圧センサは次のとおりです。
型名 | 会社名 | 電源電圧 [V] |
測定範囲 |
絶対確度圧力 [hPa] |
相対確度圧力 [hPa] |
その他の機能 |
BMP280 | Bosch | 1.71~3.6 | 300~1100 | ±1 | ±0.12 | 温度 |
---|---|---|---|---|---|---|
BME280 | Bosch | 1.71~3.6 | 300~1100 | ±1 | ±0.12 | 温度、湿度 |
BMP388 | Bosch | 1.65~3.6 | 300~1250 | ±0.40 | ±0.08 | 温度 |
BMP390 | Bosch | 1.65~3.6 | 300~1250 | ±0.50 | ±0.03 | 温度 |
BME680 | Bosch | 1.71~3.6 | 300~1100 | ±0.6 | ±0.12 | 温度、湿度、汚れ |
DPS310 | Infineon | 1.7~3.6 | 300~1200 | ±1 | ±0.06 | 温度 |
LPS25HB | STMicroelectronics | 1.7~3.6 | 260~1260 | ±0.2 | ±0.1 | 温度 |
気圧(絶対確度圧力)の値は、1日ながめていてもほとんど変化しません。台風のような低気圧が近辺を通過するときは、大きく変化します。
相対確度(分解能)は、センサによって大きく異なります。DPS310の±0.06は高度±50cm、BMP390の±0.03hPaは±25cmに相当するので、階段の上り下りを判別できます。
●Adafruitのブレークアウト・ボード
上記の表の中で、最初に相対確度圧力の細かなBME390を取り上げます。STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。
Adafruit BMP390 - Precision Barometric Pressure and Altimeter - STEMMA QT / Qwiic
ボードには、5V->3.3Vのレギュレータと3.3<->5V信号レベル変換回路が入っています。BMP390は3.3Vで動作させますが、Arduino UNOでは5Vの電源を利用します。信号のHighレベルは5Vです。
SDA/SCL信号には10kΩのプルアップ抵抗が入っています。I2Cのスレーブ・アドレスはデフォルトが0x77で、裏面のaddr(SDR)の部分をショートすると0x76になります。回路図は、次のPDFに掲載されています。
https://cdn-learn.adafruit.com/downloads/pdf/adafruit-bmp388-bmp390-bmp3xx.pdf?timestamp=1607556313
●気圧センサBME390のおもなスペック
データシート 見つからない。下記のプログラムがBME388と共通なので、BME388のデータシートが参考になるかもしれない。
プログラム事例 https://github.com/BoschSensortec/BMP3-Sensor-API
- 電源電圧;1.65~3.6V
- 温度測定範囲;不明、分解能不明
- 気圧測定範囲;300~1250hPa、確度±0.50hPa、分解能±0.03hPa
- インターフェース;SPI、I2C
- I2Cアドレス;0x76、0x77どちらかを選択
●使用環境
- Arduino UNO R3
- Arduino IDE 1.8.13
- Windows10 20H2
●接続
電源は5V を使いました。Arduino UNO R3のI2Cは、SCLとSDA端子がありますが、SCLはA5に、SDAはA4につながっています。どちら側につないでもかまいません。白色のリード線は見えないので、黄色で配線図を描きました。
電源がつながると、ボード上の緑色のLEDが点灯します。
●スケッチ
利用手順は、Adafruit BMP388 and BMP390 - Precision Barometric Pressure and Altimeter Overviewに書かれています。
ライブラリを導入します。メニューのツールから、ライブラリを管理を選び、検索欄にBMP3を入力します。見つけてきたAdafruit BMP3XX Libearyのインストールをクリックします。
同時にサンプル・スケッチも導入されます。
メニューのファイルからサンプルの入っているスケッチ例を選択します。そこから、Adafruit BMEXXX Library - bmp3_simpletestを選択します。デフォルトでI2Cバスを使うように記述されています。スレーブ・アドレスは0x77です。ボードの裏面のaddrをショートして0x76に設定したときは、begin_I2C()の引数に0x76を記述します。
●高度差
±25cmの分解能があるので、机の上の高度とセンサを床におろしたときの値を見ました。
机の上;(54.13+54.04)/2 = 54.085 床;(53.8 + 53.68+53.7)/3 = 53.726 差=35.9cm |
でした。実際の高低差は70cmなので、あまり正確とはいえない結果になりました。
●パラメータ
スケッチbmp3_simpletestのsetup()の中で、初期設定をしています。
// Set up oversampling and filter initialization bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X); bmp.setPressureOversampling(BMP3_OVERSAMPLING_32X); bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3); bmp.setOutputDataRate(BMP3_ODR_50_HZ);
これらのパラメータで記述できる引数は、C:\Users\ユーザ名\Documents\Arduino\libraries\Adafruit_BMP3XX_Libraryのbmp3_defs.hに記述があります。
/**\name Over sampling macros */ #define BMP3_NO_OVERSAMPLING UINT8_C(0x00) |