PICOで人が近づくとLEDにメッセージなどを表示させる

PICOで人が近づくとLEDにメッセージ表示させる

PICOで人が近づくとLEDにメッセージなどを表示させるために赤外線センサーとフルカラーLED制御をあわせたプログラムをつくります。

各プログラムをモジュール化して呼び出すようにします。

プログラムのモジュール化と呼び出し

赤外線センサーのプログラム

フルカラーLEDのプログラム

二つのプログラムをモジュール化してメインプログラムから呼び出して使います。

赤外線センサープログラムのモジュール化

# distance_sensor.py
import utime

def read_distance(trigger, echo):
    # トリガー信号をLOWに設定してから、短時間待機
    trigger.low()
    utime.sleep_us(2)
    # トリガー信号をHIGHに設定し、10マイクロ秒待機
    trigger.high()
    utime.sleep(0.00001)  # 10マイクロ秒
    trigger.low()

    # エコー信号がLOWになるまで待機
    while echo.value() == 0:
        signaloff = utime.ticks_us()

    # エコー信号がHIGHになるまで待機
    while echo.value() == 1:
        signalon = utime.ticks_us()

    # 経過時間を計算し、距離に変換
    timepassed = signalon - signaloff
    distance = (timepassed * 0.0343) / 2  # 時間から距離(cm)に変換

    return distance  # 距離を戻り値として返す

return 文を使って戻り値として返すようにします。

フルカラーLEDプログラムのモジュール化

#neopixelshow.py
import neopixel
import time
from machine import Pin

# LEDの設定
NUM_LEDS = 16 # LEDの数
PIN = 0  # データピン

# NeoPixelオブジェクトの作成
np = neopixel.NeoPixel(Pin(PIN), NUM_LEDS)

# 全てのLEDを一色に光らせる関数
def all_color(color):
    for i in range(NUM_LEDS):
        np[i] = color
    np.write()

# LED制御のメインルーチン
def led_routine():
    
    all_color((25, 0, 0))  # 全てのLEDを赤に光らせる
    time.sleep(1)
    all_color((0, 25, 0))  # 全てのLEDを緑に光らせる
    time.sleep(1)
    all_color((0, 0, 25))  # 全てのLEDを青に光らせる
    time.sleep(1)
    all_color((0, 0,  0))  # 全て 消す
    time.sleep(1)
def で関数として呼び出せるようにします。
自分で作ったメッセージなどを表示させるプログラムをモジュール化してみましょう。

メインプログラム

# main_program.py
import distance_sensor
import neopixelshow
from machine import Pin  # 必要に応じて適切なモジュールをインポート


# トリガーとエコーのピンを定義
trigger = Pin(14, Pin.OUT)  # トリガー用のピン番号を設定
echo = Pin(15, Pin.IN)     # エコー用のピン番号を設定

while True:
    distance = distance_sensor.read_distance(trigger, echo)
    # インポートした関数を呼び出して距離を測定
    if distance <= 10:
        print("距離が10cm以下です。別のプログラムを呼び出します。")
        neopixelshow.led_routine()
        #  インポートした関数を呼び出してLEDを点灯
    else:
        print("距離: ", distance, "cm")
        # 特に何もしなくてもよい
1 二つのモジュールをインポート
import distance_sensor
import neopixelshow2 トリガーとエコーのピンを定義
trigger = Pin(14, Pin.OUT)  トリガー用のピン番号
echo = Pin(15, Pin.IN)  エコー用のピン番号3 インポートした関数を呼び出して距離を測定
distance = distance_sensor.read_distance(trigger, echo)

4 距離が10cm以下のときにインポートした関数を呼び出してLEDを点灯
if distance <= 10:
neopixelshow.led_routine()

自由研究

テンテン
テンテン

その他のセンサーや音やサーボモーターなどのプログラムをモジュール化することで複雑な動きもプログラムできるようになりますね。