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,))