稼働中

Raspberry Pi Pico(d_27)HC-SR501 人体センサー

HC-SR501 Timer動作

HHC-SR501 PIR MOTION DETECTOR は焦電型赤外線センサ(パイロセンサ)です。
動きのある人体を検知します。静止していると検知できません。
※micro:bitの記事e_29からRaspberry Pi Picoで使えるように修正等をしました。machineのクラスTimerを使ってみます。

外観

HC-SR501の外観です。
ドームはフレネルレンズらしいです。<100°を検出するそうです。
人体検知の感度と検出後の出力保持時間を可変抵抗で調整できます。感度は検知する距離で3m~7m、保持時間は3秒~5分だそうです。
HC-SR501 外観
HT7133-1は電源ICでLDO 3.3Vです。HC-SR501のOUT信号は3.3Vです。
BISS0001はPIR Motion Detector ICだそうです。
HC-SR501 裏面

接続例

HC-SR501の電源電圧は5V~20Vです。5Vの別電源を接続しました。
outputは3.3VなのでなのでRaspberry Pi Picoと接続できます。
outputをGP27に接続しました。
通常動作はGP22に接続したLED-Rを点滅させます。
人体センサの検知でGP26に接続したLED-Yを保持時間ONさせます。
この時もLED-Rが点滅は並行して動作させます。
HC-SR501 接続例

スクリプト

HC-SR501の動作を確認します。
可変抵抗で保持時間変更できますが、正確には設定し難いです。
そのため、人体検知後の保持時間をmachine.Timer()を使って任意に設定できるようにしたいと思います。
HC-SR501の保持時間を最小にしておきます。
スクリプトは以下のようにしました。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。


pico_HC-SR501_test_01b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, Timer
import time
# HC-SR501 PIR Motion Detector  タイマーセット
# IN   SR501 OUT
d_Pin=Pin(27, Pin.IN, Pin.PULL_DOWN)

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

# callback hold-off
def h_off(t):
    global hold
    hold=0
    Y.low()                          # Y(0)でも可
    ut=time.ticks_ms()
    print('hold off  ticks=', ut-st) # hold時間確認用

# main
tim=Timer()     # machine.Timer class
hold=0          # 検知保持
while True:
    # 保持タイマー並行動作
    if (d_Pin()==1) & (hold==0):
        print('detect')
        hold=1
        Y.high()    # Y(1)でも可
        #保持時間5秒  period(msec)
        tim.init(period=5000, mode=Timer.ONE_SHOT, callback=h_off)
        st=time.ticks_ms()   # hold時間の確認用
    
    print('d_Pin=%1d'%d_Pin(),'LED=%1d'%Y())
   
    # 通常LED点滅動作 0.2secx 5 
    print('--------------blink')
    for i in range(5):
        R.high()
        time.sleep(0.1)
        R.low()
        time.sleep(0.1)

実行結果

結果は以下のようになりました。※Thonnyのshellに表示されます。
HC-SR501検知後の出力時間(保持)は5secです。タイマー動作が確認できました。


>>> %Run -c $EDITOR_CONTENT
d_Pin=0 LED=0
--------------blink         # 概ね1sec間隔
d_Pin=0 LED=0
--------------blink         # 概ね1sec間隔
detect                      # 検知
d_Pin=1 LED=1               # OUT(1),LED-Y-ON
--------------blink
d_Pin=0 LED=1               # 未検知, LED-Y-ON 保持
--------------blink
d_Pin=0 LED=1               # 未検知, LED-Y-ON 保持
--------------blink         # 以下--省略
d_Pin=0 LED=1
--------------blink
d_Pin=0 LED=1
--------------blink
hold off  ticks= 5000       # 保持時間 5000msc
d_Pin=0 LED=0               # 未検知, LED-Y-OFF
--------------blink         # 以下--省略
d_Pin=0 LED=0
--------------blink
detect                      # 再検知
d_Pin=1 LED=1
--------------blink
d_Pin=0 LED=1               # 未検知 LED-Y 保持
--------------blink         # 以下--省略
d_Pin=0 LED=1
--------------blink
d_Pin=0 LED=1
--------------blink
d_Pin=0 LED=1
--------------blink
hold off  ticks= 5000
d_Pin=0 LED=0               # 未検知, LED-Y-OFF
--------------blink         # 以下--省略
d_Pin=0 LED=0
--------------blink
d_Pin=0 LED=0
--------------blink
d_Pin=0 LED=0
--------------blink
KeyboardInterrupt: 
>>> 

まとめ

Raspberry Pi Picoで人体センサ HC-SR501とタイマー動作を確認しました。