なんかタイトル長くなってなんかすみません(語彙力)。
Ender-3やA10のようにフィラメントやノズル交換等の状態に合わせてどうしてもラクにオフセット調整できるようにしたかったので、つけてみました。
Marlin 2.0系だと簡単にできるのかもしれませんが、1.1.系はconfigration.hを触るだけではダメそうで、ネットで探しても見つからなかったので、3Dプリンタハト派(自称)としては大変遺憾なのですがw、ちょっとだけソースを変えました。
ただ、使えるようにはしたのですが、Ender-3とかA10のように造形中にノブをダブルクリックしてグリグリ動かせるわけではないです。
i3 MEGA の液晶は他と違ってタッチパネルなので、ノブがありません。
印刷中の画面やセットアップ、ツールなどの画面もオリジナルっぽいので、画面をガラっと変えるのも簡単じゃなさそうでした(パネルをタッチするよりはノブをグルグル回してガシガシ押せるほうが何かと早くて楽ちんだと思うのですけどw)。
カスタムファームで追加された"<Special menu>"の中で造形中にBabyStepをさせるにも、造形中、PRINT画面はSTATUS画面しか表示されない上に、オフセット値を表示する画面を出すのも簡単ではなさそうです。
なので、造形前に"<Special Menu>"の中でBabyStepできるようにしました。
造形前なら樹脂出んやろ!と思われるかもしれませんが、"<Special menu>"の中の"<Auto Bed Levering>"等のコードを見ているとG29等をGCODEとして送り出しているだけのようでした。
これをマネして、GCODEを送って樹脂をテスト的にゆっくりと出しながら、その途中でBabyStepを動かす方法が修正的にラクそうだったのでそのように直しました。
以下、ソースの修正箇所です。
基本的に一部行を追加して、メニューの並びを変えているだけです。
修正後、普通にコンパイル・ファーム転送してください。
(AnycubicTFT.cpp)
2022/11/15 追記~
G1コマンドで樹脂吐出時のZ軸の高さが間違っていました。
ピッチ0.3mmで吐出しますので、Z0ではなくZ0.3にしてください
(下記ソースの太字部分を修正しています)。
~追記終わり
} else if (strcmp(SelectedDirectory, "<feedtest zprobeoffset>")==0) {
if (int(thermalManager.degHotend(0)) >= 170)
{
SERIAL_PROTOCOLLNPGM("Special Menu: FeedTest ZProbeOffset");
enqueue_and_echo_commands_P(PSTR("G28"));
enqueue_and_echo_commands_P(PSTR("G1 Z2.0 F3000"));
enqueue_and_echo_commands_P(PSTR("G1 X5 Y20 Z0.3 F5000.0"));
enqueue_and_echo_commands_P(PSTR("G1 X180 Y20 Z0.3 F200.0 E15"));
enqueue_and_echo_commands_P(PSTR("G1 Z10.0"));
} else
{
SERIAL_PROTOCOLLNPGM("Special Menu: Nozzle Temp Too Cold.");
}
} else if (strcmp(SelectedDirectory, "<z probe offset +0.1 >")==0) {
SERIAL_PROTOCOLLNPGM("Special Menu: Z Probe Offset +0.1");
enqueue_and_echo_commands_P(PSTR("M290 Z0.1"));
} else if (strcmp(SelectedDirectory, "<z probe offset -0.1 >")==0) {
SERIAL_PROTOCOLLNPGM("Special Menu: Z Probe Offset -0.1");
enqueue_and_echo_commands_P(PSTR("M290 Z-0.1"));
(赤枠を修正)
case 0: // First Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat bed>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Preheat bed>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Bed Leveling>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Bed Leveling>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Probe Offset +0.1 >");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Probe Offset +0.1 >");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Probe Offset -0.1 >");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Z Probe Offset -0.1 >");
break;
case 4: // Second Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FeedTest ZProbeOffset>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FeedTest ZProbeOffset>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Save EEPROM>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Pause>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<FilamentChange Resume>");
break;
case 8: // Third Page
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotend PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotend PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotbed PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Auto Tune Hotbed PID>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
ANYCUBIC_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
アメブロはソースが出しづらいのでもうやめたいですorz
<Special Menu>"にZ Probe OffsetをBaby Step(M290)でプラス・マイナスするメニュー("<Z Probe Offset +0.1>" & "<Z Probe Offset -0.1>")の2つを追加しています。
あと樹脂をベッドに出すために"<Special Menu>"にもう1つ、オートホーム(G28)してベッド手前で左から右へジワーっと樹脂を出すwメニュー("<FeedTest ZProbeOffset>")も追加しました。
使い方として、最初に"<FeedTest ZProbeOffset>"を実行して、続けて"<Z Probe Offset +0.1 (-0.1)>" を樹脂が出ている間にペチペチ連打することでw調整します。
"<Special Menu>"中のメニューは一度実行するとの先頭ページに画面が戻されるので、(そこを直すのも面倒そうだったので)メニューの並びを変えて、先頭ページにZ Probe Offsetを増減するメニューを出しました。
ただそれでも一回増減を実行すると再度メニューを選択(押して)して実行を押さないといけません。
なので、左手はメニューを、右手は実行ボタンに構えて連打に備えておく必要がありますw
ちなみに刻み幅は0.1mmにしていますが、変えたい場合は追加したソース中の0.1とある部分の数字を変えればOKです。
樹脂の出し方もGCODEの G1コマンドの後ろの数字を変えればOKです。
ちなみにノズル温度が170℃未満の場合は樹脂出しできないようにしてありますので(エクストルーダがカチカチ鳴りそうだったのでw)、ノズル温度は先に上げておいてください。
樹脂出ししなくてもオフセットの増減はできると思いますが、調整がいい感じなのかさっぱり分からないのであまり意味はないと思いますw
調整がうまくいった後はEEPROMへの保存("<Save EEPROM>")も忘れずに行ってください。
あとメニューをいじる人以外には全く関係ないですが、ソース中のメニュー選択名はどこかで小文字に変換されてますので、if文のstrcmp中の評価文字列は小文字にする必要があります(ここでひっかかって悩みましたo...rz)。
ArduinoのシリアルモニタやRepeatier Hostなら、BabyStep中にコンソールにオフセット値が出力されるので、連打しつつ樹脂の定着を見ながらコンソールを見るのも無理ゲーかもしれませんがwなお良いでしょう(まぁこの数値よりも樹脂の定着が目的なので見えなくても私的にはOKですが)。
注意点はMarlinのバージョンアップをするとソースが上書きされる上にもう一度同じように直してもそのままでは動かないという無慈悲なコンボもありえますorz
ただ、技術の枯れ果て気味のw1.1系ならメジャーなバージョンアップはもうなさそうな気がしますし、今のまま動けばプリンタ壊れるまでいいやという私のようないい加減な安定稼働重視のABS臭大好き変態紳士なら、やっても良いかもしれません。
が、モチロンですが動作は全くの無保証ですし、全ての8bit版 i3 MEGAで動くかどうかは分かりません(32bit版は2.0系を使いますしね)。
念のためソースのバックアップは取った上で試してみてくださいませ。