本記事の内容
- Raspberry Pi Picoとkwmobile 2x マイクロSD TF カードモジュールを組み合わせて、測定した気温をMicroSDカードに書き込んでいく温度ロガーの作製方法をまとめました。
- 外装はTAKACHIのケースを用いているので、とてもコンパクトでシンプルな装置になっています。
- BMP180を使用して気温と気圧を測定し、MicroSDカードに書き込んでいく方法は、以下の記事を参考にしてください。
はじめに
前回はRaspberry Pi Picoで温度監視センサーを作製しましたが、電池の消耗が早く、あっという間に冷蔵庫の置物になってしまいました。
電池はまだ使えたので電圧不足が原因だと思いますが、電池駆動だとこまめに動いているか確認する必要があるのは難点ですね。
その反省を踏まえ、一度電池駆動は諦めて、MicroUSBで給電させることとしました。
結局のところ、Raspberry Pi Picoで何かを測定したとしても、「記録媒体がない」&「インターネットに繋がらない」以上、測定したデータはどうしようもありません。
最初はWi-Fiモジュールを付けて、測定したデータをスマホに送ってみようと試しましたが、技適マークがついていない商品を買ってしまったため、こちらは一度ペンディングしています。。。電波法に抵触してはいけません。
そういう流れで、ひとまずは安心安全なMicroSDカードモジュールを用意して、温度ロガーを作製しました。
配線などは下手すぎて見せれたものではありませんが、これまでと比べると比較的実用的なものになったので、何かの参考になれば幸いです。
用意したもの
- Raspberry Pi Pico:550円
- マイクロSD TF カードモジュール:330円
- TAKACHIケース:120円
- TAKACHIユニバーサル基盤:200円
- その他ピンなど
ケースは毎度お気に入りタカチ電機工業のものです。秋葉原で見ていると、ユニバーサル基盤と対応していることに気づき、セットで購入しました。
やはり、「外見ただのプラスチックケースが、実は温度ロガーでした」というのが面白く、マイコン遊び一番の醍醐味ですね。
配線とはんだ付け
正直なところユニバーサル基盤自体が初めてだったので、試行錯誤しながらの作製です。
まず、配線の全体像は以下の通りです。
VCCとGNDはそのままなので簡単ですね。それぞれ、39VBVSと38番GNDに繋ぎます。Datasheetを読む限り、必要な電圧は4.5-5.5Vのようです。
SCKとMOSI、MISOはシリアルバス規格の一つ、シリアル・ペリフェラル・インタフェース(serial peripheral interface:SPI)の接続バスです。詳細はWikipediaなどで調べてください。
SCKは9番GP6、MOSIは10番GP7、MISOは6番GP4に繋ぎました。
CSはチップセレクト信号のようです。ここまでくるとさすがに説明が難しいですね。。。ひとまず34番GP28に繋ぎました。
ちなみに、ピンはくれぐれもずれて指すことがないように気を付けてください。私はSPI側の3ピンを1本ずつずれて接続してしまい、カードモジュールの基盤をアチアチにしてしまいました。(幸いにも故障はしませんでしたが、、、)
全体構造としては、ユニバーサル基盤+Raspberry Pi Pico+マイクロSD TF カードモジュールの三層にしました。横から見るとPicoのRP2040チップとSDカード挿入部分が接触していたため、念のためビニールテープで絶縁させてあります。
ユニバーサル基盤裏側の配線は、今回は割愛します。(強引に作製したため、見せられたものではなく)
MicroSDカード記録用のプログラムコード
まずは、MicroPythonでMicroSDカードを認識して読み書きさせるためライブラリ(sdcard.py)をGitHubからダウンロードして、解凍します。(全部を展開すると、ファイル量がかなりあります、、、)
Thonnyでダウンロード先の「drivers>sdcard」にある「sdcard.py」を開き、右クリックでRaspberry Pi Picoにアップロードします。
あとはPythonで、温度を測定してMicroSDカードに書き込むコードを作成します。コードに関しては、メタエレ実験室様の記事にすべて詳しく書かれているので、是非参考にしてください。以下は5秒に1回温度をSDカードに記録して、LEDを点滅させるコードになります。
from machine import Pin, SPI
import utime
import os, sdcard
led = machine.Pin(25, machine.Pin.OUT)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
spi = SPI(0)
sd = sdcard.SDCard(spi, Pin(28))
os.mount(sd, '/sd')
os.chdir('sd')
time = 0
while True:
reading = sensor_temp.read_u16() * conversion_factor
temperature = 27 - (reading - 0.706)/0.001721
time += 5
with open('log.txt', 'a') as f:
print("Time: ", file=f)
print(time, file=f)
print("Temp: ", file=f)
print(temperature, file=f)
print(" ", file=f)
led.value(1)
utime.sleep(0.1)
led.value(0)
utime.sleep(0.1)
led.value(1)
utime.sleep(0.1)
led.value(0)
utime.sleep(4.7)
MicroSDカード読み取り用のプログラムコード
MicroSDカードに記録したデータは、リーダから取り外して読み取ってもいいですし、そのままThonny IDE上でも確認できます。Thonny IDEで確認するためのプログラムは以下になります。
from machine import Pin, SPI
import os, sdcard
spi = SPI(0)
sd = sdcard.SDCard(spi, Pin(28))
os.mount(sd, '/sd')
os.chdir('sd')
os.listdir()
上記を実行すると、Thonny IDE上にlog.txtが表示されます。
ケースの加工
基盤とプログラムコードが完成したら、お待ちかねの工作タイムです。ケースに給電用のMicroUSBを通すための穴を開けます。
横から見るとMicroUSBはかなり低い位置になるので、ケース上蓋に切り欠きを開けます。
すると、こちらの通りRaspberry Pi Picoを載せたユニバーサル基盤がすっぽり入り、蓋を閉めることができます。ピッタリなケースに密封して、温度ロガーの完成です。
(空気がこもるため、外気の温度を正確に読めているか怪しいですが…)
まとめ
Raspberry Pi Picoとkwmobile 2x マイクロSD TF カードモジュールで、測定した気温をMicroSDカードに書き込む温度ロガーを作製できます。
MicroUSBの給電コードが邪魔ですが、電池切れを気にすることなく、気温を測定し続けることができるので、Raspberry Pi Picoを是非活用してみてください。
コメント