PHPプログラムで制御する3Dプリンタ入門

第2回 3Dプリンタが苦手な形をプログラミングで作るには

この記事を読むのに必要な時間:およそ 5 分

こうして,プログラムはリスト2のようになりました。完成形はその下の画面です。筆者は,まず小さい部品を寸法を変えて5つ出力し,切り欠きの厚さが確定したら,その値を使って大きい部品を出力する,という順番で作業しました。写真4に見える黒いマークは,3Dプリンタから取りだすときにサインペンで印をつけて,あとで区別がつくようにしたものです。

リスト2 プーリー作成元プログラム

$s0 =& new stl_solid();
$first = 1;

for ($i=0; $i<2; $i++) {
#    $cut = 0.25 + $i * 0.15;
    $cut = 0.6 + $i * 0.1;
    for ($j=0; $j<2; $j++) {
        $s0 =& new stl_solid();
        
        $circle_inner = array();
        set_circle($s0, $circle_inner, $r_inner + 0.5, 0, $cut);
        
        $hole = array();
        $hole[] =& $s0->addpoint($r_body + 1, 0, 0);
        $hole[] =& $s0->addpoint($r_body + 2, -1, 0);
        $hole[] =& $s0->addpoint($r_body + 3, 0, 0);
        
        $circle_outer = array();
        set_circle($s0, $circle_outer, -$r_rim, 0);
        
        $hole[2]->addchild();
        $hole[] =& $s0->addpoint($r_body + 2, 1, 0);
        $hole[0]->addchild();
        
        set_circle($s0, $circle_inner, $r_inner, 1, $cut);
        if ($j == 0) {
            set_circle($s0, $circle_inner, $r_inner, 2, $cut);
            set_circle($s0, $circle_inner, $r_body + 0.5, 2);
            set_circle($s0, $circle_inner, $r_body + 0.5, 4);
        } else {
            set_circle($s0, $circle_inner, $r_inner, 4 + $h_body + 2, $cut);
            set_circle($s0, $circle_inner, $r_body, 4 + $h_body + 2);
            set_circle($s0, $circle_inner, $r_body, 4);
        }
        
        set_circle($s0, $circle_outer, -$r_rim, 1);
        set_circle($s0, $circle_outer, -($r_body + 3), 4);
        
        foreach ($hole as $key => $dummy)
            $hole[$key]->moveadd(0, 0, 4);
        
        if (($first)) {
            $first = 0;
            print $s0->output(1);
        }
        print $s0->output(0, $unit * $i, $unit * $j);
    }
}
print $s0->output(2);

ここまで,3Dプリンタの弱点と,その回避方法を説明しました。では,ほかにどんな弱点があるでしょうか。

3Dプリンタの弱点

この連載で扱っている3Dプリンタは,フィラメントと呼ばれるプラスチック材を融かして,小さなノズルから押し出します。こうしてできた,シャープペンシルの芯くらいの太さの融けたプラスチックを積み重ねていくことで,立体を出力します。このため,注意しないといけない点が3つあります。最後に,この3つの弱点を紹介しましょう。

1つめは,もう何度も書いていますが,下の層から順に積み重ねていくため,下に何もないところには材料が置けないという点です。たとえば,⁠ワ」という文字の形を出力する場合を考えてみます図11⁠。下の層から順に出力するので,⁠ワ」の右下の部分が下から上に向かって出力されていきます。その後,⁠ワ」の左の部分が突然現れますが,下には何もありません。出力しても下に落ちてしまいます。

図11 下に何もないと出力できない

図11 下に何もないと出力できない

この場合は,向きを変える,上下を逆にするなど,下から順に出力していける配置にする方法があります。また,2つの部品に分けたり,宙に浮いている部分を支えるダミーの部品(サポートと呼ばれます)を一緒に出力して後で取り除くといった方法もあります。

今回のように穴を閉じる場合も,下に何もありません。しかしあまり幅がなければ,またぐように出力することは可能です。

2つめは,層が重なっている構造なので,層を引き剥がす方向の力には弱いという問題があります。たとえば,⁠L」の形を垂直に出力する場合を考えてみます。もし,⁠L」の縦の棒を曲げる力がかかると,応力が付け根のところに集中し,層が剥がれるように折れてしまいます。この場合は,⁠L」を横倒しにして水平にすると,丈夫になります図12⁠。ですから,たとえばネジ穴を作る場合,ネジ穴を広げる方向に力がかかるかどうかで,向きを決める必要があります。

図12 向きを変えると丈夫になる

図12 向きを変えると丈夫になる

3つめは,材質の特性です。今回の3Dプリンタでは,PLAという素材とABSという素材の2種類が使えます。PLAは60℃前後から軟化しますので,高温になる場所で使う場合は注意が必要です。

筆者が使用している3Dプリンタの場合,出力物は,プリンタのベッド部の上にただ乗っているだけです。融かしたプラスチックが出てきますので,固まるとベッド部に貼り付きますが,完全に冷えると弱い力で剥がれてしまいます。出力中に出力物がベッドから剥がれてしまうと,出力物が高温のノズルにくっついて,台無しになってしまいます。これを起こりにくくするため,筆者の3Dプリンタでは,ベッドを電気で温めて,出力物が完全には冷えないようになっています(ヒーターベッドと呼んでいます⁠⁠。

しかし逆に,ベッドの温度が高すぎると,出力物がなかなか冷えず,やわらかいままになります。すると今度は,ノズルに引っ張られる力で少しずつ反りが発生し,これまたベッドから出力物が剥がれてしまうことになります。このため,収縮による反りが発生しやすい大きいものや,ノズルの力がテコの原理で拡大される背の高いものは,失敗することがあるので注意が必要です。対策としては,小さい部品に分割して,市販の棒や板材を使って並べるといった方法があります(今回のルーバーでも,ネジ棒を使っています⁠⁠。

ちなみに筆者は,室温40℃の部屋を閉め切って3Dプリンタを動かしていたところ,ヘッドやモーターからの発熱で3Dプリンタそのものが歪んでしまった経験があります(この3Dプリンタは組み立てキットで,主な部品は3Dプリンタで出力したPLA材なのです⁠⁠。前回,FabCafeで出力したパーツをご紹介しましたが,これはこのときに作ってもらったパーツです。このパーツと適当な材料を組み合わせて応急処理をほどこし,とりあえず出力ができるようにしました。これで,歪んだ部品のかわりを出力できるようになりましたので,熱源の近くにある部品の予備を自分自身で出力して交換し,修理することができました。

次回は,今回使ってきたライブラリの仕組みを解説し,3Dプリンタの選び方にも触れてみようと思います。ご期待ください。

著者プロフィール

木元峰之(きもとみねゆき)

独立系ソフトハウスに8年間勤務,パッケージソフトの開発や記事執筆などを行う。現在はフリーのコンサルタント。SWESTなどのワークショップで分科会のコーディネータを務める。デジタル回路設計歴30年,プログラミング歴27年。

きもと特急電子設計
URL:http://business.pa-i.org/