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

第1回 PHPで簡単!3Dプリンタ出力ファイルの作り方

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

穴のある立体

穴を開けるには,図5のようにします。つまり,凹の形にして座標をぴったり合わせ,閉じてしまうわけです。

図5 穴を開ける方法

図5 穴を開ける方法

こうすると,穴の部分に渡るための「橋」ができます。このライブラリでは,同じ線を往復した場合,相殺されて残らないようになっています(実際にはもう少し複雑です⁠⁠。また,このような点を合わせたまま移動する機能もあります。

たとえば図6の場合,まず$a~$dは前回と同じですが,そのあと$aの座標に戻るので,$a->addchild()を呼びます。これで$dの次の点として$aと同じ座標の点が作られます。しかも$aを動かすと,この点も自動的に同じ座標に移動します。

図6 外枠の登録

図6 外枠の登録

そのあとは$e~$hを入力します。$a~$dは左まわりだったのに対して,$e~$hは右まわりになっていることに注意してください。これは,線を交差させないためです。最後に$e->addchild()を呼んで,底面は完了です図7⁠。

図7 ⁠穴」の登録

図7 「穴」の登録

続いて,中心部の穴を3mm持ち上げますが,今回使用するタイプの3Dプリンタでは,底面が広がりやすいという性質があります。これは,テーブルとノズルの間隔に誤差が出やすく,ノズルから出たプラスチックがテーブルに押しつけられて広がってしまうことがあるためです。

また,出力を開始するときに固まったプラスチックがくっついたりすることもあります。そこで,底面の段階で穴を0.5mm広げておき,これを1mmかけて本来の寸法に戻すようにしましょう図8⁠。

図8 窄める

図8 窄める

そして,あと2mm垂直に持ち上げて,合計3mmとなります図9⁠。

図9 持ち上げる

図9 持ち上げる

これ以上軸が入らないよう,さらに0.5mmすぼめて完了です図10⁠。

図10 もう一度窄める

図10 もう一度窄める

最後に,外枠を持ち上げます図11⁠。内側は合計で4mm持ち上げたので,外枠は5mm持ち上げることにします。

図11 外枠を持ち上げる

図11 外枠を持ち上げる

こうすると,底面は水平でしたが上面はくぼんだ形となり,ちょうどキートップ状になります図12⁠。なお,底面や上面が平らでない場合,ライブラリが適当に平面に分割することになります。

図12 完成品の外観

図12 完成品の外観

さて,このまま出力すると,1つ問題があります。冒頭に書いたように,このタイプの3Dプリンタには誤差があります。今回は軸の太さが3.2mmですが,入らない場合は太さを変えて試さなくてはなりません。もちろん,プログラムを修正して太さを変えてもいいのですが,せっかくですから太さの異なるものを一列に並べ,まとめて出力することにしましょう。

1つのファイルに,複数の(つながっていない)立体を出力するには,先ほどの処理を繰り返せばOKです。具体的には最初にヘッダを出力し,新しいオブジェクトを作って何度も出力して,最後にフッタを出力します。ヘッダとフッタは固定文字列ですので,どのオブジェクトを使って出力しても構いません。

こうしてできたのがリスト2です。$xと$yを使って位置を変えながら出力しています。

リスト2

$s0 =& new stl_solid();
print $s0->output(1);

for ($i=0; $i<5; $i++) {
        $s0 =& new stl_solid();
        
        $x = $i * 12;
        $y = 0;
        $w = (3.2 + $i * 0.1) / 2 + 0.5;
        
        $a =& $s0->addpoint($x - 5, $y - 5, 0);
        $b =& $s0->addpoint($x + 5, $y - 5, 0);
        $c =& $s0->addpoint($x + 5, $y + 5, 0);
        $d =& $s0->addpoint($x - 5, $y + 5, 0);
        $a->addchild();
        $e =& $s0->addpoint($x - $w, $y - $w, 0);
        $f =& $s0->addpoint($x - $w, $y + $w, 0);
        $g =& $s0->addpoint($x + $w, $y + $w, 0);
        $h =& $s0->addpoint($x + $w, $y - $w, 0);
        $e->addchild();
        
        $e->moveadd(0.5, 0.5, 1);
        $f->moveadd(0.5, -0.5, 1);
        $g->moveadd(-0.5, -0.5, 1);
        $h->moveadd(-0.5, 0.5, 1);
        
        $e->moveadd(0, 0, 2);
        $f->moveadd(0, 0, 2);
        $g->moveadd(0, 0, 2);
        $h->moveadd(0, 0, 2);
        
        $e->moveadd(0.5, 0.5, 1);
        $f->moveadd(0.5, -0.5, 1);
        $g->moveadd(-0.5, -0.5, 1);
        $h->moveadd(-0.5, 0.5, 1);
        
        $a->moveadd(0, 0, 5);
        $b->moveadd(0, 0, 5);
        $c->moveadd(0, 0, 5);
        $d->moveadd(0, 0, 5);
        
        print $s0->output();
}
print $s0->output(2);

出力すると写真3のようになります。

写真3 完成した片手キーボード キートップ部分

写真3 完成した片手キーボード キートップ部分

FabCafeの紹介

さて,ここまで読んでこられた読者の方の中には,3Dプリンタに興味はあっても,期待したような出力が得られるのか心配,という方もいらっしゃるのではないかと思います。実は筆者も,このキートップを作るときに,強度がどれくらいあるのか心配でした。そこで,このお店を紹介しようと思います。

FabCafeは,東京の渋谷にあるお店で,レーザーカッターや3Dプリンタを有料で使うことができます。曜日によってシステムが違うのですが,基本的には時間いくらの料金体系になっています。来店しないといけないので,関東に住んでいる人に限られてしまいますが,どんな出力が得られるのかや,どれくらい時間がかかるのかを実際に見てみたいという方にはおすすめです。

今回出力したSTLファイルは,上記のホームページに書いてある方法で変換できますし,有料の変換サービスを申し込んでお店で変換してもらうことも可能です。

ちなみに筆者は,先のキートップを出力したあと,3Dプリンタをたくさん使いそうだったので,自分で3Dプリンタ(のキット)を購入しました。使い方がまずくで故障してしまったのですが,このときも修理用の部品を出力するのにFabCafeを利用しました写真4⁠。

写真4 FabCafeで出力した3Dプリンタの代替部品

写真4 FabCafeで出力した3Dプリンタの代替部品

次回は,3Dプリンタでできることとできないこと,そしてその実例などをご紹介しようと思います。よろしくお願いします。

著者プロフィール

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

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

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