Raspberry Pi Picoは、マイクロコントローラー入門に最適なツールです。4ドルから購入でき、価格も手頃で扱いやすいのが魅力です。低価格で使いやすいので、お財布に負担をかけることなく、気軽にプロジェクトに組み込むことができます。
このハウツーでは、Raspberry Pi PicoでDS18B20を使ってリアルタイム温度データを取得します。このセンサーは、ベアトランジスタチップから防水ケーブルまで、様々な形状があります。今回は後者のタイプを使用します。後者は液体に部分的に浸して温度を監視できます。このプロジェクトでは、温度を読み取り、MicroPythonの条件付きテストを使用して、温度が20℃を下回った場合にLEDを点滅させます。
このプロジェクトに必要なもの
- ラズベリーパイ ピコ / ピコ W
- DS18B20センサー
- 導かれた
- 330オーム抵抗器
- 4.7Kオーム抵抗器
- オス-オスジャンパーワイヤー5本
- ブレッドボード
回路の構築
この回路は2つの部分で構成されています。DS18B20温度センサーとLEDです。それぞれ2つのセクションに分けて説明します。
DS18B20 には、Raspberry Pi Pico への接続が 3 つあります。
スワイプして水平にスクロールします
ラズベリーパイ ピコ | 配線色 | DS18B20 |
---|---|---|
3対3 | 赤 | VDD |
GPIO26 | 黄色 | データ |
GND | 黒 | GND |
3つの接続はすべてブレッドボード上に作成され、ワイヤはPicoに接続するために使用されています。データピンと3V3ピン(黄色と赤)の間には4.7kΩの抵抗があり、供給される3.3Vを使用してデータピンをハイレベルにプルアップするために使用されます。これにより、データピンとPico間の安定した接続が維持されます。
LED には Raspberry Pi Pico への接続が 2 つだけあります。
スワイプして水平にスクロールします
ラズベリーパイ ピコ | 配線色 | 導かれた |
---|---|---|
GPIO15 | 赤 | 陽極(長い脚) |
GND | 黒 | カソード(短脚) |
LEDのカソード端子には、GNDと直列に330Ωの抵抗が接続されています。これにより、LEDが消費する電流量が低減されます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
コードを書く
1.このガイドに従って、お使いのRaspberry Pi Picoモデル用の最新のMicroPythonリリースをダウンロードしてインストールしてください。Raspberry Pi PicoをThonnyに接続するまでの手順に従ってください。
2. Thonny で新しい空のプロジェクトを作成します。
3.事前に記述されたコードのモジュールを3つインポートします。まず、PicoがDS18B20の1線式インターフェースと通信できるようにするモジュール「onewire」です。次に、DS18B20からのセンサーデータを解釈し、人間が読める形式でデータを提供するモジュール「ds18x20」です。最後に、プロジェクトコードの速度制御に使用する「time」をインポートします。
import onewire, ds18x20, time
4. MachineモジュールからPinクラスをインポートします。これにより、GPIOに接続されたコンポーネントとコードがやり取りできるようになります。
from machine import Pin
5. SensorPinとalertという2つのオブジェクトを作成します。SensorPinは、DS18B20のデータピンをPicoに接続するためのGPIOピンです。Alertは、LEDのアノード(長い脚)に接続するGPIOピンです。
SensorPin = Pin(26, Pin.IN)
alert = Pin(15, Pin.OUT)
6.オブジェクト「sensor」を作成し、ds18x20モジュールにDS18B20温度センサーの位置を指定します。この行では、センサーが接続に使用するプロトコルであるOneWireモジュールも使用します。
sensor = ds18x20.DS18X20(onewire.OneWire(SensorPin))
7.オブジェクト roms を作成し、センサーオブジェクトを使ってインターフェースをスキャンし、DS18B20 温度センサーを見つけます。DS18B20などのすべての単線式デバイスには、ROM に保存された固有の登録番号があり、使用する前にこの番号を識別する必要があります。
roms = sensor.scan()
8. while True ループを使用して、次のコード行を無限ループで実行します。
while True:
9.温度の読み取りを摂氏に設定します。while True ループ内のコードは、ループ内であることを示すためにインデントされていることに注意してください。
sensor.convert_temp()
10.コードに2秒間の一時停止を追加します。これにより、DS18B20が安定するまでの時間が得られ、その後読み取りが行われます。
time.sleep(2)
11. forループを使用して、返されたROMのリストを反復処理します。1線式インターフェースにはDS18B20が1つしかないため、反復処理するリストには1つのROMのみが格納されます。
for rom in roms:
12.オブジェクト temperature を作成し、DS18B20 センサーの読み取り出力を格納します。出力は round() 関数でラップされ、返されたデータを小数点以下1桁に丸めます。
temperature = round(sensor.read_temp(rom),1)
13.条件付きテストを使用して、温度オブジェクトに格納されている値をハードコードされた値と比較します。この例では、温度が20℃以下の場合、条件はTrueと評価され、次のインデントされたコードセクションが実行されます。
if temperature <= 20:
14.気温が 20 ℃ 未満であることをユーザーに警告するメッセージを Python シェルに出力し、文に温度の値を含めます。
print("Warning the temperature is",temperature,"C")
15. for ループを使用して、0.5 秒の遅延で LED を 10 回点滅させます。
for i in range(10): alert.toggle() time.sleep(0.5)
16.温度が20℃を超えた場合に実行されるelse条件を作成します。この条件は、終了前に現在の温度を表示します。
else:
print(temperature,"C")
17.ループを終了してループの開始に戻る前に、5 秒間の一時停止を追加します。
time.sleep(5)
18.コードを TemperatureMonitor.py として Raspberry Pi Pico に保存します。
19.実行アイコンをクリックしてコードを実行します。少し待つと、Pythonシェルに温度の詳細が表示されます。温度が20℃を下回ると、LEDが5回点滅して警告します。
完全なコードリスト
import onewire, ds18x20, time
from machine import Pin
SensorPin = Pin(26, Pin.IN)
alert = Pin(15, Pin.OUT)
sensor = ds18x20.DS18X20(onewire.OneWire(SensorPin))
roms = sensor.scan()
print(roms)
while True: sensor.convert_temp() time.sleep(2) for rom in roms: temperature = round(sensor.read_temp(rom),1) if temperature <= 20: print("Warning the temperature is",temperature,"C") for i in range(10): alert.toggle() time.sleep(0.5) else: print(temperature,"C")
time.sleep(5)