LoginSignup
8
12

More than 5 years have passed since last update.

Raspberry Pi 防犯赤外線カメラ(Python編)

Last updated at Posted at 2017-01-28

我が家に設置した赤外線防犯カメラを
作成した時の覚書です。
(初期導入の内容で現在とは大分異なります)

【使用する物】

Raspberry Pi 2 Model B:アマゾン 5,562円
赤外線カメラ NoIR Camera Board 790-2811:アマゾン 4,590円
焦電人感センサ:秋月電子 400円
赤色LED(3mm):秋月電子 10円
カーボン抵抗(220kΩ):千石電商 16円

【前提条件】

・「RPi.GPIO」を導入済み
・CSIカメラポートにカメラを接続済み
・「raspi-config」にてカメラを有効にしている事
・焦電人感センサのVCCおよびGND端子を接続済みで、
 OUT端子を任意のGPIOに接続されている事(ここでは5番を使用)
・センサー検知確認用のLEDが接続されている事
 (ここでは6番ポートに抵抗を挟んで接続)

【カメラ動作チェック:コマンド】

静止画
$ raspistill -o test.jpg
 
動画
$ raspivid -o test.h264

【Pythonのカメラ制御環境】

$ sudo apt-get update
$ sudo apt-get install python-picamera

【Python単体の静止画テスト】

StillTest.py
# coding: utf-8

import picamera
import time

camera = picamera.PiCamera()

camera.led = True
camera.start_preview()
time.sleep(3)

camera.capture('test.jpg')

camera.stop_preview()
camera.led = False

camera.close()

【Python単体の動画テスト】

MovieTest.py
# coding: utf-8

import picamera
import time

camera = picamera.PiCamera()

camera.led = True
camera.start_preview()

camera.start_recording('test.h264')
camera.wait_recording(5)
camera.stop_recording()

camera.stop_preview()
camera.led = False

camera.close()

【Python単体のセンサーテスト】

SensorTest.py
# coding: utf-8

import RPi.GPIO as GPIO
import time

SLEEP_TIME = 1
INTAVAL_TIME = 1

GPIO.cleanup()
GPIO.setmode(GPIO.BCM)

SENSOR = 5
GPIO.setup(SENSOR, GPIO.IN)

LED = 6
GPIO.setup(LED, GPIO.OUT) 

intaval = time.time() - INTAVAL_TIME

while True:
#   print GPIO.input(SENSOR)
    GPIO.output(LED, GPIO.LOW)

    if( GPIO.input(SENSOR) == GPIO.HIGH ) and ( intaval + INTAVAL_TIME < time.time() ):
        intaval = time.time()
#       print "!! Detection !!"
        GPIO.output(LED, GPIO.HIGH)

    time.sleep(SLEEP_TIME)

【Pythonのセンサー&カメラ連携テスト(静止画)】

StillSensorTest.py
# coding: utf-8

import datetime

import picamera
import time

import RPi.GPIO as GPIO
import time

SLEEP_TIME = 1
INTAVAL_TIME = 1

GPIO.cleanup()
GPIO.setmode(GPIO.BCM)

SENSOR = 5
GPIO.setup(SENSOR, GPIO.IN)

LED = 6
GPIO.setup(LED, GPIO.OUT) 

intaval = time.time() - INTAVAL_TIME

camera = picamera.PiCamera()

while True:
    if( GPIO.input(SENSOR) == GPIO.HIGH ) and ( intaval + INTAVAL_TIME < time.time() ):
        intaval = time.time()

        GPIO.output(LED, GPIO.HIGH)

        camera.led = True
        camera.start_preview()
        time.sleep(1)

        NowTime = datetime.datetime.now()
        camera.capture(NowTime.strftime("%Y%m%d_%H:%M:%S") + '.jpg')

        camera.stop_preview()
        camera.led = False

        GPIO.output(LED, GPIO.LOW)

    time.sleep(SLEEP_TIME)

【残りの覚書】

・センサー検知のタイムスタンプ(Python → MySQL)
・画像の保存先を年月日フォルダに格納(Python → File)
・PHPからカメラ制御、DB&画像を参照、Python実行
 (PHP → DB or Python or Command or File)
・スマホアプリで外部から制御、参照(JavaScript → PHP)

8
12
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
8
12