こんにちは、ふうです。
先日PrusaユーザーのHanaさんから、PrusaSlicerを使ってMMUの無いPrusa MINI+でも1~数回程度のカラーチェンジなら多少の手間(手動マテリアルチェンジ)で出来ますよ、という話をお聞きしました。
(Prusa MINIじゃなくてもPrusaSlicer使うなら同じ設定で大丈夫です)
今までは1層だけならたとえば文字をプリントさせてプリント終了、その後プリントしたものを外さずにフィラメントチェンジをして残りのデータをプリントすることで無理やり同じ場所にプリントさせて文字を埋め込むことはやったことありますが、この方法だと一度プリントを終了してしまうので時間がかかりますし、ノズルが最初にプリントした文字を避けてくれるわけでもないのでz-offsetを調節したりと面倒でした。
なんちゃって手動カラーチェンジ
やり方としては下記のとおりです。
PrusaSlicerのプリンター設定で「全般」からエクストルーダーを【2】にする。
ついでにバイナリーGコードのサポートのチェックも外します、これをしないと吐き出されたgコードを確認できません。
同じく「プリンター設定」の「カスタムGコード」の「ツールチェンジ用のGコード」にフィラメントチェンジの【M600】を追加。
これでスライサーの画面にフィラメントが2つ表示されオブジェクト毎にどっちのフィラメントを使うか指定できるようになります。
一応何度でもフィラメントチェンジは出来ますが手動なので数回が限界だと思います。
とりあえずテストでやってみるので右クリックで出てくるシェイプを追加からギャラリーの中にある「helper_disk」と「ボックス」を読み込みます。
読み込みが完了すると右側のリストに名前が表示されますが、基本上から順番にプリントされます。
ドラッグで並び替えも可能ですが、割り当てるエクストルーダーによっても順番は変わります。
エクストルーダーの設定の方が優先度が高くなります。
一層でプリントの終わるhelper diskからプリントを始めたいのでhelper diskをエクストルーダー1に、ボックスを2に割り当てます。
ちなみに増やしたエクストルーダーのエクストルーダーカラーを設定してやると、色分けが出来るのでわかりやすくなります。
この状態でスライス実行するとhelper diskをプリント後にM600が入ってフィラメント交換を促されます。
ちょっとした問題
ツールチェンジ用のGコードにM600を埋め込めて多少簡単にはオブジェクト毎の手動カラーチェンジが出来るようにはなったのですが、ひとつ問題があるようです。
多分PrusaSlicerの仕様ですが、プリントスタートをしてintro lineをプリントした直後にもツールチェンジ用のGコードが実行されるのでM600が入ってしまい、一旦プリントが中断されてプリント前に無駄なフィラメントの抜き差しが起こるのでgコードを手動で修正する必要が有ります。
多分intro lineのプリントと最初にプリントするツールが違っている可能性もあるために入っているのだと思いますがちょっと不便ですね。
G-codeを確認するとM600が、、、。
(バイナリーGコードのサポートにチェックが入っていると読めないので注意です。)
対策 カスタムGコードでglobal変数を使ってみる
最初に考えたのは2層目とかならlayer_zをif文でとか思ったんですが、intro lineも実際に実行したいフィラメントチェンジも1層目なので無理でした。
次に考えたのはYの位置を基準にすることです、intlo lineはY-2で書いているのでYの位置を取得できれば、、、と思いましたが、全体の位置はgコードのM114で取れそうだけどxyzそれぞれの位置でyだけの取得はよく分からない、それならばと別の手段をとなり今回はglobal変数を使いました。
色々調べた結果(参考はこの辺)PrusaSlicerでglobal変数を使うには[global 変数名=〇〇]とするそうです。
まずはintro lineをプリントするまでにglobal変数を宣言する必要が有るので「カスタムGコード」の「Gコードの最初」にある「; intro line」の前の行に{global t_change=0}を追加しました。
M109 S[first_layer_temperature] ; wait for extruder temp
{global t_change=0}
; intro line
G1 X10 Z0.2 F1000
G1 X70 E8 F900
G1 X140 E10 F700
G92 E0
もう一つ「ツールチェンジ用のgコード」も修正します。
コピペで改行が消える場合があるので気を付けて修正してください。
;t_change={t_change} ;変数確認用
{if t_change >= 1} ;t_changeが1以上なら次の行を実行
M600 ;フィラメントチェンジ用のGコードを吐く
{endif} ;if終了
{t_change = t_change + 1};カウントアップ
※ツールチェンジごとにカウントアップしていく必要は無いんだけども何か思いついた人が利用しやすいかもしれないので{t_change = t_change + 1}でカウントアップしています、ちなみに省略形の{t_change += 1}は使えませんでした。
これでgコードを確認した所下記の様にintro lineの後のM600は消えて
無事2回目以降にはM600が入るようになりました。
設定変更したら「プリンター設定」を別名で保存するのをお忘れなく。
おわり
こんな感じで無事intlo lineの時はM600を出さないように修正が出来ました。
今回は離れたオブジェクトを順にプリントしただけですが、CADソフトで文字などを分けてモデリングしておき、スライサー上でエクストルーダーを割り振ることで簡単な色分けが可能になります。
一部分への文字入れ程度ならカラーチェンジじゃなくて凹ませといてアクリル絵の具流し込む方が楽でいいかも、、、
最近ようやくChatGPTを試しているので今回ちょこっと試してましたがPrusaSlicerは詳しくないようで、変数の設定もif文の書き方も全然違っていて面倒になって自分で検索しましたが、今回のような記事が増えてくればChatGPTももっと賢くなっていくんでしょうね。
便利だけどもっとニッチなことも教えてほしいなぁ。
コメント