はじめに
3Dプリンタ用のモデル、どうやって作っていますか?
僕はFusion360も使いますが、ここぞというときにはOpenSCADを使っています。
OpenSCADとは
OpenSCADはプログラムで3Dモデルを作成する環境です。プログラム言語で図形を定義することでいくつかのメリットがあります。
- 変数が扱える
- Gitなどのソースコード管理ツールと相性が良い
- パーツのモジュール化などが用意
一方で、GUIによる編集ができないので直感的なモノ作りは難しいです。
僕は雑な形状をまずFusion360などGUIのCADで作ったのちに、OpenSCADを使うことが多いです。
ちょっとデモ
cube([1,1,1]);
こんな風に、立方体が作れます。
2次元の形状を定義することもできます。
square([10,10]);
circle(r=5);
さらにこれを引き延ばせます
linear_extrude(height=5){
union(){
square([10,10]);
circle(r=5);
}
}
offsetを指定すると角が丸くなります
linear_extrude(height=5){
offset(3){
union(){
square([10,10]);
circle(r=5);
}
}
}
offsetを同じだけマイナスすると大きさを保ったまま角を丸めることができます。
linear_extrude(height=5){
offset(-3) offset(3){
union(){
square([10,10]);
circle(r=5);
}
}
}
図形同士を演算してくりぬいたりもできます。
$fn=50; module sketch(){ union(){ square([10,10]); circle(r=5); } } linear_extrude(height=5){ difference(){ offset(-3) offset(3){ sketch(); } offset(-2) offset(1) sketch(); } }
まぁ、こんな感じで3Dデータを作ることができます。
3Dプリンタやレーザーカッターでの出力
こうやって作った3DモデルはSTL形式でエクスポートすることができるので、3Dプリンタで印刷することができます。
また2次元データはSVG形式の出力もできるため、うまくモデルを作るとレーザーカッター向けのデータも作成できます。
今私が作っているRakuChordは、3Dプリンタで作った筐体に加えてレーザーカッターでフロントパネルを作っています。
このようなデータを用意する際もOpenSCADで同じように扱うことができます。
また私の場合は3Dプリンタは家にあるのですが、レーザーカッターは持ち合わせていません。このような状況だと、まず3Dプリンタでレーザーカッター用のデータで部品を出力してみて、位置合わせをする。というのがさっとできるのがこの方法の良いところです。
下が3Dプリンタで作ったもの、上が同じデータをレーザーカットしたものです。
回路設計ソフトKiCADとの連携
さらに便利な機能としてKiCADでの外形データをdxfとしてOpenSCADで読み込むことができます。
私の場合は、下記の図でいうと白い枠線をCmts.Userなど、製造とは関係ないレイヤーに作成し、そのデータをdxfで出力してOpenSCADに取り込んでいます。
こうすることで、基板上のコンポーネント配置とぴったり合ったカバーなどを作ることができます。
まとめ
といった具合にOpenSCADを使うと非常に簡単に3Dデータのワークフローを構築できます。
もちろんFusion360でも似たようなことはできるのでしょうが、オープンソースのソフトを組み合わせて使おうとすると、テキストファイルとして3Dデータを扱えるというのは非常に取り回しが楽です。
しかし、OpenSCADは直感的な3Dの造形が難しく、今回紹介したoffsetを2回実行することで角を丸くするテクニックなども知らないとわかりません。Fusion360だと、フィレットや面取りはUIから簡単にできるため、そういう点ではFusion360のほうが簡単です。OpenSCAD使いの方で、こういったテクニックを知ってる人は、ぜひその知見を公開してほしいです。
私が使ってて気づいたことは 下記Scrapboxに随時まとめています。
またOpenSCADは独自の言語なので敬遠する人もいるかもしれません。そういった方にはJavaScriptで似たようなことをするOpenJSCADがお勧めです。
最後に、今私が頑張って作っているRakuChordの紹介ページを貼って、この記事を締めます。
気になる方はぜひ見てみてください↓↓↓↓↓