Takahiro Today

なんとなくね、ログってみるさね

DIY IT Raspberry Pi 電子工作

Raspberry PiとPIRセンサーで監視カメラ

投稿日:2014年11月28日 更新日:

検索すれば本当にたくさん情報を引き出せるけど、とりあえず記録っとく。
やりたいことは以下のとおり。

①10秒毎にカメラで画像保存
②PIRセンサーで動きがあったらメールで通知

本来なら②で撮影も兼ねればいいんだけど、②の動作に不安があったから、結局ずっと画像を保存することにした。②は通知があった時間を知って、①から同じ時間帯の画像を見る・・・的な使い方なのかな。ちょっと馬鹿っぽいけどそうした。
基本的に練習がてら Python でプログラムする。

画像を10秒毎に保存

まずカメラは Raspberry Pi 用のカメラモジュールを利用。
カメラを接続して、以下コマンドで「Enable Camera」を「Enable」に設定。

sudo raspi-config

画像の解像度を 1200px ✕ 900px とすると大体800KBくらいのサイズになりそうだったから、画像サイズは 1200px ✕ 900px 。
1日に必要な容量は以下のような感じで、大体 7.0GB 見ておけば問題ないか。

  • 1分 4.8MB
  • 1時間 288MB
  • 1日 6.9GB

ファイル名は年月日時分秒として、「data」ディレクトリ内にズラッと保存。
Pythonのソースコードは以下。

import time
import picamera
import datetime

while True:
     d = datetime.datetime.today()
     date = d.strftime("%Y%m%d-%H%M%S")
     with picamera.PiCamera() as camera:
          camera.resolution = (1200,900)
          camera.start_preview()
          time.sleep(10)
          camera.capture('data/' + date + '.jpg')

これを以下のコマンドで実行しておけば、ログアウト後も実行されたまま。

nohup python ./●●●●●.py > result &

メール発信の準備

Raspberry Pi でメールを送信するために、送信メールサーバとmailコマンドを利用。
Postfix と mailutils をインストール。
メールは Gmail から送信させる。

sudo apt-get install postfix mailutils

Postfix の設定。

vi /etc/postfix/main.cf

alias_database = hash:/etc/aliases
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/isppasswd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter =

上記「smtp_sasl_password_maps」で設定した設定ファイルを作成。
●●●●● = Gmailアカウント
▲▲▲▲▲ = Gmailアカウントのアプリケーション固有のパスワード

vi /etc/postfix/isppasswd

[smtp.gmail.com]:587 ●●●●●@gmail.com:▲▲▲▲▲

そしてハッシュ化

postmap /etc/postfix/isppasswd

このまま Postfix を起動すると IPv6 の警告がでるため、「/etc/postfix/main.cf」の「inet_protocols」を以下のように設定。
inet_protocols = ipv4

Postfixを再起動して、これでいつでもメールを送信可能になった。

PIRで動体検知

購入してあった「Parallax PIRセンサー」を使って、動体検知を行う。
Raspberry Pi と PIRセンサーの配線図は画像のとおり。

PIRセンサー ブレッドボード

メス-メスのジャンパワイヤがなかったから、ブレッドボードを挟んだ形になった。

  • -(GND) → 25 pin
  • +(Vin) → 1 pin
  • OUT(Output) → 21 pin

プログラムとしては、センサーが一度動いたら、5分(300秒)時間が経過してから再度センサーが働く形をとった。
時間を設けないと、人なり動きがあった場合にずっとセンサーが動いていることになって、センサーが働いたらメールを送る仕組みにするので、ずっとメールを送ることになっちゃうからね。

Pythonのソースコードは以下。

import time
import os
import RPi.GPIO as GPIO

INTAVAL = 300
SLEEPTIME = 5
SENSOR_PIN = 21

GPIO.cleanup()

GPIO.setmode(GPIO.BOARD)
GPIO.setup(SENSOR_PIN, GPIO.IN)

st = time.time() - INTAVAL

while True:
     if(GPIO.input(SENSOR_PIN) == GPIO.HIGH) and (st + INTAVAL < time.time()):
          st = time.time()
          os.system('echo NAIYOU!! | mail -s TITLE!! ●●●@gmail.com')
     time.sleep(SLEEPTIME)

これも画像保存ロジックと同様、nohupで実行しておく。

nohup python ./●●●●●.py > result &

重要なことに気がついた

コーヒー焙煎時のチャフと煙の軽減枠 試作2号」を作っている段階で、余ったトタンを利用して作った台に設置して動かせば完了!

Raspberry Pi で監視カメラ

・・・もっと早く気がつくべきだった。
それは夜間や暗い場合、画像が保存できないこと(しても真っ暗)になるということ。
PIRセンサーで赤外線キャッチしても、カメラが赤外線非対応だからね。
「照度センサーを買って・・・」と思ったけど、配達されるまで2~3日時間がかかりそうだから、アマゾンで「アイリスオーヤマ 乾電池式LEDセンサーライト 黒 3WAYタイプ」を購入した。
一番安かったし、目的は「動体検知で照らすこと」だったし、プライムだから明日届くし・・・。
本格的にPIRセンサーが意味わからんくなってきたけど、今回はとりあえずここまでにしとこっと。

-DIY, IT, Raspberry Pi, 電子工作
-, ,

執筆者:

関連記事

Raspberry Pi の監視カメラのセンサーにスイッチをつける

以前設置した『Raspberry Pi で監視カメラ』の、PIRセンサー機能オンオフが面倒くさいから、スイッチをつけてみた。 現在は、席を外す前にシェルでつないでPIRセンサーをオンにして、席に戻った …

TOTO TMG40CRX の水をしっかり止める

自宅で利用しているTOTOの「TMG40CRX」が、ダラダラと水を流していることに気がついた。 少量ではあるけど水の流れるあとが付いてしまうし、そもそも水がもったいない気がするし・・・。 プロにお願い …

Redmine 2.5.2 から 2.6.0 にアップグレード

仕事で使っているRedmineの2.6.0がリリースされたので、現在利用している2.5.2からアップグレードした。 検索すればいろいろでてくるし、基本的な手順は公式に掲載されているけど、自分のメモ的な …

Raspberry Pi で赤外線送受信

赤外線学習リモコンのサイトと日経LINUXを参考にさせていただき、Raspberry Piで家電の制御をテストしてみた。 本当にやりたかったのは【部屋に入ったときに部屋の明かりがつく】だ。 基本的には …

DCモーターの動作を覚えた

DCモーターをArduinoで動かしてみる。 を参考に、DCモーターの制御をやってみた。 電源は秋月電子通商で購入したブレッドボード用マイクロBメスUSBコネクタDIP化キットを使った。 よくギターの …