KINGROON KP3Sは、超低価格プリンターには珍しく3D Touchによる自動ベッドレベリング(オートレベリング)に対応している。
公式のインストラクションは以下にある。
KINGROON KP3S 3.0に3D Touchを取り付けるブラケットのデータは以下のページにある。プリントして使う。
3D Touchの、マザーボードへの接続方法を解説するドキュメントも、「KP3S-Firmware-3Dtouch (2).zip」に同梱されている。
ファームウェアのインストールに当たっては大変重要な注意事項があるので、インストールはしばし待たれよ。
3D Touchによる自動ベッドレベリング(オートレベリング)の意義と仕組み
手動によるベッドレベリングについては以下のページで書いた。
3D Touchという別売りの周辺機器を取り付けると、ベッド表面とノズルの軌跡との平行出しを自動化できるのだ。
手動によるベッドレベリングでは、ベッドの高さを調整して平行を出した。
自動ベッドレベリング(オートレベリング)では、自動では上下に動かないベッドの代わりに、プリント中ノズルの方を上下に動かしてノズルとベッドの間隔を一定に保つ。
スライサーのスタートコードに自動ベッドレベリング(オートレベリング)の実行行を挿入しておくと、プリント直前に毎回レベリングを実施することも可能となり、プリントが安定する。
3D Touchの導入するとベッド表面とノズルの軌跡との平行出しを自動化できると書いたが、ベッドの高さを調整してするレベリングと違って、メッシュレベリングを行なう点が大きく異なる。
メッシュレベリングとは何だろうか?
以下の動画を見ると分かるが、9回(※)プローブをベッド面に接触させてレベリングを行なっている。
(※: 設定で増やすことも可能)
これにより、地点毎の測量を行ない、ベッドの立体地図を作成するというのがメッシュレベリングの意味だ。
この立体地図に基づき、プリント時にヘッドの位置をリアルタイムに上下させることでノズルとベッドとの間隔を一定に保ち、定着を改善させることが可能となる。
この様子は、プリント時のZ軸のリードスクリューの動きを見ていると分かる。
層間移動時以外も、常にリードスクリューが動くようになる。
単に平行を出すというところから一歩踏み出し、ベッドの表面が歪んでいても、それを吸収してくれるわけだ。
メッシュレベリングは、ベッドの平坦度があまりよろしくないKINGROON KP3Sの欠点を補う効果をもたらす。
自動ベッドレベリングで自動化できること
自動ベッドレベリングと聞くと、これまでベッド四隅にある調節ノブを回してやっていた作業から人間が完全に解放されることを意味すると思うだろう。
しかし、実態は異なる。
自動化できるのは、ベッドの立体地図作成と、それに沿ったノズルの上下動だけだ。
だから、3D Touch導入後もノズルとベッドの間隔調整は人間が面倒を見る必要がある。
これまでと違うのは、作られた立体地図とそれに沿ったノズルの上下動によりノズルとベッドの間隔は一定に保たれることだ。
これによってノズルとベッドとの間隔調整においてベッドの表面という二次元的な広がりを考慮する必要がなくなり、ノズルとベッドの間隔を何ミリにするか?という1次元的な管理で済むようになる。
フィラメントや印刷条件によって最適なノズル・ベッド間の間隔は異なるから、それを何ミリにするかというのは人間が決めるのだ。
間隔調整はZ軸の下にあるバネ付きのネジでもできるし、G-codeのM851のZの数値を増減させることでもできる。
間隔調整は0.05mmぐらいの粒度で最適値を探るので、G-code経由でやる方が細かく詰められる。
Marlinを導入してZ Safe Homingを有効にし、Z軸の原点出しも3D TouchでやるようにするとM851の数値調整でしか間隔を調整できなくなってシンプルになり、自動ベッドレベリングの意義が浮き彫りになる。
Z軸の原点出しをリミットスイッチでやる純正ファームウェアの自動ベッドレベリングは中途半端で意義がぼけているともいえる。
何を言っているかサッパリ分からないと思うが、Z Safe Homing有効化はMarlinをインストールする動機の一つになるということは覚えておいてほしい。
3D Touch選びの注意点
大変便利な3D Touchによる自動ベッドレベリング(オートレベリング)だが、注意したいのは正常に動かない3D Touchがあることだ。
3D TouchはAliExpress、日本のAmazonで買うことができるが、AliExpressのKINGROON Official Storeで販売されている3D Touch以外の場合、動かない可能性がある。
従って、3D TouchはAliExpressのKINGROON Official Storeで販売されているものを買うことが大事だ。
▼KINGROON純正3D Touch
動かない3D Touchの例
筆者はAliExpressのTrianglelabで販売されている3D TouchをKINGROON KP3Sに接続したが、正常に動かなかった。
M280 P0 S120のセルフテストは動くが、M280 P0 S10のピンダウンが動かないといった動作状況だ。
|
|
- リファレンス
この問題をオシロスコープで調査した井上藍莉氏によると、ピンダウンは本来信号幅が650usのところ、KP3Sから発される信号幅が700usになってしまっているために動かないようだ。
KINGROON純正の3D Touchは、その状況でも動作する。
既にレポートから長期を経て音沙汰なしなので、公式の対応はないものと考えた方がいいだろう。
筆者もファームウェアのソースコードを請求したが、整理したら公開するという返答後、音沙汰なしだ(個人的には必要がなくなったので催促もしていない)。
これ以外で動かなかった3D Touchがあったら、あるいはKINGROON以外から買ったものですんなり動いたものがあったら情報をお寄せいただきたい。
動かない3D Touchを掴んでしまった場合の対処
この問題は、純正ファームウェアを使う限り対処不可能。
オープンソースの3Dプリンター用ファームウェアMarlinをインストールすると、社外の3D Touchでも正常に動作するようになる。
筆者はそのようにして問題を回避した。
KINGROON純正3D Touchの方は、純正ファームウェア、Marlinのどちらでも正常に動く。
純正ファームウェアもMarlinベースだが、このような差異が出るのが不思議だ。
Marlinの導入については以下に書いた。
Marlinにおける3D Touch(BLTouch)の有効化については以下に書いた。
ファームウェアの入れ替え
前置きが長くなったが、3D Touch対応のために必要な準備について解説する。
KINGROON KP3Sを3D Touchにするには、まずファームウェアを3D Touch対応のものに入れ替える必要がある。
3D Touch対応のファームウェアが提供されている。(MPUにSTM32F103を搭載したKP3S向けのもの)
最近、KINGROON KP3Sのマザーボードに搭載されているMPUは3種類あり、ファームウェアに互換性がない。しかし、ショップから買うときにどのMPUが使われているかを事前に知る整備された方法はなく、運次第ということになる。
マザーボードのMPUが当初からあるSTM32F103ではなく、STM32F407、GD32F303が搭載されている場合は、以下のページからダウンロードできる各MPU用のファームウェアをダウンロードし、robin_nano_cfg.txtだけを「KP3S-Firmware-3Dtouch (2).zip」から取り出し、置き換えて使うことになる。
以下のページから日本語化したrobin_nano_cfg.txtをダウンロードできるようにしたので、設定を見直したい場合は利用するといいかもしれない。
ノーマルのファームウェアと3D Touch対応ファームウェアのrobin_nano_cfg.txtの変更箇所を差分を取って分かりやすくしたものが以下だ。赤が削除行。緑が追記行。赤で削除された後、すぐ追記があるものは、その行が変更されたことを意味する。
色が付いていないものは変更のあった行の位置を指し示すためにインデックスとして出てきているだけだ。
ファームウェアはMPU別に2種類ある。
MPUが3種類あるのに、ファームウェアは2種類とはどういうことだろうか?
それは、当初からあるSTM32F103と新顔のGD32F303はファームウェアが共通で、STM32F407だけが別のファームウェアを必要とするという理由からだ。
ファームウェア | 対応MPU |
---|---|
KP3S-Firmware-20210726stm103gd32.zip | STM32F103 |
GD32F303 | |
KP3S_F407-Firmware-20210710.zip | STM32F407 |
3D Touchの固定
続いて、3D Touchの物理的な取り付け方法を解説する。
3D Touchの配線を短い方から長い方に付け替える。
ホットエンドを取り囲む鉄板にあるスリットに3D Touch取り付け用のブラケットを取り付ける。
先述の通り、KINGROON KP3S 3.0に3D Touchを取り付るためのブラケットのSTLデータは、Thingiverseで公開されている。
これをプリントして取り付けるわけだ。
配線処理
3D Touchの取り付けが済んだら、3D Touchの配線をケーブルカバーの中に収めながら本体ベース部まで這わせていく。
配線のケーブルカバー内への収容は、3D Touch側から開始する。
3D Touchからケーブルカバーまでの配線は、あまり短くならないよう適当な長さを残しておく。
以下の写真は筆者のカスタム済みのものでちょっと様子が違うが、こんな感じで少し余裕を持たせる。(写真はKP3S 1.0)
ケーブルカバーへの配線の収め方の一例を示す。
- ケーブルカバーのつなぎ目の、下になっている方を細いラジオペンチのようなもので掘り出し、上に出す
- 上に出した方を指で開いている間に、3D Touchの配線を潜り込ませる
- 元々上だった方を細いラジオペンチのようなものでまた掘り出して上に戻す
これをどんどん本体の方までやっていく。
@CUEICHI 氏が公開しているケーブル通しツールを使うのもよさそうだ。
Kingroon #KP3S のエクストルーダ交換に伴うケーブル保護チューブの取り付けが面倒だったので,ケーブル通しツールを作った.
— 9-1 (@CUEICHI) December 23, 2021
爆速でラッピングできます.
まあジェネリックヘララップツールなんだけど.https://t.co/RphVlOfIUB pic.twitter.com/F0RhT925Pe
これをやるに当たり結束バンドが邪魔になるが、そもそも結束バンドをそのままにしているとケーブルが切断される可能性が高いので養生をする。
筆者は上記の記事でやっている通り平面ファスナーでケーブルを固定しているので、ベリベリやるだけで作業ができた。
本体の方までケーブルカバーへの配線の収容を終えたら、本体底面のパネルを外す。
本体側の根元にあるプラスチックのケーブル保護パーツをいったん外す。
ラジオペンチのようなもので内側にある出っ張りを押し込みつつ外に追い出す感じだ。
これを外すと3D Touchの配線が通るようになる。
配線の黒いコネクタを、ケーブル保護パーツを外してできた隙間から本体内に入れる。
3D Touchの配線を本体内に入れたら、ヒートベッドのケーブルの後ろを回してからマザーボード上にある3D Touch用のコネクタの方に持っていく。
本体外側の穴付近の配線のケーブルカバーへの収容が終わったら、穴をまたいで本体内側もやる。本体内側はかなり作業がしづらいので、穴付近だけやればいいかと思う。
穴付近の収容まで終わったら、プラスチックのケーブル保護パーツを元に戻す。
マザーボードとの接続
3D Touchコネクタ
3D Touch用のコネクタに、3ピンのコネクタを以下の向きで接続する。
S(Signal) | 5V | G(GND) | |
---|---|---|---|
KINGROON 純正 | 黄色 | 赤 | 緑 |
社外品 (Trianglelabなど) | オレンジ | 赤 | 茶色 |
Z+(Z-Max)コネクタ
Z+(Z-Max)の方には2ピンのコネクタを以下のように接続する。
S(Signal) | G(GND) | 5V | |
---|---|---|---|
KINGROON 純正 | 白 | 黒 | - |
社外品 (Trianglelabなど) | 白 | 黒 | - |
マザーボードとの接続後の全体の俯瞰。
配線の長さが余るので、ほかのケーブルと結束バンドでまとめるなどで整理する。特に、ステッピングモータードライバのヒートシンク周辺にかからないように注意する。
3D Touchの高さ調整
3D Touchは「M280 P0 S10」というG-codeに反応して、プローブが伸びる。
伸びたときのプローブの長さ: 約11mm
「M280 P0 S90」というG-codeに反応して、プローブが縮む。
縮んだときのプローブの長さ: 約5.4mm
その間にプローブの反応ポイントがある。
プローブの反応ポイント: 約8.5mm
プローブが縮んでいるときと、伸びているときの長さの差は約5.6mm。
伸びた状態から約2.5mm押し込んだところでプローブが反応。
5.6mm - 2.5mmで3.1mmの猶予がある。
従って、プローブが縮んだ状態でプローブ先端がノズル先端から3.1mm ÷ 2 = 1.5mm程度引っ込んだ辺りになるように取り付けるのがいい。
プローブが縮んだ状態ではノズルよりプローブ先端の位置が高くなってプリントの邪魔にならないように。
プローブが伸びた状態ではノズルよりプローブ先端の位置が低くなり、なおかつプローブの反応ポイントもノズルの先端より低い位置になるようにするわけだ。
今回使うKINGROON KP3S 3.0用ブラケットは取り付け位置が決め打ちになっていて調整をする必要はないが、別のブラケットを使う場合にこの知識が役に立つこともあるだろう。(写真はKP3S 1.0)
自動ベッドレベリング(オートレベリング)の準備
自動ベッドレベリング(オートレベリング)の運用に入る前にやるべき準備がある。
具体的には、ノズルの先端と、3D Touchのプローブの反応ポイントとの位置関係がどうなっているかを調べることだ。
今回利用のKINGROON KP3S 3.0用3D Touch取り付けブラケットを使う限りXYのオフセットは自明だ。
Xは27.5、Yは0。つまり、ノズルの27.5mm右に3D Touchのプローブ中心が来ている。これは3D Touch対応公式ファームウェアの既定値として設定されているので気にする必要はない。
下図は3Dプリンターを上から見下ろしたときのノズルと3D Touchのプローブとの位置と座標の関係を示したものだ。
図の上がベッド奥、図の下がベッド手前だ。
純正の3D Touch取り付け位置はノズルの右真横27.5mmのところにあるので図中の「+X 0Y」に相当し、X27.5、Y0ということになる。
Zの位置関係(オフセット)は個体によって微妙な差異があると思われるので、調べて確認する。(写真はKP3S 1.0)
ノズル先端とプローブの反応ポイントとの位置関係がどうなっているかを調べ、KINGROON KP3Sに教えてあげないといけないわけだ。
これらのことはKINGROON KP3S本体の液晶モニタからではできない。例えば、USB接続経由でのArduino IDEのシリアルモニタやOctoPrintを使ってやる。
ちなみに、Arduino IDEのシリアルモニタもOctoPrintのTerminalも、過去に送信したものをカーソルキーの上で呼び出すことができる。
具体的な手順は以下のようになる。
- Home All
- G28
- ノズルを1cmの高さに上げる
- G90
- G1 Z10
- ベッドの中央に移動
- G1 X90 Y90 F4000
- 3D Touchのプローブを伸長
- M211 S0
- M280 P0 S10
- 移動を相対モードに
- G91
- 0.1mmずつ下げていく(1cm分0.1mm刻みではまどろっこしいので、目視で○○mm猶予があると見れば、その分一気に下げてもいい)
- G1 Z-0.1
- 3D Touchのプローブが反応した?(Yes/No)しなければ6に戻る↑
- プローブが反応したら現在のZ軸の高さを調べる(これをA値とする)
- M114
- プローブをリセットして引っ込める
- M280 P0 S160
- M211 S1
- ノズルが3D Touchのプローブと同じ位置を指すように移動。ノズルは3D Touchの左にあるためX軸の座標は「90 + 27.5 = 117.5」となるが、ノズルが3D Touchの右にある場合は「90 - (3D Touchとノズルの間隔)」となる点に注意。例えば、ノズルが3D Touchの32mm右にある場合は「90 - 32 = 58」となる。
- G90
- G1 X117.5 Y90 F4000
- G91
- ベッドにコピー用紙を敷く
- 0.1mmずつ下げていく
- G1 Z-0.1
- コピー用紙がベッドとノズルに接触して、動かせないほどではないが抵抗を感じるぐらいになった?(Yes/No)なっていなければ12に戻る↑
- コピー用紙がベッドとノズルに接触して、動かせないほどではないが抵抗を感じるぐらいになったら現在のZ軸の高さを調べる(これをB値とする)
- M114
- B値からA値を引いたC値を求める(マイナス値になる)
これで、ノズル先端からC値分下げるとプローブの反応位置になることが分かった。
ここでは、C値を仮に-1.2(-1.2mm)とする。
これをKINGROON KP3Sに教える。
- ノズル先端とプローブの反応位置の差を教える
- M851 Z-1.2
- EEPROMに保存する
- M500
このM851のZを増減させることで、ノズルとベッドの間隔を調整できる。
利用パターン1「レベリングしてすぐ使う」
自動ベッドレベリング(オートレベリング)は、本体メニューの「自動レベリング」ボタンで開始できる。これは、Arduino IDEなどで「G28」「G29」を連続して実行したのと同じことだ。
robin_nano_cfg.txtの「>cfg_auto_leveling_cmd:G28;G29;」に定義がある。
その後で印刷を開始すれば、得たメッシュデータを元に自動ベッドレベリング(オートレベリング)を効かせてプリントができる。
G29の直後は、当然メッシュデータがメモリ上にあり、なおかつメッシュを利用しての自動レベリングが有効な状態になっているのだ。
- リファレンス
微調整
実際にプリントしてみると、ノズルとベッドの間隔が全体的に遠すぎたり近すぎたりということが起きるだろう。
その場合は、Z軸根元の調節ネジを使うことで調整できる。
症状 | 対策 |
---|---|
ノズルとベッドの間隔が広すぎる | Z軸根元の調節ネジを右に回す |
ノズルとベッドの間隔が狭すぎる | Z軸根元の調節ネジを左に回す |
一度「M503」で設定一覧をダンプし、現状の「M851」の状態を確認し、「M851」のZの値を増減させることで調節する方法もある。細かい調整はこちらの方がやりやすい。
症状 | 対策 |
---|---|
ノズルとベッドの間隔が広すぎる | M851のZの値を小さくする (0以下も指定可能) |
ノズルとベッドの間隔が狭すぎる | M851のZの値を大きくする (0以下も指定可能) |
ちなみに、Marlinをインストールし、Z Safe Homingを有効にした場合は3D TouchでZ軸の原点出しになるので、「M851」での一元管理となる。
- リファレンス
利用パターン2「メッシュデータを保存して使う」
自動レベリングで得たメッシュデータはそのままでは電源を切ったりしたら消えてしまうが、「M500」を実行すれば、メッシュデータをEEPROMに保存できる。
G-code | |
---|---|
自動ベッドレベリング | G28 G29 |
自動ベッドレベリングして メッシュデータをEEPROMに保存 | G28 G29 M500 |
保存したメッシュデータの 呼び出しと使用宣言 | M501 M420 S1 |
保存したメッシュデータの表示(ダンプ) | M420 V |
自動ベッドレベリング(オートレベリング)は時間がかかるのでプリント時毎回の実行を望まない人もいるだろう。
換言すると、任意のタイミングで自動ベッドレベリング(オートレベリング)を実行して得たメッシュデータをEEPROMに保存し、普段はそのメッシュデータを呼び出して使うだけにしたいということになるだろうか。
その場合は、以下のG-codeをダウンロードしてMicro SDカードに保存し、それを「印刷」すると自動ベッドレベリング(オートレベリング)、EEPROMへの保存までできる。
LVELING_AND_SAVE.gcodeの中身は、以下の3行のテキストファイルだ。
|
|
robin_nano_cfg.txtの「>cfg_auto_leveling_cmd:G28;G29;」を「>cfg_auto_leveling_cmd:G28;G29;M500;」に書き換えてファームウェアを入れ替え、本体メニューの「自動レベリング」のボタンでメッシュデータのEEPROMへの保存までやってしまうように設定する方法もある。
そして、Ultimaker Cura等のスライサーのスタートコードに「M501」「M420 S1」を追記して、プリント時にはそれを使うようにするやり方が想定できるだろう。
|
|
Ultimaker Curaなら、「Settings>Printer>Manage Printer…>Machine Settings>Start G-code」で設定が可能だ。
EEPROMに保存されたメッシュを「M501」で呼び出しただけでは自動ベッドレベリングは有効にならない。
呼び出した上で「M420 S1」を実行して、自動ベッドレベリングを明示的に有効にしなければならないのだ。
「M501」を実行すると、EEPROMに保存されているすべての設定値も読み出されてしまうので、他の設定が影響を受ける可能性もある点に注意が必要だ。
利用パターン3「プリント時に毎回実行する」
プリント毎に毎回自動ベッドレベリング(オートレベリング)を実行する方法がある。
KINGROON KP3Sのメニュー「自動レベリング」を押しての自動ベッドレベリング(オートレベリング)だと、毎回操作する必要があって面倒。
Ultimaker Curaなどのスライサーのスタートコードに「G28」「G29」を追記して、プリント前に毎回自動的に実行させることができる。
|
|
ヒートベッドは昇温すると歪むので、昇温してから自動ベッドレベリング(オートレベリング)をした方がいいだろう。
|
|
- リファレンス
Ultimaker Curaなら、「Settings>Printer>Manage Printer…>Machine Settings>Start G-code」で設定が可能だ。
スタートコード内でM501を実行している場合は、その後に書く。
Ultimaker Curaから書き出したG-codeファイルにはこれが漏れなく書き込まれ、プリント毎に自動ベッドレベリング(オートレベリング)が行なわれ、その終了後にプリントが行なわれるようになる。
一度、スライサーから書き出したG-codeをチェックしてみると何が起きているか理解できるだろう。
自動ベッドレベリング(オートレベリング)の注意点
KINGROON KP3S公式ファームウェアの自動レベリングは、Zホーミング(Z軸の原点出し)時に、ベッドの高さの影響を受けるので、ベッドの高さ(厚さ)を変更した場合にも注意が必要だ。
特に標準のビルドステッカーから、別売りのガラスベッドに交換した場合は厚さが増すので、設定がそのままではノズルがベッドに激突してしまう。
純正ガラスベッドが届いてオートレベリングをしようとしたら、ガラスベッドと通常のベッドの厚さの差を何も考えずに実行したので、最初のZ軸の原点確認の時に当たり前のようにノズルがベッドに突撃した pic.twitter.com/bdOVUJfu6X
— RIMU (@RIMU21760156) March 24, 2021
自動ベッドレベリング(オートレベリング)動作のカスタマイズ
自動ベッドレベリング(オートレベリング)の動作は、robin_nano_cfg.txtを書き換えることでカスタマイズ可能だ。
GRID_MAX_POINTS_X、GRID_MAX_POINTS_Y:
メッシュの密度を変更できる。
3から4に変更すると、以下のように変化する。
Z_CLEARANCE_DEPLOY_PROBE:
自動ベッドレベリング(オートレベリング)終了後のノズルのZ軸の高さ。
Z_CLEARANCE_BETWEEN_PROBES:
レベリングのポイント間の移動でノズルをどれぐらい上げるか、という設定だ。
デフォルトでは20で、都度2cm上がるように設定されている。これを5に減らすと5mmしか上がらなくなって、自動ベッドレベリング(オートレベリング)が早く終わるようになる。
XY_PROBE_SPEED
レベリングのポイント間の移動でノズルをどれぐらいのスピードを出すか、という設定だ。
デフォルトは4000だが、筆者は6000に上げた。
XX_PROBE_BED_POSITION:
3D Touchのプローブが動き回れる範囲を指定する。
|
|
Xが-35.0という位置に3D Touchを取り付けた場合は、X_PROBE_OFFSET_FROM_EXTRUDERを設定するだけではだめで、XX_PROBE_BED_POSITIONがデフォルトのままでは動かなかった。整合性を取る必要がある。
整合性を取って以下のようになった。
|
|
X_MAX_POS(180)によって、0〜180でX軸の稼働域の最大値が180だということをKP3Sは理解している。
|
|
プローブのXを-35.0としたことで、180 - 35 = 145がプローブの最大の稼働域。
|
|
それ以上にすると異常を検知して動かなくなる感じなのだろう。
その他の項目:
robin_nano_cfg.txtから、自動ベッドレベリング(オートレベリング)関連項目を抜粋した。
全部は試していないが、昇降速度を上げたりも可能だろう。
自分の気に入るようにカスタムしてはどうだろうか。
|
|