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()
自由研究
テンテン
その他のセンサーや音やサーボモーターなどのプログラムをモジュール化することで複雑な動きもプログラムできるようになりますね。