IoT監視カメラとは?
動きがあるときだけRaspberryPiのカメラで撮影して、撮影画像をLINEに通知するシステムです。今回作成したIoT監視カメラの全体構成は以下です。
IoT監視カメラシステムの全体構成

| 1 | モーションセンサー(HC-SR501)にてモノの動きを感知 | 
| 2 | 動きを感知するとカメラで撮影する | 
| 3 | ローカルディスクに撮影した画像を保存 | 
| 4 | 監視カメラが撮影したことをLINEで通知 | 
| 5 | 携帯などのLINEアプリで撮影画像を確認 | 
モーションカメラとラズパイの接続構成
カメラはコンパクト性を重視して、ラズパイ用のカメラモジュールを使用。人感センサ―(HC-SR150)は、GPIO18端子に接続して使っています。

IoT監視カメラ(実機確認)
実際に作成したIoT監視カメラの試作機です。
ラスパイにカメラモジュールを接続して、人感センサをGPIO端子に接続しています。

お試しで、人通りがあるところに設置してみました。人感センサが反応するとLINEに通知が届きました。

プログラム(Phython)
以下は確認した際のプログラムです。
インターバル時間を設定しないと連続でLINE通知が来るので注意してください。
※LINE通知用のトークン(無料)を事前に発行してください。
- プログラムの中身
 
import requests,os
import time
import picamera
import RPi.GPIO as GPIO
# インターバル 5秒
INTERVAL = 5 
# スリープタイム
SLEEPTIME = 1
# 使用するGPIO
GPIO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)
if __name__ == '__main__':
    try:
        print ("処理キャンセルはCTRL+C")
        while True:
            # GPIO_PIN18と同値(センサーが動作を感知)
            if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
                with picamera.PiCamera() as camera:
                    #解像度の調整
                    camera.resolution = (1024, 768)
                    # 明るさの調整
                    #camera.brightness = 70
                    # ラズパイをモニターに接続していたらモニターに表示
                    camera.start_preview()
                    # カメラ撮影
                    camera.capture("picture.jpg")
                    # LineNotifyを使って撮影をINEに通知
                    #os.chdir("/home/user1/camera_iot")
                    line_notify_token = "LINE通知用のトークン"
                    line_notify_api = 'https://notify-api.line.me/api/notify'
                    message = '監視カメラの撮影通知'
                    payload = {'message': message}
                    headers = {'Authorization': 'Bearer ' + line_notify_token}
                    files = {'imageFile': open("/home/xxx/picture.jpg", "rb")}  
                    line_notify = requests.post(line_notify_api, data=payload, headers=headers, files=files)
                    time.sleep(INTERVAL) 
            else:
                time.sleep(SLEEPTIME)
    except KeyboardInterrupt:
        print("全処理終了")
    finally:
        GPIO.cleanup()
LINE通知用のトークン発行手順
- LineNotifyのサイト「https://notify-bot.line.me/my/」にアクセスして、LINEアカウントでログインします。
 - アクセストークンの発行(開発者向け)の「トークンを発行する」ボタンを押して、トークンを発行します。
 - 発行されたトークンをコピーします。
 

ラズパイとLINE通知を連携すると、便利な使い方ができそうですね。最近、家の前の水路が溢れることがあるので、水位を判定してある基準を超えるとラインに通知するシステムが出来なかと考えているのですが….面白い使い方を考えたらぜひ教えてください。


