カメラをつけて、お部屋のチェックなど便利に使おう!
第1回: ウェイクワードで操作できるスマートホーム・デバイスを作り始める
第2回: 独自のウェイクワードでお部屋をチェックする
第3回: 声でリモコンを操作して便利に使う
こんにちは、ヨシケンです!
ラズパイでスマートホーム化の第4回。これまでラズパイを使って、声による起動、部屋の温湿度チェック、そしてリモコン機器の操作を行ってきました。
今回はカメラを付けて、部屋のチェックをしたり、お子さんの帰宅を知らせたりするなど、画像を使った機能を付けましょう。(左側の丸い窓にカメラを設置しています。)
また、「おはよう!」や「ただいま!」などのシンプルな挨拶で、家の中の事を自動化する仕組みも作って、スマートホームの完成です!
今回の記事で必要な物一覧
・Raspberry Pi 3B+ (最新版のラズパイ本体)
・パイ・カメラ
(ラズパイ公式カメラです。これと同形状で夜間撮影が可能なPiNoIRカメラもあります。)
・小型バッテリー(小型ならどんなものでも構いません)
・LED、抵抗やケーブル類
・(100円ショップなどで手に入る)木のケースなど装飾部品
今回の記事の流れ
1.カメラをセットアップして写真撮影
2.写真をLINEに添付、送付
3.スマートホーム・デバイスにカメラを組み込む
4.音声と連携させて、室内で便利に使う
5.まとめ
1.カメラをセットアップして写真撮影
まずラズパイにカメラをセットしましょう。ラズパイの中ほどにあるカメラ端子の白いフックを引き上げ、ケーブルを差して、フックを固定します。
右写真のように黒い端子を上の向きにすると、そのままで上下正しく撮る事ができます。(オプションで写真の向きなどを変更する事もできます)
smartフォルダ下に、imageという写真保存場所を作って、raspistillコマンドで試し撮りしてみます。(-w 480 -h 360は画像サイズの指定です。)
$ cd smart/$ sudo mkdir image
$ raspistill -w 480 -h 360 -o image.jpg
今後のpythonプログラムで使えるように、camera.pyプログラムを作って、imageフォルダ下に、日付時間毎の画像ファイルを保存するようにします。
[camera.py]
2.写真のLINEへの送付
写真を撮った時に、それをLINEに送って、遠隔からでも簡単にチェックできるようにします。
LINEのNotifyというAPIを使うと、ラズパイから簡単に写真付きメッセージを送る事ができます。
LINE Notifyのページから、LINEアカウントでセットアップをしてみて下さい。
以下画面が出たら、“トークンを発行する”ボタンを押します。
写真を送りたいグループなどを指定します。ここでは“スマートホーム“グループを作っています。
ここでNotify用のトークンを取得します。一度しか表示されないので、しっかりコピーしておいて下さいね。
またLINE側で、写真を送るグループにLINE Notifyというユーザを招待するのをお忘れなく。
それでは先ほどのカメラ機能と合わせてcamera_line.pyを作ります。取得したトークンを使ってLINE送付用のコマンドを追加(黄色部分)しています。
[camera_line.py]
camera_line.pyを流してみると、ラズパイで撮った写真が、このようにLINEに送られてきました。
3.スマートホーム・デバイスにカメラを組み込む
それでは、前回まで作っていたスマートホーム・デバイスに、カメラを組み込んでいきます。
ちょうど空いた穴から、レンズ部分を出し、固定します。
ケーブルが多くなってしまった部分は、赤い屋根でふたをしておきます。
これを部屋に置いておいて、定期的に室内写真を撮るようにしてみましょう。例えば、10時と15時に自動的に写真を撮って、LINE送付するようにします。
これにはcronという定期的にプログラムを実行する仕組みを利用します。
cronに必要なライブラリをインストールして、スタートさせます。
$ sudo apt-get install chkconfig$ sudo /etc/init.d/cron start
$ sudo chkconfig cron
cronエディタ(crontab -e)を実行し、その一番最後に以下2つの実行プログラムを記述します。(この場合、毎日10時と15時に実行)
その後リスト(-l)でcronが正常に登録されているか確認してください。
00 10 * * * python /home/pi/smart/camera_line.py
00 15 * * * python /home/pi/smart/camera_line.py$ crontab -l
またcronから正常にプログラムが動いているか確認する為、cronのログを残すようにします。
rsyslog.confという設定ファイルのうち、#cron.*となっている部分のコメントアウトを外せば、/var/log/cron.logとしてログファイルが書き込まれます。
$ sudo vi /etc/rsyslog.confcron.* /var/log/cron.log #コメントアウトを外す
$ sudo /etc/init.d/rsyslog restart
$ sudo cat /var/log/cron.log
[/etc/rsyslog.conf]
cronが動いているかどうかの確認
これで部屋に置いて電源を入れておくだけで、定期的に室内の写真をLINEに送ってきてくれるようになります。
4.音声と連動させて、室内で便利に使う
それでは最後に、発話内容に応じて、室内で便利に使えるように、これまで作った機能を連携させましょう。
以下例のような、普段の“おはよう”や“ただいま”などのあいさつに連動して、自動で動かす仕組みを作ってみてはどうでしょうか?
そのために、前回作成した日本語認識のJuliusのプログラムを改修して、julius_remote.pyプログラムを作りました。プログラムはリンクからダウンロードできるようになっています。
内容的には、以下の部分で、あいさつに応じて、返答のメッセージや、リモコンのコマンドを指定しています。
[julius_remote.pyの一部]
以下の部分で、コマンドに応じて赤外線送信や、室温のチェック、写真、LINE送付などを定義しています。取り入れたい機能に応じて、プログラムの記述を変えてみて下さい。
[julius_remote.pyの一部]
また室内の温湿度を測って、その結果に応じて赤外線を操るために、bme.pyを以下のように追加、修正します。このプログラムは、bme_remote.pyとして、こちらに保存しています。
[bme_remote.pyの一部]
これらのプログラムができたら、スマートホーム・デバイスを室内の好きなところに置いてください。赤外線機器の近くの方がリモコンの効きは良いと思います。
それではこのjulius_remote.pyプログラムを実行するか、以前の記事を見て自動実行プログラムにして、走らせます。
さあ、まずは「おはよう!」と挨拶してみましょう。
この動画のように、「おはようございます!」の返答と共に、室温などを測って、リモコン操作してくれると思います。
また、「いってきます!」や「ただいま!」のあいさつで、スナップ写真を撮ってくれています。
特に家に帰ってきた子どもの写真がLINEに送られてくると、親御さんは安心ですし、ほっこり和むこと請け合いですね!
これ以外にも第2回で扱ったSnowboyで「ねぇ、お部屋チェック!」などのウェイクワードを登録し、こちらのプログラムを使えば、似たような操作が可能です。
[wake_remote.pyの一部]
callbacks = [lambda: camera_line.main(),
lambda: bme_remote.main()]
print(“「ねぇ、お部屋チェック!」や「ねぇ、お部屋測って!」などウェイクワードを発話して下さい。Ctrl+Cで終了します。”)
ぜひ色々組み合わせて、ご自分の部屋や使い方にあった機能を付け加えてみて下さい!
5.まとめ
ラズパイでスマートホーム化として、カメラをつないで室内をチェックできるようにしました。
合わせてLINEと連携させる事により、離れた所からでも家がチェックできるようになりました。
最後に、これまで作った温湿度センサ、赤外線リモコン、日本語音声認識などを組み合わせて、シンプルなあいさつから、様々な機能を呼び出せるようにしました。
一人暮らしの方は挨拶に応えてくれるだけでも嬉しいですし、お子さんがいる方は、帰宅時などのチェックができて、安心ですね。画像解析機能を活用すれば、不審者検知カメラや、ペット監視にも使えるかもしれません。
それではこれからも、ラズパイと、センサ、カメラ、音声機能などを使って、家の中を便利に、スマートホーム化していってください!
(ヨシケン)
今回の連載の流れ
第1回: ウェイクワードで操作できるスマートホーム・デバイスを作り始める
第2回: 独自のウェイクワードでお部屋をチェックする
第3回: 声でリモコンを操作して便利に使う
第4回:カメラをつけて、お部屋のチェックなど便利に使おう!(今回)