これまで,3D プリンタのヘッドをらせん状にうごかして,うすい皿を印刷してきた (「螺旋状 3D 印刷による輝く皿の 3D 印刷のビデオを YouTube に投稿した」, 「変化するハート型断面をもつ皿を 3D 印刷するビデオを YouTube に投稿した」). この方法は CAD でデザインする従来の 3D 印刷法とはまったくちがうので,かんたんにはできない. この方法ほどきれいにはできないのだが,従来の CAD をつかって似たことができないかとかんがえてためし,それなりの結果をえることができた.
ビデオでしめした上記の方法の特徴のひとつは,ひらたい皿を印刷するときもサポートがいらないことだ. フィラメントをらせん状にまきつけていくことによって,それを実現している. それを,CAD をつかう通常の 3D 印刷で実現することが目標だ. フィラメントを 1 層にするには,皿をデザインするときにそのあつさをとてもうすくする必要がある. フィラメントの直径が 0.4 mm 以下であるなら,皿のあつさも 0.4 mm 以下にする必要がある.
うすい皿の STL ファイルをつくるために,2 つの方法をためした. いずれも OpenSCAD という CAD ソフトウェアをつかっている. OpenSCAD においては,GUI をつかうかわりにプログラムによってデザインを記述する.
うすい皿をつくるためのひとつの方法は,ほそながい四角形を回転させて周囲の部分をつくり,それに底面をあわせるつまり集合和 (union) をとる方法だ. つぎのようなプログラムでつくれるとおもったのだが,なぜかうまくいかない. 集合和をとるまえの 2 つの図形はうまくつくれるが,和がとれない.
union() { cylinder(r = 10, $fn = 180); rotate_extrude(convexity = 10, $fn = 180) rotate([0, 0, Angle]) translate([0, 10]) square([0.2, 20], center = true); }
もうひとつのプログラムはテーパ状のシリンダをずらして difference をとるものだ.
R1 = 10; R2 = R1 + 20 * cos(Angle); H = 20 * sin(Angle); difference() { cylinder(h = H, r1 = R1, r2 = R2, $fn = 180); translate([0, 0, 0.2]) cylinder(h = H, r1 = R1, r2 = R2, $fn = 180); }
ここで Angle がフィラメントをまきつける角度 (15° など) だ. この方法はうまくいった.
OpenSCAD で生成した STL ファイルを Slic3r や Skeinforge などのスライサでスライスする. 皿のあつさは 0.2 mm 未満になっているので,層ごとにほぼひとまきになる. ところが,皿をうすくして,まきつける角度をゆるく (つまり水平にちかく) すると,通常の方法では隣接するフィラメントが接しないため,フィラメントは脱落してしまって,かたちをなさない. 接するようにするにはフィラメントの直径を隣接するフィラメントの間隔よりすこしおおきくしなければならない.
そのためには,まず層厚をフィラメント間隔 (たとえば 0.4 mm) よりちいさくしなければならない. 皿の周囲の部分の角度 (フィラメントをまきつける角度) を 15° にするなら,層厚は 0.4 sin 15° = 0.1 mm 未満ということになる. 層厚を 0.1 mm にすると,通常のパラメタを使用するかぎりフィラメントの直径は 0.1 mm 強になる. それを 0.4 mm 強にする必要がある. そのための設定はスライサごとにちがうが,Slic3r であれば通常は 1 程度の Filament settings > Extrusion multiplier の値を大幅に増加させる必要がある. 実験の結果では 4 くらいにすればよいことがわかった. スライサが Skeinforge ならば通常はやはり 1 程度の Dimension > Filament packing density を 0.25 くらいにする. これでフィラメントの射出量は 4 倍にふえる (直径にすると 2 倍にしかならないのでまだたりないようにおもえるが,実験の結果はこれでよい).
まきつける角度が 30° なら,層厚は 0.4 sin 30° = 0.2 mm,フィラメント間隔 (直径) も 0.2 mm となり,フィラメントの射出量を 2.5 倍くらいにする. まきつける角度が 60° なら,層厚は 0.4 sin 60° = 0.35 mm,フィラメント間隔も 0.35 mm となり,フィラメントの射出量を 1.75 倍くらいにする. 皿の周囲部分が一定の角度ならこのように層厚をきめればよいが,角度が変化するときには場所によって層厚を変化させる必要がある. 通常のスライサではそれはできない. また,フィラメントが一周するあいだに角度を変化させるときは,層厚をかえてもうまくいかない. こういうときは従来の 3D 印刷法はつかえない.
スライスした結果を Repeater Host Mac で表示すると,つぎのようになる. 左が Skeinforge, 右が Slic3r による結果だ.
こうやって印刷した結果を写真にとった. 最初の写真は Skeinforge で層厚 0.15 mm (フィラメントの直径が 0.6 mm 弱) の皿をスライスしたときのものだ. Dimension > Filament packing density は 0.25 にしている. フィラメントはほぼ各層ひとまきずつになっているが,ヘッドがフィラメントのすきまをうめるようなうごきをする. 底面は非常にきれいにできているが,その周囲はすこしフィラメントがあまりぎみだ. 底面では 1 倍でよいはずのフィラメントを 4 倍射出しているので,きれいにできるのがむしろふしぎだ.
つぎの写真は同様の条件で Slic3r でスライスしたときのものだ. Extrusion multiplier を 6 にしている. Slic3r の場合はフィラメントが正確に各層ひとまきになっている. つまり,らせん状に印刷する場合にちかい. しかし,ノズルの直径が 0.5 mm だと,フィラメントがこのふとさでは安定しない. すなわち,できあがった皿にはかなり凹凸ができている.
どちらの皿も,らせん状に印刷したものとはちがって層間の遷移があるため,その特異点ではふくらみができてしまう. そして,ふくらみの周辺にはあなができやすい. 左下の写真は Skeinforge をつかったもの,右下の写真は Slic3r をつかったものだ.
層厚を 0.135 mm にしたほうが,より安定に印刷できる. ノズル先端の直径が 0.5 mm なので,フィラメントの直径がそれよりちいさいほうが安定する. それでもフィラメント間隔は (計算上) まだ 0.54 mm 以上ある. つぎの写真はそのときの印刷結果だが,よりなめらかに印刷されていることがわかる. ただし,この設定では底面のまわりにあながあきやすい.
周囲の角度を 30° にし,層厚を 0.25 mm,extrusion multiplier を 2.5 にしたときの結果 (Slic3r) をしめす. 層のつぎめの部分をのぞいては,15° のときより整然と印刷されている.
また,周囲の角度を 45° にし,層厚を 0.35 mm,extrusion multiplier を 1.5 にしたときの結果 (Slic3r) をしめす.
追記 (2014-3-1):
この記事をもとに雑誌 I/O のための原稿を書いた.
7 ページの原稿だったが 3 月号に 3 ページにちぢめて掲載されることになった.
のこりは I/O Web 版に掲載されるという.