【Raspberry Pi】人感センサー(HC-SR501)の使い方

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

今回は,Raspberry Piで人感センサーを使う方法についてまとめていきたいと思います.

人感センサーは他のものと組み合わせると面白いものが作れるので,ぜひ使えるようにしたいセンサーです.

人感センサーについて

HC-SR501

今回使う人感センサーは,Amazonで150円で買えます.結構お値打ちの商品です.
(私は,大須の店で580円で買いました(泣))

白い半球の中で,人体から出る赤外線を感知する仕組みです.データシート

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

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

ピン配置

私が買った商品には,このような紙にピン配置がまとめられていました.

右側がVcc,真ん中がOUT,左側がGND
というピン配置になっています.

Vccは4.5~20Vです.Raspberry Piで使う場合は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で遊んでみる

回路構成

人感センサーの使い方を学ぶために,簡単な回路を組んでみましょう.

fritzingで人感センサーがなかったので,上の画像のトランジスタを人感センサーに見立ててください.

gpio17に人感センサーのOUT端子,gpio18にLEDの+端子を繋げます.

サンプルコード

上の回路で人感センサーを試してみるサンプルコードをpythonで作りました.

GPIOは,pigpioライブラリを用います.なので,サンプルコードを実行する前に次のコマンドを実行してください.

$ sudo pigpiod

コマンドを実行したら,以下のpythonコードを実行してみてください.

import pigpio
import time

GPIO_IN = 17   
GPIO_OUT = 18  
pi = pigpio.pi()
pi.set_mode(GPIO_IN, pigpio.INPUT)
pi.set_mode(GPIO_OUT, pigpio.OUTPUT)
pi.set_pull_up_down(GPIO_IN, pigpio.PUD_DOWN)
pi.write(GPIO_OUT, 0)

try:
    while True:
        DATA = pi.read(GPIO_IN)
        print(DATA)
        if DATA:
            pi.write(GPIO_OUT, 1)
        else:
            pi.write(GPIO_OUT, 0)
        time.sleep(0.5)
        
except KeyboardInterrupt:
    pi.write(GPIO_OUT, 0)
    pi.stop()

動作確認

サンプルコードでは,
人感センサーがHIGHのとき,LEDが光る.
人感センサーがLOWのとき,LEDの光を消す.

というようなプログラムが動いています.

プログラムを実行中に,手などを動かしてみてLEDが光れば正常に動いています.人感センサーの出力は,コマンドライン上で’0’または’1’で確認することもできます.

また,Ctrl+Cでプログラムを中断することができます.

左がLOWの状態で,右がHIGHの状態です.
出力値がLOWで0V,HIGHで約3.3V出ていることが分かります.

まとめ

人感センサーは,様々な場所で用いられています.トイレ,夜道のライト,etc..

トイレに長時間いると,勝手にライトが消える経験をしたことはないでしょうか.あの現象は人感センサーはモーションセンサーであるためです.
長時間同じ体勢でいると,赤外線量の差分がなくなって,LOWになってしまいます.

なので,トイレでライトが消えたら激しく体を動かして,センサーにアピールしてみてくださいね.
ではまた!

今回使用した物まとめ

created by Rinker
Raspberry Pi
¥7,282 (2021/04/11 20:57:04時点 Amazon調べ-詳細)
created by Rinker
Sintron
¥298 (2021/04/11 15:48:05時点 Amazon調べ-詳細)