稼働中

Raspberry Pi Pico(s_22)赤外線センサー 用モジュール _thread

IRセンサー FC51c.py

IRセンサーは物体、遮蔽検知センサーです。以後はFC-51と記載する場合があります。
Raspberry Pi PicoでIRセンサーモジュールを使う自作の’FC51c.py’を作成しました。
IRセンサーが検知したらGPIO出力ピンを’H’にします。_threadを使います。
記事d_28を元に作成しています。’FC51c.py’は末尾にあります。使い方だけを記載します。

使い方

■ ファイル転送
Raspberry Pi Picoへ’FC51c.py’を送った後でimportして使います。
※FC51c.pyの末尾に、使用例(FC51c_ex.py)の## example以降をコピペ追加しても動作確認できます。
■ メソッド
‘FC51c’をimportすると「Detect」のメソッドが使えるようになります。

FC51(d=27,lo=26)で初期化します。
d:FC-51のOUTを入力するGP番号です。デフォルトはGP27です。
lo:FC-51の検知後にPicoの出力するGP番号です。デフォルトはGP26です。
ここでは記事d_28と同じくGP26にLEDを接続しています。
(01)Detect(arg=1)
FC-51の検知後にPicoが出力する時間(保持)です。単位はsecです。
デフォルトは1secになります。

使用例

FC-51の動作を確認します。記事d_28と同様に接続しています。
以下の動作例は、GP22出力でLED-Rを点滅を繰り返していますが、FC-51で人体検知するとGP26出力でLED-Yが5sec点灯します。その間もLED-Rを点滅動作しています。LED-R点滅15セット繰り返しで停止します。
動作がわかるようにタイマー時間など、Thonnyのshellに表示させています。


FC51c_ex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin
import time
from FC51c import FC51

## example
R=Pin(22, Pin.OUT, value=0)  #R-LED

a=FC51(d=27,lo=26)   # instance IRsens FC-51

cnt=0
#detect=0   # 検知
while True:    
    print('--------------blink')
    for i in range(5):        
        a.Detect(5)     #Ton-timer(sec) Y-LED点灯時間
        R.high()
        time.sleep(0.1)
        R.low()
        time.sleep(0.1)        
    cnt=cnt+1
    if cnt>=15:                     # R-LED点滅セット回数
        print('----------------end')
        break

実行結果

実行すると以下のようになりました。※Thonnyのshellに表示されます。


>>> %Run -c $EDITOR_CONTENT
--------------blink         # LED-R点滅15セット開始
--------------blink
detect                      #検知 LED-Yが5sec点灯
--------------blink
--------------blink
--------------blink
--------------blink
Y-OFF time-up               # LED-Y OFF
--------------blink
--------------blink
detect
--------------blink
--------------blink
--------------blink
--------------blink
Y-OFF time-up
--------------blink
--------------blink
detect                      #検知 LED-Yが5sec点灯
--------------blink
----------------end         # LED-R点滅15セット終了
>>> Y-OFF time-up           # 残り時間後 LED-Y OFF

FC-51モジュール用


FC51c.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin
import time
import _thread

# FC-51 IR Detector  _thread
class FC51:
    def __init__(self,d=27,lo=26):        
        #IRsens Pin
        self.d_Pin=Pin(d, Pin.IN, Pin.PULL_DOWN)  # PIR OUT
        #OUT Pin
        self.lo_Pin=Pin(lo, Pin.OUT, value=0)  #Y-LED        
        self.detect=0 # 検知

    def action(self,ton): #on-time
        self.lo_Pin.high()
        time.sleep(ton)
        self.lo_Pin.low()
        print('Y-OFF time-up')         # ----- 確認用
        self.detect=0
    #arg=ton    
    def Detect(self,arg=1):
        if (self.d_Pin()==0) & (self.detect==0):            
            print('detect')            # ----- 確認用
            self.detect=1
            # _thread.start_new_thread(function, args[, kwargs])
            _thread.start_new_thread(self.action,(arg,))