BMP581 高精度気圧センサー

投稿日 2025年04月02日

BMP581搭載のブレークアウトボード
I2Cのアドレスは47(デフォルト)と46の二種類を選択できるようになっている
コネクトピンも立てられるのでブレッドボードでの実験に便利
Qwiicコネクトシステムのソケットも付いているが今回は使わなかった

BMP581はBosch Sensortec社の圧力センサ(温度センサー内蔵)です。圧力検出の範囲は30 ~125 kPa、圧力データ分解能1/64Pa、絶対圧力精度 ±0.5hPaです。温度検出範囲は-40℃から85℃です。電源電圧は1.71Vから3.6Vです。マイコンを内蔵しており線形化と温度補償を行っています。マイコンとのインターフェースはI2CかSPIが使えます。Arduinoではライブラリが用意されており、簡単に使えます。

BMP581自体はひじょうに小さな金属ケースのチップですが、スイッチサイエンスやマルツで販売されているBMP581搭載のブレークアウトボードを使用すると便利です。今回はスイッチサイエンスから購入し、ブレッドボードで簡単な実験を行ってみました。BMP581のスペックやデータシート、ブレークアウトボードの回路図等はスイッチサイエンスのHPにあります。

ある日の気圧変化(自宅にて)
計測値そのままで、海面気圧に校正していません

気圧センサーを使用して時々刻々変化する気圧を記録することはそれ自体面白いアプリケーションですが、今回は気圧センサーで高度が計測できるかを実験してみました。登山などで使用される高度計も気圧を計測しているわけですが、山での数10m、数100mの高度差ではなく、例えばエレベーターでの各階の検出や、さらには机の足元(床)と机上のどちらにあるかなど、mからcm単位の高度差の検出ができるかどうか確認することを目的としました。

BMP581の気圧計測における分解能は1/64Pa(1.5625hPa)。絶対圧力精度は ±0.5hPaに対して、1m差の検出は気圧差が約10hPaですから十分可能な範囲です。

高さ約70cm差の部屋の床、机上、目線の高さがクリアに判別できている
全体的に右下がりなのは時々刻々気圧が変化しているため

当然ながらBMP581自体は数cmレベルの気圧差を検出する分解能と精度を持ってますが、問題はそう簡単ではありません。気圧は時々刻々変化するからです。一般的に大気圧は1000hPaから±20hPaくらいは十分変化する範囲です。つまり気圧による高度測定の世界には絶対値はありません。常にその高度での気圧を計測しているだけです。

そこで対策として考えられるのは、ベースとなる高度の気圧を基準にする方法です。たとえばベース(例えば机の足元の床)に居ることが分かっている場合、そこの気圧を基準にする方法です。この方法では、あまり長い間ベース以外に居ると、刻々変化する気圧で誤差が出てしまいます。

もうひとつの方法はふたつのBMP581を使い、一方のBMP581を常にベースに置いて、もうひとつのBMP581の気圧との差で高度を判定する方法です。この場合は相手の気圧がわかるよう通信しなければなりません。エレベーターであればひとつを1階に固定し、もうひとつをエレベーター内に置いてその気圧差を計測します。この場合も気圧は時々刻々変化するので、エレベーターがどこかの階に長く留まると誤差が発生します。

残念ながらエレベーターを実験で使える環境はありませんので、今回は家の床(ベース)、机上(床から約70cm)、目線の高さ(床から約150cm)で実験してみました。BMP581のブレークアウトボードをふたつ購入し、それぞれをESPマイコン(Arduino)で制御します。ESPマイコンはTCP/UDPの通信をサポートしているので、相手の気圧を通信で知ることができます。BMP581のArduinoのライブラリGithubはスイッチサイエンスからアクセスできます。

マイコンにESPを使用し、ふたつのBMP581で気圧を計測し、
一方の気圧をネット経由で取り込み、同時に表示している
2024年の夏 気温は30.02℃ 気圧は約997.8XXXhPa
このように個体誤差がある

エレベータでは実験できませんでしたが、建物の各階の判定は十分にできそうです。また、このような高精度な気圧計は建物の各部屋の気圧差もリアルタイムに計測できるので、マノメーターのような用途でも使えそうです。

(JF1VRR)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA