Raspberry Pi Pico(d_28)赤外線センサー _thread
IRセンサー FC-51
IR赤外線障害物回避センサー(FC-51)モジュールで遮蔽・物体の検知ができます。
赤外光を放出し、障害物からの反射した戻り赤外光を受光し、コンパレータLM393で基準値と比較して障害物検出します。
IRセンサー、赤外線物体センサー、赤外線遮蔽センサー とかいろいろな名称があるようです。
※micro:bitの記事e_15を参考にRaspberry Pi Picoで使えるように修正等をしました。_thread の動作も試します。
外観
赤外線障害物回避センサモジュール FC-51の外観写真です。(以後はFC-51と記載します)
FC-51が障害物(赤外線を反射する物体)を検知すると障害物LED(緑)が点灯します。電源3.3Vでは障害物との距離は~10cm程度でした。(電源を5Vにすれば、もう少し長くできます。実測では20cmくらいでした。)
目視では見えませんが、デジカメなら赤外LEDの発光が確認できます。
接続例
FC-51の電源電圧は3.3V~5.0VなのでRaspberry Pi Picoの3.3Vと接続できます。
FC-51のOUTをGP27と接続しました。GP22、GP26にLEDを接続しています。
検知したらGP26のLEDを点滅させます。
スクリプト
FC-51のスクリプトは以下のようにしました。
通常動作としてGP22のLED-Rを点滅させます。_theadを使い、FC-51で物体検知したらGP26のLED-Yを数回点滅させます。_theadを使うとLED-Y点滅時もLED-Rは点滅状態を保つ並行処理ができます。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。
pico_fc51_test_01b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, Timer
import time
import _thread
# FC-51 IR Detector _thread
#IRsens Pin
d_Pin=Pin(27, Pin.IN, Pin.PULL_DOWN) # 検知 d_Pin='L'
#OUT Pin
Y=Pin(26, Pin.OUT, value=0) #Y-LED
R=Pin(22, Pin.OUT, value=0) #R-LED
# LED-Y点滅
def blink(n, delay):
global detect
for i in range(n):
Y.high()
time.sleep(delay)
Y.low()
time.sleep(delay)
print('Y-blink done')
detect=0
#main
detect=0 # 検知
while True:
print('--------------R-blink')
for i in range(5):
if (d_Pin()==0) & (detect==0):
print('detect')
detect=1
# _thread.start_new_thread(function, args[, kwargs])
_thread.start_new_thread(blink,(10, 0.1))
R.high()
time.sleep(0.1)
R.low()
time.sleep(0.1)
関数 部分説明
FC-51が物体を検知したら、で関数blinkの引数を(10, 0.1) 10セット0.1sec点滅で動作させています。
_thread.start_new_thread(blink,(10, 0.1))
素人なので詳細はわかりませんが、Raspberry Pi Picoにはコアが2つあるそうです。そのため_threadが使えるそうです。
実行結果
結果は以下のようになりました。※Thonnyのshellに表示されます。
>>> %Run -c $EDITOR_CONTENT
--------------R-blink
--------------R-blink
--------------R-blink
detect # 検知 Y-blink
--------------R-blink
--------------R-blink
Y-blink done # Y-blink終了
--------------R-blink
detect
--------------R-blink
Y-blink done
--------------R-blink
detect
--------------R-blink
--------------R-blink
Y-blink done
--------------R-blink
detect
--------------R-blink
Y-blink done
--------------R-blink
--------------R-blink
Traceback (most recent call last):
File "", line 38, in
KeyboardInterrupt:
>>>
まとめ
Raspberry Pi Picoで赤外線障害物回避センサーと_threadの動作確認ができました。