2022年6月2日木曜日

Maker Pi RP2040とCircuitPythonで、Grove超音波センサーを接続して距離に合わせてLEDメーターを光らせる

Maker Pi RP2040には7つのGroveコネクタがあり、様々なGroveデバイスを接続することが出来ます。Grove超音波センサー(Grove Sound Ranger)を接続して距離に合わせてLEDメーターを光らせるには、以下の手順を実行します。

〇Maker Pi RP2040と接続したGrove Ultrasonic Ranger

実行手順

1. Maker Pi RP2040をパソコンにUSBで接続して、Mu Editorを起動します。

2. 以下のリポジトリからGrove Ultrasonic Rangerのドライバクラスを取得します。
https://github.com/derhexenmeister/GroveUltrasonicRanger
以下のpythonソースをダウンロードして、Maker Pi RP2040のlibディレクトリ以下にエクスプローラーなどを用いてコピーします。
https://github.com/derhexenmeister/GroveUltrasonicRanger/blob/master/grove_ultrasonic_ranger.py

3. code.pyを開いて、以下のプログラムを書き込みます。
超音波センサーの距離値を3で割った値を取得して、それに合わせてLEDバーの点灯・消灯をコントロールします。レベルの値が9より大きい場合は9に制限します。
※circuit python 7.2.5以降にアップグレードしてから実行してください。
※Mu Editorを使用せず、code.pyを直接エクスプローラーなどから保存する事も出来ます。
iimport board
import time
import digitalio
import grove_ultrasonic_ranger
import neopixel_write

pins = [
  board.GP0,
  board.GP1,
  board.GP2,
  board.GP3,
  board.GP4,
  board.GP5,
  board.GP6,
  board.GP7,
  board.GP16,
  board.GP17,
#  board.GP26,
#  board.GP27,
#  board.GP28,
]

led_meter = []


# ピンの初期化
for pin in pins:
    dio = digitalio.DigitalInOut(pin)
    dio.direction = digitalio.Direction.OUTPUT
    # LEDメーター用配列へ
    led_meter.append(dio)

# RGB LEDを初期化
dio18 = digitalio.DigitalInOut(board.GP18)
dio18.direction = digitalio.Direction.OUTPUT
pixel_buf = bytearray([0, 0, 0, 0, 0, 0])
neopixel_write.neopixel_write(dio18, pixel_buf)

# Connector7にGrove Ultrasonic Sensorを接続
gur = grove_ultrasonic_ranger.GroveUltrasonicRanger(board.GP28, unit=1, timeout=1.5)
distance_level=0
while True:
    try:
        dt = gur.distance
        distance_level = int(dt/3) if int(dt/3) < 10 else 9
    except RuntimeError:
        # タイムアウトエラーの場合は一瞬赤で表示
        pixel_buf = bytearray([0, 128, 0, 0, 128, 0])
        neopixel_write.neopixel_write(dio18, pixel_buf)
        time.sleep(0.1)
        pixel_buf = bytearray([0, 0, 0, 0, 0, 0])
        neopixel_write.neopixel_write(dio18, pixel_buf)

    # LEDバーをレベル値に応じて点灯・消灯
    for li in range(0, 10):
        if li <= distance_level:
            led_meter[li].value = True
        else:
            led_meter[li].value = False
    time.sleep(0.1)

関連情報

・Maker Pi RP2040に関する他の情報はこちらを参照してください。

・Mu Editorに関する他の情報はこちらを参照してください。

0 件のコメント:

コメントを投稿