機械設計や3Dプリンターでの工作において、「遊星歯車機構(プラネタリーギア)」は非常に人気のあるギミックです。省スペースで大きな減速比を得られるのが特徴ですが、いざFreeCADなどで3Dモデリングしようとすると、以下のような壁にぶつかります。
- 「太陽歯車と遊星歯車の歯数、どう設定すれば噛み合うの?」
- 「遊星歯車を均等に配置できない(等配条件のエラー)」
- 「内歯車(遊星リング)との干渉を避ける計算が面倒…」
そこで今回は、FreeCAD上で動くPythonプログラム(マクロ)を開発し、遊星歯車機構を完全に自動生成するツールを作成しました。
単に3Dモデルを作るだけでなく、機構条件の自動チェックや、完成後のアニメーション動作までサポートした実践的な内容です。本記事では、その機能と実装の裏側について詳しく解説します。
動画でササっと知りたい方はこちら➡こちら
開発した遊星歯車生成ツールの主な機能
今回開発したプログラム(MakePlanetaryGear.py)は、FreeCADの拡張機能として動作します。主な見どころは以下の4点です。
1. PySideを活用したリッチなGUIとリアルタイム計算
プログラムを起動すると、モジュール(歯の大きさ)や各歯車の歯数を入力できる専用ダイアログが立ち上がります。PySide2 および PySide6 の両方に対応させており、FreeCADのバージョンを問わず動作します。数値を変更すると、リアルタイムで「減速比」や「ピッチ円直径」が計算・表示されるため、設計のトライ&エラーが非常に簡単です。
2. 機構成立の「4大条件」を自動バリデーション
遊星歯車は、適当に歯数を決めると物理的に組み立てられません。本ツールでは、生成実行前(OKボタン押下時)に以下の条件を内部で計算し、エラーを未然に防ぎます。
- 中心距離の整合性:
Z_ring = Z_sun + 2 × Z_planet - 等配条件(組み立て可能か):
(Z_sun + Z_ring) / 遊星歯車の数が整数になるか - 隣接干渉: 遊星歯車同士がぶつからないか
- 内歯車干渉: 内歯車と遊星歯車の歯数差が適切か
条件を満たさない場合は、「設定可能な遊星歯数の候補」をダイアログで提案してくれる親切設計です。
3. バックラッシと歯先カットを考慮したソリッド生成
3Dプリンターで出力することを想定し、歯車がガッチリ噛み合いすぎて動かなくなるのを防ぐ「バックラッシ(隙間)」と「歯先カット量」をパラメータで調整可能にしました。インボリュート曲線を近似したポリゴンを押し出し(Extrude)、Cut/Fuse処理を行うことで、実用的なソリッドモデルを生成します。
4. 3つのモードで動く!アニメーション制御機能
モデリング完了後、画面右上に「アニメーション制御ウィンドウ」が自動で出現します。
- 太陽入力 / 内歯固定(標準減速)
- 内歯入力 / 太陽固定
- キャリア固定(逆転)
これら3つの作動モードを切り替えながら、スライダーで回転速度を調整し、実際の動きをFreeCADのビューポート上でシミュレーションできます。
実装のポイントとコード解説
本ツールはPythonで記述されており、FreeCADのAPI(FreeCAD, FreeCADGui, Part)をフル活用しています。エンジニア向けに、いくつか実装のコアとなる部分を解説します。
インボリュート近似ソリッドの生成
歯車の形状生成を担う create_gear_solid 関数では、圧力角20度の標準平歯車をベースにしています。
def create_gear_solid(m, z, height, internal=False, backlash=0.15, tip_relief=0.05, hole_radius=0.0):
# (中略) ピッチ角、歯先角、歯底角の計算
a_pitch = half_angle
a_tip = half_angle - ((ra - r) * tan_alpha) / r
a_root = half_angle - ((rf - r) * tan_alpha) / r
# (中略) 頂点を計算し、Part.makePolygonでワイヤー化して押し出し
数学的な厳密なインボリュート曲線(B-Spline)ではなく、ピッチ円・歯先円・歯底円の座標を直線で結ぶ近似手法を採用しています。これにより、計算負荷を抑えつつ、3Dプリンター出力には十分な精度の歯車を高速に生成できます。
キネマティクス(運動学)の計算
アニメーションを制御する update_positions 関数では、作動モードに応じた回転角の計算を行っています。
if mode == 0: # 太陽入力 / 内歯固定
theta_sun = angle
theta_ring = 0.0
theta_carrier = theta_sun * (self.z_sun / (self.z_sun + self.z_ring))
遊星歯車(プラネットギア)の自転と公転が組み合わさる複雑な動きも、この数式と FreeCAD.Placement を更新することでスムーズに描画させています。
3Dプリンターで出力する際のコツ
本ツールで作った遊星歯車(遊星リング)を3Dプリンターで出力する場合、以下の点に注意してパラメータを設定するのがおすすめです。
- モジュール (m): FDM(熱溶解積層)方式の場合、
m=1.0〜1.5程度が造形しやすく、強度も保てます。光造形(SLA)ならm=0.5などでも精密に出力可能です。 - バックラッシ: 3Dプリンターの精度に合わせて
0.15mm 〜 0.3mm程度を設定すると、出力後にスムーズに回転します。 - 遊星ピンの突き出し: キャリアと遊星歯車が擦れないよう、ワッシャーを挟むか、座面を少し高く設計すると摩擦を減らせます。
おわりに
FreeCADとPythonを組み合わせることで、手作業では何時間もかかる複雑な「遊星歯車の設計・モデリング・検証」を、一瞬で終わらせることができます。パラメータを変えて様々な減速比のギアを作って遊ぶだけでも非常に楽しいので、CADの自動化や機械設計に興味がある方は、ぜひPythonスクリプトによるモデリングに挑戦してみてください!
プログラムのDLはこちらから
➡ こちら

0 件のコメント:
コメントを投稿
コメントありがとうございます!承認後に公開されます