Raspberry Pi Picoで人感センサーを使ってみる

【Raspberry Pi Pico】人感センサーの使い方

こんにちは! けい(Twitter)です。

今回は、Raspberry Pi Pico(ラズピコ)で人感センサーを使いたいという方に向けて、ラズピコでの人感センサーの使い方を紹介していきます。

必要な物

Raspberry Pi Pico

人感センサー(HC-SR501)

人感センサーとして良く使用されているHC-SR501を使います。

KKHMF HC-SR501 人体赤外線感応モジュール 人体の赤外線の感応器 [並行輸入品]
KKHMF

その他

created by Rinker
Sintron
¥343 (2023/05/26 13:50:35時点 Amazon調べ-詳細)

人感センサー(HC-SR501)について

KKHMF HC-SR501 人体赤外線感応モジュール 人体の赤外線の感応器 [並行輸入品]
KKHMF

今回使う人感センサーは、Amazonで150円程度で買えるお値打ちなものです。

白い半球の中で人体から出る赤外線を感知する仕組みで動作します。(データシート)

注意するべきなのは、このセンサーは赤外線の変化を検知します。
なので、ずっと同じ場所に人間がいてもセンサーは反応しません。人間がセンサーの前に現れたり、いなくなったりする時に反応します.

商品ページには人感センサーとだけ書いてありますが、実はモーションセンサーです.

ピン配列

写真右側から順に、VCC、OUT、GND
というピン配列となっています。

VCCには4.5Vから20Vまでの電源を接続できます。今回はラズピコに接続するので、5Vのピンに接続します。

OUTは、センサーがon(モーションを検知)のとき3.3V、offのとき0Vを出力します。

つまみ調整

センサーに回せるつまみが2つついています。

一つはセンサー感度で、センサーが感知する距離を設定できます。(3~7m)

もう一つはON時間調整で、センサーがonになった時に、onを維持する時間を調整できます。(5~200s)
例えば、ON時間調整を最大の200秒に設定した場、一度センサーがonになったら200秒間onが維持されます。つまり、200秒間OUTピンから3.3Vが出力されます。

写真の状態のつまみの方向を「左」とします。このときそれぞれが最小になります。
センサー感度が3mで、ON時間調整が5sです。

これを時計回りに回転し、「右」の状態のとき最大になります。
センサー感度が7mで、ON時間調整が200sです。

トリガーのジャンパー

先ほどのピン配置の写真を見ると、H/L切り替え端子があります。

・H:リピートトリガー
モーションが検出されるたびに、遅延タイマーが再起動されます。つまり、動きがあれば常にOUTピンから3.3Vが出力されます。

・L:シングルトリガー
動きが検出されるとすぐに出力がHIGHになります。ON時間調整によって設定された時間、HIGHを維持します。この期間中の動きは処理されず、タイマーは再起動されません。
つまり、一回動きが検出されると、ON時間調整の時間だけHIGHになり、動きがあっても自動的にLOWにもどります。

使用用途によって使い分けてください。

Raspberry Pi Picoとの接続

HC-SR501Raspberry Pi Pico
VCCVBUS (pin40)
OUTGP0 (pin1)
GNDGND (pin38)

下の画像のVBUSが5Vのピンになっています。

サンプルプログラム(MicroPython)

それでは、モーションを検知したら基板上のLEDが光るというプログラムを実行してみます。

ちなみに、人感センサーのつまみの状態は両方とも最小にしています。

from machine import Pin
import utime

# gpio 設定
pir = Pin(0, Pin.IN, Pin.PULL_DOWN)
led = Pin(25, Pin.OUT)

led.value(0)
utime.sleep(5)

# 監視の開始
while True:
    print(pir.value())
    if pir.value() == 0:
        led.value(0)
        utime.sleep(1)
    else:
        led.value(1)
        utime.sleep(6)

プログラム解説

5行目で、人感センサーのOUTピンを入力ピンとして設定しています。

入力ピンとして使う場合は、プルアップかプルダウンにする必要があります。今回はプルダウンにしました。
ラズピコの内部回路に抵抗が入っているので、プログラム上で宣言するだけで設定できます。

13行目、pir.value()で入力ピンの状態を0か1かで取得します。
0の場合はLEDをオフ、1の場合はLEDをオンにしています。

実行結果

手をかざしたときに人感センサーが反応して、基板上のLEDが光っていることが確認できます。