おもちゃラボ

Unityで遊びを作ってます

Raspberry Piで猫の定点カメラ(監視カメラ)を作る

旅行に出かけるときや外出時など、猫がちゃんと一人でお留守番できてるかどうか心配ですよね〜。そこで、Raspberry Pi zeroを使って猫を定点観察する定点カメラ(監視カメラ)をつくってみました。

今回は、30分ごとにRaspberry Piのカメラで撮影した室内画像をSlackに投稿するようにしてみました。

f:id:nn_hokuson:20171011202941p:plain

今回の記事の内容は次の通りです。

まずは機材を準備する

今回使用したのはRaspberry Pi zeroとスターターセット、Raspberry Pi用のカメラモジュールです。Raspberry PiはAmazonではボッタクリ価格(元値は600円程度)なので、スイッチサイエンスなどで販売されるのを待ったほうが良いと思います。

www.switch-science.com

Raspberry Pi Zero(W)の場合は無線モジュールが内蔵されているので、スターターキットは不要かもしれません。

[asin:B01LZI7IAY:detail]

また、Raspberry Pi zeroでカメラモジュールを使う場合は、次のどちらかの方法を利用します。

  1. ラズパイゼロ用のカメラモジュールを使う
  2. ラズパイ用のカメラモジュールと変換ケーブルを使う

ラズパイゼロ専用のカメラモジュールを使う場合はこちらで購入できます。純正なので安心して使えますが、少々お値段は高くなります。

[asin:B06XFPPBCW:detail]

変換ケーブルを使う場合は次の「Raspberry Pi zero用変換ケーブル」と「カメラモジュール」の2点を購入することになります。私は次の2点を購入してみましたが、問題なく動作しました。

[asin:B01FS46E7K:detail]

Raspberry Pi zeroのセットアップについてはこちらの記事で解説しているので参考にしてみてください。

nn-hokuson.hatenablog.com

カメラを接続する

最初に見たとき、どうやってケーブルをRaspberry Piに差し込むのか、全然分からず無理やりカメラケーブルを押し込んでみたり(笑)

まずは黒い出っ張りを手前に引きます。すると黒い出っ張りと基板の間にスペースができるのでそこにカメラケーブルを差し込みます。裏表に注意してください。基板側に金属端子が向くように接続します。

f:id:nn_hokuson:20171010210444j:plain:w300 f:id:nn_hokuson:20171010210430j:plain:w300

カメラモジュールの方も同じ要領でケーブルとカメラの基板を接続してください。raspberry pi zeroの場合、どちらもケーブルの白い目印が上にくるはずです。

f:id:nn_hokuson:20171010210533j:plain:w300

Raspberry Piのカメラで撮影してみる

Raspberry Piでカメラを撮影するのは非常に簡単です。まずはカメラを有効にしてRaspberry Piからカメラを認識できる状態にします。次のコマンドを入力してください。

sudo raspi-config

続いて「Interface Options」を選択してエンターキーを押します。

f:id:nn_hokuson:20171010211437j:plain:w500

「P1 Camera」を選択し、エンターキーを押すとカメラを有効にするかどうかを聞かれるので、「Yes」を選択します。

f:id:nn_hokuson:20171010211446j:plain:w500

その後「OK」を押して元の画面に戻り、「Finish」で設定を終了して下さい。これでカメラが使用できるようになりました。

カメラの設定ができたところで、raspistillコマンドを使って実際に撮影できるかどうかを確認しておきましょう。

raspistill -w 480 -h 320 -o test.jpg

撮影画像はこんな感じになりました〜(ぶりぶりざえもんカワイイ)。「-w」と「-h」のオプションでそれぞれ撮影画像の幅と高さを指定することができます。

f:id:nn_hokuson:20171010213014j:plain

raspistillコマンドのオプションについては次のサイトを参考にさせていただきました。RaspberryPiのカメラは露出やISOなども設定できるので結構きれいな写真が撮れます。

rapsberrycamera.seesaa.net

Slackにアップロードできるようにする

撮影した画像をSlackにアップロードするためには、次の作業が必要になります。

  1. Slackに開発アプリの登録
  2. Slackでの認証設定とTokenの発行
  3. Slackへの投稿プログラムの作成

では、それぞれの作業を一つづつ見ていきましょう。

Slackに開発アプリの登録

まずはSlackのアカウント登録したら、SlackToken発行ページからTokenを発行します。Tokenの発行は次のページから行えます。

api.slack.com

まずは中央のStart Buildingをクリックし、続けて表示される「Create a Slack App」の欄に作成するアプリの名前を指定ます。指定できたら「Create App」ボタンを押して下さい。

f:id:nn_hokuson:20171011204120j:plain:w400

続いて、表示された画面から「Permission」のボタンを選択してクリックして下さい。

f:id:nn_hokuson:20171011195647j:plain

Slackでの認証設定とTokenの発行

「OAuth & Permissions」のページが表示されるので、画面下側のSelect Permission Scopeの欄から次の5つを選択して下さい

  • Administer the workspace
  • Access information about user's public channels
  • Send messages as アプリ名
  • Upload and modify files as user
  • Add and remove pinned messages and files

f:id:nn_hokuson:20171011200234p:plain:w500

最後に「OAuth & Permissions」のページの「OAuth Tokens & Redirect URLs」の項目の「Install App to Workspace」をクリックし、遷移後のページで「Authorize」ボタンをクリックするとSlackのTokenが発行されます。

f:id:nn_hokuson:20171011200449j:plain

Slackへの投稿プログラムの作成

Raspberry piでSlackへ投稿するプログラムを簡単に作れるように、PythonのSlackライブラリ「Slacker」を利用することにします。

次のコマンドを入力してSlackerをインストールしておきます。

sudo pip install slacker

続いて次のpythonプログラムを作成して、capture.pyというファイル名で保存しましょう。

import commands

commands.getoutput("raspistill -w 1200 -h 900 -o test.jpg -ev 3 -ISO 800")

from slacker import Slacker
token = "<Slackのトークン>"
slacker = Slacker(token)
channel_name = "#" + "<チャンネル>"
result = slacker.files.upload('/home/pi/test.jpg',channels=['<チャンネルID>'])
slacker.pins.add(channel='<チャンネルID>', file_=result.body['file']['id'])

「Slackのトークン」には先ほど作成したtokenを設定してください。「チャンネル」には使用するSlackのChannel名を指定してください。私はChannelにgeneralを指定しました。「チャンネルID」はチャンネルを選択したときに表示されるURLの「https://xxxxx.slack.com/messages/チャンネルID/files/」で確認できます。

Pythonファイルが作成できたら次のコマンドを入力して実行してみてください。

python capture.py

うまくいけば、Slackの指定したチャネルに画像が投稿されているはずです。

f:id:nn_hokuson:20171011201346j:plain

一定時間ごとに自動的に撮影するようにする

一定時間ごとに、先程のupload.pyスクリプトを実行することで、猫の定点観測ガジェットの完成です。

Linuxで一定時間ごとに何かをするにはcrontabコマンドを使います。まずはcrontab.txtというファイルを作り、その中に次の内容を入力してください。

*/30 * * * * python /home/pi/work/capture.py

暗号のように見えますが・・・これで30分ごとにcapture.pyが実行されます。crontabの入力は次のように、分・時・日・月・曜日を指定できるようになっています。

分 時 日 月 曜日 コマンド

crontabの詳しい書き方は次のページなどを参考にしてみてください。

www.server-memo.net

次のコマンドを入力して、いま作成したcrontab.txtをcrontabに設定しましょう。

crontab crontab.txt

あとはRaspberry Piに電源を繋いで置いておくだけで、自動的にSlackに家の様子が定点観測出来るようになります。お出かけ中や寝ている間に、猫が何をしているのか??という謎がとけますよ〜!(うちの猫はずーーっと、寝続けていました笑)

f:id:nn_hokuson:20171011205352j:plain