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 # 距離を戻り値として返す
フルカラー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)
メインプログラム
# 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)
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()
自由研究

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


