2014/01/10

OpenSCADで3dプリンタ用データをつくる

3Dプリンタで小さめの部品を作成するときは必要な個数の部品を自動配置して印刷しますが、
小さめの部品なので印刷時にはがれることがあり、エクストルーダに引っかかり他の部品に接触し、全部がダメになってしまいます。
この問題の対策として、部品間を焼肉の網みたいなものでつなげば設置面積が稼げるため部品のはがれがなくなりそうなのですが、毎回これをCADで作るのは面倒です。

3Dプリンタ用のデータ生成ソフトを調べていると、OpenSCADというものがあることがわかりました。
このOpenSCADというソフトは、スクリプトをゴリゴリ書いてモデルを作成するCADです。
たとえば、1辺の大きさが10mmの立方体を作る時は、

 cube(10);

とやればモデルが出来上がります。

10mmの立方体
STLへの書き出しができるので、ちょっとした機械部品を作るのに向いており、ギアやねじを生成するライブラリもあるようです。


試しにOpenSCADを使って、小さな星を作ってみました。
//星の基礎部品。矢じりのような形
module arrowHead(r=10)
{
 basesize=r*0.2;
 polygon(
 points=[
  [0,r],
  [basesize,basesize],
  [0,0],
  [-1*basesize,basesize]
 ]);
}

//星。
//Kを2にするとクナイ、3,4にすると手裏剣風、6以上だと歯車風になる
module star(radius=10,height=5)
{
 k=5;
 
 linear_extrude(height)
 {
  //kの値が3以下の場合は中心に隙間ができる場合があるので円で埋めとく
  circle(radius*0.1);
  for(i=[0:k-1])
  {
   rotate((360/k)*(i))
   {
    arrowHead();
   }
  }
 }
}

module raft(x=3,y=3,step=10,height=1)
{
 
 translate([-1*x/2*step,-1*y/2*step])
 {
  for(rx=[0:x-1],ry=[0:y-1])
   { 
   translate([rx*step,ry*step]) 
   difference()
   {
    cube([step,step,height]);
    translate([0.5,0.5])
    cube([step-1,step-1,height]);    
   }
  }
 }
}

sz=10;

for(i=[0:3])
{
 translate([i*sz*2,0])
 {
  star(sz);
  raft(4,4,sz);
 }
}





実際に印刷してみた結果が以下の通りです。
部品がメッシュで接続されているので、安定して印刷できました。

これは最初のバージョンで、メッシュの一番外側がつながっていないためほつれた布の端っこみたいになっています。上のコードは枠をつなげるように改良したバージョンとなります。




まだよく調べてはいないのですが、テキストも付けれるようなので
名札などのシンプルな形状のものはOpenSCADで作ったほうが便利そうです。

これでまきびしのモデルでも作ってみようかな?

ではまた。

0 件のコメント:

コメントを投稿