Raspberry Pi Pico WとDS18B20温度センサーで温度を測ってみた

Raspberry Pi

はじめに 

 Raspberry Pi Pico WとDS18B20温度センサーで温度を測ってみました。
 Raspberry Pi Pico Wは英Raspberry Pi財団のマイコンボードで、制御するプログラムは主に「MicroPyton」と「C言語」で作成されていますが、今回は「MicroPyton」を使用しています。
 DS18B20は温度センサーはwireインターフェースといい、1つの配線でデータをおくれる便利なインターフェースです。防水処理が施されていました。
 このサイトでは、Raspberry Pi Pico W のプログラム開発に使用する「Thonny(ソニー)という総合開発環境を使用しています。また、PicoでThonnyのプログラムを実行するためにはMicroPythonのインタプリターを含むファームウェアが必要ですが、既にセットされていることを前提にしています。
 Thonnyの公式Webサイト「https://thonny.org」から入手可能です。
 ファームウェアは英Raspberry Pi財団のWebサイトから入手可能です。

準備(必要なもの)

  • Raspberry Pi Pico W
     Raspberry Pi Picoには「Raspberry Pi Pico」「Raspberry Pi Pico H」「Raspberry Pi Pico W」「Raspberry Pi Pico WH」などがあり、今回は測定したデータをWifiを使ってPCに飛ばすので、Raspberry Pi Pico WHを使いました。(Raspberry Pi Pico Wでもよかったのですが在庫切れでした。両者の違いは簡単に言うと端子があらかじめ半田付けされているかいないかです。半田ごてがない場合はRaspberry Pi Pico WHを購入しましょう。)
  • DS18B20温度センサー
     Amazonで3本セットを購入しました。これにはデジタル温度センサー(1wire)DS18B20+など基盤に差し込んで使えるものもありますが、今回は水温センサーとして使用するので、棒状の防水処理されたものを使います。
  • Raspberry Pi Pico Wや電子パーツを接続するブレッドボード(EIC-801など)
  • ブレッドボードで配線するためのジャンパーワイヤ
  • プルアップ抵抗(通常4.7kΩ)
  • パソコン(OSはWindowsです)
  • パソコンとRaspberry Pi Pico Wを接続するためのケーブル(Picoの端子はMicroUSB(Micro-B)です)
  • Wi-Fi(無線LAN)ルーター(ない場合でも、パソコンとRaspberry Pi Pico WとDS18B20温度センサーを接続して温度を測定することはできます)
  • あれぱ半田ごて

ブレッドボードにRaspberry Pi Picoをセットしたもの。PicoWはC列とH列に差し込んでください。

ブレッドボードで配線するためのジャンパーワイヤ

DS18B20温度センサーにはブレッドボードに接続する端子が付いていなので、ジャンパーワイヤを使って端子を作ります。半田を使ってつなぐのがベストですが、ない場合はよじってテープを巻いても良いと思います。上の写真は端子を繋ぎ熱収縮チューブを被せています。

Picoが動くかどうか確認する

上記のようにPicoにUSBケーブルをセットし、一方はパソコンのUSB端子に差し込みます。
Thを起動し、次のコードを入力します。

# led_blink.py

from machine import Pin
import time

led = Pin("LED", Pin.OUT)

while True:
    led.high()
    time.sleep(1)
    led.low()
    time.sleep(1)

プログラムを実行した結果、PicoのLEDが一秒間隔で点滅すれば、第一関門通過です。

DS18B20温度センサーで温度を測ってみよう

 上記の写真のように配線します。B6とI5をつなぐように4.7kΩのプルアップ抵抗をセットします。写真ではショートしないよう熱伸縮チューブで覆っています。なんでこれが必要なのか私にはわかりません。チャットGPTやほかのサイトで教えてくれました。DS18B20温度センサーの黄色いデータ線はA6に、赤色のプラスはJ5に、黒色のGRDはJ3に接続します。
 黄色いデータ線をつないだA6は「汎用入出力(GPIO)」の4番、赤色プラスをつないだA6は3.3V、J3はGRDです。
 Pico Wが備える40個の端子の役割については英Raspberry Pi財団のWebサイトなどを参照してください。

 配線が完了したらUSB端子をPCに差し込み、Thを起動し、次のコードを入力します。

from machine import Pin
import onewire
import ds18x20
import utime

# DS18B20のデータピンをGPIO4に接続
dat = machine.Pin(4)

# 1-Wireバスの初期化
ds_sensor = ds18x20.DS18X20(onewire.OneWire(dat))

#RTCから現在時刻を取得するために必要
rtc = machine.RTC()

# 接続されている全センサーのROMアドレスを取得
roms = ds_sensor.scan()
print("Found DS devices:", roms)

led = Pin("LED", Pin.OUT)

while True:
   
    # 温度を取得
    ds_sensor.convert_temp()
    led.high()
    utime.sleep(1)  # 温度データの変換に時間がかかる
    led.low()
    
    # RTCから現在時刻を取得
    datetime = rtc.datetime()  

    for rom in roms:
        print("Temperature:", ds_sensor.read_temp(rom), "°C" , f" : {datetime[4]:02d}:{datetime[5]:02d}:{datetime[6]:02d}")
    utime.sleep(4)

 コードを入力したら、Thの赤色のストップ/リスタートボタンを押します。

 ウインドウ下段の「シェル」エリアが次のようになります。

 このようにならない時は、PCがPico Wを認識していないので、USBケーブルを確認してください。上記のようになったら緑色の実行ボタンを押します。
 うまくいくとウインドウ下段の「シェル」エリアが次のようになります。

 温度を測定してLEDを1秒間点灯し測定値と時刻を表示して、その後4秒間休みます。ストップ/リスタートボタンを押すまで繰り返します。
 温度測定とLED点灯とデータ表示の流れがきれいでありませんが、温度測定の後データ変換に時間がかかるのでLED表示を加えたためです。なお、コード作成にはチャットGPTの力を借りました。ものすごく優秀だと思います。
 DS18B20温度センサーの銀色の部分を温めたり水温を測ったりしてみましょう。 

Raspberry Pi Pico WとDS18B20温度センサーで温度を測ってみた(2) に続く。

コメント

タイトルとURLをコピーしました