Ultimaker Cura & Mega-s / 印刷途中で磁石を埋め込むには。【Pause at height】を使ってみた。

3Dプリンター

とあるキッチン用品を印刷するにあたり、製品内部に磁石を埋め込む必要がありましたので、”Pause at height” というプラグインを使ってみました。任意の高さで一旦停止してくれるプラグインです。設定値や実際の埋め込み方法、追加されたGコードなどについて書いてみます。また、磁石ならではの失敗もありましたので、磁石を埋め込む際の参考にしてください。


Pause at height の概要

“Pause at height” は、印刷の高さが設定値に達したときに、一旦、印刷を中断させるプラグインです。中断時の回避位置や復帰の手順などのGコードが元々のGコードに追加されます。今回のように、モデル内に何かを埋め込む場合や、色の違うフィラメントに変更して多色印刷をする場合など、アイデア次第で色々使える汎用性の高いスクリプトです。
設定ダイアログは、メインメニューから、[拡張子(Extensions)] > [後処理(Post Procesing)] > [G-codeを修正(Modify G-Code)] に進むと表示されます。

Curaにはいろいろなスクリプトが準備されていますので、[スクリプトを加える] をクリックして選択画面に進みます。

選択肢の中から “Pause at height” を選択します。

“Pause at height” が追加され、デフォルト値が入力された設定項目が表示されます。
一回の印刷で複数回停止させたい場合は、[スクリプトを加える] を繰り返すことでプラグインを複数個追加でき、それぞれの設定項目を編集していきます。


埋め込み高さの把握

印刷が “ある高さ” に達したときに一時停止しますので、設定するにあたり、”ある高さ”を把握している必要があります。”Pause at height” では、”ある高さ” をビルドプレートからの距離(mm単位)もしくはレイヤー数で指定します。自分で設計したモデルであれば高さが分かっていますが、不明な場合は、あらかじめレイヤー数を確認します。今回は次の断面図のようなモデルを印刷します。磁石は下部の円柱状のスペースに埋め込みます。

レイヤー数を確認する場合は、まず、実際に印刷する [レイヤー高さ] を決めた後に一旦スライスし、画面右側の層方向のスライドバーを使って停止したいレイヤーが何層目なのかを把握します。下図では60層目が表示されていて、次の層で磁石の部屋の天井部分が印刷されます。レイヤー数として60を設定すれば、この層の印刷終了時に一時停止します。


設定

今回の印刷では、”Pause at height” の設定を次のようにしました。

各設定項目は下記のような意味を持ちます。
なお、[Method] で何を選択するかによって、表示される項目が違ってきます。ここでは、”RepRap (M226)” を選択した場合の項目を説明します。説明文の背景がグレーの文章はAnycubic Mega-s を使った今回の設定値と補足等です。

[Pause at]
一時停止させる高さの指定方法を選択します。選択肢は次の通りです。
 Height:高さをmm単位で指定します。
 Layer Number:高さをレイヤー数で指定します。

Layer Number を選択しました。

[Pause Height]
[Pause at] で Height を選択したときに表示される項目です。一時停止させる高さをmm単位で入力します。ここに設定した高さのレイヤーが印刷終了した時点で一時停止します。

[Pause Layer]
[Pause at] で Layer Number を選択したときに表示される項目です。一時停止させる高さをレイヤー数で入力します。ここに設定した数値のレイヤーが印刷終了した時点で一時停止します。

先述したとおり、60を設定しました。

[Method]
一時停止させるコマンドを選択します。プリンターによって対応しているコマンドが様々ですので、自身のプリンターがどのコマンドを受け付けてくれるのかを知る必要があります。選択肢は五つあります。
以下のコマンド名をクリックすると、各メソッドでの設定項目と追加されるGコード(一時停止の動作、[黄色表示])とその前後のGコードが表示されます。このGコードは動作確認用のモデルをスライスしたもので、表示範囲は一時停止されるレイヤー(Layer:0)の最後のフィラメントの位置から次のレイヤー(Layer:1)に入るまでです。設定値と追加されたGコードを見ると何をしているのかが分かると思います。Gコードが読める方は参考にしてください。(RepRap (M226) でのGコードについては後述します)

さて、Anycubic Mega-s の場合、何を選択したかと言いますと、不完全でしたが、RepRap (M226) で何とか目標は達成できました。一番動きそうなMarlin(M0)はM0のコマンドを読み込んだ時点でタッチパネルが何も受け付けなくなり、復帰時間を設定しても自動で復帰することも無く、電源スイッチで遮断する以外方法がありませんでした。M226以外の他のコマンドも似たようなものでした。M226の不完全さについては、この後の “印刷時の操作” で書いています。

[Disarm timeout]
一時停止を解除する時間を秒単位で指定します。プリンターのボタンで任意のタイミングで解除したい場合は、”0″ を入力します。

こちらの設定は無効でした。どんな数字を入力しても全く変化ありませんので、0としました。

[Park Print]
チェックを入れると、一時停止前にX軸およびY軸を回避位置へ移動させることが出来ます。Z軸はチェックの有無に関係なく現在の高さから1mm上昇します。ただし、その高さがビルドプレートから15mm以内の場合は15mmまで上昇します。

[Park Print Head X]
X軸の回避位置を座標で指定します。指定する座標系は印刷時の座標系で、Curaにモデルを配置する時の座標系ではありません。

プリントヘッドが左右方向に回避する必要がありませんので、プレートの中央の座標(105)を指定しました。

[Park Print Head Y]
Y軸の回避位置を座標で指定します。指定する座標系は印刷時の座標系で、Curaにモデルを配置する時の座標系ではありません。

プレートが手前にあった方が磁石の埋め込みが楽に出来るので、190としました。

[Retraction]
回避時にフィラメントの引き戻し動作が必要な場合に、その引き戻し量を指定します。フィラメント交換目的で”Pause at height”を使う場合は必要ありませんが、今回のように何かを埋め込む目的でしたら意図しないフィラメントのにじみ出しを防ぐため、ある程度の引き戻しが必要になります。印刷再開時には、引き戻した分だけ押し出されますが、プリント設定の移動カテゴリーにある [余分な押し戻し量の引き戻し] の値が反映されませんので、押し戻し量をコントロールすることは出来ません。

プリント設定の「移動」カテゴリーにある [引き戻し距離] と同じ6.0mmとしました。
少し話がややこしくなるのですが、印刷再開の層の印刷開始位置によっては、一時停止に入る前の元々のGコードに引き戻しの動作が入る場合があります。その場合、都合二回の引き戻しが行われることになり、12mm後退します。ただ、押し戻しも二回行われ、12mm前進しますので、問題はありません。この時の二回目の押し戻しには、[余分な押し戻し量の引き戻し] の値が反映されます。

[Retraction Speed]
引き戻し動作時のフィラメントの移動速度を指定します。

プリント設定の「移動」カテゴリーにある [引き戻し速度] と同じ25.0mm/sとしました。

[Extrude Amount]
フィラメントを交換した時に新旧フィラメントが混ざって押し出される現象を防ぐため、ここで設定した量のフィラメントを排出してから印刷動作に復帰します。

排出する必要がありませんので、0mmです。


[Extrude Speed]
上記排出時のフィラメントの移動速度を指定します。

排出量が0ですので、関係ありませんが、デフォルトの 3.3333 mm/s のままとしました。

[Redo Layer]
チェックを入れると、一時停止したレイヤーをもう一度印刷します。

[Standby Temperature]
一時停止中のノズルの温度を指定します。何らかの理由で印刷時より低い温度を指定して、温度が下がった場合は、一時停止解除時に印刷温度まで上昇するのを待って印刷を再開します。

温度上昇を待つ時間が無駄ですので、印刷温度と同じ200℃を指定しました。ただし、リトラクトが足りない場合、フィラメントが流れ出ます。

[Display Text]
一時停止中に表示するテキストを記述します。対応したプリンターが必要です。

[G-code Before Pause]
一時停止前に実行させたい動作があれば、そのGコードを入力します。

音を鳴らして一時停止に入ることを知らせてくれるよう M300 S440 P200 を入力しました。

[G-code After Pause]

再開時に実行させたい動作があれば、そのGコードを入力します。


今回、実際に埋め込まれたGコードについて簡単な説明書きをしておきます。興味のある人はご覧ください。

実際に追加されたGコードとその前後です。黄色の背景が追加された部分です。 行番号は説明のため追加しました。

01: G1 X112.553 Y112.497 E2039.46248 ; Eの値が60層終了時点のフィラメントの位置
02: M204 S1500
03: M205 X8 Y8
04: G1 F1500 E2033.46248 ; フィラメントを6mm引き戻している。1回目のリトラクト。
05: G1 F600 Z12.15
06: ;MESH:NONMESH
07: G0 F6000 X113.764 Y124.642 Z12.15 ; 一時停止動作直前の各座標
08: ;TIME_ELAPSED:2150.356055
09: ;TYPE:CUSTOM ここからがPause at heightで追加されたGコード。
10: ;added code by post processing
11: ;script: PauseAtHeight.py
12: ;current layer: 60
13: M83 ; フィラメントの移動を絶対指定から相対指定に変更。
14: G1 F1500 E-6 ; フィラメントを6mm引き戻す。2回目のリトラクト。
15: G1 F300 Z13.15 ; 回避動作開始。まずZ軸が1mm上昇。
16: G1 F9000 X105 Y190 ; X軸Y軸が回避位置に移動。
17: G1 F300 Z15 ; プレートとノズルが近すぎるので、15mmまで上昇。
18: M104 S200 ; 一時停止中のノズル温度設定。
19: M300 S440 P200 ; 440Hzの音を200ms間鳴らす。
20: M226 ; 一時停止を実行。
21: M109 S200 ; 印刷時のノズル温度設定。設定温度になるまで次に進まない。
22: G1 F300 Z12.15
23: G1 F9000 X113.764 Y124.642 ; 一時停止動作前のXY座標(7行目)に戻す。
24: G1 F300 Z12.15 ; 一時停止動作前のZ座標(7行目)に戻す。
25: G1 F1500 E6 ; 2回目のリトラクトに対するフィラメントの押し戻し。
26: G1 F1500 ; フィラメントの移動速度を元に戻す。
27: M82 ; フィラメントの移動を絶対指定にもどす。
28: G92 E2033.46248 ; フィラメントの現在位置を4行目の値に設定。
29: ;LAYER:60 ここから元のGコード。61層目の始まり。
30: ;MESH:handle.stl
31: G0 X113.764 Y124.642 Z12.35
32: M204 S1200
33: M205 X6 Y6
34: ;TYPE:WALL-INNER
35: G1 F600 Z12.2
36: G1 F1500 E2039.54563 ; 1回目のリトラクトに対するフィラメントの押し戻し。
1行目の値に [余分な押し戻し量の引き戻し] の設定値(今回は0.2mm^3)分が加わっている。


印刷準備

“Pause at height” の設定が終わったら、ダイアログを閉じて再スライスします。後は通常通りで、プレビュー画面でスライスの様子を確認して、問題なければ印刷に取りかかります。ただし、プレビュー画面上では、移動を表す青色の線で回避動作が表示されることはありません。したがって、実際に動作するのかどうかは全く分かりません。

画面右下で “Pause at height” がアクティブであることは表示されます。

回避の様子をどうしても見たい場合は、一度保存したGコードを読み直すとXY方向は青色の線で表示されます。Z軸の動きは、線の軌跡は残りませんが、画面下のスライドバーでノズルの動きを見ると、なんとなく分かります。

RepRap (M226) と Mega-s の組み合わせの場合、一時停止の時間を設定しても自動復帰が出来ないようですので、おおよそ次のような手順で磁石を埋め込みました。手動による介入は4~6です。

  1. 通常通り印刷開始
  2. 60層目の印刷終了
  3. 回避位置に移動後停止
  4. [PAUSE] をタップ(時間制限あり)
  5. 磁石を埋め込む
  6. [CONTINUE] をタップ
  7. 61層目から印刷再開
  8. 印刷完了

では、具体的に操作を見ていきます。

60層目印刷後に回避動作が入り一旦停止します。ここで、[PAUSE] をタップして動作を止めるのですが、タップし忘れてしまうと、7、8秒後(正確に計っていません)に印刷が再開されます。すなわち、この短い時間を逃すこと無くタップする必要があります。また、困ったことに、タップ後、次のような表示が出て、かなりのタイムラグがありますので、7,8秒の前半以降でタップをすると、印刷再開のための復帰動作が始まり、印刷開始位置への移動中にポーズがかかってしまいます。もっとタップが遅いと印刷再開後にポーズがかかります。というわけで、とにかく早いタイミングでのタップが必要です。なお、ポーズがかかると現在位置から更に20mmノズルが上昇します。

2022/01/21 追記
思ったタイミングでポーズがかからないので、色々検証していると、回避位置で一旦停止するのは、M226 の命令が影響しているわけでは無いことが判明しました。また、ポーズがかかるタイミングもポーズボタンをタップするタイミングが早い遅いの時間ではなく、タップした時点で何行分の命令がキャッシュされているかに左右されるようです。おそらく、いくら早くタップしてもポーズがかかるのは印刷開始位置に戻ってきたあたりのようです。この辺の回避策については近いうちにまとめる予定です。

2022/01/24 追記
上記の問題について、訂正記事を公開しました。以下のリンクからどうぞ。

無事、ポーズがかかったら、焦る必要は無くなりますので、磁石を埋め込みます。
操作には関係の無い話ですが、高さ10mmの磁石に対して穴の深さは11mmにしました。もし磁石が奥まで入らなかったときのための余裕です。必要ありませんでしたけど。

磁石の埋め込みが完了しましたら、タッチパネルの [CONTINUE] をタッチします。

印刷が再開して無事磁石の上に屋根が印刷されます。後は完了まで待つのみです。

埋め込み成功、無事、出来上がりました。底から磁石まで1mmなので、わずかに存在が分かります。


磁石で気をつけること

実は一回目の印刷で失敗しています。磁石を入れるスペースを設計するときに、もし入らなかったら困るので、穴の直径を磁石の直径より1mmほど大きくしていました。ノズルやそのヒーター部分および、プリントヘッド全体のカバーが非磁性体なので、磁石が持ち上がることは無いと踏んでいましたが、落とし穴は、左側ファンのダクトでした。ここは鉄のようです。下の写真のように磁石が引きずり出されました。使った磁石がネオジムだったことも敗因かもしれません。そこまで強い磁力は必要なかったのですが、手頃なサイズの手持ちがあったので使ってしまいました。

磁石が出てこないように何か工夫が必要です。半田ごてを準備しておいて、磁石挿入後に入り口を少し溶かして直径を狭めようかとか考えましたが、結局は軽い圧入程度の精度で穴を設計することで解決しました。下図のような簡単な形状を何度か試作して、押し込めば何とか入るけど、磁力では出てこない微妙な寸法を探しました。


で、結局、何を作ったの?

何のキッチン用品を作ったのかなんて気になる人はいないでしょうけど、一応、紹介を。

私、家事分担で食器洗い担当なんですけど、お皿などの通常の洗い物と同時に水筒があった時、水筒の奥を洗うためにわざわざ水筒用の柄の付いたスポンジを泡立てるの面倒だと感じてました。そう、今回のキッチン用品は、お皿洗いのスポンジをこれの先っぽに挟んで水筒用に変身させる単なる柄でした。しょうもない用品ですけど、結構良い感じに使えてます。磁石が何故必要なのか?ってのは、シンク上部の収納棚の下にくっつけて収納するためでした。

あとがき

“Pause at height” を使う上で一番の問題点は、どのメソッドを選択すれば良いのか?ということだと思います。良く聞く3Dプリンターであれば、ネット上に有益な情報がありますが、そうでなければ、自分で試行錯誤する必要があります。Mega-s は思ったほど情報に行き着くことが出来ませんでした。中には、Mega-s 用に自身で作ったスクリプトを公開している人もいて、それを読み込んで動作させてみたのですが、印刷再開時に動いてはいけないところまで動こうとして慌てて電源を切ることになりました。
今回、Mega-s について書いていますが、同じMega-s でもファームウェアが違うと動作が違うかもしてませんので、試す際には十分注意して実行してください。

コメント

スポンサーリンク