マルチカラー
QidiのX-ONE2の3Dプリンタを購入する際、もう少し値の張るプリンタとして「TECH 1」というのがあり、こちらはデュアルヘッド機だった。つまりノズルが2つ装備されているので、違う色のフィラメントを使用すれば2色印刷ができるのだ。
X-ONE2は安価なのでそんな機能はなく単色の出力のみだが、マルチカラーはあこがれる。
唯一ネームプレート程度であれば、土台側とカバー側をそれぞれ作ることで重ね合わせると、マルチカラーなものが出来上がった。ちょっと面倒だけど出来上がりはきれい。ボンドなどでくっつけておけばしっかりしたカラープレートができる。
印刷中のフィラメント交換(Simplify3D)
印刷途中でフィラメント交換を行うことで、強引に色を変更する方式にてマルチカラーの印刷が可能らしい。
【Curaテクニック】造形途中にフィラメントをチェンジしたり、造形物内にモノ(ナットや磁石など)を封入する方法!
確かに途中で強引にフィラメント交換ができれば、多色出力が可能だと思うが、具体的にはどうするんだろう?

記事を見てみると、Curaのスライサーソフトだと「Pause at height」というスクリプトが組めるらしい。 特定の高さの時に、スクリプトを差し込むようだ。記事の紹介では、造形途中で処理を止めて、フィラメントを交換したり、ナットや磁石などを埋め込んだりを行うみたい。

自分はSimplify3Dをスライサーとして使っているので、こちらにはそのようなスクリプト差し込み機能はないらしい。 しかしいろいろ探してみると、gcode出力の後にコマンドを実行する機能があり、 これを使って特定レイヤー時に特定コードを差し込むことができるらしい。
レイヤーの高さで一時停止する (Simplify3D)
また、こちらにも、日本語記事で同様の記載があった。
3Dプリント一時停止のやり方(Simplify3D)
どちらも、同じことを行っており、gcode出力後にコマンド実行させる「{REPLACE “\n; layer 12, Z = ” “; layer 12\nG28 Y0 X0\nM300\nM25\nG92 E0\nG28 Y0 X0\n; layer 12 “}」 内容としては、指定レイヤー(サンプルは12)のコメント行を見つけたら、「G28 Y0 X0」「M300」「M25」「G92 E0」「G28 Y0 X0」のコマンドを差し込むといったもの。
「G28 Y0 X0」は、ホーム位置に戻す(高さは変更なし)
「M300」は、ブザーを鳴らす
「M25」はポーズ(停止)
「G92 E0」はエクストルーダを停止(初期化)
「G28 Y0 X0」は、ホーム位置に戻す
となる。M25がメインとなる停止コマンドで、その前後におまけの処理を入れている様子。

では、X-ONE2でも同じ動きができるか、まずはテキストエディタでコマンドを差し込みながら動作を確認してみる。 結果としてはNG。M25で停止の動作はするが、その後resumeで復帰させると、終了処理となってしまい、続きの印刷をしてくれなかった。
ということで、どうすればX-ONE2でも似た動作をするかgcodeをいろいろ試してみたところ、M25だけ差し込めば停止してくれて、 そのあとoctoprintでResumeで再開すれば普通に続きを印刷してくれた。逆にG28などの原点復帰などのコマンドを入れるとダメになるようだ。
実際には、停止時にいろいろ作業をする前提で、
「G1 Z140 F1000」台座を下げる
「G1 X75 Y75」エクストルーダを中心位置に移動
「G1 E-2.0 F1800」フィラメントを少しだけ引いておく
「M106 S0 P0」冷却ファンを止める
「M25」一時停止
「M106 S255 P0」冷却ファン再開
と、コマンドを入れてやると、作業がはかどりそうだ。
この停止コマンドが来たら、ベッドが下がり、冷却ファンが停止。 その間にフィラメント交換を行い、完了したらOctoprintより「Resume」を押して印刷を再開すると、 新しいフィラメントで印刷が再開される。

ということで、Simplify3Dへの設定としては、プロセス設定の「スクリプト」「ポストプロセス」に以下を入れる。
{REPLACE "\n; layer 5, Z = " "\n; layer 5 pause\nG1 Z140 F1000\nG1 X75 Y75\nG1 E-2.0 F1800\nM106 S0 P0\nM25\nM106 S255 P0\n; layer 5, Z = "}
印刷中のフィラメント交換(OctoPrint)
こちらには、OctoPrintで停止してフィラメント交換する手順が記載されていた。
「3Dプリンター」印刷中にフィラメントを交換して多色印刷してみる
gcodeで、決められた箇所での停止をするのではなく、印刷状況を見ながら手動で停止させて、フィラメント交換を行うようだ。
うまくタイミングを見て一時停止ボタンを押す必要がありそうだが、ある程度手軽にできそうでよさそう。 OctoPrintの設定画面で左メニューの「GCODE Scrips」を選び、「After print job is paused」に以下を入れる。
{% if pause_position.x is not none %}
G91
M83
G1 Z+5 E-0.8 F1800
M82
G90
G1 X0 Y0
{% endif %}
また、「Before print job is resumed」のほうには、下記を入れる。
{% if pause_position.x is not none %}
M83
G1 E-0.8 F1800
G1 E0.8 F1800
G1 E0.8 F1800
M82
G90
G92 E{{ pause_position.e }}
M83
G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F1800
{% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %}
{% endif %}
記載通りに設定してみると、良さそうだったが、いろいろパターンを試してみて、以下が最終結果。
#「After print job is paused」向け設定
{% if pause_position.x is not none %}
G1 Z140 F1000
G1 X75 Y75
G1 E-2.0 F1800
M106 S0 P0
{% endif %}
#「Before print job is resumed」向け設定
{% if pause_position.x is not none %}
G92 E0
M106 S255 P0
G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F1000
{% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %}
{% endif %}
before~向けの設定で「G92 E0」を入れておかないと、停止中に動かしたエクストルーダの動作分、 resume時に巻き戻りが発生したので、このコマンドによるリセットが必要なようだ。 あとは、ファン設定を入れた程度。

良いタイミングでpauseを押す必要があるので、~30分後に押す。など印刷処理は長いので、実用としては難しいかも。
版画方式で多色
こちらをみると、1層目限定?で版画のように色別に出力を行って、色別に出力するというもの。 1層目だけで処理すれば印刷済みのものをヘッドが破壊することはないので、確かにいい方法かも。
3Dのようで2Dな少し3Dな3Dプリンター
限定された条件の中、いろいろと技を考えているようだ。