【Raspberry Pi Picoで自作人体感知センサ】HC-SR501を使ってみた

hc-sr501 Raspberry Pi

本記事の内容

Raspberry Pi Picoに人体赤外線感応モジュールHC-SR501を接続して、人体感知センサを作製しました。

作製自体はあっという間だったので、合わせて人体赤外線センサーの種類と仕組みについて解説します。※Raspberry Pi Picoでの使用方法を知りたい方は、本記事後半までスキップしてください。

人体感知センサーの仕組み

なぜ自動ドアは私たちが近づくと開くのでしょうか???

改めて質問されると、なかなか答えにくいですよね。ただし、誰しも子供の時に一度は疑問に感じたはずです。

詳しく調べてみますと、世間一般で普及している自動ドアの人体感知センサーは、主流となっている順に以下のようなものがあります。

光線式センサー

光の反射から人間を検知するアクティブセンサーです。近赤外線をセンサーから放出して、反射率の変化をもとに人がいるかどうかの判断をします。

デメリットとしては、人が着ている服の素材や床の材質によって、感度が落ちることがあります。

熱線式センサー

人間の体温と周囲の温度を比較して、人間を感知するパッシブセンサーです。 温度情報を電気信号として読み取るため、火災報知器にも使われています。

暑い日になると人間と周囲のモノや空気の温度に差がなくなるため、感度が落ちます。それゆえ、外向けの自動ドアには使われにくくなりました。

超音波センサー

センサーから発した超音波の反射により、人間を検知するアクティブセンサーです。

人とモノの区別がつかないため、雨や風なども検出してしまいます。また、振動によって誤動作することもあるため、それほど一般的ではありません。

赤外線センサー

人間が発する赤外線を検出して、人間を検知するパッシブセンサーです。パッシブ赤外線(Passive Infrared Ray)なのでPIRセンサーとも呼ばれます。

指向性が弱く、人やモノの具体的な位置を特定することはできません。そのため、自動ドアとしてはあまり使われず、動体検知やセキュリティ用途、自動照明などに活用されています。

人体赤外線感応モジュール「HC-SR501」

さて、ここで改めてHC-SR501について見てみましょう。

HC-SR501はPIR Sensor(赤外線センサー)に当たり、周囲の赤外線放射を検出して、検出範囲内に赤外線放射の変化があると出力がHighになります。

すなわち、人やモノが発する赤外線の量の変化を捉えて、人間を感知しています。サッカーボール状のフレネルレンズを外すと、内部にはLHI778赤外線センサーがあり、こちらが赤外線を検知しています。

検知する感度(赤外線の量の変化の閾値)は側面のつまみで調整することができます。

Raspberry Pi Picoとの配線

HC-SR501には3本のピンしかないので、つなげ方は簡単です。以下の通りに配線します。

Raspberry Pi PicoHC-SR501
㊵VBUSVCC
㉞GP28などOUT
㊳GNDGND

HC-SR501自体は非常にシンプルです。GNDをゼロ、VCCに5Vを加えると作動し、赤外線の吸光量変化があると、OUTに約3Vを出力します。したがって、人の近づいたことと離れたことを検知します。

逆に考えると、人が近づいた状態で動かなくなると、赤外線の吸光量変化がなくなるので検知されません。超スローモーションで動くと検知されないというのは、人体赤外線感応モジュールの欠点かもしれません。

hc-sr501-wired

HC-SR501にはピンの名称が書かれていないので、データシートからピンを確認しました。左下にオレンジ色の四角い部品(何かわからなくずすみません)が見える向きにしたときに、右から順にVCC、OUT、GNDとなります。

反対側のつまみで、センサー感度とON時間を調整できます。私の場合は、細かな動きも検知したいので、センサー感度は中くらい、ON時間は最小に設定しました。

hc-sr501-setting

検出閾値は置く場所などに応じて設定すればいいと思います。ただし、ON時間に関しては「動態を検知してからOUTに3Vの信号を流し続ける時間」なので、あまり長くするメリットが思い浮かびませんでした。

動態検知はタイムリーにできることに越したことはありません。

プログラムコード

こちらは、メタエレ実験室様のコードを参考にさせていただきました。個人的には読み取り間隔が短いほうが細かな動作も検知できるので、utime.sleep(0.5)としています。

from machine import Pin
import utime

pir = Pin(28, Pin.IN, Pin.PULL_DOWN)
led = Pin(25, Pin.OUT)

led.value(0)

while True:
    print(pir.value())
    if pir.value() == 0:#検知
        led.value(0)
        utime.sleep(0.5)
    else:
        led.value(1)
        utime.sleep(0.5)

なかなか検知してくれない時は、センサー感度を上げるか、手のひらから赤外線を発するイメージで、手を近づけてみてください。

まとめ

「光線式」、「熱線式」、「超音波」、「赤外線」の4種類の人体感知センサーの仕組みとそれぞれのメリット・デメリットをまとめました。HC-SR501はPIR Sensor(赤外線センサー)に当たり、周囲の赤外線放射を検出して、人間を検知します。

HC-SR501は非常にシンプルな仕組みなので、Raspberry Pi Picoで使用する際は、十数行のコードで完結します。ぜひ、セキュリティ用途などの人体感知センサーに活用してみてください。

コメント