娘達(双子・6歳)も早いもので来年から小学生。就学前に春先から公文式に通い始めました。そこで毎日行う宿題を家族(とGoogle Assistant)で見守る仕組みを考えてみました。
公文式学習法
By Kumon, パブリック・ドメイン
公文式の特長 ~ 公文式学習とは解き方を教わるのではなく、自分の力で教材の問題を解く学習法で、「やればできる」という自己肯定感を育み、未知の領域にも、自分から挑戦する力を培う。公文式は、一人ひとりの「可能性の追求」を目指す教育です。 - 公式HPより
独自の教材を利用して、自分で学ぶ力を身につけていきます。算数であれば毎日10分の間に教材10枚を解答します。早く、正確に学習していくことがポイントになります。
家族で共有する
宿題に掛かった時間は未就学児の場合は親が記入します。意外と毎日正確に時間を計るのは大変な為(双子だとなおさら)、電子工作機器を利用してこんな仕組みを考えてみました。
Seeed社のWioNodeとGroveシステムを使用したタイマーを作りました。ボタンを押すと10分のカウントダウンが始まります。終了したタイミングで再度ボタンを押すことで掛かった時間を計る事が出来ます。(10分以上経過した場合はタイマーは自動で終了します)
ちょっとこだわったポイントは、子供が毎日使うものなので単3電池3本で駆動させている事です。電源を入れるとRaspberryPiに立てたサーバーとwebsocketで接続されます。
計った時間はIFTTT経由で様々なサービスへ送信する事が可能です。LINEに送信することで、両親に情報共有が簡単に行えます。ここでは通知用に作成したLINEグループに送信しています。
外出先からも宿題が終わったタイミングを通知で確認することが出来ます。
LINEへの送信と合わせてGoogleスプレッドシートに学習時間を書きこむ様にしました。学習した日時と合わせ、10分以上経過した場合は印を付けておきます。
GoogleAssistantで見守る
サポート役としてGoogle Assistantを活用してみることにしました。RaspberryPiに搭載したGoogle Assistant API経由で使用します。
Homework Time - Google Assistant app - Youtube
GoogleスプレッドシートのAPIを利用して、GoogleAssistantから学習状況を確認出来ます。こんな感じ。
api.aiのintentsを利用して、スプレッドシートのデータを呼び出します。ここでは「名前+日付」で検索します。「長女(Yolanda-仮名)+日付(Today-ここでは2017年7月29日)」のjsonデータをActions on Googleにリクエストします。
日付はapi.aiのentityを利用するので、「yesterday(昨日)」「day before yesterday(一昨日)」「three days ago(三日前)」など口語の意図を汲み取ってくれます。
この日は朝から宿題をやったので、10時4分から10時11分まで掛かった事が分かります。
日にちだけの確認だけでなく、期間を指定して、10分の時間内に宿題が出来たかどうかを確認出来ます。こんな感じです。
ここでは「名前+期間」で検索します。「次女(Amanda-仮名)+期間(Last week-ここでは2017年7月17日から2017年7月23日)」のjsonデータをActions on Googleにリクエストします。
期間もapi.aiのentityを利用します。「last week(先週)」「this month(今月)」「last month(先月)」など口語で指定した期間を意図通りに汲み取ってくれます。
時間以内に宿題が出来た回数と出来なかった回数を教えてくれます。
公文式学習では解答が正解している事だけでなく、時間以内に出来ているかも次にステップに進むポイントになります。ポイントを絞って一緒に見直しをします。
仕組み
Wio Node & IFTTT
1. Wio Node
WioNodeにGrove - ButtonとGrove - 4-Digit Displayをセッティングし、APIを使用可能にします。今回はアメリカリージョンを選択しました。子供が二人なので2台用意します。
2. websocket
Seeed社のAPIを受信出来る様にRaspberryPiにnode.jsでサーバーを立てます。
websocketを利用してボタンの押下データを受信し、カウントダウン時間を送信します。合わせて開始時間と終了時間を配列に格納します。
Homework-Time/RaspberryPi/wio-node/app.js
Homework-Time/RaspberryPi/wio-node/app2.js
3.PM2
プロセス管理はPM2を利用してデーモン化しました。WioNodeの電源がオンになるとwebsocket接続されます。
4.IFTTT
IFTTTにアカウントを作り、webhookをトリガーとして利用できる様にしておきます。
5.webhook
RaspberryPiのサーバーから宿題の開始・終了の日時をwebhookのエンドポイントに送信します。webhookをトリガーとして、受信した宿題の開始・終了の日時をLINEとGoogleスプレッドシートに送信します。
Raspberry Pi & Google Assistant SDK
1.Google Assistant SDK
Google Assistant SDKをインストールし、RaspberryPiをGoogleHomeとして使用出来る様にしておきます。
2.Actions on Google
Actions on Googleにて、プロジェクトを追加して、Google Assistantアプリを作成します。今回はアクションのトリガーにapi.aiを利用しました。
3.Cloud Functions
Actions on GoogleはGoogle Cloud Platform上のCloud Functionsに実行ファイルを設置することで動作させる事が出来ます。
Homework-Time/GCP/cloud_functions/
4.Sheets API v4
Googleスプレッドシートのデータを利用する為、Sheets API v4を利用します。今回はPyhonライブラリPython Quickstartを利用しOauth2認証を行います。
Homework-Time/RaspberryPi/spread-sheet/
5.ngrok
Cloud FunctionsからRaspberryPiに接続するために、ngrokを利用して接続します。管理しやすい様にnode.jsから起動させてみました。
Homework-Time/RaspberryPi/ngrok/
GitHub
まとめ
電気工作器機を使って、子供達の公文式学習を見守る仕組みを考えてみました。子供達はタイマーを気に入った様で、宿題のたびに引っ張り出して毎日使っています。
子供に対し日々関心を持ち続けるのはなかなか大変なもの。GoogleAssistantが良いサポート役になるといいなと思います。では。
追記:2017年8月28日
Google Assistant のiOSアプリが日本でも使用出来るようになりました。
Actions on Googleが日本語対応していない為、自作アプリは英語でしか利用出来ませんが手持ちのiPhone6Sで試してみました。
Homework Time - Google Assistant app on iOS - YouTube
文字入力だけでなく、音声入力にも対応しています。Cloud Functionsでapp.ask
の指定をすると、Google Assistantが入力を繰り返すのでマイクボタンを何度も押す必要がありません。
Raspberry Piに立てたサーバー経由でデータを読み込む事が出来ました。音声認識がキビキビしているので使い心地がとても良いです。
Google Homeも期待出来そうですね。Actions on Googleの日本語対応が待ち遠しいです。では。