Raspberry Pi(Raspbian)でモーションセンサー式の防犯カメラ的なものを作ってみる


はじめに

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()

解説

  1. スイッチの制御に使用するRPi.GPIOライブラリをインポートする
  2. Raspberry Piのカメラモジュールの制御に使用するpicameraライブラリをインポートする
  3. 時間を取得するために使用するtimeライブラリをインポートする
  4. GPIOのモードをBCMに設定する(物理的なピン番号ではなく、GPIO**を使用する)
  5. GPIO4を入力端子に設定し、状態をプルダウン(Low)にする(Hi=ON, Low=OFF)
  6. CAM_DIRに保存先のディレクトリを設定する
  7. PiCameraクラスのインスタンスを生成する
  8. while True:で解説9〜16の処理を無限ループさせる
  9. センサーが動きを検知したら(GPIO4がHiになったら)動画を撮る処理を行う
  10. time.strftimeでセンサーが動きを検知した時の日時を取得する
  11. time.strftimeで取得した日時+拡張子(.h264)をファイル名にする
  12. CAM_DIRで指定したディレクトリとファイル名を連結させる
  13. camera.start_recordingで動画を撮る
  14. camera.wait_recordingで指定した時間が経過したら動画を撮る処理を終了する(括弧には秒数を入れる)
  15. CAM_DIRで指定したディレクトリに動画を保存する
  16. 解説9に遷移 or プログラムが終了するのを待つ
  17. Control+Cが押されたらGPIOを解放してプログラムを終了する

プログラムを実行してみる

  1. プログラムを実行する
  2. センサーが動きを検知すると動画ファイルに記録される
  3. 人や動物など、動くものが映っていれば完成(Raspberry Piだと正常に再生できないので手持ちのPCにコピーして再生する)

参考

  • Raspberry Pi(Raspbian)で写真を撮るプログラムを作る」と組み合わせることでセンサーが動きを検知したら写真を撮るプログラムを作ることができる
  • センサーの状態(Hi/Low)は目視で確認できないので、GPIOの入力値をprintで出力しておくと調整しやすい
  • 動画の保存先には使い捨ての外部ストレージ(USBメモリ)などを指定した方が安全に運用できる
  • 屋外に設置すると雨などの影響で壊れる可能性が高いので、屋内での運用が望ましい