9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【RaspberryPi】 人感センサーを使って検知したことをプログラムで出力する

Last updated at Posted at 2019-08-21

-

毎日試しては更新するように心がけます:walking_tone1:

この記事について

今回はRaspberryPのスターターキットを購入したので色々と遊んでみる
OSOYOO(オソヨー) Raspberry Pi... https://www.amazon.jp/dp/B01M6ZFNSS?ref=ppx_pop_mob_ap_share

まずは人感センサー
ラズパイに人感センサーを繋いで赤外線で人、物を検知する。
それをプログラム上に出力する。

ネットの記事を何個か見て試してみたが上手くいかず少しつまずいた

動作環境

  • Raspberry Pi Model B+
  • Python3.7.4

用意するもの

  • Raspberry Pi Model B+
  • 電源アダプター(5V/3000mA)
  • 人感センサー(HC-SR501 PIR motion sensor)
  • ジャンパワイヤ 3本

センサー

sensor.jpg

動作電圧 DC5V - 12V
出力 LOW - 0V , HIGH - 3.3V
遅延時間 調整可能 (0.3-18秒)
遮断時間 0.2秒
検出範囲 7m未満 120度未満
動作温度 -15 ~ 70度
トリガーモード LOWは繰り返し×

トリガーモードがよく理解できなかった
自分なりの解釈は

遅延時間が5秒の場合
LOWは、検知し遅延時間中にさらに検知してもその検知はトリガーされない

HIGHの場合は検知し遅延時間中にさらに検知したら
直前に検知した遅延時間がトリガーされる

うまく説明できないので
10443648-A0CB-44D4-B2BE-0B45ACFDD07F.jpeg

要するにLOWは延長してくれないけどHIGHは延長してくれるっていう理解でいいのかな

はい、次

プログラムを書く

human_sensor.py
import RPi.GPIO as GPIO
import time

PIN = 14

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.IN)

try:
    print ('-----Start-----')
    n = 1
    while True:
        if GPIO.input(PIN) == GPIO.HIGH:
            print("{}".format(n) + "回目検知")
            n += 1
            time.sleep(2)
        else:
            print(GPIO.input(PIN))
            time.sleep(2)
except KeyboardInterrupt:
    print("Cancel")
finally:
    GPIO.cleanup()
    print("-----end-----")

感度、遅延時間の調節

少しいじってみた感じ感度調節の方はあまり差がわからなかった
けど手をかざせばほとんど反応するから精度は悪くないと思う。

問題は遅延時間

118643BF-B510-4CB1-8939-5F45E874393B.jpeg

遅延時間の範囲は0.3秒-18秒。

試しに写真の位置に合わせて測ってみようと思い計測(だいたい5-7秒くらいかなーと予測)

結果…
56秒

あまり意味がわからなかったのでとりあえず左に回してもう一度計測(数値で言えば0の状態)

結果は遅延無し
これは思ったように動いた。


計測する

|||
|:-----------------|------------------:|:------------------:|
| 1回目| 56秒 |
| 2回目| 52秒 |
| 3回目| 56秒 |
| 4回目| 55秒 |
| 5回目| 52秒 |
| 6回目| 56秒 |
| 7回目| 55秒 |
| 8回目| 52秒 |
| 9回目| 51秒 |
| 10回目| 56秒 |

計測してもよくわかんないけど大体50秒-56秒遅延されてた。
ちなみに途中で計測は終了したが右にいっぱい(数値で言えば100の状態)回して止めた時点では2500秒(41分)だった。
もしかしたら途中で誤検知してしまったかもしれないがさっきの写真くらいの位置で平均して50秒だったら右いっぱい回したら永遠に検知状態かも。

*なぜこうなるのかわかる方がいれば是非教えてください:bow_tone1:

動かしてみる

human_sensor_ブレッドボード.jpg

追加
ジャンパワイヤ +2本
ブレッドボード
抵抗 220Ω
LED 2V 10mA

ピン ポート
2 5V 5V(OUT)
6 GND GND
8 14 制御(UCC)
10 15 制御(UCC)
14 GND GND

わかりやすいように指を検知したらLED光らせてみる

*LEDの光らせ方は前回の記事に書いてます。

human_led_sensor.py
import RPi.GPIO as GPIO
import time

PIN = 14
LED = 15 # 追加

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.IN)
GPIO.setup(LED, GPIO.OUT) # 追加

try:
    print ('-----Start-----')
    n = 1
    while True:
        if GPIO.input(PIN) == GPIO.HIGH:
            print("{}".format(n) + "回目検知")
            GPIO.output(LED, GPIO.HIGH) # 追加
            n += 1
            time.sleep(2)
            GPIO.output(LED, GPIO.LOW) # 追加
        else:
            print(GPIO.input(PIN))
            time.sleep(2)
except KeyboardInterrupt:
    print("Cancel")
finally:
    GPIO.cleanup()
    print("-----end-----")

検知してから2秒後にLEDを消すようにした。

こんな感じ

212855F5-0EEA-4AF6-8E7B-AA147C387292.gif

まとめ

  • 多少反応は悪いがある程度検知する
  • 遅延時間が上手く動かなかったがそれ以外はある程度動いた
  • 調べてる段階では難しくてできるかなーと思ってたけど実際に動かしてみたらつまずきはしたがやり切れた。

今度は監視カメラのように物体を検知した時にカメラを起動して写真をとるようにしたい。

参考記事

OSOYOO-HC-SR501 PIRモーションセンサー
OSOYOO-Raspberry Piで人体感知センサーモジュールを作動し、LEDを点灯する

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?