本記事の内容
- Raspberry PiまたはPicoとBMP180モジュールを使って、大気圧を測ってみました。どちらもエラーコードを載せて、よくあるプログラムミスに陥らないように丁寧に解説しています。
- Raspberry Pi Picoでは、常時気圧を測り続ける気圧ロガーやハンディ気圧計に応用することができます。
必要なもの
- Raspberry Pi、または、Raspberry Pi Pico
- BMP180モジュール
- ジャンプワイヤー、ブレッドボードなど
今回使用するのは、HiLetgoのBMP180 GY-68 デジタル気圧プレッシャーセンサーモジュールです。Amazonで3個550円で売られていました。
BMPモジュール自体は古いもので、ネットで使い方等を調べると8年近く前の記事がヒットします。既に生産終了となったものも多いです。
今回はAmazonで安売りされていたという理由だけで購入してしまいました。使い方を以下にまとめていきます。
Raspberry Piで作製する場合
私の場合は、Raspberry Pi 4Bで作製していますが、基本的にどのRaspberry Piでも大丈夫です。とはいえ、古いRaspberry Piはもはやプレミアものなので、逆に見つかりませんが、、、
配線
配線は以下の通りで、かなりシンプルです。
Raspberry Pi | BMP180 |
5V Power (3V3 Powerも可) | VIN |
Ground | GND |
GPIO3(SCL) | SCL |
GPIO3(SDA) | SDA |
プログラムコード(I2CインターフェイスをONに)
まずはRaspberry PiのI2CインターフェイスがONになっていることを確認します。OFFの状態では、
「FileNotFoundError : [Errno 2] No such file or directory: ‘/dev/i2c-1’」
というエラーで弾かれてしまいます。I2CインターフェイスがONになっているかどうかは、「設定>Raspberry Piの設定>インターフェイス>I2C」で確認できます。
プログラムコードはGitHubにもありますが、先人の記事を参考にしてhttps://osoyoo.comから頂きました。 以下のコードでダウンロードと解凍、BMP Python Libraryのセットアップができます。
wget https://osoyoo.com/driver/Adafruit_Python_BMP.tar.gz
sudo tar zxvf Adafruit_Python_BMP.tar.gz
sudo tar xvf Adafruit_Python_BMP.tar
cd Adafruit_Python_BMP
sudo python setup.py install
あとは、サンプルプログラムであるsimpletest.pyを実行するだけです。
Raspberry Pi Picoで作製する場合
気圧を測定する程度であれば、Raspberry Pi Picoでも性能的には十分です。むしろ、Raspberry Pi Picoの方が消費電力も抑えられてエコになります。(ほんの数ワットの差ですが、、、)
BMP180が小指サイズの極小モジュールなので、制御するマイコンボードも安価で小型なRaspberry Pi Picoの方が全体がコンパクトに収まります。
配線
配線は以下の通りです。
Raspberry Pi Pico | BMP180 |
㊵ VBUS | VIN |
㊳ GND | GND |
② GP1(SCL) | SCL |
① GP0(SDA) | SDA |
プログラムコード(bmp180.pyの47行目をコメントアウト)
まずは、Githubのmicropython-bmp180から、bmp180.pyを拝借します。ここで重要なポイントは、47行目をコメントアウトさせることです。
もしコメントアウトさせないと、
「OSError: I2C operation not supported」
というエラーでI2C通信がうまくいきません。私もこちらの方の記事を見るまで、原因が分かりませんでした。
あとは、以下のPythonプログラムを作成して、bmp180.pyと一緒にRaspberry Pi Picoにアップロードするだけです。
from bmp180 import BMP180
from machine import I2C, Pin
from utime import sleep
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000)
bmp180 = BMP180(i2c)
while True:
temperature = bmp180.temperature
pression = bmp180.pressure/1000.0
altitude = bmp180.altitude
print("Temperature: {:.1f} °C, Pression: {:.1f} kPa, Altitude: {:.1f} m".format(temperature , pression , altitude))
sleep(1)
上記の通り、気温と気圧を継続的に測定することができます。高度(Altitude)は気圧から高度を求める計算式から算出されています。
bmp.pyのコードを読む限り、標高計算サイトで詳しく書かれている数式とは若干異なるので、どうやら簡易化した計算式かと思われます。標高がマイナス値で出てるのは、64行目で
「self.baseline = 101325.0」
と定義していたからでした。当日は快晴で高気圧な日だったため、代わりに正しい海面気圧を定義すると、おおよそ合っていそうな標高が出力されました。
まとめ
Raspberry Pi、もしくはRaspberry Pi PicoとBMP180で、気圧を測ることができました。
LCDディスプレイやSDカードモジュールと組み合わせることで、気圧ロガーやハンディ気圧計を作製することもできます。ぜひ以下の記事も参考にしてみて下さい。
コメント