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

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

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

はじめに

さっそくですが,写真1をご覧ください。これは筆者が試作中の片手入力キーボードです。このキーはジョイスティック構造になっていて,4方向に倒して入力できるほか,押し込むこともできます。カーソルで項目を選び,押し込んで決定,という使い方をするスイッチです。このスイッチをキーボードに使うことで,キーの数を1/5に減らしてみようという目論みです。

写真1 試作品の片手入力キーボード

写真1 試作品の片手入力キーボード

しかし,これには問題がありました。基板までは作ったのですが,このスイッチに合うキートップが市販されていないのです。軸径が合わないだけでなく,高速入力を考えると指が触れる面の形状もいろいろ試す必要が出てきます。展示会などで業者さんに聞いてみたことはありますが,20個ほど作るのに何十万もかかるということで,どうやって実現するか悩んでいました。

東京 渋谷に,FabCafeというお店があります。レーザー加工機をホビー用途の人が利用できるので,ご存じの方もいらっしゃるかも知れません。このFabCafeに3Dプリンタが入ったというニュースを,知人から教えてもらいました。このお店にデータを持ちこめば,立体を出力してくれるわけです。

でも,データをどうやって作ればいいでしょうか。ネットカフェでフリーのデザインツールを片っぱしから試してみましたが,どれを使ってもこのキートップを作ることができませんでした。特に重要なのは中心の穴です。3Dプリンタは,樹脂の広がりによって多少の誤差が出ます。軸径は仕様では3.2mmとなっていますが,0.1mm単位で変えたものをいくつか作る必要があります。

そこでPHPの出番です。3Dプリンタで使われるSTLというデータ形式は,テキストファイルで構造も簡単です。これをPHP(などのプログラミング言語)で出力してあげれば,FabCafeなどで出力できることになります。寸法を0.1mmずつ変えたバージョンをいくつも作るなどの作業は,プログラムを使えば朝飯前です。こうしてプログラムを作り,FabCafeで出力してもらったのが冒頭の写真というわけです。

前置きが長くなりましたが,この連載では3DデータをPHPで出力する方法を取り上げていきます。よろしくお付き合いください。

まず最初に,今回のPHPプログラムと,出力結果となるSTLファイルを以下からダウンロードしてください。解凍した中で「casepanel.php」がこれから説明するプログラム,⁠casepanel.stl」がPHPによって生成されるSTLファイル,⁠keytop.php」が後半説明するキートップ作成プログラム,⁠keytop.stl」が生成されたキートップのSTLファイルになります。

基本的な使い方

ではさっそく簡単な形状を例にして,PHPライブラリの使い方を説明しましょう。リスト1が上記の「casepanel.php」で最後にライブラリを呼び出している部分です。順に説明します。

リスト1 基本的な立体を作るプログラム(一部)

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

$a =& $s0->addpoint(0, 0, 0);
$b =& $s0->addpoint(51, 0, 0);
$c =& $s0->addpoint(51, 23, 0);
$d =& $s0->addpoint(0, 23, 0);

$a->moveadd(0, 0, 1.2);
$b->moveadd(0, 0, 1.2);
$c->moveadd(0, 0, 1.2);
$d->moveadd(0, 0, 1.2);

$a->moveadd(2, 1.5, 0);
$b->moveadd(-2, 1.5, 0);
$c->moveadd(-2, -1.5, 0);
$d->moveadd(2, -1.5, 0);

$a->moveadd(0, 0, 1.2);
$b->moveadd(0, 0, 1.2);
$c->moveadd(0, 0, 1.2);
$d->moveadd(0, 0, 1.2);

print $s0->output();
print $s0->output(2);

まず$s0->output(1)は,ファイルのヘッダ部を出力します。同様に$s0->output(2)はファイルのフッタ部を出力します。

実際のデータは,最初に底面の定義から始まります。$s0->addpoint()を繰り返し呼んで,底面の多角形を定義します。今回は長方形ですので,4つの点を登録します図1)⁠addpoint()を呼ぶと,あとでこの点を動かして立体にするのに必要なオブジェクトが返りますので,変数に入れておきます。

図1 底面の登録

図1 底面の登録

これだけでは平面にしかなりません。そこで「厚み」を持たせます。具体的には,先ほど登録した4つの点を,上に1.2mm動かします図2)⁠絶対座標を指定する場合はmoveto()を,相対座標で指定する場合はmoveadd()を使用します。なお,今回のライブラリでは,必ず底面から見てz座標が増える向きに進める必要がありますので,ご注意ください。

図2 厚みを作る

図2 厚みを作る

単に垂直に動かすだけでなく,水平に動かすこともできます。次回で解説しますが,今回のような3Dプリンタでは,上を大きくするのは制限があります。そこで,4点とも内側に寄せてみましょう図3)⁠

図3 内側に寄せる

図3 内側に寄せる

最後に,もう一度上に1.2mm動かして完成です図4)⁠これを$s0->output()で出力します。こうすることで,寸法の決まった立体をプログラムで作ることができます。

図4 もう一度厚みを作る

図4 もう一度厚みを作る

ちなみにこの立体は,電子工作で使うプラスチックケースのパネルです写真2)⁠もちろん,穴の開いていないパネルを買ってきてドリルや糸鋸で穴を開けてもいいわけですが,切屑が飛び散るのが好ましくない場合もあるでしょう。今回のプログラムをベースに,穴を入力してあげれば,はじめから穴の開いたパネルができるというわけです。

写真2 ケースとパネル

写真2 ケースとパネル

このプログラムを使うときは,コマンドラインから

php casepanel.php > casepanel.stl

のように入力して,ファイルにリダイレクトしてください。この例では,casepanel.stlにSTLファイルが出力されます。

では,続いて穴の作り方を見ていきましょう。

著者プロフィール

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

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

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

コメント

コメントの記入