#はじめに
Raspberry Pi(Raspbian)でモーションセンサー式の防犯カメラ的なものを作る方法です。
#必要なもの
- RaspbianがインストールされているRaspberry Pi
- Raspberry Pi用のカメラモジュール
- 赤外線モーションセンサー(HC-SR501)
- ジャンパー線(メス/メス)x3
#配線
GPIO, 5V, GNDならどこでも可ですが、今後の拡張性などを考えるとGPIOのみのピン(3, 5, 8, 10, 19, 21, 23, 24, 25以外)を使う方が無難だと思います。
この投稿では4(5V), 6(GND), 7(GPIO4)ピンを使用しています。
↓HC-SR501の配線は左から順にGND, OUT, VCC。
↓右側のダイヤルで距離、左側のダイヤルで時間を調整することができるので、使用用途と環境に合わせて調整する。(調整するのが面倒なら↓と同じにしておけばOK)
#プログラム
security_camera.py
#Import Files
import RPi.GPIO as GPIO
import picamera
import time
#GPIO Settings
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#Camera Settings
CAM_DIR = "/home/pi/python/_video/"
camera = picamera.PiCamera()
#Main
try:
while True:
if GPIO.input(4) == 1:
filename = time.strftime("%Y%m%d%H%M%S") + ".h264"
save_dir_filename = CAM_DIR + filename
camera.start_recording(save_dir_filename)
camera.wait_recording(300)
camera.stop_recording()
else:
pass
except KeyboardInterrupt:
GPIO.cleanup()
#解説
- スイッチの制御に使用する
RPi.GPIO
ライブラリをインポートする - Raspberry Piのカメラモジュールの制御に使用する
picamera
ライブラリをインポートする - 時間を取得するために使用する
time
ライブラリをインポートする - GPIOのモードをBCMに設定する(物理的なピン番号ではなく、GPIO**を使用する)
- GPIO4を入力端子に設定し、状態をプルダウン(Low)にする(Hi=ON, Low=OFF)
-
CAM_DIR
に保存先のディレクトリを設定する - PiCameraクラスのインスタンスを生成する
-
while True:
で解説9〜16の処理を無限ループさせる - センサーが動きを検知したら(GPIO4がHiになったら)動画を撮る処理を行う
-
time.strftime
でセンサーが動きを検知した時の日時を取得する -
time.strftime
で取得した日時+拡張子(.h264)をファイル名にする -
CAM_DIR
で指定したディレクトリとファイル名を連結させる -
camera.start_recording
で動画を撮る -
camera.wait_recording
で指定した時間が経過したら動画を撮る処理を終了する(括弧には秒数を入れる) -
CAM_DIR
で指定したディレクトリに動画を保存する - 解説9に遷移 or プログラムが終了するのを待つ
- Control+Cが押されたらGPIOを解放してプログラムを終了する
#プログラムを実行してみる
- プログラムを実行する
- センサーが動きを検知すると動画ファイルに記録される
- 人や動物など、動くものが映っていれば完成(Raspberry Piだと正常に再生できないので手持ちのPCにコピーして再生する)
#参考
- 「Raspberry Pi(Raspbian)で写真を撮るプログラムを作る」と組み合わせることで
センサーが動きを検知したら写真を撮るプログラム
を作ることができる - センサーの状態(Hi/Low)は目視で確認できないので、GPIOの入力値を
print
で出力しておくと調整しやすい - 動画の保存先には使い捨ての外部ストレージ(USBメモリ)などを指定した方が安全に運用できる
- 屋外に設置すると雨などの影響で壊れる可能性が高いので、屋内での運用が望ましい