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

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

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

あとは,1mm上げてから横穴を作ります図6⁠。2mm上げるときに1mm広げ,いったん外周を6mm上げて,今と逆の順序で穴を閉じればできあがりです。また,板をはさむ溝の部分は,誤差があっても大丈夫なように,奥に行くほど狭くなるように作りました。ネジを締める力で板をはさむような位置に溝を配置しました。リストは以下のようになりましたリスト1⁠。ループを使い,10個並べて出力していますが,これはお使いになる3Dプリンタの出力サイズに合わせて修正してください。

図6 横穴の出力方法

図6 横穴の出力方法

リスト1 ルーバー部品を作るためのプログラム

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

$p = array();
$q = array();
$p[] =& $s0->addpoint(0, 0, 0);
$q[] =& $s0->addpoint(2, 0, 0);
$q[] =& $s0->addpoint(4, 0, 0);
$p[] =& $s0->addpoint(6, 0, 0);
$p[] =& $s0->addpoint(6, 1.5, 0);
$p[] =& $s0->addpoint(8, 4, 0);
$p[] =& $s0->addpoint(6, 6, 0);

$p[] =& $s0->addpoint(6, 30, 0);
$p[] =& $s0->addpoint(8, 32, 0);
$p[] =& $s0->addpoint(44, 32, 0);
$p[] =& $s0->addpoint(46, 30, 0);
$p[] =& $s0->addpoint(48.5, 32, 0);

$q[] =& $s0->addpoint(52, 32, 0);
$q[] =& $s0->addpoint(52, 32, 0);
$q[] =& $s0->addpoint(54, 32, 0);
$q[] =& $s0->addpoint(54, 32, 0);
$p[] =& $s0->addpoint(56, 32, 0);
$p[] =& $s0->addpoint(56, 65, 0);
$q[] =& $s0->addpoint(54, 65, 0);
$q[] =& $s0->addpoint(52, 65, 0);
$p[] =& $s0->addpoint(50, 65, 0);
$p[] =& $s0->addpoint(50, 63.5, 0);
$p[] =& $s0->addpoint(48, 61, 0);
$p[] =& $s0->addpoint(50, 59, 0);

$p[] =& $s0->addpoint(50, 35, 0);
$p[] =& $s0->addpoint(48, 33, 0);
$p[] =& $s0->addpoint(12, 33, 0);
$p[] =& $s0->addpoint(10, 35, 0);
$p[] =& $s0->addpoint(7.5, 33, 0);
$q[] =& $s0->addpoint(4, 33, 0);
$q[] =& $s0->addpoint(4, 33, 0);
$q[] =& $s0->addpoint(2, 33, 0);
$q[] =& $s0->addpoint(2, 33, 0);
$p[] =& $s0->addpoint(0, 33, 0);

for ($i=0; $i<6; $i++) {
	$q[$i]->moveadd(0, 0, 1);
	$q[11 - $i]->moveadd(0, 0, 1);
}
$q[3]->moveadd(0, 33, 0);
$q[4]->moveadd(0, 33, 0);
$q[9]->moveadd(0, -33, 0);
$q[10]->moveadd(0, -33, 0);

$q[0]->moveadd(-1, 0, 2);
$q[1]->moveadd(1, 0, 2);
$q[2]->moveadd(-1, 0, 2);
$q[3]->moveadd(-1, 0, 2);
$q[4]->moveadd(1, 0, 2);
$q[5]->moveadd(1, 0, 2);
$q[11]->moveadd(-1, 0, 2);
$q[10]->moveadd(-1, 0, 2);
$q[9]->moveadd(1, 0, 2);
$q[8]->moveadd(1, 0, 2);
$q[7]->moveadd(-1, 0, 2);
$q[6]->moveadd(1, 0, 2);

foreach ($p as $key => $dummy)
	$p[$key]->moveadd(0, 0, 6);

$q[0]->moveadd(1, 0, 2);
$q[1]->moveadd(-1, 0, 2);
$q[2]->moveadd(1, 0, 2);
$q[3]->moveadd(1, 0, 2);
$q[4]->moveadd(-1, 0, 2);
$q[5]->moveadd(-1, 0, 2);
$q[11]->moveadd(1, 0, 2);
$q[10]->moveadd(1, 0, 2);
$q[9]->moveadd(-1, 0, 2);
$q[8]->moveadd(-1, 0, 2);
$q[7]->moveadd(1, 0, 2);
$q[6]->moveadd(-1, 0, 2);

$q[3]->moveadd(0, -33, 0);
$q[4]->moveadd(0, -33, 0);
$q[9]->moveadd(0, 33, 0);
$q[10]->moveadd(0, 33, 0);

for ($i=0; $i<6; $i++) {
	$q[$i]->moveadd(0, 0, 1);
	$q[11 - $i]->moveadd(0, 0, 1);
}

for ($i=0; $i<10; $i++)
	print $s0->output(0, -$i * 10, $i * 10);

print $s0->output(2);

もっとしっかりしたものがいいという場合は,アクリル板に穴を開け,そこに全ネジの棒を通す構造にするとよいでしょう。

このデータでは,横穴を六角形にすることで,出力の問題を回避することができました。では,これではうまくいかない場合は,どうしたらいいでしょうか。

著者プロフィール

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

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

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