見出し画像

3Dプリンタで作る時計

全体図


3Dプリンタと電気モータを使って時計を作る方法を紹介します。時計は歯車がたくさん入っているイメージがありますが無駄な歯車は1つもありません。全ての歯車が意味と機能を持っています。それについても1つ1つ説明していきます。

回転数

機械部品の回転数はrpmで表します。これは1分間に回転する回数を数えたものです。rotate/minの略になります。時計では秒針は1分間に1回転しています。つまり秒針は1rpmということになります。時計の文字盤上ではこの動きが1番早いものになります。次に分針(長い針)と時針(短い針)の回転数を考えてみます。

分針は1時間(60分)で1回転します。rpmで表すと1/60rpmとなります。1分の60倍の60分で1回転しています。時針は12時間(720分=12x60)で1回転します。rpmで表すと1/720rpmとなります。1分の720倍の720分(12時間)で1回転となります。以上で時刻表示に必要な回転数が求まりました。まとめると以下のようになります。
時針:1/720rpm
分針:1/60rpm
秒針:1rpm

動力(モータ)

動力には電気モータを使います。様々なモータがあります。クオーツ制御で誤差の少ない時計を作ることも可能です。今回は簡単に作れる方法にしたいので一定回転数で回るシンクロナスモータを使うことにします。AC100V(コンセントの電源)で回るモータです。日本電産に1rpmで回るモータがあります。D-5Nシリーズ こちらを時計の動力として使いたいと思います。回転数と回転方向は固定のモータです。購入するときに間違わないように気をつけてください。このモータは電源周波数で回転数が変わります。日本国内では50Hzと60Hzがありますので地域に合わせてモータを選んでください。電源周波数についてはこちら(北海道電力の資料)などを見てください。

モータの回転方向は出力軸側から見て「時計回り」「反時計回り」で区別されます。時計回りをClock Wiseの略でCWと表記、反時計回りをCounter Clock Wiseの略でCCWと書きます。このサンプルではCWの1rpmのモータを使っています。

60Hzのモータは共立エレショップのこれ 、50Hzは千石電商のこれなどで購入できます。Amazonで販売しているシンクロナスモータは起動のたびに回転方向が変わるタイプがあるので注意してください。

歯車の基本

歯車は車に歯がついた物です。歯が噛み合うことにより回転をロスなく伝えることができます。噛み合った歯車は回転方向が逆になります。

噛み合う歯車の歯は同じサイズにする必要があります。この歯のサイズをモジュールと呼びます。モジュールは一般的な歯車では0.3〜5.0程度まであります。モジュールが小さくなるほど歯のサイズが小さくなります。3Dプリンタで歯車を作る場合はノズル径0.4mmの一般的な3Dプリンタの場合はモジュール1.5以上にした方が良いでしょう。歯車の溝の部分が寸法通りに出力できるのか?という事が関係してきます。また歯車同士の軸間距離とも関係してきます。

歯車のモジュールと歯車の直径は関係があります。歯車の直径は基準円直径と歯先直径があります。歯先直径は歯車の外径のことです。基準円直径は歯車同士が噛み合う基準円の直径になります。モジュール、基準円直径と歯数の関係は次の式で決まります。

基準円直径[mm] = モジュール x 歯数

歯車の噛み合い

歯車は歯同士が噛み合いながら回ります。歯車同士の間隔は基準円直径で決まります。歯車同士の距離を軸間距離と呼びます。歯車Aと歯車Bがある場合、軸間距離はそれぞれの基準円の半径を足したものになります。

軸間距離=歯車Aの基準円の半径+歯車Bの基準円の半径

ただし、この通りにやると歯車同士がぶつかりスムーズに回転しない事があります。これは作った歯車が設計寸法通りに出来上がっているのか?という問題が関係してきます。特に3Dプリンタで歯車を作る場合には重要です。そこで若干の隙間を空けておきます。3Dプリンタで作る歯車の場合は0.2〜0.4mm程度の隙間を入れておきます。ただし、あまり大きな隙間を入れると歯車が空転する遊びができてしまいます。以上の事から実際の軸間距離は

実際の軸間距離=歯車Aの基準円の半径+歯車Bの基準円の半径+0.2〜0.4mm

となります。

歯車の加速と減速

同じ歯数の歯車を回した場合には2つの歯車は同じ回転数で回ります。回転方向が違うだけです。違う歯数の歯車を回した場合には減速、もしくは加速になります。回転数を増やしたい場合には加速するように歯車の数を決めます。この場合にはトルクは減ります。減速にした場合のメリットはトルクを増やせることです。今回の時計ではモータが1rpm、分針は1/60rpmなのでモータのトルクの60倍になります。実際には伝達ロスもあるので単純にそうはなりませんが、計算上はそうなります。

歯数と回転数の計算

2つの歯車AとBがある場合、歯数をZA、ZBとすると回転数は歯数の比で変わります。例えば次の図のように歯車Aの歯数が20、歯車Bの歯数が10の場合を考えます。

スクリーンショット 2021-12-02 20.21.09
歯車Aが20歯 歯車Bが10歯

歯車Aが1回転すると歯車Bは2回転します。逆にいうと歯車Bが1回転すると歯車Aは1/2回転します。このように歯数の異なる歯車を組み合わせることにより回転数を変えながら力を伝達することが可能となります。
また次図のような歯車の組み合わせを考えてみます。

黄色い歯車:20歯 赤い歯車:20歯、中央が5歯 青い歯車:10歯

このような組み合わせで青い歯車を8回転した場合を考えてみます。青が8回転すると赤が4回転します。赤の歯車は中央に小さい歯車(カナ歯車)がついています。これも一緒に回り黄色い歯車を回します。黄色は20歯、赤のカナは5歯、つまり1/4。赤が4回転すると黄色は1回転します。逆に言うと黄色を1回転させると青は8回転します。
最終的には青が8回転すると黄色が1回転することになります。このように複数の歯車、カナ歯車を組み合わせることにより加速や減速を行うことが可能です。

時計の輪列

歯車の並びを時計では輪列と呼びます。モータの回転(1rpm)を減速して分針の1/60rpm、時針の1/720rpmといった回転数を作っていく必要があります。

まずはモータの1rpmから分針の1/60rpmを作る輪列を考えてみます。仮にモータのピニオンギアを5歯とすると300歯の歯車と噛み合わせると5/300 = 1/60で分針の回転速度を作ることができます。ただしこれでは歯車が大きくなりすぎるのでもう1つ歯車を入れて2段で1/60になるようにします。

さて、ここで計算をする必要が出てきます(逆に言うと計算さえすればできる)。表計算ソフトで計算しても良いですが、歯車の組み合わせ数が多数になります。そこでProcessingを使い計算してみます。以下のコードはモータのピニオンギアを5〜20歯、中間歯車の歯数を30〜50、中間歯車のピニオンギアの歯数を6〜20の範囲で分針歯車の歯数を計算します。条件に合う歯数をコンソール画面に出力します。

void setup() {

  float motorRPM = 1;

  println("motorGear, midGear, midGearPinion, minGear");
  for (int motorGear = 5; motorGear<=20; motorGear++) {
    for (int midGear = 30; midGear<=50; midGear++) {
      for (int midGearPinion = 6; midGearPinion<=20; midGearPinion++) {

        float midGearRPM = motorRPM * (float(motorGear)/float(midGear));

        float minGearRPM = 1.0/60.0;

        float minGear = (midGearRPM * midGearPinion)/minGearRPM;
        float dt = abs(minGear - round(minGear));
        if (dt < 0.01) {
          if (minGear < 80.0) {
            println(motorGear+", " +  midGear+", " + midGearPinion+", " + minGear);
          }
        }
      }
    }
  }
}

void draw() {
}

このコードを実行するとコンソールに次のように出力されます。分数の計算になるので小数点以下の数字が出てきますが74.9999とかは75という事になります。

motorGear, midGear, midGearPinion, minGear
5, 30, 6, 59.999996
5, 30, 7, 70.0
5, 32, 8, 74.99999
5, 35, 7, 59.999996
5, 36, 6, 50.0
5, 36, 9, 74.99999
5, 40, 6, 44.999996
5, 40, 8, 59.999996
5, 40, 10, 74.99999
5, 42, 7, 49.999996
5, 44, 11, 74.99999
5, 45, 6, 40.0
5, 45, 9, 59.999996
5, 48, 8, 49.999996
5, 48, 12, 74.99999
5, 50, 6, 36.0
5, 50, 7, 41.999996
5, 50, 8, 48.0
5, 50, 9, 54.0
5, 50, 10, 59.999996
5, 50, 11, 66.0
5, 50, 12, 72.0
5, 50, 13, 78.0
6, 30, 6, 72.0
6, 35, 7, 72.0
6, 36, 6, 59.999996
6, 36, 7, 70.0
6, 40, 6, 54.0
6, 40, 7, 63.0
6, 40, 8, 72.0
6, 42, 7, 59.999996
6, 45, 6, 48.0
6, 45, 7, 56.0
6, 45, 8, 64.0
6, 45, 9, 72.0
6, 48, 6, 44.999996
6, 48, 8, 59.999996
6, 48, 10, 74.99999
6, 50, 10, 71.99999
7, 35, 6, 72.0
7, 36, 6, 70.0
7, 40, 6, 62.999992
7, 42, 6, 59.999996
7, 42, 7, 70.0
7, 45, 6, 56.0
7, 48, 8, 69.99999
7, 49, 7, 59.999996
8, 40, 6, 72.0
8, 45, 6, 64.0
8, 48, 6, 59.999996
8, 48, 7, 70.0
9, 45, 6, 72.0
10, 48, 6, 74.99999
10, 50, 6, 72.0

大きい歯車になると時計のサイズも大きくなります。バランスの取れた感じの組み合わせを選択します。今回は
モータピニオンギア:5歯
中間歯車:45歯
中間歯車ピニオンギア:6歯
分針歯車:40歯
を選びました。

分から時間への輪列

分から時間への輪列はちょっと工夫が必要です。時計は分と時の針が同軸になっています。この仕組みをデザインし実現した人、誰だか知らないけど天才です。時間のシャフトが中空になっていて分の軸がそこを貫通しています。針はそれぞれのシャフトの先端につきます。

グレーが分、濃いグレーが時間

分の歯車から時間の歯車に力を伝達するにはもう1枚の歯車を使います。この歯車を日の裏歯車と呼びます。この歯車で分(1/60rpm)から時間(1/720)へ減速を行いさらに分と時間の同軸を実現しています。

青い歯車が日の裏歯車

日の裏歯車の歯数を決めるには条件があります。分から時間への減速、分と時間を同軸にするための歯数。同軸にするためには分針のピニオンギアと日の裏歯車の歯数、日の裏歯車と時間の歯車の歯数に条件があります。次のような関係になります。
分針ピニオンの歯数+日の裏の歯数=日の裏ピニオンの歯数+時間の歯車の歯数
上図の例では
分針ピニオン歯数:6
日の裏歯数:36
日の裏ピニオン歯数:14
時間の歯車歯数:28
6+36 = 14+28
となってます。この条件を満たし1/60rpmから1/720rpmに減速する歯数を探します。先ほどと同様にProcessingで計算してみます。

void setup() {

  float minGearRPM = 1.0/60.0;
  float hourGearRPM = 1.0/720.0;
  println("minPinionGear, hinouraGear, hinouraPinionGear, hourGear");
  
  for (int minPinionGear = 6; minPinionGear <=30; minPinionGear++) {
    for (int hinouraGear = 20; hinouraGear <=60; hinouraGear++) {
      for (int hinouraPinionGear = 10; hinouraPinionGear <=40; hinouraPinionGear++) {
        int hourGear1 = (minPinionGear + hinouraGear) - hinouraPinionGear;
        if (hourGear1 > 20) {
          float hinouraGearRPM = minGearRPM * (float(minPinionGear)/float(hinouraGear));
          //println(hinouraGearRPM);

          float hourGear2 = (hinouraGearRPM * hinouraPinionGear)/hourGearRPM;
          float d = abs(hourGear1 - round(hourGear2));
          if (d < 0.01) {
            if (hourGear1 < 80) {
              println(minPinionGear+", " +  hinouraGear+", " + hinouraPinionGear+", " + hourGear1);
            }
          }
        }
      }
    }
  }
}

void draw() {
}

コンソールに表示される結果は次のようになります。

minPinionGear, hinouraGear, hinouraPinionGear, hourGear
6, 29, 10, 25
6, 31, 11, 26
6, 36, 14, 28
6, 41, 17, 30
6, 44, 19, 31
6, 47, 21, 32
6, 50, 23, 33
6, 53, 25, 34
6, 56, 27, 35
6, 57, 28, 35
6, 60, 30, 36
7, 36, 13, 30
7, 38, 14, 31
7, 43, 17, 33
7, 45, 18, 34
7, 48, 20, 35
7, 51, 22, 36
7, 54, 24, 37
7, 56, 25, 38
7, 57, 26, 38
7, 60, 28, 39
8, 32, 10, 30
8, 34, 11, 31
8, 36, 12, 32
8, 38, 13, 33
8, 40, 14, 34
8, 45, 17, 36
8, 47, 18, 37
8, 50, 20, 38
8, 52, 21, 39
8, 55, 23, 40
8, 58, 25, 41
8, 60, 26, 42
9, 45, 16, 38
9, 47, 17, 39
9, 49, 18, 40
9, 54, 21, 42
9, 59, 24, 44
10, 37, 11, 36
10, 39, 12, 37
10, 41, 13, 38
10, 43, 14, 39
10, 45, 15, 40
10, 47, 16, 41
10, 49, 17, 42
10, 54, 20, 44
10, 56, 21, 45
10, 58, 22, 46
11, 36, 10, 37
11, 38, 11, 38
11, 54, 19, 46
11, 56, 20, 47
11, 58, 21, 48
12, 37, 10, 39
12, 44, 13, 43
12, 46, 14, 44
12, 48, 15, 45
12, 50, 16, 46
12, 52, 17, 47
12, 54, 18, 48
12, 56, 19, 49
12, 58, 20, 50
13, 38, 10, 41
13, 43, 12, 44
13, 45, 13, 45
13, 47, 14, 46
14, 39, 10, 43
14, 44, 12, 46
14, 46, 13, 47
14, 53, 16, 51
14, 55, 17, 52
14, 57, 18, 53
14, 59, 19, 54
15, 40, 10, 45
15, 45, 12, 48
15, 52, 15, 52
15, 54, 16, 53
16, 41, 10, 47
16, 46, 12, 50
16, 51, 14, 53
16, 53, 15, 54
16, 60, 18, 58
17, 42, 10, 49
17, 47, 12, 52
17, 52, 14, 55
17, 59, 17, 59
18, 48, 12, 54
18, 53, 14, 57
18, 58, 16, 60
18, 60, 17, 61
19, 49, 12, 56
19, 54, 14, 59
19, 59, 16, 62
20, 47, 11, 56
20, 50, 12, 58
20, 55, 14, 61
20, 60, 16, 64
21, 45, 10, 56
21, 48, 11, 58
21, 56, 14, 63
22, 57, 14, 65
23, 55, 13, 65
23, 58, 14, 67
24, 47, 10, 61
24, 50, 11, 63
24, 53, 12, 65
24, 56, 13, 67
25, 48, 10, 63
25, 51, 11, 65
25, 54, 12, 67
27, 49, 10, 66
28, 53, 11, 70
28, 56, 12, 72
28, 59, 13, 74
30, 51, 10, 71
30, 54, 11, 73

ここから適当な歯数を選択します。今回は
6, 36, 14, 28を選択しました。

[まとめ]時計の輪列

今までの結果をまとめると次のようになります。
モータピニオンギア 5歯 1rpm
中間歯車-ピニオン 40歯-6歯 1/8rpm
分針歯車 45歯-6歯 1/60rpm
日の裏歯車 36歯-14歯 1/360rpm
時間歯車 28歯 1/720rpm

輪列は次のようになります。

黒:モータピニオンギア 赤:中間 薄いグレー:分 青:日の裏 濃いグレー:時間

軸受とプレート

軸受とギア同士のクリアランス(隙間)を考えて歯車の配列を検討し具体的な設計を行います。軸受はベアリングやジュラコンのブッシュを入れて抵抗を下げる方法もありますが、今回はそれほど考えなくてもよさそうなので穴にシャフトを入れるだけの単純な構造にします。

断面図

このサンプルでは上下のプレートで歯車を挟み込むように歯車を固定しています。

軸の直径は7.0mm、軸穴の直径は7.5mm。クリアランスが0.25mmにしています。上下方向のクリアランスは0.2mm+0.5mmで0.7mmとしています。

3D CADファイル(Fusion360)

以下にここで紹介したCADファイルを公開しています。

Fusion360で開いて3Dプリンタで出力すれば時計が作れます。ご利用は自由にどうぞ。ただし商用使用はしないでください。またこれを使ってこんなのが出来たとかありましたら参考にしたいのでお聞かせください。Twitter:@mkbtm

Fusion360での歯車のモデリング

Fusion360で歯車を作るにはアドインを使うと楽に作成できます。いろんなアドインがありますが、私は「Helical Gear+」を使っています。Fusion360のツールのアドイン→Fusion360 App Storeからインストールできます。mac版、win版があり無料です。Helical Gear Plus | Fusion 360 | Autodesk App Store

インストールするとソリッドの作成メニューに「Helical Gear+」が出てきます。

普通の歯車(External Gear)、内歯(Internal)、ラックギア(Rack)を作ることができます。Helix Angleに角度を入れるとはすば歯車を作ることができます。
OKを押すと歯車が作成されます。コンポーネントになっています。コンポーネントのスケッチに基準円も入っているので位置を決める時の参考にすることができます。コンポーネントの中にボディが入っているので加工したい場合にはボディーをコピーして普通にボディーにしてやれば加工できます。


この記事が気に入ったらサポートをしてみませんか?