3Dプリンタを使って作るもの。
普通の人たちが作りたいと思うのはフィギュアとか模型とかが多そう。ニュースとかでもやっぱりそういう特集を良く見る。
でもエンジニア系の人たちはスペーサーとかマウンタとかケースとかの実用品に興味があるよね。やっぱ。買うより安く済むこともありそうだし。3Dプリンタ本体のパーツをせっせこ出力するのも楽しいけど、やっぱり自分がほしいものを簡単に出力したいというのが本音。こういうものって単純形状の積み重ねだから結構簡単に作れちゃうし。
で、最近悩ましいのがCAD上と3Dプリンタ出力の誤差。設計ミスというよりは収縮によるひずみが大きいと思うんだけど、0.5mm~1mm単位で惜しいことが多い。採寸の精度が悪いって考え方もあるし、あきらめて穴を拡げて誤魔化してもいいんだけどなんかね。。。でも、こういうずれをCAD上で修正するって形状が複雑だと意外と大変(面倒?)な作業になることが多い。
で、今回着手してみようと思ったのがOpenSCADによる設計。OpenSCADはCSG(constructive solid geometry)方式のテキスト記述型CADでプログラム(スクリプト)を記述して、コンパイルするとCADが出力される感じ。
この方法のどこに魅力があるかというと、繰り返しパターンを数式で表現できることや、数値を変数として入力できるので、もしあとで寸法やピッチを変更しようと思ったときに簡単に変更できること。ようは使い回しが利く図面が作れるってこと。
そんな感じでギアとかスクリューとかが簡単にできそうなので勉強しようと思ったら完成形のマニュアルが見当たらなかったのでここにメモ。ほかにも色々あるけど、とりあえず簡単で使えそうなものだけ。
1.基本操作
左側がコード記述枠.右側に出力図形が表示される右下はメッセージ枠
コードはコンパイル(F5)、レンダリングをして初めて図形として表示される
コンパイル+レンダリング(F6)すると右側に表示される
図形は左クリックで回転、右クリックで移動。ホイール回転で拡縮
ちなみに色の変更はF5のときのみ反映
基本的にはこんなものか。あとはキーボードからのコード入力でがんばるべし。
2.文法
基本はC-likeな感じ。関数に変数を与えて、{}で有効範囲を指定、セミコロンで締める
function(変数,変数,,,){};
関数の引数には変数名をつけると順番を自由に記述できる
逆に順序が正しければ変数名は不要
座標系はX,Y,Zを[x,y,z]で指定
各辺が等しい場合は size=xxで一括指定可能
範囲指定、Stepの指定(for文)は[min:max], [min;step:max]
// 一行のみコメント
/* 範囲指定コメント */
まぁC言語使ったことある人だったらすぐ分かりそう。
3.コマンド(図形描画系)
a. 立方体
cube(size_寸法,center_中心); //centerは図形の原点を角にする(center=false)か中心(center=true)にするかcenterは省略した場合false.
cube(size = 50,center = true); もしくは cube(50,true); // 50mm角の立方体を中心に書く
cube([10,20,30],false); // X10× Y20× Z30mmの立方体を原点始点で書く
b. 球
sphere(r_半径, $fa_分割角度deg, $fs_分割長さmm, $fn_分割数);
引数は省略可.
sphere(10); // 半径10mmの球体
c. 円柱(円錐)
cylinder(h_高さ,r1_底辺の半径,r2_上辺の半径,r_円柱の径,center_描画中心,$fa_分割角度deg,$fs_分割長さmm);
cylinder(20, 20); // 高さ20mm,底辺半径20mmの円錐
cylinder(20,20,0); // 高さ20mm,半径20mmの円柱
d.演算子
union(){ 図形描画関数 }; // 図形同士の加算
difference(){ 図形描画関数 }; //図形同士の減算
1番目の図形から2番目以降の図形が減算される
intersection(){ 図形描画関数 }; //図形同士の論理積。共通部分のみ残す
e.その他
rotate(a_回転角,v_回転有効軸){};
rotate(45,[1,1,0]); // x,y軸のみ45度回転させる
ポンチ絵と寸法さえ分かっていれば、ここまでの関数だけでもざっくり作れそうな感じ。STL出力できるのでこのまま印刷もできる。ライブラリの追加でギア、ボルトナットなどを半自動生成もできるようなので一度試してみようと思う。
コメント