概要
RaspberryPi2 と PIRモーションセンサ から動態を検知した/していないをプログラムで取得します。
前提
- raspberryPiのモデルはraspberryPi2 modelB v1.1
- モーションセンサーはPIRモーションセンサ
- 使う言語はpython3
- RaspberryOS
Raspberry Pi OS (32-bit) Lite
Minimal image based on Debian Buster
Version:May 2020
Release date:2020-05-27
Kernel version:4.19
-
raspberryPiが起動する状態である。
-
常に検知範囲に動体があるので、動体が無いことが異常とする。
常にセンサーが動体を検知していることが前提で、
検知しなくなった(対象物が止まっている)ことを検知するプログラムです。
e.g. 常に動作しているファンの停止を検知する。
-
センサーは動体を検知し続ける事はできない。
センサーの検知タイミングなのか何なのか、
動体があっても検知しないケースがあるようです。
なので一定回数以上動体を検知しないときに何かアクションをすることを想定しています。
e.g. 動体が無いことを20回以上検知する。
準備
pip3のインストール
sudo apt install python3-distutils
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
RPi.GPIOのインストール
sudo apt install python3-dev
pip3 install RPi.GPIO
センサーとraspberryPiの接続
以下の 公式から取得したGPIOのPINアサイン を参考にして
ジャンパワイヤで以下のように接続する。
- raspberryPiの2番 5V power と センサーのVCC
- raspberryPiの6番 ground と センサーのGRD
- raspberryPiの12番 GPIO 18 と センサーのout
センサーで値を取得する
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
# GPIOの18を指定
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
count = 0
while True:
sleep(1)
# センサーが動体を検知すると1が返ってくる。
if GPIO.input(18) == 1:
count = 0
print("yes")
# 1が返ってこない場合が20回を超えるとyabeeeeeを出力する。
else:
count += 1
print("no good")
if count > 20:
print("yabeeeee")
else:
pass