検索すれば本当にたくさん情報を引き出せるけど、とりあえず記録っとく。
やりたいことは以下のとおり。
①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センサーの配線図は画像のとおり。
メス-メスのジャンパワイヤがなかったから、ブレッドボードを挟んだ形になった。
- -(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号」を作っている段階で、余ったトタンを利用して作った台に設置して動かせば完了!
・・・もっと早く気がつくべきだった。
それは夜間や暗い場合、画像が保存できないこと(しても真っ暗)になるということ。
PIRセンサーで赤外線キャッチしても、カメラが赤外線非対応だからね。
「照度センサーを買って・・・」と思ったけど、配達されるまで2~3日時間がかかりそうだから、アマゾンで「アイリスオーヤマ 乾電池式LEDセンサーライト 黒 3WAYタイプ」を購入した。
一番安かったし、目的は「動体検知で照らすこと」だったし、プライムだから明日届くし・・・。
本格的にPIRセンサーが意味わからんくなってきたけど、今回はとりあえずここまでにしとこっと。