見出し画像

【Klipper+Cura】ヒートベッドとエクストルーダーを同時に加熱完了させるG-codeマクロ

ヒートベッドとエクストルーダーを同時に温めたいけど、フィラメントが溶けた状態で待機することになるのが嫌な人のためのマクロ。

Curaの開始G-code

PRINT_START TEMP_BED={material_bed_temperature_layer_0} TEMP_EXTRUDER={material_print_temperature_layer_0}

・Curaのプリンター設定にマクロを呼び出すG-codeを書いておいて、中身はKlipperのマクロとして記述する。
・{material_bed_temperature_layer_0}と{material_print_temperature_layer_0}が記述されていないと、空欄と看做されてデフォルトの開始G-codeが挿入される。
・{ } = の前後に半角スペースが入っていた場合も同じ挙動になって失敗。

;Generated with Cura_SteamEngine 4.13.1
M82 ;absolute extrusion mode
PRINT_START TEMP_BED=115 TEMP_EXTRUDER=250
G92 E0
G92 E0
G1 F1800 E-3
;LAYER_COUNT:507

・生成したG-codeを開くと冒頭のコードがPRINT_START~に置き換わっている。

Klipperの印刷開始マクロ

[gcode_macro PRINT_START]
gcode:
 M140 S{ params.TEMP_BED }  #ヒートベッドの昇温を開始
 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={ params.TEMP_BED|float - 750 / params.TEMP_BED|float }  #エクストルーダーの昇温開始温度まで待機
 M109 S{ params.TEMP_EXTRUDER }  #エクストルーダーの昇温を開始,設定温度に到達するまで待機
 M190 S{ params.TEMP_BED }  #ヒートベッドが設定温度に到達するまで待機

・Klipperのprinter.cfgに印刷開始用のマクロを追加する。実際には↑の奴+印刷前の儀式を書いて一つのマクロにしている。
・高温域は加熱が遅くなるので、ベッドの設定温度が50℃で15℃手前、100℃で7.5℃手前からエクストルーダーの昇温を開始させるように細工。
・読み込んだ変数は頭にparams.を付けないとエラーになる。
・演算する場合は"|型名"で適切な型に変換する。

実行してみる

画像1

・ほぼ同時に加熱完了して印刷開始。
・温度の上がり方は設置条件やマシンの特性で変わってくるので、各自調整してほしい。

■Curaの開始G-code
PRINT_START TEMP_BED={material_bed_temperature_layer_0} TEMP_EXTRUDER={material_print_temperature_layer_0}


■Klipperの印刷開始マクロ
[gcode_macro PRINT_START]
#印刷開始シーケンス
gcode:
 M140 S{ params.TEMP_BED }  #ヒートベッドの昇温を開始
 TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={ params.TEMP_BED|float - 750 / params.TEMP_BED|float }  #エクストルーダーの昇温開始温度まで待機
 M109 S{ params.TEMP_EXTRUDER }  #エクストルーダーの昇温を開始,設定温度に到達するまで待機
 M190 S{ params.TEMP_BED }  #ヒートベッドが設定温度に到達するまで待機
 G21  #単位にmmを使用する
 G90  #絶対座標による位置決め制御を選択
 M82  #絶対距離による押し出し制御を選択
 G28  #原点復帰
 G1 X-2 Y0 F9000  #プレプリント開始位置に移動
 G1 Z0 F600
 G92 E0  #現位置をエクストルーダーのゼロ点にセット
 G1 E10 F200  #ノズル内の滞留フィラメントを排出
 G1 Y80 E20 F600  #プレプリント実行
 G1 Y90 Z3 F6000  #ノズル先端から樹脂を剥離


■Curaの終了G-code
PRINT_END


■Klipperの印刷終了マクロ
[gcode_macro PRINT_END]
#印刷終了シーケンス
gcode:
 G91  #相対座標による位置決め制御を選択
 G1 E-1 F300  #ノズルを減圧
 G1 Z+1 E-5 F600  #印刷物を退避
 M140 S0  #ヒートベッドの温度制御を停止
 M104 S0  #エクストルーダーの温度制御を停止
 G90  #絶対座標による位置決め制御を選択
 G1 X-13 Y-1 F9000  #ヘッドを待機位置に移動
 G1 Z200 F1200  #ステージを待機位置に移動

・全体としてはこんな感じ。

Curaにマクロを記述できる?

M140 S{material_bed_temperature_layer_0}  #ヒートベッドの昇温を開始
TEMP_BED={material_bed_temperature_layer_0}  #ベッドの初期レイヤー温度を定義
TEMP_EXTRUDER={material_print_temperature_layer_0}  #エクストルーダーの初期レイヤー温度を定義
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={params.TEMP_BED|float-750/params.TEMP_BED|float}  #エクストルーダーの昇温開始温度まで待機
M109 S{material_print_temperature_layer_0}  #エクストルーダーの昇温を開始,設定温度に到達するまで待機
M190 S{material_bed_temperature_layer_0}  #ヒートベッドが設定温度に到達するまで待機

・これは上手くいかなかった。
・途中にMINIMUM={params.TEMP_BED~のような式があると、Curaが変数を認識してくれなくなる。
・Curaは計算式を扱えないらしいので、こっちでMINIMUMの値を求めるのも多分無理。G-code custom formula in the CURA start code?

マクロ作成チュートリアル

・Klipperマクロ関係のネタ元


この記事が気に入ったらサポートをしてみませんか?