稼働中

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外観
FC-51が障害物(赤外線を反射する物体)を検知すると障害物LED(緑)が点灯します。電源3.3Vでは障害物との距離は~10cm程度でした。(電源を5Vにすれば、もう少し長くできます。実測では20cmくらいでした。)
目視では見えませんが、デジカメなら赤外LEDの発光が確認できます。
FC-51 IRセンサー

接続例

FC-51の電源電圧は3.3V~5.0VなのでRaspberry Pi Picoの3.3Vと接続できます。
FC-51のOUTをGP27と接続しました。GP22、GP26にLEDを接続しています。
検知したらGP26のLEDを点滅させます。
IRセンサー 接続図

スクリプト

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の動作確認ができました。