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

第3回STLデータはどのように生成されるのか

今回は、光センサーのための部品を作ってみましょう。そして、今まで使ってきたライブラリの動作原理と、筆者が3Dプリンタを選んだときのポイントをご紹介しようと思います。

光センサー用シャッター

光センサーは、接点がないため故障が少なく、また小さい力で反応します。このため、光を遮るシャッターとレバーを組み合わせて、物が当たると信号を出す用途に使用されたりします。よく見るところでは、コピー機などの用紙センサーに利用されています。

ところが、光センサーそのものは売っていても、これと組み合わせるレバーやシャッターなどのプラスチック部品は売っていないようです。そこで、これらの部品を3Dプリンタで作ってみました写真1、2、3⁠。

写真1 通常の状態
写真1 通常の状態
写真2 物が接触した状態
写真2 物が接触した状態
写真3 分解したところ
写真3 分解したところ

部品は3つで、1つは可動部、あと2つは同じ形をした軸受けです図1、2⁠。写真の光センサーは、コの字型をした部分の内側に赤外線が通っており、遮ることで信号が変化するようになっています。

図1 可動部の形状
図2 軸受けの形状

作り方は、特別なところはありませんが、シャッターの部分はとても薄くて弱くなっています。筆者は、塩化メチレンの入ったプラスチック用接着剤を染み込ませて補強しました(素材はPLA樹脂です⁠⁠。

STLデータ生成ライブラリの動作原理

さて、これまで3Dデータを作ってきたライブラリの動作原理を見てみることにしましょう。興味のない方は読み飛ばしていただいて構いません。

3Dプリンタで使うSTLというファイル形式は、非常にシンプルです。Wikipediaにも解説がありますが、立体の表面を三角形に分割し、三角形1つ1つの座標をファイルに記述します。座標はミリメートル単位で、それぞれの三角形にある3つの頂点の並べ方に決まりがあります。

  1. 三角形の頂点を、ファイルに記述されている順に追うと、右まわりか左まわりになる
  2. この向きに回したときに木ねじが進む向きを、法線ベクトルという
  3. 法線ベクトルは、立体の外側を向いていなければならない

具体的に見てみましょう。図3は三角柱です。三角形ABCをSTLファイルに出力するときは、A→B→Cの順に点を出力しなければなりません。逆順だと、法線ベクトルが下向きになり、立体の内側を指すことになってしまいます。

図3 三角柱
図3 三角柱

一方、三角形DEFは、STLファイルに出力するときは、F→E→Dの順に点を出力しなければなりません図4⁠。なお、三角形はFEDでなくても、EDFやDFEでも構いません。

図4 上面・下面の法線ベクトル
図4 上面・下面の法線ベクトル

また、四角形BCFEは、2つに分割して三角形にする必要があります。STLファイルは三角形しか記述できないからです(これはあくまでもデータ上での話であり、3Dプリンタなどで出力しても継ぎ目などは生じません⁠⁠。この場合も、法線ベクトルが立体の外側を指すように、点を並べる必要があります。たとえば、F→B→Eの順で1つめの三角形を、F→C→Bの順で2つ目の三角形を出力します図5⁠。

図5 側面の法線ベクトル
図5 側面の法線ベクトル

他の面も同様に出力すれば完成です。三角形どうしの出力順は自由です。なお、三角形どうしが交差するようなものはNGです。

では、ライブラリはどうやってこのようなデータを出力すればいいでしょうか。

まず、底面にあたる多角形があり、この1点を持ち上げる動作(movetoメソッド)を見てみましょう図6⁠。

図6 点を動かす
図6 点を動かす

これにより、三角形ABA'と、三角形FAA'が生まれます図7ちなみに、法線ベクトルが外側を向くように記述しています⁠⁠。

図7 側面となる三角形が2つできる
図7 側面となる三角形が2つできる

続いて点Bを持ち上げると、三角形BCB'と、三角形A'BB'が生まれます図8⁠。

図8 次の点を動かすと、三角形かさらに2つできる
図8 次の点を動かすと、三角形かさらに2つできる

こうして生まれた三角形を順次出力することで、側面のデータを出力することができます図9⁠。

図9 すべての点を動かしたところ
図9 すべての点を動かしたところ

今回は最初に点Aを、次に点Bを動かしましたが、実際にはどのような順序で点を動かしても正しく動作します。ただし、点を下向きに動かすと三角形の法線ベクトルが逆向きになってしまうため、z座標が増加する向きに動かしてください。

次は底面です。底面は、凸多角形でしたら、何も工夫しなくても三角形に分割できます。たとえば、六角形の底面から連続する3点を選んで三角形を切り出すと、残りは五角形になります。これを繰り返すことで、すべてを三角形に分割することができます図10⁠。しかし、今回は「穴」のある底面を扱いますから、注意する必要があります。

図10 凸多角形の底面を三角形に分割する
図10 凸多角形の底面を三角形に分割する

まず、分割してはいけないパターンを整理しておきましょう。図11は穴のあいた底面の例です。この連載の第1回で取り上げたものです。

図11 穴のあいた底面
図11 穴のあいた底面

ここで、連続する3点となる三角形AEDを切り出して分割するのは構いませんが、三角形FGHを切り出すのはうまくありません。この三角形は「穴」の部分にあたり、何も出力されないはずのものだからです図12⁠。

図12 三角形FGHは穴の部分
図12 三角形FGHは穴の部分

また、連続した3点だからといって、三角形ABCを切り出すのもよくありません。この三角形の内部には、別の点があるため、そちらが属する三角形と重なってしまうからです図13⁠。

図13 三角形ABCは、中に他の点がある
図13 三角形ABCは、中に他の点がある

したがって、底面が多角形となる立体では、底面の頂点を順に見ていき、⁠連続した3点が反時計回りに並んでいること」⁠その3点で作る三角形の内部に、別の点がないこと」を確認します。OKならその3点を出力し、残った多角形について処理を続けます。

図14 アルゴリズムに従って切り出していく
図14 アルゴリズムに従って切り出していく

これ以外に必要な処理として、底面の法線ベクトルは下向き、上面の法線ベクトルは上向きにしなければならないので、底面は点の並びを逆順にします。

また、図11の線分AEでできるような、向きが反対の三角形どうしを相殺する処理を行います(連想配列で出現カウントを数えて実現しています⁠⁠。

3Dプリンタを選ぶポイント

ここまで、3Dプリンタ用のデータについてご紹介してきました。こうしたデータを揃えれば、1回目でご紹介したFabCafeなどでも出力できますが、実際に自分で3Dプリンタを購入したいと考えている方もいらっしゃるかも知れません。そこで最後に、筆者が3Dプリンタを購入したときに、どんな点を検討したかをご紹介しようと思います。

出力サイズ

まず、筆者の場合は、出力できる最大サイズが重要でした。というのは、複雑なプリント基板を発注する前に、組み立てできるかどうかを手元で確認したいと考えていたからです。たとえば写真4は、複雑な組み合わせ方をするプリント基板ですが、発注前に3Dプリンタでサンプルを作って穴位置を確認すれば安心できます。

また、うまくいけばケースのパネルを出力できたらと考えていました。このため、1つの軸だけでも、200mm出力できてほしいと考えていました。

写真4 複雑なプリント基板を3Dプリンタで確認する
写真4 複雑なプリント基板を3Dプリンタで確認する

形成素材

次に、出力できる素材です。このタイプの3Dプリンタでは、ABS樹脂とPLA樹脂が主流なのですが、両方に対応している方が望ましいと考えました。PLA樹脂は生分解性プラスチックなので、いろいろ不安があったのです。

ただ、実際に一度ABS樹脂を試して、前回書いた温度のトラブルを起こしてからは、ずっとPLA樹脂を使っているのが実情です。また、ヒーターベッドもあった方がいいと考えましたが、接着剤でベッドに固定する機種と比べて、一長一短かなとも思いました(FabCafeにある機種では、接着剤を使います⁠⁠。

積層ピッチ

積層ピッチが細かいと、出力の分解能が高くなり、細かい部分も出力できるようになります。その一方で、出力に時間がかかるようになります。筆者が使っている3Dプリンタでは、ノズル径0.5mm、積層ピッチは0.3mmですが、ソフトの設定を変更して0.5mmピッチで出力しています。荒くはなりますが、0.3mmピッチで2.5時間かかるものが、0.5mmピッチならおよそ1.5時間で済む計算になります。逆に、出力の滑らかさを重視するのであれば、ノズル径や積層ピッチは細かい方がいいということになります。ちなみに、筆者はノズルが詰まるという経験はないのですが、ノズル径が小さくなると詰まりやすくなるかも知れません。

制御ソフトウェア

制御ソフトについては、これは筆者のPC環境の事情ですが、Windows専用ではなく、Linuxで動くのが好ましいと考えていました(適当な空きPCがなかったのです⁠⁠。また、他の3Dプリンタの動きを見て、アルゴリズムを改善する余地があるとも思っていたので、将来、自分でアルゴリズムに手を入れられる方がいいとも思いました。

価格

価格については、どの程度のことができるか見てみる、という意図でしたので、オプション込みで10万円以下を条件にしました。こうして、納期3週間の組み立てキットが候補に残りました。出力サイズは200mm×200mm×140mm、ヒーターベッド付きです。

ちなみにキットの組み立てには丸2日かかりました。また、温度トラブルを経験してからは、モーターの発熱を抑えるために、基板のツマミ(半固定抵抗)を調整してモーター電流を半分程度にしました。

海外では3Dプリンタ関連は動きが早いようですので、筆者のときと状況が異なっているかも知れません。これらのポイントが、読者の方のご参考になれば幸いです。

おすすめ記事

記事・ニュース一覧