JavaScriptを有効にしてください

BME280の詳細設定

 ·  ☕ 3 分で読めます

BME280の詳細なチューニングと設定ごとの精度や応答速度についてまとめました。BMP280でもほぼ同じように設定できます。


環境

マイコンはArduino互換のSeeeduino XIAO、センサーは秋月電子のAE-BME280、ライブラリはAdafruitのものです。ボードのメーカーやライブラリが異なっても設定項目は同じです。

設定項目

ライブラリに丸投げすればread()などの関数で値を読むことはできますが、用途ごとに精度や消費電力を最適化する場合やライブラリを自作する場合に必要な設定について簡単にまとめました。主にデータシートの3. Functional descriptionの内容です。

測定モード

BME280には2つの測定モード(3.3 Sensor modes)があります。

Forced Mode

Forced Modeでは、マイコンからの命令により1サイクルだけ測定をしてマイコンに送信します。

Normal Mode

Normal Modeでは、常に測定を繰り返して値をセンサー内(出力レジスタ)に保存し、マイコンからの命令により最新の値を送信します。測定を繰り返す頻度は測定そのものにかかる時間($t_{measure}$)と待機時間($t_{standby}$)によって決まり、$t_{standby}$を明示的に指定します。

測定の流れ

BME280にオーバーサンプリングと内蔵IIRフィルタの機能があるため、“1サイクル"の測定が複雑になっています。センサーの出力レジスタの値が書き換わるのが"1サイクル"です。まずそれぞれ機能の説明をしたあと、測定の流れについてまとめ直します。

オーバーサンプリング

1サイクルで温度・気圧・湿度をそれぞれ複数回測定して出力値を安定させることができます。測定回数はそれぞれ独立に設定でき、測定を省略することも可能です。

IIRフィルタ

オーバーサンプリングが1サイクル内で複数測定するのに対し、IIRフィルタは前のサイクルまでの値を使って出力値を安定させます。IIRフィルタは$filter_{coefficient}$という定数で設定します。この定数を用いて、前回の出力レジスタの値$data_{filtered-old}$と最新のセンサーの生の測定値$data_{ADC}$の加重平均を計算して新しい出力レジスタの値$data_{filtered}$とします。なお、$data_{ADC}$はオーバーサンプリング後の値です。

$$ data_{filtered}=\frac{data_{filtered-old}\cdot (filter_{coefficient}-1)+data_{ADC}}{filter_{coefficient}} $$

$filter_{coefficient}$は1,2,4,8,16が設定でき、1にすると式から明らかなようにIIRフィルタが無効になります。

1サイクルの値をそのまま出力するわけではないのでノイズが減りますが、複数サイクルの値を使うので応答速度が下がります。この遅れはデータシートのFigure 7: Step response at different IIR filter settingsを参照してください。

全体の流れと測定時間

Figure 6: BME280 measurement cycleの通りです。

  1. 測定開始
  2. 気温測定(オーバーサンプリング含む)
  3. 気圧測定(オーバーサンプリング含む)
  4. 湿度測定(オーバーサンプリング含む)
  5. 出力レジスタ更新(IIRフィルタ含む)
  6. 測定終了

測定時間$t_{measure}$はオーバーサンプリングをどの程度するかによって決まり、9.1 Measurement timeの通り計算できます。

Adafruitライブラリでの設定方法

Adafruit_BME280.hsetSamplingを用いることで設定を変更できます。引数の定数は同じファイルに列挙型で定義されています。

221
222
223
224
225
226
void setSampling(sensor_mode mode = MODE_NORMAL,
                  sensor_sampling tempSampling = SAMPLING_X16,
                  sensor_sampling pressSampling = SAMPLING_X16,
                  sensor_sampling humSampling = SAMPLING_X16,
                  sensor_filter filter = FILTER_OFF,
                  standby_duration duration = STANDBY_MS_0_5);

チューニング

編集中

3.5 Recommended modes of operation


8bitマイコン
著者
8bitマイコン
組み込み周りで遊ぶ宇宙好き