【測定した気圧をSDカードに保存】Raspberry Pi Picoで気温・気圧記録計を作製

pico-bmp180-microsd Raspberry Pi

本記事の内容

  • Raspberry Pi PicoとBMP180で、温度と気圧を測定するモニタリング装置を作製しました。
  • 測定したデータは常時microSDカードに保存するため、気温・気圧記録計(気温気圧ロガー)として活用できます。

前回の比較

同じくマイクロSD TF カードモジュールを活用した温度ロガーとして、前回はRaspberry Pi Picoの内蔵温度センサの温度をひたすら記録する装置を作製していました。

ただ、気温だけ記録しても面白味がありませんでした。そのため、今回は気圧も測定できるようにBMP180モジュールを後付けして、バージョンアップさせました。また、Raspberry Pi Picoの内蔵温度センサではPicoの基板上の温度しか測れませんが、BMP180ではセンサを有線で伸ばせるので、好きな場所の気温と気圧を測定できます。

必要なもの

  • Raspberry Pi Pico:550円
  • BMP180モジュール:190円
  • マイクロSD TF カードモジュール:330円
  • microSDカード:700円~
  • (TAKACHIユニバーサル基盤:200円)
  • (TAKACHIケース:120円)

基本的に、以前作成した温度ロガーの部品を流用しています。(なんなら、使っていなかったRaspberry Pi Picoの①~④ピンにBMP180を付けるだけで完成しました。)

Youmile 5ピースマイクロSDストレージボードマイクロSDカードモジュールマイクロSDストレージ拡張ボードSPIインターフェイス付き6ピンマイクロSD TFカードデュポンワイヤ付きArduino Raspberry Pi用メモリシールドモジュールSPI

配線

配線は表にまとめると以下の通りです。Raspberry Pi PicoはBMP180とI2C通信、マイクロSD TF カードモジュールとSPI通信で接続します。こういう時はRaspberry Pi PicoのPinが豊富で良かったとつくづく実感します。

Raspberry Pi PicoBMP180マイクロSD TF カードモジュール
①GP0(SDA)SDA
②GP1(SCL)SCL
③GNDGND
④GP2VIN
⑥GP4MISO
⑨GP6SCK
⑩GP7MOSI
㉞GP28CS
㊳GNDGND
㊴VSYSVCC

BMP180はRaspberry Pi PicoとI2C通信をさせるため、SDAとSCLをそれぞれRaspberry Pi PicoのGP0とGP1に繋ぎます。GP0とGP1を使用した場合、Raspberry Pi Pico上のI2C系統は0になります。

BMP180のVINは㊱3V3(OUT)に繋いでもいいですが、今回は配線を最小限に抑えたかったので、④GP2に繋ぎました。そうするとRaspberry Pi Picoの①~④ピンにちょうどBMP180のSDA~VINが割り当たるので、基板上の配線が不要になります。

プログラムコードの最初でGP2に3.3Vの出力を指示すれば、VINに十分な電力が入り、通常通りBMP180を使用することができます。配線簡略化のお得なコツです。

ちなみにこちらの方法は、㊴VBVSに5Vの外部電源をつなげて起動する場合は使えません。電力不足が原因でしょうか。

マイクロSD TF カードモジュールとの配線は過去の記事を参考にしてください。今回は割愛します。

プログラムコード

まずは、GitHubからbmp180.pysdcard.pyをダウンロードして、Raspberry Pi Picoにアップロードします。前者はBMP180で気温と気圧を測定するよう、後者は測定したデータをmicro-SDカードに記録するためのライブラリです。Thonny IDEでのファイルのアップロード方法は、

①「表示」>「ファイル」から画面左タブにファイルを表示
②ダウンロードしたファイルを右クリックして、「Upload to/」

です。

bmp180.pyは47行目のを忘れずにコメントアウトしておきましょう。これを忘れると、I2C通信のエラーとなってしまい、Raspberry Pi Picoで気温と気圧を測定できません。

bmp180-commentout

あとは以下のプログラムコードを作成して、Raspberry Pi Picoに書き込むだけです。

import os, sdcard
from bmp180 import BMP180
from machine import I2C, SPI, Pin
from utime import sleep

#GP2に3.3Vを出力
VIN = machine.Pin(2, machine.Pin.OUT)
VIN.value(1)

spi = SPI(0)
sd = sdcard.SDCard(spi, Pin(28))
os.mount(sd, '/sd')
os.chdir('sd')

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000) 
bmp180 = BMP180(i2c)

time = 0
while True:

    temperature = bmp180.temperature
    pression = bmp180.pressure/1000.0
    altitude = bmp180.altitude
   
    with open('log.txt', 'a') as f:
        print("Time: ", file=f)
        print(time, file=f)
        print("Atom: ", file=f)
        print(pression, file=f)
        print("Temp: ", file=f)
        print(temperature, file=f)
        print(" ", file=f)
        
    sleep(1)
    time += 1

bmp180で気温と気圧を毎秒測定して、microSDカードに経過時間(秒)、気圧(kPa)、気温(℃)を記録していきます。測定間隔は一番最後の”sleep(1)”の数値を変えれば調整できます。

1記録あたり50バイトほどなので、16GBのmicroSDカードがあれば、毎秒の計測でも単純計算で10年分が記録できます。もちろん、それまでRaspberry Pi Picoやbmp180が動作していればの話ですが、、、

まとめ

  • Raspberry Pi PicoとBMP180、マイクロSD TFカードモジュールで、温度と気圧を測定・記録する気温・気圧記録計を作製しました。
  • 2000円以内でお手軽に作れる装置になります。使っていないRaspberry Pi Picoなどがあれば、是非活用してみてください。

コメント