皆さんRaspberry Pi使ってますか?買ったけど使いみちが無くてほったからかしと言う方も多いのでは無いでしょうか。今回は、幼稚園~小学生くらいのお子様がいる家庭のリビングで使うRaspberry Pi(+ちょっとだけSlack)と言う内容です。電子工作はありません。
この記事は、家庭を支える技術 Advent Calendar 2016 – Adventar の13日目の記事として書きました。
もくじ
色んな問題点
- 最近、子供が成長し写真や家族写真を撮らなくなった
- RasPi内に音楽再生環境(Kodi)を入れているけど、スマホで操作するのが面倒くさい
- 学校の準備やそろそろ学校の時間など子どものルーチン的な事に関して子どもに言うのが面倒
- 今日の予定や、今日は何ゴミかなどのスケジュールをいちいちスマホで見るのが面倒
- 子どもに直接注意するのはエネルギー使う(宿題やったの?とか、自分の物くらい片付けて欲しいとか)
- 家庭内のスケジュール管理をもう少し効率化したい(スケジュールの追加通知)
と言うことで…
家ではこんな感じで使ってます(音が出ます)。
毎日の記念撮影
最近 家族の写真って撮ってますか?
子供が小学校に入る前までは本当に良く写真を撮りましたが、小学校くらいからはイベント時(誕生日、運動会、発表会、旅行)でしか撮らなくなりました。これはちょっと寂しいなぁと思い、毎朝記念撮影をすることにしました。
手で撮っていたら3日でやらなくなってしまうので、自動で。若干の望遠が欲しく、手持ちのWebカメラの画質ではいまいちなので、使い古しの一眼レフを利用しました(高性能のWebカメラや一眼以外の使わなくなったデジカメでも良いと思います)。
まず一眼レフカメラををAC電源化し、USB経由で撮れるようにします(ちなみにISO・シャッタースピード・露光等々もリモートで変えられます)。
- 一眼レフカメラをRaspberryPiからリモート制御する話 / もやし工房
http://www.moyashi-koubou.com/blog/dslr_camera_raspberrypi/
あとは後述のJtalk+cronで毎朝「写真を撮りますねー」と言わせて撮影。ImageMagicで縮小した写真をSlackの#photo部屋へ、オリジナルはNASに転送しています。
毎日同じ時間、同じ場所から自動で撮っている写真
現在10ヶ月くらい毎朝撮っていますが、子どもたちも飽きること無く、撮るときだけはたいてい笑顔になって(時には姉弟で喧嘩して泣いて)ポーズをとってくれるのでなんだか良い感じです。1年分溜まったらffmpegで連結して短めの動画にしようと思っています(google Photosでもできそう)。
本棚の端に設置した古い一眼レフカメラ。gphoto2を使うとUSB経由でシャッターが切れる。
音楽再生をスマホで操作するのが面倒1(Kodi/OSMC)
リビングに音楽があると何だかちょっと明るい雰囲気になります。子どもが聞きたい曲とか流すにもわるくない。
うちでは SDカードに書き込むだけで すぐにマルチメディアプレーヤ機能(Kodi)が使えるDebianベースのOSMCと言うディストリビューションをRaspberry Piに入れて使っていますが、これの操作がスマホアプリ or テレビリモコン(HDMI) or 赤外線リモコンからしかできなくて、ちょっと朝に音楽聞きたいなぁと思っても、
- スマホを探す
- スマホの電源をつける
- スマホのロックを解除する
- リモコンアプリを探して起動
- ジャンル選択
- 音楽再生
と非常に面倒。
「スマホから動く家電」はガジェット好きには”そそる”キーワードで、便利そうに思うかもしれませんが、恐らく同じ問題(手間と時間がかかる。アプリを探すのもめんどくさい)を抱えている気がします。屋外からの遠隔操作ならともかく、屋内で毎日のちょっとした色々をスマホから操作するのは非常に面倒!
KodiにはJSON-APIが付いているので、このWebAPIを叩いてcronで朝昼晩の決まった時間に流したり、後述する音声認識で再生するようにしました。決まった時間に(ジャンルはランダムで)音楽が流れると、久々に聞く曲が聞けたりと妻にも好評です。
ちなみにRaspberry Piは下記のアンプにつながっています。そのままUSB接続で音がなりますし、ワットチェッカーで調べても月に80円程度の電気代&音楽聞くのにアンプの電源入れるのは面倒なので常に電源入れっぱなしになっています。
- Kodi APIドキュメント – JSON-RPC API/v6
http://kodi.wiki/view/JSON-RPC_API/v6 - OSMC(SDに書き込むだけで使えるメディアプレーヤー)
https://osmc.tv/
省電力で力持ち。USBで直接つながるTOPPING TP30
Kodiよりも見た目がオシャレなOSMC
後継機種はこれなのかな。
音楽再生をスマホで操作するのが面倒2(音声認識)
上記の方法で決まった時間に音楽を流す/止めることはできるのですが、任意のタイミングで適当に音楽つけたい/消したいときにスマホの電源をつけるのもやっぱり面倒。ここはjuliusという音声認識システムをインストールして使うことにしました。
天井にあるマイクに「ロボ 音楽つけて」「ロボ 静かにして」と言うと、音楽を付けたり消したりしてくれます。これが本当に便利で、近い未来は色んなスイッチは絶対こうなるなぁと実感しています。Amazon Echo(Alexa)みたいに、呼びかけ→ハイ(少し間がある)→音楽つくのようなラグが無く、何より日本語が通じるのが嬉しいです。
ただ、今のjuliusの精度では子供の声には反応してくれません。また、若干過剰に反応(間違った言葉でも音楽をつけてしまう)します。Siriやgoogle音声認識くらいの精度出てくれるといいのですが…。
音声認識用のWebAPI等もありますが、全ての声を全部Webに投げるわけには行きません。この例で言うと「ロボ」の部分をローカルで(高い精度で)認識したら、後ろの言葉はAPIに投げる…とかできたらきっと便利になりそうですが、遅延がストレスかな。いい感じの方法をご存じの方いらっしゃったら教えてください。
仕組みはpyhonを使ったソケット通信でJuliusに接続し、Juliusが認識し出してくれたテキスト文字列を拾ってシェルスクリプトを実行する的な内容です。
- Julius(音声認識エンジン)
http://julius.osdn.jp/
ルーチン的な事に関して子どもに言うのが面倒くさい(喋らせる)
皆さんのお家のお子さんは、朝 自分で時計を見ながら学校の用意したり、部屋の片付けとかしてくれますか?
してくれるのであれば良いのですが、うちは残念ながらご飯を食べ終わったらギリギリまで本や漫画を読んでいます。「そろそろ学校なので片付けて用意しようよ」と毎日コチラが時計を見て言うのが面倒&言うと面倒くさいオーラが発言者の方に向かうのでストレス。
と言うことでRaspberry Piに話してもらうことにしました。
RaspberryPiにお話させるのはOpen JTalkと言う日本語もちゃんと喋れるテキスト→音声合成システムを使います。インストールして、コマンドラインで
jsay こんにちは
とするとスピーカから喋ります(こんにちはの部分は任意のテキストが可。漢字も使えます)。
- Open JTalk(日本語のテキストを音声ファイルへ)
http://open-jtalk.sourceforge.net/
と言うことで喋って欲しい言葉をcronで登録します。スクリプトは休日・日本の祝日チェックAPIを使い、土曜&休みの日には喋らないようにしてあります。学校のチャイムや目覚まし時計の音声版みたいな感じです。
# # 朝 # 15 06 * * * /usr/local/bin/jsay_one 家族の時間だよ。家族の時間だよ。おうちのことをする時間だよ。 30 07 * * 1,2,3,4,5 /usr/local/bin/jsay_one XXちゃん。そろそろ学校へ行く時間だよ。XXちゃん。そろそろ学校へ行く時間だよ。気を付けて行ってきてね。 50 07 * * 1,2,3,4,5 /usr/local/bin/jsay_one XXくん。そろそろ保育園の時間だよ。XXくん。そろそろ保育園の時間だよ。今日も元気にいってらっしゃい。 # # 夜 # 15 17 * * * /usr/local/bin/jsay_one 家族の時間だよ。家族の時間だよ。おうちのことをする時間だよ。
ちなみに上記の「家族の時間だよ」は、家族の為に何かお手伝いできることを探してやってみよう(自分の物くらい片付けて欲しい)の時間だったのですが、現在は完全に無視され、実質機能していません(学校の時間は役立ってます)。
結局、誰に言われても面倒なことは自らはやらない&自分に役にたつものみ機能するってことなのでしょう。
子どもに直接注意するのはエネルギー使う(Slackから喋らせる→ほめる育児?)
「宿題やったの?」とか、散らかしたおもちゃを片付けて欲しいなぁなど日々のちょっとした注意をしたいと思ったときに直接声をかけると、その不機嫌さは親に向けられ、言ってる本人も何だかイライラしてきたりします。
これに関してはSlack経由で任意の文字を喋らせ「親は言っていない。ロボが言っているのだ。」と不機嫌の対象を親に向けないようにしています。
こうすることによって、”うまく行くとき”は「注意する・攻撃対象になるのはロボ」→「出来たことを褒めるのは親」の流れができます。子どもを褒めるのは(子どもが喜んでくれて)親も気持ちよい!
robo_talk部屋に投げたテキストは音声でお話ししてくれる
恐らくコレが効くのは低学年までだとは思うのですが、うちの場合は親が喋らせているとは気づいていないっぽい(ロボという”何か”が本当に居る)ので”うまく行くとき”は「親なら聞かないけど、ロボなら聞いてくれる」ことがあります(時にはしつこく喋らせる)*1。
*1—
導入当初は(物珍しさで)高確率で聞いてくれましたが、多用するとやっぱり駄目なのでたまに使う程度にしています。ロボは疲れないし精神的ダメージも受けないので、繰り返し喋れるようにプログラムを変えたら良い気もしてきた。
—
仕組みはSlack内のbot(node.jsで起動してるHubot)が特定のroomで常駐、そこで書き込まれたテキストは自動的に上記の喋らせるシェルスクリプトを起動して喋らせています。外出先からSlackへ「そろそろ、おとうちゃんが帰ります」って書けばちゃんとリビングで喋ってくれます。IFTTTと組み合わせても楽しいかもしれませんね。
今回の子ども×Raspiの趣旨からは外れるので詳細は書きませんが、我が家でのSlackの使い方は(このAdvent Calendarを毎年ご覧の方には目新しいことはありませんが)↓の感じで使っています。用途によってroomを分ける使い方がLINEよりも便利だと妻には言われています。
- おうちで使うSlack / Slideshare
http://www.slideshare.net/koike_moyashi/slack-61280028
スケジュールをいちいちスマホで見るのが面倒
家庭を支える技術 Advent Calendarではおなじみですが、妻、私の予定、家庭でのイベント、今日のゴミ収集品目などはgoogleカレンダーで共有しています。
これだけでも便利なのですが、たまにスケジュールを忘れていたりする&ゴミに関しては月に1,2回しか回収しないものは覚えていないので、毎朝喋らせています。
googleカレンダーから情報を取ってくるのは公式のライブラリが出てるので、付いているサンプルをちょっとだけ変えました。
- Google Calendar API / PHP Client Library
https://developers.google.com/google-apps/calendar/quickstart/php
また、スケジュールの追加、修正、削除通知に関してはSlackのGoogle Calendar連携(公式)を使っています。
多人数だと通知が邪魔そうですが、夫婦2人位だとちょうどよい感じで「あっこれこの日に入ったんだ。キャンセルになったんだ」が分かって便利です。
- Google Calendar / Slack App Directory
https://slack.com/apps/A0F8149ED-google-calendar
各自の予定の追加やキャンセルがSlackに流れるのは便利
負荷的な話
音楽再生も含め、この辺りを全部一台のRaspberry Pi(Raspberry Pi 2 model B)で動かしているため、若干負荷が高いです(特にKodiとjulius)。将来的にはRaspberry Piにしかできないことだけをこれにさせて、Hubotとjuliusは別の場所に引っ越すのが良いのだろうなぁとは思っています。
作り方(技術的な話し)
上記で紹介した一部部分だけでも作ってみたいなぁと思われた方へ。
設定ファイルと技術的な情報を残しておきます。よろしければ参考にしてください。
- 子どもがいる家庭で使うRaspberryPi&Slack(技術編)
http://www.moyashi-koubou.com/blog/raspi_slack_for_children_2/
最後に
声で反応するオーディオすごく便利&子供には音が有効。記念撮影も毎朝のちょっとしたアクセントとして楽しいです。
もちろん上記にあげたことは使い古しのPCでもできますが、Raspberry Piを使うと電気代は月60円程度。個人的には作った環境を簡単にイメージ化して保存できる事も好きです。SDカードや本体が壊れたときもう一度同じ環境作るのは辛い。
Raspberry Piが転がってるようであれば、この冬休みにでも挑戦してみてはいかがでしょうか?RasPi 3を使えばもっと余裕をもって動くのかなぁ。