3Dプリンターを使い始めると、「一時停止」して〇〇したい!というケースが多々あるかと思います。
フィラメントの色を変えたい、とか、マグネットを埋め込みたい、とかね。
そんな時は[Pause at height]スクリプトを差し込めばOKです。
が、機種によってはスクリプトを入れただけでは、狙ったところでうまく止まってくれない問題があります。
本記事は、[Pause at height]による3Dプリンターの一時停止の方法と、より突っ込んで確実に良い位置で止めるためのTipsを紹介します。
なお、当方はCreality Sermoon V1 Proを使用していますが、Ender3シリーズやMegaSなどでも同様に使える対策と思います。
先に結論:Ultimaker Curaで確実に一時停止 [Pause at height]を実行する方法
先に結論を書きます。わかる人はここだけ読めばOKでしょう。
- Curaのメニューから「拡張子」>「後処理」>「G-codeを修正」で「Pause at height」を指定する
- 吐き出されたGーcodeをテキストエディタで開き、一時停止コマンド(M25など)の下に「G4 P10 ;10msec停止」を10個ほど入れる。
2をする理由ですが、Pause at heightのコマンド(例えばM25)が発動する前に、先読みされていたコマンドが動いてしまうためです。これによって、下記のような問題挙動が発生します。
原因はいいから対処法だけ知りたい、という方は下記読み飛ばして、次の章に行ってください。
回避したい問題挙動
動画とコードを見比べて見ていただければ一目瞭然です。
ピタッと止まらず、先読みしたコマンドをいくつか実行してからポーズがかかる、という挙動になっています。
下記、Curaが書き出した「Pause at height」の部分です。
記載された内容は下記のとおりです。
7〜9行目のG1 xxx でノズルを退避して、10行目のM104でノズル温度を下げる。その上で、11行目のM25で一時停止を実行する。
一時停止から復帰したら、12行目でノズルを印刷温度に復帰して続くG1 xxxのコードでノズルを印刷物の上に戻す、(以下次のレイヤーに移行)
という流れです。
;TIME_ELAPSED:296.681419
;TYPE:CUSTOM
;added code by post processing
;script: PauseAtHeight.py
;current layer: 33
M83 ; switch to relative E values for any needed retraction
G1 F300 Z7.8 ; move up a millimeter to get out of the way
G1 F9000 X150 Y150
G1 F300 Z15 ; too close to bed--move to at least 15mm
M104 S0 ; standby temperature
M25 ; Do the actual pause
M109 S210 ; resume temperature
G1 F300 Z6.8
G1 F9000 X86.523 Y91.788
G1 F300 Z6.8 ; move back down to resume height
G1 F1200 ; restore extrusion feedrate
M82 ; switch back to absolute E values
G92 E111.93491
ですが、実際にはノズルを退避した後、ノズル温度を印刷温度まで戻した上で、印刷物の上に移動したところで止まる。という最悪の挙動となっています。(動画ご参照)
問題挙動の原因と対処法は?
原因は、M25が作動するまでに、「続く数行(一時停止からの復帰処理)が先読みされた分実行してしまう」からのようです。
従い、M25の下の数行を何もしない命令に変えてしまえば良いわけです。
G4命令はPなら指定したミリ秒、Sなら指定した秒だけ動作を止める命令です。
10msecくらい止める命令を複数入れれば問題の挙動は直ります。
Curaで一時停止したい高さに[Pause at height]を差し込む
ここからは具体的な方法を解説していきます。
まずはCuraで印刷中に一時停止するためのスクリプト「Pause at height」を差し込みましょう。
出てきたポップアップウィンドウで「スクリプトを加える」をクリックし、
「Pause at height」をクリックしましょう。
「Pause at height」の設定は下記のような感じです。
Pause at:止める高さをmm指定か、レイヤー指定かできます。
Pause Height:止める高さ(mmもしくはレイヤー番号。指定したレイヤーが終わった後に止まります)
Method:プリンタを停止するコマンド。機種によって違います。CrealityのEnder系やSermoon V1はM25で良いです。
Park Print Head X/Y:停止中、ノズルを退避する位置です。(ベッドエリアからはみ出ないように)
「スライス」の左に</>というマークが付いたことを確認したら、スライスしてG-codeを保存します。
テキストエディタでG-codeに[G4]を複数挿し込む
続いて、Curaで生成したG-codeに「G4」コマンドを差し込んでいきます。
まずはテキストエディタで生成したG-codeを開き、指定したMethod(Ender-3/Sermoon V1 ProならM25)を検索しましょう。
一時停止コマンド(M25)が見つかったら、その下に「G4 P10」(10ms停止)を10行くらい入れればOKです。
出来たら、G-codeを上書き保存して完了です。
3Dプリンターで印刷してみましょう〜♪
まとめ:Ultimaker Curaで確実に一時停止 [Pause at height]を実行する方法
以上、Ultimaker Curaで確実に一時停止 [Pause at height]を実行する方法でした。
改めて、やるべきことは下記2つです。
- Curaのメニューから「拡張子」>「後処理」>「G-codeを修正」で「Pause at height」を指定する
- 吐き出されたGーcodeをテキストエディタで開き、一時停止コマンド(M25など)の下に「G4 P10 ;10msec停止」を10個ほど入れる。
テキストエディタでG-codeいじらなきゃいけない、というのがちょっと面倒ではありますが、
印刷中のモデル直上でノズルが止まってしまう問題が回避できるなら仕方ないかなぁ。という感じです。
もし、より良い方法があれば、コメント欄でお知らせください。
それでは〜。