5時起きを支える技術 - Raspberry Piで作る二度寝を防止する目覚まし時計

この記事は「さくらインターネット(その2) Advent Calendar 2016」の19日目の記事です。

f:id:hogesuke_1:20161218210010j:plain

7時始業

さくらインターネットでは今年の10月より新たに「さぶりこ」という勤怠に関する制度が始まりました。
さぶりこについては横田さんのAdvent Calendarの記事で詳しく紹介されています。

自分の会社が「勝手に定時の30分早く帰って良い」となったら、どうなったか? - P2P today ダブルスラッシュ

自分はこの制度の中の「さぶりこフレックス」を使用し、ここ3ヶ月ほど就業時間を7時〜16時にしています。
7時始業とすることで満員電車を避けることができ、非常に快適な生活を送れています。

問題

しかし、ひとつ問題を挙げるとすれば、起きる時間も早くする必要があるということです。布団が恋しいこの季節に5時に起きるのは少々つらいときもあります。

この問題をどうにかできないかと考え、Raspberry Piを使って解決を試みることにしました。

作ったもの

今回「二度寝を防止する目覚まし時計」を作成しました。

普通の目覚まし時計では、アラームを止めて即刻布団に引き返せてしまいます。 これでは、二度寝も避けられません。なんとかして布団に戻れない状況を作る必要があります。

そこで、アラームを止めるために計算問題を解く必要のある目覚まし時計としました。 計算問題を解くうちに目が覚め、二度寝したい欲も和らぐだろうという狙いです。

また、さらに目を覚ましやすい環境を作るため、起床時に照明が自動的にオンとなるように照明コントローラーも作成し、目覚まし時計と協調動作するようにしています。

概要

f:id:hogesuke_1:20161219010251p:plain

Raspberry Pi Zeroを2台用いて実装しています。
1台は目覚まし時計、もう1台は照明をオン/オフするコントローラーです。

セットした時間の5分前にWebsocketを通じて照明がオンにされます。
そして時間がくるとアラームが鳴り、計算問題を解くことを要求します。

かといって、ずっとアラームが鳴りっぱなしというのも近所迷惑ですので、タッチセンサに触れている間はアラームを停止する仕組みとなっています。

また、起床時以外にはDash Buttonで照明を操作できるようにしています。 これは、今回作った照明コントローラーを取り付けたところ、手動でのスイッチ操作が困難になってしまったためです。完全に設計ミス。

実物

f:id:hogesuke_1:20161218210010j:plain f:id:hogesuke_1:20161218234317j:plain

実際に動かした様子

www.youtube.com 目覚まし時計を実際に動かした様子です。実際に運用する際には3桁の計算ぐらいが解く時間的に良いかもしれません。

www.youtube.com Dash Buttonを使って照明をオン/オフした様子です。サーボモーターでスイッチのオン/オフを切り替えています。
Dash Buttonの仕様で1回pushした後、しばらく次のpushを受け付けなくなる(10秒ほど)ようでちょっと困る場合もありそうです。

配線

hiramine.comさんの情報を参考にユニバーサル基板にハンダ付けしています。

LCD (Liquid Crystal Display) に文字列を表示する(WebIOPi 利用)

f:id:hogesuke_1:20161218210308j:plain

最初、メッキ線で全部配線しようと始めたものの、クロスできないことに気付いて途中からビニール線に切り替えました。完全に行き当たりばったりといった感じ。

電子工作の感想

今回初めて電子工作で機能を持ったものを作成しました。
そのなかで感じたことを簡単に挙げてみます。

お金がかかる

めっちゃお金がかかります。Piから始り、wifiドングル、ACアダプタ、センサ、LCD、その他各種パーツ、道具、あらゆるものにお金がかかります。
パーツ1個だけ見ると安く見えますが、それらを組み合わせひとつの機能するものを作ろうとすると結構な金額になります。
今回作ったものもすべて合計すると諭吉さんが2枚ほど飛んでいるような気がします…。

■追記

何にどれくらいのお金がかかったか下の記事にまとめました。

電子工作は案外お金がかかる。何にどれぐらい費用がかかったか計算してみました。 - 無理しない感じ

時間がかかる

ソフトウェアの世界とは異なり、パーツや道具を手に入れるのに時間がかかります。npm install で欲しいものをすぐに取得できる世界観ではありません。
これは結構じれったくて、作りたい熱があるときに「あっ、あれ足りないじゃん!」みたいなことになると萎えます。
なので、パーツを買うときには入念に足りないものがないか確認した方がいいです。送料もかかるしね。

学ぶのが大変

知識があまりにも乏しいのに加え、どこから学べばいいかの道筋を示す情報も少ないように感じました。
「センサをつなげて動かしてみた」というところから次へ進むステップが見出しづらく、やりたいことを実現するために何をどうやって学べばいいのかなーと今も手探り状態です。

終わりに

今回はローカルネットワークにしか繋がっていないのでIoTって呼ぶことができないのですが、次はインターネットに繋いでIoTと呼べるものを作ってみたいです。

ソースコード

GitHub - hogesuke/alarm-clock: 電子工作でつくる目覚まし時計
GitHub - hogesuke/light-controller: サーボモーターで照明をオンオフするコントローラー
GitHub - hogesuke/light-dash-button: 照明をdash-buttonで制御

クレジット

アラーム音には Music is VFR さんのものを利用させて頂きました。

参考

LCD (Liquid Crystal Display) に文字列を表示する(WebIOPi 利用)
Raspberry Pi でUSBスピーカーを動かす - それマグで!
サーボモーター(SG-90)を試す - Raspberry Pi 備忘録 / Mbedもあるよ!
GitHub - hortinstein/node-dash-button: A small module to emit events when an Amazon Dash Button is pressed