曜日が自動で決まる万年カレンダー
ポイント- 一度セットすれば、3月1日から翌年の2月末まで、すべての日付について正しい曜日を自動表示
- すべての円筒はどちら向きにでも、何周でも回せ、入力にも出力にもなる構造
- 円筒形のミニマルな造形に、すべての歯車やクリックストップ機構を無理なく内蔵
- 遊星歯車はプリントするだけで一体の組み立て済みになる
- マルチマテリアル3Dプリンタを利用して美しく彩色可能
コンセプト
変わりだね時計作りの面白さの1つに、時・分・秒が10進法に従わないことがあるが、カレンダーはそれ以上に複雑で、それゆえ興味の尽きないテーマだ。大の月と小の月が不規則に並ぶのに加え、2月という厄介者がおり、これの長短が変化する。これにどう対処するのかが問われるのだ。そこでこれまで、うるう年を含め、月末を正しく処理できる永久カレンダー*付き時計や、文字盤がキャタピラ状になっていて4種類の月の長さを正しく表示できる万年カレンダー*、無限軌道型カレンダーなどを設計してきた。しかし実は、趣味で3Dプリンタものづくりを開始したごく初期、約5年前にはすでに、この円筒形の自動曜日表示カレンダーを設計し公開していた。今回、その設計をもとに大幅改良したので、その動作のしくみも合わせて解説したい。
*日本語では、腕時計に搭載されているような毎日1日ずつ進むカレンダーのうち、うるう年の2月を含め月の大小を正しく処理できるものを永久カレンダーと呼ぶ。また、曜日と日付の関係を手動で更新することで永遠に利用できるカレンダーのことを万年カレンダーと呼ぶ。ただし英語圏ではいずれも "perpetual calendar" で、呼称では区別できない。
設計・動作原理

カレンダーの形状はシンプルな円筒形で、台座はその表示部と同じ半径の円筒を切断した形状になっている。月・日(2桁)・曜日に対応した4つの円筒(ドラム)が搭載されていて、これが回転することで様々な日付が表示される。ただ、これだけならよくある万年カレンダーと大きな違いはないし、設計は簡単だ。問題は、どうやって正しい曜日が表示されるようにするのか。万年カレンダーの「ジレンマ」は、日付を更新し忘れたときなど、新しく設定し直すときに「他のカレンダー」(記憶に頼ることも含む)を参照しなくてはならないところ。この不便をなくすにはどうしたらよいかを考えた。

頭の中や紙の上でいろいろと試行錯誤した結果、たどり着いたのがこの「遊星歯車」を用いた設計だ。普通の歯車(減速機)では2つの歯車の回転角の関係(減速比)が決まっているが、遊星歯車は3つの回転角の関係を決めることができる。ということは、2つの回転角を入力とし、それを合成(加減算)して出力することができるわけだ。さらに複数の遊星歯車を連結することで、多変数の一次多項式を自由に実現できる。これにより月と日付の回転角を合成すれば、曜日の円筒を望み通りに回転させることができる。しかし前述のように日付のルールは複雑で、特に曜日の周期は素数の "7" で、日数や月数とは互いに素だ。本当にそのようなカレンダーが設計できるのか。

設計の鍵は、すべてのドラム上の表示の個数を 7 の倍数にすることだ。また、ドラム間の回転角の関係は整数比にする。これにより、円筒を何周グルグル回しても、互いの関係が徐々にずれていくことがない。しかし、月は1月〜12月の12個、日付の1の位は0〜9の10個あるため、7 では足りない。そこで、月と日付のドラムにはその2倍の14個所の表示部を備えるようにし、それらと曜日のドラムの回転角の関係が $2:1$ になるように遊星歯車を設計する。各ドラムの回転角を左から順に $m, d_1, d_2, w$ とすると、$w = -2m + 2d_1 -2d_2$ のような関係になるわけだ。本当は負の係数は避けたいところだが、遊星歯車の性質上やむを得ないし、文字や数字を配置する順番を逆にすればよいので問題はない。

あとは各要素をどう配置するか、ということになる。日付の1の位は単純に 0 から 9 を順に並べるだけで良い。しかし表示部は14箇所あるので、4箇所が余ってしまう。そこを空白にしておいてもよいのだが、上図のように 3, 4, 5, 6 を埋めても良い。0 から 13 を順に並べたとして、そのとき 10 から 13 までは、それを 7 で割った余りを並べるのだ、と言うこともできるし、日付のドラムを1回転するうちに曜日のドラムは2回転するので、同じ曜日に対応したポジションに同じ数字を埋めた、ということもできる。
次に10の位だが、これは飛び飛びに並ぶことになる。0 に対し 10 は、曜日としては3つずれる。なぜなら10を7で割った余りは3だからである。なので、10の位では 0, 1, 2, 3 を3つずつ離して並べる。先と同様、日の10の位が1回転する間に週のドラムは2回転するので、同じ曜日に対応したところに同じ数字を埋める。それでも6箇所が空くが、これを空白にしておくと 0 のときと区別しにくいため、あえて x を置くことで「使用禁止」とはっきりわかるようにした。

月の配置も同様に、1月進むと「曜日がどれだけずれるか」という観点で並べていく。3月は31日まであるので、4月は3月に対して(同じ日付でも)曜日が3つずれる。なので、3月 (MAR) に対して4月 (APR) は3つずれたところに配置する。また、4月は小の月なので、次の5月 (MAY) は2つずれたところに置く。このようにして配置していくと、14箇所の表示部に、うまく重ならずにすべての月を配置することができる。2箇所が空くので、これも同様に反対側の月と同じもので埋めておく (OCT, AUG が該当する)。
うるう年によって長短が生じる2月の処理をどうするかだが、これは、3月を開始月にすることで回避する。2月が終わり3月1日になったら、曜日の再設定を行う。この再設定のずれ量が、うるう年と平年で異なるわけだ。もっとも、もし2月が常に28日であったとしても、1月ないし2月から順に月を並べていくと、3つの月が重複するところが現れてしまう(2, 3, 11月が同じ場所を取り合ってしまう)ので、3月始まりとすることは必須条件となる。
このように月と日付を配置すれば、それらを進めていくと曜日がそれに応じて正しく進んでいくことがわかる。それだけでなく逆回転でも正しく動作するし、さらには「日付と曜日を決めて、それに対する月を調べる」ような逆向きの使い方もできる。前述の多項式、$w = -2m + 2d_1 -2d_2$ の関係が常に保たれるので、この式を移項して、入出力関係を入れ替えることができるのだ。
動作原理について解説した動画も作成したので、よければご覧いただきたい。
改良点

寸法や、基本的な設計は4年以上前の初期型から変わっていないが、その間の3Dプリンタの性能向上や組み立て方のノウハウ蓄積を反映して一部を再設計した。まず遊星歯車だが、従来の設計は「プリント時に歯車同士が癒着しない」ことを最優先に設計していた。そのため歯車の歯と歯の隙間が一定以上となるよう、正しい歯形(インボリュート)でなく、細く尖った歯形としていた。歯車は3Dプリントでは定番の「やまば歯車*」(ダブルヘリカルギア、ヘリンボーンギア)となっているため歯形が不正でもそれなりにスムーズに回転するが、やはりインボリュートのほうが好ましいのはかわらない。従来の3Dプリンタはヘッド速度が減速する鋭角の角が膨らんだりすることが多かったが、最近のものはそのような現象が高度に補正されていることなどで癒着が起こりにくくなっているため、今回、インボリュート曲線で再設計した。歯数の設定などは変更していない。
*やまば歯車を用いることで、歯車が軸方向にずれて抜けることを防ぐことができる。これにより、3Dプリンタの造形テーブルから取り外すときなどに壊れにくくなり、プリントしただけで組み立て済みになる歯車を実現できる。また歯車同士が横にズレたりねじれたりしにくく、動作も安定になる上、歯の当たり方が均一で動きも滑らかになる。機械の歯車のような金属切削では非常にコストがかかる形状だが、3Dプリントでは追加コストがいっさいかからないため、広く用いられている。

もう1つの改良点がクリックストップである。動画中でも解説しているように、従来型はクリックストップがなかったため、日付や曜日をきれいに1列に揃えるのが面倒だった。そこで、定位置にカチッとはまるクリックストップを設けたいと考えていたが、各ドラムの内側は遊星歯車に占められていて、クリックストップを設ける部分がない。円筒を支えるフレーム部に搭載するにも、回転方向によらずスムーズに動作し、位置ズレしにくく、スペースをとりすぎないバネを安定に仕込む方法がなかなか見つからず、そのままになっていた。そこで今回考案したのは、上の写真のような「コの字型」のバネである。周方向(回転方向)の剛性が高く、かつ回転方向に対して対称となっており、平面部分があるため3Dプリンタによる造形容易性も高い。1箇所だけに搭載すると円筒に斜めの力がかかり、隙間が不均等になったり滑りが悪くなる恐れがあるため、ほぼ対称の位置に2箇所備えつつ、日付表示部(正面)の隙間が少し閉じるように意図した配置となっている。
その他、マルチカラー3Dプリンタに対応したデータとしたほか、各部の固定にプラスチック溶接の代わりにネジを使うようにした。これにより何度でも組み立て・分解できる上、動きのスムーズさと隙間のつまり方のトレードオフを微調整することもできる(ネジを締めるほど隙間が詰まるが、動きが固くなる)。
製作

マルチカラー3Dプリンタを用いると、文字に色を付けた状態のプリントを得ることができる。色が変化する部分が高さ方向に大きいとそれだけ出力時間が伸び、無駄なフィラメントも増えるが、この円筒形の構造であればやむを得ない。オリジナルサイズはやや大きいので、今回はすべて 75% に縮小してプリントした。この場合、Bambu Lab P1S プリンタ(ビルドテーブル:256 x 256mm)であればすべての部品を一度にプリントできる。このように色付けした場合で約11時間、色付けしなかった場合は6時間少々でプリントできる。
組み立てガイドの動画も作成した。説明しながら組み立てているこの動画が全部で15分、よって慣れれば組み立てに10分もかからない。
例によって3DデータはinstructablesやThingiverse, Printables で公開しており、MakerWorldでも Bambu Lab のプリント設定込みのデータを公開している。