うちIoT

Mobile-Away: ケータイお預けステーション

動機など

前にも書いたかもしれませんが、私は『月刊ログ』があれば買いたいぐらいログ好きです。今回は積極的にケータイを使わないようにした時間をログすることが目的です。ケータイを使っていた時間については、各アプリの使用時間やら何回アンロックしたかとか、そういう”使った時間ログ”はとれるのですが、使っていなかった時間のログがない。そんなの一日のうち使ってた時間の残りが使ってなかった時間ですやん、と思われるかもしれませんが、それでは寝てたりして単にpassiveに使っていなかった時間が含まれていてダメなのです。Activelyに使わなかった時間、意図してどれだけ使わずにいられたか、今からしばらく使わないぞ、と決めて実際使わずにいられたその時間、それをログしたいと思ったのです。

ケータイには魔の引力がありまして、用もないのに、というか、用がないからこそむやみにスワイプ、タップをしたくなるようにできています。連絡があればnotificationに表示されるのに、いまかいまかと常時notification待ちに人間側がなるのも魔の引力のなせる業です。音が鳴るたび、名前を呼ばれた犬のようにケータイに向かってしまう。

何かしようというときには意識の連続性が重要です。30分ひとつと、分断された合計30分とでは、その間にできることが全く違ってしまうのです。ケータイから心を離す、いや、放すのほうがいいか、そういう時間を作る癖をつけようという魂胆です。ケータイに邪魔されない時間を作る。作ろうと思って作る。どれだけできたのか、というフィードバックがあると、やりがいもでます。そこでロギングの出番です。

今回はうちの息子のために作りました(やっぱり)。連続性を重視するため、15分までは0ポイント。15分到達で15点。35分なら35点、という具合に時間に応じたポイントがもらえます。しかも30分続けば5点、60分なら15点、90分なら25点、120分なら太っ腹35点のボーナス点がつく!これは、60分ひとつのほうが、30分ふたつより意味があるようにするためのものです。

置いた、取り出した、のイベントはtoggle trackにも記録するようにしたので、後からwebやアプリから足跡を見ることができます。また置き時間(?)とポイントはraspberry pi上のMySQLデータベース(MariaDBを使用)に記録されるようにしたので、エラーが出て止まったり、場所を変えるために電源を落としても、その日やその月の合計点がデータベースの情報からリストアできるようになっています。なかなかすごいです。

説明書風にいうなら、各部の名称と働き

Figure 1. Mobile Away Station全体図

全体図はFigure 1のようになっています。

ケータイは上から挿し入れます(1)。ケータイ自体の重みで”Good!”の手(5)がぬいっと上がってきます。最初はサーボモーターで動かそうと構想していたのですが、ケータイの重さで動くようにしたほうがいいという意見が息子から出て、Good Handも彼が作ってくれました。(2)がAdafruitのFunhouseです。ESP32-S2がのっていて、WiFiにつながり、circuitpythonでコードを書くことができます。カラーディスプレイもついているので便利です。GPIOはI2CがSTEMA QT、A0、A1, A2はJST PH (3 pin)のソケットから使えます。今回はIR Break Beam Sensor(4)をA3につないで使っています。ディスプレイの左にある3つのボタンのほか、温度と気圧のセンサー、右の樹木の書いてあるところにはタッチで使えるスライドバー、上の二羽の鳩はタッチセンサー、さらに音を鳴らすための小さなブザーまでついています。ぜひAdafruitのページをのぞいてみてください。Learnのページ(Funhouseと入れて検索してください)にもいくつか実際の利用アイデアがのっています。

Figure 2. Displayの説明

Funhouseの上部には5つのDotStar LEDが載っています(1)。5つをそれぞれ15から120分までの到達点を表すのに使っています。例えば図にあるように経過時間(3)39分の時点では30分までのDotStarが点灯、次の到達点である60分のものが点滅するようにしました。それぞれの到達点には異なる色が割り当ててあり、表示される文字の色を到達点の色にあわせるようにしました。60分は緑、いまそこへ向かっているので文字も緑、という具合です。

(2)の部分に今現在の獲得中のポイントとボーナス点、Todayは今日の合計、Monthは今月の合計獲得ポイントを表します。(4)の部分にはポイントではなく今日と今月の累積時間を表示するようにしました。電源が切れてもRaspberry pi上のデータベースから記録を取り直すことができるので、エラーリセットや場所を変えたりするために電源を落としても元通り使い続けられます。

夜10時には電話を置くことになっています。置かれているとスリーピング表示(6)になります。電話がまだ置かれていない場合にはすべてのDotStarが黄色で点滅し、下に書くように5分毎に催促のメッセージがGoogle Homeから流れます。

機能

  • 朝6時から夜10時までが活動時間です。
  • 電話が置かれるとブザーが鳴ってログ開始。置いておいた時間のカウントアップが始まります。この時toggltrackの記録も始まります。
  • 電話をどけるといやーな感じのブザーが長々と鳴って、カウントがストップします。置いておいた時間がraspiのデータベースに送信されます。toggltrackの記録も停止します。
  • 15分に満たないものは0ポイントです。
  • 15分以上は置いた分(minute)と同じだけのポイントがもらえます。
  • 30、60、90、120分の到達チェックポイントには5、15、25、35点のボーナスポイントが割り振られていて、例えば40分置いた場合、40点プラス30分でのボーナス5点、合計35点がもらえます。
  • 夜10時になって電話が置かれていないと、電話がおかれていない、変ですよ、早く置いてね、あれー、約束なのになあ、という主旨のメッセージ(いくつか定型文をセットしておいて、それらがランダムに選ばれる)がGoogle Homeから流れます。電話が置かれるまで5分おきにこれが続きますので、本人よりもほかの家族がうるさい、と言い出し、結果として本人が渋々電話を置くというのが本当のしくみです。いまのところ減点の仕組みは導入されていません。ご安心ください(@息子 様子見しとるだけだでな。そのうちやるぞ)。

材料

  • Adafruit Funhouse:ESP32-S2を積んでてcircuitpythonのコードを動かすことができ、WiFiにもつながります。今回は使っていませんが、ボタン、温度と気圧センサー、おまけにタッチセンサーバーもついています。
  • IR Break Beam Sensor:電話が置かれたことを検知するために使いました。NFCタグを電話の裏に貼ってもらって、誰の電話が置かれたのか分かるようにしたりするともっとオモシロイのかもしれませんが、今回は実装しませんでした。
  • Polymer Clay:例の130度で固まる粘土です。
  • レゴ部品たち:息子のアイデアで、電話の重みで手がぬぅっ、と出てくるようにしました。モーターは使っていません。
  • raspberry pi 3B:(一号機がいまだに現役!)ポイント履歴を記録するデータベースと、POSTを受け付けてデータベースの読み書きをするためのFlaskサーバーを動かします。Funhouseは電源が落ちると変数の中身がすべて消えてしまうので、置いた->取り出した、のタイミングで経過時間やポイントをRaspi側に送信するようにしてデータを失わないようにしています。

データベーステーブル

Table structureと直近のデータをFigure 3に示します。int6桁に特別な意味はありません。これなら十分すぎ、な桁数にしました。置く、どける、を1エントリーとして記録しています。ケータイをstationからどけたときにデータがここへ送信されるという段取りです。

Figure 3. MySQL (MariaDB)のtable structureと直近のデータ

コードについて

コードファイルは以下の5つ。最初の4つをFunhouseのドライブへ、最後の一つはRaspberry pi上で動かしておくものです。

  • code.py
  • dbAccess.py
  • toggltrack.py
  • secretes.py
  • mobileAway-raspi-side.py

secretes.pyには以下の情報を記載して使用します。

  • WiFiのssidとパスワード
  • AdafruitIOのuser name、access key、timezone
  • toggltrackのauthentification key、workspace id、project id
  • raspi上のSQLサーバーにログインするためのuser nameとパスワード
  • raspi上で動くNode-RedのURL(Google Home miniへのメッセージ読み上げがここから飛びます)

コードはGitHubにのせましたので、ご興味のある方はそちらをご参照ください。

動作の様子

Mobile-Away in action

このあとやること

毎月たまったポイントをお小遣いに変換したい。その変換式がまだ決まっていないので、1-2か月の実績をみて、無理がなく、かつ簡単すぎない程度にパラメターを設定する。今のところのアイデアをメモしておく。

  • 基本給ならぬ、ベースお小遣いは必ずもらえる(これだとちょっと少なすぎないか、という額に設定する)
  • ケータイから積極的に離れるという、できる人には、なんとまた簡単な、そんなことでいいの?という努力を積み上げることによって得られるポイントによって、次の月のお小遣い額が決まる。ものすごく頑張ったときに、お、いいねえ、というぐらいの額になるように変換式を設定するのが重要。最大でもそれかよ、ではやる気がでない。

ABOUT ME
misson
ものづくりが趣味。頭の中でモヤモヤと渦巻くガスを形として沈殿させるのが趣味。座右の銘その2は:未来は今の積分値


follow us in feedly

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です