サイトアイコン アラコキからの Raspberry Pi 電子工作

Raspberry Pi 監視カメラを構築し遠隔監視が出来るようにする

Raspberry Pi ノウハウと作品集
自宅の電子工作ラボへの入室者を記録し、
監視結果をWebで閲覧できるようにした。
 
使用した部品
Raspberry Pi カメラモジュール:秋月電子通商 3,400 円
Parallax PIRセンサー RevA:秋月電子通商 800 円
 
完成した監視カメラ。
 
以下、Raspberry Pi による監視システムの構築要領。 
 

 

スポンサー リンク

 

 
 
1. カメラモジュールの準備
 
Raspberry Pi Camera Board を使用した。

 sudo raspi-config
で ”5.Enable Camera”を選択し、カメラのサポートを”Eanable”にする。

2. Python でカメラモジュールが利用できるようにする
 
Python-picamera パッケージのインストール

 sudo apt-get install python-picamera

3. 電子回路の作成
 

Parallax PIRセンサー RevA を使用。

赤外線人体検知センサー回路図 。

何も検知していないとき→0V 検知したとき→3.3V出力。

4. 検知したら写真を撮影するプログラムの作成
 

Python を使って、センサーで検知したら写真を撮影するプログラムを作る。
プログラム名:camera01.py

#! /usr/bin/env /usr/bin/python
# -*- coding: utf-8 -*-
 
import picamera
import time
import RPi.GPIO as GPIO
 
PICTURE_WIDTH = 640
PICTURE_HEIGHT = 480
SAVEDIR = "/usr/share/nginx/www/camera/pictures/"
 
INTAVAL = 600
SLEEPTIME = 5
 
SENSOR_PIN = 9
 
GPIO.cleanup()
 
GPIO.setmode( GPIO.BCM )
GPIO.setup( SENSOR_PIN, GPIO.IN )
 
cam = picamera.PiCamera()
cam.resolution = ( PICTURE_WIDTH, PICTURE_HEIGHT )
 
st = time.time() - INTAVAL
 
while True:
    if ( GPIO.input(SENSOR_PIN) == GPIO.HIGH ) and (st + INTAVAL < time.time() ):
        st = time.time()
        filename = time.strftime( "%Y%m%d%H%M%S" ) + ".jpg"
        save_file = SAVEDIR + filename
        cam.capture( save_file )
     
    time.sleep( SLEEPTIME )
import picamera → カメラモジュールライブラリーの読み込み
PICTURE_WIDTH = 800 → 撮影する写真の解像度
PICTURE_HEIGHT = 600 → 撮影する写真の解像度
SAVEDIR = "/usr/share/nginx/www/camera/pictures/"
  → 撮影した写真の保存先
  → nginx の www 公開フォルダーの中とした
INTERVAL = 600 → 次に写真を撮影するまでの時間間隔(秒)= 10分
SLEEPTIME = 5 → センサーをチェックする間隔(秒)
SENSOR_PIN = 9 → PIRセンサーを接続するGPIO番号

 
撮影した写真の保存先フォルダー作成。
 sudo mkdir -p /usr/share/nginx/www/camera/pictures
→ -p:親ディレクトリとサブディレクトリを同時に作成。

5. 撮影された写真をWebで見れるようにする
 

あらかじめWebサーバーの設定が必要。(2-1. nginxでのWebサーバーを参照。)
閲覧用のWebページをPHPを使って作る。作成したプログラムを index.php という名前で
  /usr/share/nginx/www/camera にコピーする。

PHPプログラム

<?php
$IMAGE_DIR = "pictures/";
 
$PAGE_TITLE = "監視結果一覧表";
 
$LIST_TEMP = "<li><a href="<!--URL-->"><!--NAME--></li>";
 
$HTML_BASE =<<<EOT
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title><!--PAGE_TITLE--></title>
<head>
<body>
    <h1><!--PAGE_TITLE--></h1>
    <ul>
<!--LINK_LIST-->
    </ul>
</body>
</html>
EOT;
 
$dirhl = opendir($IMAGE_DIR);
while ( false !== ( $file_list[] = readdir($dirhl) ) );
closedir($dirhl);
 
rsort($file_list);
 
$list_buf = "";
foreach ( $file_list as $target) {
    if ( preg_match("/jpg$/", $target ) ) {
        $date = preg_replace("/([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9]).jpg/","$1年$2月$3日 $4時$5分$6秒",$target);
        $buf = str_replace("<!--NAME-->",$date,$LIST_TEMP);
        $buf = str_replace("<!--URL-->",$IMAGE_DIR . $target ,$buf);
        $list_buf .= $buf;
    }
}
 
$output_html = str_replace( "<!--PAGE_TITLE-->", $PAGE_TITLE, $HTML_BASE);
$output_html = str_replace( "<!--LINK_LIST-->", $list_buf, $output_html );
 
print $output_html;

 

6. 起動と閲覧
 

camera01.py プログラムの実行
  sudo python camera01.py
保存された写真のファイル名の調べ方
  ls /usr/share/nginx/www/camera/pictures/
保存された画像ファイルの閲覧要領
  gpicview /usr/share/nginx/www/camera/pictures/xxxxxxxx.jpg
保存された画像をWebで見る
  http://192.168.xx.yyy/camera/index.php

監視結果一覧表をブラウザで照会。

赤外線で人体検知をして撮影した画像が、Webで見れる。
Raspberry Pi で、『監視システム』が簡単に構築できる。

 
 
参考:Raspberry Pi 気象情報をスマホにメールで送信する
 
参考:Raspberry Pi 気象情報をキャラクタLCDに表示
 

以上。
(2014.12.31)

 

 

スポンサー リンク

 

             

 

 

 
モバイルバージョンを終了