3Dプリンタ(ANYCUBIC i3 Mega-S)の自動レベル調整
~BLTouch (3D-Touch)を追加する~

ファームウェアをMarlinに変更し、メッシュレベリングで印刷の成功率があがった。ベッドとノズルの隙間が大きいと、一層目がベッドに密着せず、印刷物がベッドから浮いてしまう。
3Dプリントの失敗の原因は、ベッドとノズルの隙間が適正でないことが主な要因と考える。メッシュレベリングとは、いくつかのポイントでベッドの高さを測定し、印刷時に測定したデータで各ポイント間の高さを補間しながら、ノズルの高さを自動調整する機能だ。とても有効な機能なのだが、手動で各ポイントの高さ調整を行うのは面倒である。そこで、自動レベル調整をできるようにした。
ANYCUBIC i3 Mega-S に対応した Marlin firmware のうち、BLTouch による自動レベル調整ができるファームウェアが公開されているので、これを使うことにした。BLTouch は Amazon でも購入できる。Amazon で検索すると BLTouch のほかに 3D-Touch が表示される。ネットの情報によると、3D-Touch は BLTouch に比べ精度が悪いらしいが、1/3で売られているので安物買いをしてみた。以下、取付から設定まで記録しておく。

1.ハードの取り付け
まずは取付に必要なブラケットを3Dプリンタで作る。


3D-Touch の取付面から 3Dプリンタの取付面の寸法は24mmとしているが、この寸法は実測して決める。ブラケットの3Dデータを公開しておくので、利用の際は取付面をプレス・プルして寸法調整していただきたい。

3D-Touch のプローブ先端とノズル先端のギャップを約2~3mmになるようブラケットの寸法を決める。

購入した 3D-Touch にはスプリングが入っていたので、ネジでレベル調整できるよう寸法を決めた。

3D-Touch のピン配置は上図のようになっている。1~3 の配線は、付属の延長ケーブルを使って、コントローラまで配線を行う必要がある。

4・5 の配線はヘッドのコネクタ基板に上図のようにピンヘッダをハンダ付けして 3D-Touch と接続するだけでよい。この基板からコントロールボードへの配線は既存の予備配線を流用する形になる。

コントロールボードへの配線は、3D-Touch の1・2・3から延長ケーブルで、上図のとおり既にハンダ付けされているピンヘッダへ接続する。4・5 はヘッドのコネクタ基板に接続されているので、配線の必要がない。

写真はヘッドからの配線を接続した状態。特にVccとGNDを間違わないよう注意すること。

筐体から外部への配線取り出しは、上図のとおりコネクタの隙間を利用する。

3D-Touch の取付はヘッダの排熱口を利用する。

3D-Touch の取り付け状態。

コントロールボードへの配線も排熱口を利用して取り出す。

2.ファームウェアをコンパイルする
Marlin firmwareArduino プラットフォームを利用した 3Dプリンタのコントローラ用に設計されたオープンソースのファームウェアである。利用するためには、所有する 3Dプリンタにカスタマイズする必要がある。自分でカスタマイズするのはハードルが高く躊躇するのだが、幸い ANYCUBIC i3 Mega 用にカスタマイズされたソースが公開されている。このソースファイルと Arduino IDE を使ってコンパイルを行う。必要なソフトとファイルは次のとおりである。

・Arduino IDE
https://www.arduino.cc/en/Main/Software

・Anycubic i3 Mega Marlin (BLTouch) 1.1.9
https://github.com/MNieddu91/Marlin-AI3M-BLTouch
 (2022-04-29 表記とリンク先が異なっているのを訂正)

ソースはANYCUBIC Mega i3 用にカスタマイズされているが、いくつか変更しなければならない。


解凍したソースファイルのうち、“Marlin.ino” を Arduino IDE で開く。

Arduino IDE で開くと、複数のファイルが同時に読み込まれ、タブで表示される。青矢印の “▼” をクリックすると読み込まれたファイルが一覧表示される。

この中から “Configuration.h” を選択する。カスタマイズはこのファイルを編集することで行える。以下、変更した箇所を記録しておく。

【モータードライバの設定】

//#define X_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
//#define Y_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
//#define Z_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
#define X2_DRIVER_TYPE TMC2208_STANDALONE 
#define Y2_DRIVER_TYPE TMC2208_STANDALONE 
//#define Z2_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
//#define E0_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
//#define E1_DRIVER_TYPE TMC2208_STANDALONE // comment out for stock drivers 
#define E2_DRIVER_TYPE TMC2208_STANDALONE 
#define E3_DRIVER_TYPE TMC2208_STANDALONE 
#define E4_DRIVER_TYPE TMC2208_STANDALONE

【BLTouchのバージョン】
(2022-05-02追加:バージョンによってコメントアウトの有無が異なる)

/** 
* BLTouch V3.0 and newer smart series 
* For genuine BLTouch 3.0 sensors. Clones may be confused by 3.0 command angles. YMMV. 
* If the pin trigger is not detected, first try swapping the black and white wires then toggle this. 
*/ 
#define BLTOUCH_V3 // remove comment out

【プローブのノズルからのオフセット位置】

#define X_PROBE_OFFSET_FROM_EXTRUDER -1 // X offset: -left +right [of the nozzle] 
#define Y_PROBE_OFFSET_FROM_EXTRUDER -23 // Y offset: -front +behind [the nozzle] 
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]

【計測時のXY軸移動速度】

// X and Y axis travel speed (mm/m) between probes 
#define XY_PROBE_SPEED 10000 // 3600 to 10000

【計測時のZ軸リフト量】

#define Z_CLEARANCE_DEPLOY_PROBE 5 // Z Clearance for Deploy/Stow :10 to 5 
#define Z_CLEARANCE_BETWEEN_PROBES 3 // Z Clearance between probe points :5 to 3 
#define Z_CLEARANCE_MULTI_PROBE 3 // Z Clearance between multiple probes :5 to 3

【モーター回転方向】

#define INVERT_X_DIR true // set to true for stock drivers or TMC2208 with reversed connectors :false to true 
#define INVERT_Y_DIR false // set to false for stock drivers or TMC2208 with reversed connectors :true to false 
#define INVERT_Z_DIR false // set to false for stock drivers or TMC2208 with reversed connectors :true to false

【エクストルーダーのモーター回転方向】

#define INVERT_E0_DIR false // set to false for stock drivers or TMC2208 with reversed connectors :true to false 
#define INVERT_E1_DIR false // set to false for stock drivers or TMC2208 with reversed connectors :true to false

【計測ポイント】

#define GRID_MAX_POINTS_X 7 // 5 to 7(7x7 = 49 points)

【計測範囲】

#define LEFT_PROBE_BED_POSITION 10 
#define RIGHT_PROBE_BED_POSITION 200 // 190 to 200 
#define FRONT_PROBE_BED_POSITION 10 
#define BACK_PROBE_BED_POSITION 200 // 202 to 200

ソースファイルの書換が終わったらコンパイルを行う。

Arduino IDE のメニューから上図のようにボードとプロセッサを選択する。

つづいてメニューから「コンパイルしたバイナリを出力」を選択してコンパイルを行う。ソースファイルと同じフォルダに “Marlin.ino.mega.hex” と “Marlin.ino.with_bootloader.mega.hex” が新たに生成されている。必要なファイルは Marlin.ino.with_bootloader.mega.hexMarlin.ino.mega.hex”(2022-04-26 指摘を受けて訂正) である。

3.ファームウェアを書き換える
3DプリンタとPCをUSBケーブルで接続する。
デバイスマネージャーで 3Dプリンタのポートを確認する。ここでは、“COM8” が該当するポートである。

Arduino IDE のメニューで3Dプリンタのシリアルポートを選択した後、矢印のボタンをクリックして「シリアルモニタ」を起動する。

シリアルモニタが起動すると、3Dプリンタの設定値が表示される。表示されたテキストはテキストエディタなどにコピーアンドペーストし、テキストデータとして保存する。設定値が表示されない場合は、送信ボックスに “M503” と入力して「送信」ボタンをクリックする。ファームウェアを書き換えると設定値が初期化されるので、必ず保存しておくこと。設定値を保存したら、シリアルモニタを閉じておく。閉じておかないと、Cura が接続できない。

ファームウェアの書き換えは、このまま Arduino IDE で出来るだろうと思うが、WEBから得た情報のとおり Cura を使うことにする。

起動した Cura のメニューから「設定」「プリンター」「プリンターを管理する」を選ぶ。

「ファームウェアアップデート」ボタンをクリックし、Marlin.ino.with_bootloader.mega.hexMarlin.ino.mega.hex”(2022-04-26 指摘を受けて訂正) を選択すると、ファームウェアの書き換えが始まる。書き換えが終了したら Cura を閉じる

ファームウェアの書き換えで初期化された3Dプリンタの設定値を戻す。Arduino IDE のシリアルモニタを起動する。送信ボックスに次のとおりコマンドを入力し、「送信」ボタンをクリックしてコマンドを送る。
M502 ; デフォルト値をロードする
M500 ; EEPROMに値を保存する

ANYCUBIC i3 Mega-S の場合は、エクストルーダーに関わる設定のため、次のコマンドも送る。
M92 Ennn.n ; nnn.n は先に保存しておいた設定値と同じ値
           (エクストルーダーの送り量)
M203 E30 ; エクストルーダーの送り速度を制限する
M204 R1500.00 ; エクストルーダーの引き込み加速度
M500 ; EEPROMに値を保存する

そのほか、ノズルとベッドの加熱に関わるPID値も確認しておいたほうがよいだろう。ノズル加熱のPIDはM301ベッド加熱のPIDはM304で、保存しておいた設定値と比較し、必要に応じて設定すればよい。

4.3D-Touchの設定
まず、3D-Touch の動作確認を行う。次のコマンドを順次送信してみる。
M280 P0 S260 ; 初期化する
M280 P0 S10 ; プローブを出す
M280 P0 S90 ; プローブを戻す
M280 P0 S120 ; セルフテスト(プローブが出入りする)
M280 P0 S90 ; プローブを戻す
コマンドのとおり動作すれば、次の手順に進む。

3D-Touch による自動計測を行う。
熱膨張による変形も考慮して計測する場合は、M104・M140 でノズルとベッドを加熱しておく。
M104 S190 ; ノズル温度を190℃に設定する ( M104 S0 でOFF)
M140 S60 ; ベッド温度を60℃に設定する ( M140 S0 でOFF)

G28 ; ノズルをホームに移動する
G1 Z20 ; ノズルを20mm上げる(安全ために上げておく)
G29 ; 計測を開始する
M500 ; 計測データをEEPROMに保存する

続いて、プローブとノズルのオフセット値を設定する。
G1 Z10 ; Z軸10mm位置に移動する
G1 X100 Y100 ; X軸100mm Y軸100mm位置に移動する
G1 Z5 ; Z軸5mm位置に移動する
M211 S0 ; ソフトウェアリミットを無効にする
3Dプリンタの操作パネルで、ノズルとベッドの隙間がほぼゼロになる位置までノズルを下げる。次のコマンドでノズルの位置を確認する。
M114 ; ノズル位置を表示する
表示されたZ軸の値を次のコマンドでオフセット値として設定する。
M851 Z-n.n ; Z軸のオフセット値を -n.n ミリに設定する
M500 ; EEPROMに保存する

設定したオフセット値で測定を行う。
G28 ; ノズルをホームに移動する
G29 ; 計測を開始する
M500 ; 計測データをEEPROMに保存する

以上で 3D-Touch の設定は完了。

操作パネルによる計測は次のとおり。


操作パネルのトップから “Print” を選択する。


“Special Menu” を選択して黄色丸印の “Enter” で実行。


“Auto Bed Leveling” を選択して黄色丸印の “Enter” で実行。


計測が終わったあと、“Save EEPROM” を選択して黄色丸印の “Enter” でデータを保存して終了。


最後に
ノズルの交換などでベッドとノズルの隙間が変わっても、簡単に短時間でレベル調整できるようになった。調整ネジだけで、ベッドの4隅と中央の5点を等しく隙間調整するのは困難だった。メッシュレベリングによって印刷成功率が格段に向上した。センサの取付・設定は面倒だが、効果を考えると取り付けるべきだと思う。さらに言えば、最初から装備すべきだ。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 奥山 雅男 より:

    はじめまして、この記事でANYCUBIC i3 Mega-Sのオートレベリングしたいなと思ってやってみてます。
    問題が2つほど、1つは“Marlin.ino.with_bootloader.mega.hex” が出てきません。メモリーが足らないとメッセージが出て、コンパイルは終了しました。となり、“Marlin.ino.mega.hex” だけが出来てます。PCでもMacでも、同じ結果でした。
    他の方の記事で、“Marlin.ino.mega.hex”でやると言った記事がありましたので、やってみましたら、4.3D-Touchの設定 の G29 ; 計測を開始する がうまくいきません。一回は計測してるようですが、そこで止まってしまいます。
    echo:busy: processing
    Error:Probing failed
    echo:busy: processing
    X:12.00 Y:30.00 Z:10.50 E:0.00 Count X:960 Y:2400 Z:4200
    ok
    なにかお気づきの点あれは、お教えください。

  2. 奥山 雅男 より:

    解決いたしました。
     えなじ@tckm_9 さんのツイートで知った、この「https://github.com/MNieddu91/Marlin-AI3M-BLTouch/issues/11」ぺーじの「問題は、Zエンドストップの誤った配線または欠陥のある配線(白と黒の配線)です。」だったようで、ひっくり返したら解決しました。
    お騒がせいたしました。
    正常に動いているようです。ありがとうございました。

    • ohkin より:

      コメント頂いていることに気づかず申し訳ありませんでした。
      解決されて良かったです。

      • 奥山 雅男 より:

        いえいえ、こちらで、オートレベリングが楽に設定できて、大変お世話になってます。
        手動で合わせてるときに、右手前のネジが、どうも短いように感じるくらい足りなくて、Z軸の調整もしては見たものの、壊すのを恐れて、あまり追い込めなくて、でも今は、手動で大体に合わせて、後は「オート」に頼っています。
        お陰であまり気を使わずに、色々印刷しています。ありがとうございました。

  3. たろう より:

    こんにちは。一つ質問ですが、エクストローダーに3dtouchを取り付けて、エクストローダーの熱による3dtouchの故障は起きていませんでしょうか??
    ぜひ取り付け位置を参考にさせていただきたいのですが、熱害で壊れないか心配しております。
    ご確認宜しくお願い致します。

    • ohkin より:

      3D-Touch を取り付けてから1年以上になりますが、問題は生じておりません。
      ノズルのヒートシンクを冷却するエアフローが効いているのではないかと思います。

      • たろう より:

        ご返信ありがとうございます。
        そうなのですね。安心しました。
        ぜひ参考にさせていただきます。

  4. TETSUDOU より:

    初めまして。この記事を参考に「ANYCUBIC Mega-S」のオートレベリングに挑戦しています。

    ファームウェアの書き換えで、悩んでおります。
    上記のファームウェアの編集は、行を挿入するようになりますか?
    それとも必要に応じて上書きと挿入になりますか?

    初歩的な質問かもしれませんがよろしくお願いします。

    • ohkin より:

      コメントありがとうございます。TETSUDOU 様のコメントで間違いの訂正ができました。

      TETSUDOU 様のコメントでファームウェアのソースファイルが間違っていることに気付きました。リンク先の表記とリンクアドレスが合っていないことが原因です。リンク先を訂正しました。お手数をお掛けしますが、ダウンロードし直して頂き、記事の内容と比べてみてください。

      • TETSUDOU より:

        おかげさまで、無事にオートレベリングが機能しています。
        ヒートベッドの定着の悪さが、ノズル高さ(オフセット値)の問題と思い試行錯誤していましたが、ベッドをアルコールティッシュで脱脂したところ、定着がよくなりました。初歩的な部分の見落としに注意ですね・・・。

        これで、安心して印刷ができるようなりました。
        ありがとうございました。