円筒形デジタル時計
ポイント- 部品点数わずか、作りやすく実用的
- WiFi (ntp) 経由の自動時刻合わせ
- シンプルでミニマルなデザイン
コンセプト
3Dプリンタでデジタル・アナログ双方の時計を作成しているが、どうしてもデジタル時計は部品点数が増加してしまう。機械式7セグ時計は部品点数が約140個もあり、組み立ても調整も容易ではない。最初に作成した回転ドラム式デジタル時計も、サーボモーター1個で駆動するという目標のために切り替え機構などで部品点数が増えた。もっと簡単にできないか。いくつかのアイディアはあったが、作りやすさや部品の入手性を考えるとなかなか最適解が見いだせなかった。
それらの問題を解決する助けになったのが、このステッピングモーター 28BYJ-48 とマイコン ESP32 である。28BYJ-48 は非力だが減速ギアが内蔵されており、速度を問わなければ便利に利用できる。なにより、ドライバアンプ(ULN2003)がセットで付属して極めて安価であり、国内 (Amazon) でも3セット699円で入手できる。小型サーボよりも安いのである。サーボと違い原点位置はわからない(機械原点がない)が、何周でもぐるぐる回せるのは大変便利である。サーボに比べて静かなのも良い。
もう1つは、WiFi や Bluetooth の通信モジュールを備えた ESP32 マイコンである。機械式7セグ時計のように桁間を機械で連動している時計は、マイコン部分が時刻を認識している必要はなく、1分に一度、時刻をすすめるだけで良い。それに対し、回転ドラム式デジタル時計のように各桁が独立した時計では、繰り上がりの制御を電子的に行う必要があるために、マイコンが現在時刻(例えば 11:59 なのか 12:00 なのか)を認識していなければならない。これは時刻合わせの手間や方法に影響する。機械側の原点合わせ(0合わせ)と相まって厄介な問題になる。しかし WiFi で現在時刻を持ってくることができれば、時刻合わせの仕組みに関する問題が解決する。Arduino に比べると、ESP32 はメモリ容量や計算速度の点でも圧倒的に高性能なデバイスだが、これも買い方(AliExpressなど)によっては1つ5ドル前後で入手できる。ただし技適がついているデバイスを選ぶことが肝要である。ともあれ、そんなことで、このシンプルな時計の目処が立った。
モーターは最下位桁に直結しており、直接動かせるのはこれだけである。しかし上位桁は大きな遊びを持って連結されており、モーターを一方向にぐるぐると回転し続けるといつかは特定の数値に合わせることができる。これを利用し、最上位桁から順番に、時計回り、反時計回り、また時計回り、・・と順にセットしていけば、いつかは全桁に任意の数を表示できるというのが原理である。プログラムは少し複雑になるが、任意の表示から最小の手順で時刻更新するプログラムを作成した。毎分1回、時刻が進むときの90% は最下位桁の更新だけであり、これは一瞬で完了する。最上位桁まで更新すると少し(1分程度)時間が必要になるが、よほど時間を気にする場合でなければ大きな問題ではない。
理論上、桁数はいくらでも増やすことができるため、年・月・時・分を表示する8桁版も作成してみた。ただし、最上位桁の更新があると数分を要する。もっとも最上位桁の更新は電源投入時以外には、年に1回しかないのであるが。見せたい数値以外にも、上下にたくさんの数字が並ぶので少し時刻表示がしづらいが、この「数字だらけ」の見た目は少しクレイジー感があって面白い面もある。カバーを付ければよいのだが、面白くないので敢えて付けていない。
すべての桁を手動で原点合わせする必要はないが(一方向にぐるぐる回せばすべての桁が揃う)、最下位桁の位置だけは何らかの方法で合わせる必要がある。そこで、反射型のフォトセンサを用いて自動で原点合わせをする手法も提供した。なくても手動で合わせれば済むことだが、停電後にちゃんと元通りに復帰させるには必要となる。
例によって3DデータとプログラムはThingiverseで公開している。