ケネタン登場
今回は、ドンダ・ケネタン(ドコ・デ・カッタン社)を紹介します。ケネタンは、首の下にe-paper画面を持ち、毎朝その日の連絡事項を表示してくれます(図1)。
連絡事項は、あらかじめ指定のGoogle Sheetに書き込んでおきます。指定された日付の朝に内容が表示されるので、少々先のことでも前もって記入しておくことができます。下書きやその他の覚書きはB列のチェックを外すことで読み取りから無視されるようにしました(図2)。
連絡事項がない日には、パパの座右の銘の中から一つがランダムに表示され、その日一日をほどよい緊張感とともに引き締まったものにしてくれます(図3)。
また、あいかわらずログ機能が搭載されており、以下の項目をRaspberry pi上のデータベースに記録します。
- 朝起きた時の気分(4択)
- 朝起きた時間(上の4択からひとつを選んだ時間を持ってそれとす)— (1)
- 夜寝る前の気分(4択)
- 就寝時間(上の4択からひとつを選んだ時間を持ってそれとす)— (2)
(1)と(2)から昨晩の睡眠時間を計算することができるので、最近3日、7日、30日での平均睡眠時間が表示されるようになっています(図4)。(まだ30日分のデータがたまっていないので、30dのところは計算できていません)
朝起きた時、寝る前の気分のサンプリングは、睡眠時間との関連をみてみたい、という動機によるものですが、まずは半年か1年ほどデータ集めをすることにします。
ケネタンの画面と機能
全部で5つの画面が用意されています(図5)。
- 画面1:おはよう。どうですか。今朝の気分を選んでボタンを押す。結果はRaspberry pi上のデータベースに記録され、昨晩からの睡眠時間が確定します。
- 画面2:今日の連絡事項表示板(またはパパの座右の銘コレクションより一つを表示)
- 画面3:平均睡眠時間表示。連絡事項の画面と行ったり来たりします。
- 画面4:どうだったの、今日の一日は(倒置法)。確かにケネタンを「倒置」することでこの画面に遷移します(今これ書いてて気づいた)。気分を選んでボタンを押す。
- 画面5:おやすみ。数秒後にシステムはdeep sleepに移行します。
ユーザー(娘、結構几帳面)によるテストランで、画面4の入力を忘れて寝てしまった、画面1の入力を朝しなかった、という事例が結構几帳面なわりに発生することが判明。忘れたもんはしかたあるまい、ということで、睡眠開始、あるいは終了時刻のどちらか一方が欠けた場合には、その回の睡眠時間は計算から外すようにプログラムしました。
画面4での入力を忘れた場合にはシステムをリセット、画面2での入力を忘れた場合にはお昼の12時以降にとにかくボタンを押す(そこまで寝ていることはないとの仮定のもと、そういう時刻の起床入力はRaspberry pi側ではじくようにしました)ことでなんとかしています。もう少しスマートになんとかできないのかと、いつも意気込んで作業机に向かうのですが、ケネタンの顔(図6)を見ているうちに、まいっか、これで、と思ってしまうのです。
システム構成
システム構成は以下のようになっています(図7)。
AdafruitのMagTagがメインの仕事をします。ESP32-S2 wireless moduleとe-paperがついていて、circuitpythonでのプログラムが動きます。ボード上の加速度センサーを使い、ケネタンのうつ伏せ、仰向け状態の検出をしています。
Google Sheetに書き込んだその日の連絡事項または座右の銘は、Raspberry pi上のpython scriptを使って取得しています。
朝夕の気分の入力およびその時刻は、Raspberry pi上のpython scriptを介してデータベース(MariaDB)に記録されていきます。朝の気分入力をトリガーとして、平均睡眠時間の計算を行っていますので、昨夜からの睡眠時間が平均に即反映されます。データベーステーブルの構造は以下の通りです(図8)。
ケネタン自体(MagTag)に記録や連絡事項の保持をさせればもっとポータブルになって旅行にも連れていけるんですが、MagTag自体のメモリも限られていますし、記録用ファイルを持たせることにはチャレンジしませんでした。
ケネタン制作のいきさつ
グループワークだのプロジェクトワークだの試験勉強だのなんだかんだで連日夜遅くまで取り組む娘に、ちゃんと寝ないとだめだよ、何時間寝てるの?というところから話は始まりました。どうすれば毎日記録する気になるか、睡眠時間とその日の気分に関係はあるのかないのかなどを話すうち、朝起きたらその日の連絡事項を表示してくれると便利だよね、ぬいぐるみの下にディスプレイを持たせる、寝る前にひっくり返す、朝起きたら戻す、などと構想が固まっていき、名前は「どんだけ寝たん」、ドンダ・ケネタン、作っているのは「どこで買ったん」社、ということに即決まりしましたのですが、、、実際に作ってみようとすると以外に難しいところも多く、特に表示フォントファイルを既存のttfファイルから作るところでずいぶん時間がかかりました。
使用しているフォントについて
すべての画面のバックグラウンド画像にある「おはよう。どうですか。」「今日の連絡事項」など、またボタン上の文字には、「ちはや純」フォントを使わせていただきました。
連絡事項(日本語)、平均睡眠時間の表示部分には「あずきフォント」のttfファイルからひらがな、かたかな、アルファベットなど最小限のフォントのみを抜き出したものを使わせていただいています。
どちらのフォントもそれぞれのページからダウンロードしました。
MagTagの上の利用可能なメモリー容量はおよそ1MBで、あずきフォントそのもの(>5MB)をそのまま使用することができません。これは多くの漢字が含まれているためで、今回はしかたなく、ひらがな、かたかな、アルファベット、スペース、句読点などと、ごくごくわずかの漢字だけに文字を絞り込んでbdfファイルを作成して利用させていただくことにしました。
手順はAdafruitのlearning pageにあるものに従いましたが、主なステップは以下の通りです。(あれこれ試してようやくできるようになりました。)
- otf2bdfでttfファイルからpdfファイルを作る。情報源では、aptでのinstallがされていたので、Ubuntu on Windowsで作業を行った。-p optionでほしいサイズのポイントを指定する。今回の表示用途には12pt (default)でちょうどよかった。
- 得られたbdfファイルをFontForgeで開き、必要なcharacterを選択していく
- 選ばれなかった文字を除くため、選択を反転させる。Edit > Select > Invert Selection. 以下、FontForgeでの操作。
- Encoding > Detach & Remove Glyphs…
- File > Gnerate fonts –> save the file. Size was 12 pt in my case
- 最後にbdfをpcfにする。Go to https://adafruit.github.io/web-bdftopcf/, select “reduced” side of bdf file. pcf is downloaded automaticallyのだが、bdfのほうがサイズが小さく、そのままうまく表示できたので、今回はbdfファイルのほうを使っている。
今後
ひらがな、かたかなだけの表示ではちょっと伝わりにくいこともあるし、文字数が増えてしまう。落ち着いた気分の時に、使いそうな漢字をできるだけ含み、かつMagTagのメモリ容量にうまく入るフォントファイルを作り、表意の密度を上げる。
朝夕の気分サンプリングはつづけることとし、睡眠時間との関連をどう解析するか考える。