【3Dプリンター】Ender-3にオートレベリングを追加した(BLTouch互換品)

5,919 total views, 90 views today

ここでは、Ender-3のマザーボード(以下、ボード)を交換することなくEnder-3に オートベッドレベリング(以下、オートレベリング)を導入する方法を紹介する。

【3Dプリンター】Ender-3のマザーボードとモータードライバを取り替えて静音化した(TMC2208)
【3Dプリンター】Ender-3のファームウェアを書き換えた(Marlin1.1.9)
2万円程度で買える3Dプリンター「Creality 3D Ender-3」レビュー:改造編
2万円程度で買える3Dプリンター「Creality 3D Ender-3」レビュー:テストプリント編
2万円程度で買える3Dプリンター「Creality 3D Ender-3」レビュー:組み立て編

スポンサーリンク

オートレベリングの動作の実際

まずはじめに、オートレベリングがどのように動作するのかを紹介しておく。

動画の後半でプリントが開始されると、XY平面上の動きに合わせて、Z位置が随時補正されていることが、Z軸モーターのカップリングの動きにより確認できる。

オートレベリングを導入する前に

Ender-3にオートレベリングを導入する手順は、ざっくり言うと以下のとおりである。

  1. オートレベリング用のセンサー(BLTOUCH 互換品)をEnder-3に追加する
  2. Ender-3のファームウェアを書き換える
  3. オートレベリングの動作を確認する

ここで紹介する方法では、ボードの交換が必要ない代わりに、下の写真ようなパーツが必要となる

このようなパーツはAliExpress等から入手できる。

手順で示したように、オートレベリングを導入するにはファームウェアの書き換えが必要となる。

また、ここで紹介する方法でオートレベリングを追加することで、LCDメニュー操作時のボタンのクリック音が鳴らなくなったり、ブート画面が表示されなくなるといった弊害があるため、実施する際はすべて自己責任で行っていただきたい

なお、ボタンのクリック音がならなくなったりするのは、Ender-3に使われているボードのメモリ空き容量に余裕がなく、一部の機能を無効にしないと、ファームウェア書き換えに必要な容量が確保できないからである。

一部の機能を無効市にしなかった場合、下の画像のように容量がオーバーしてしまい、書き込むことができない。

このようなことがあるので、私としては、オートレベリング導入を機にメモリ容量に余裕のある別のボードに交換してしまうことをおすすめする

ボード自体を交換することで、ステッピングモータのドライバが交換できたり、メモリ容量に余裕が出ることでUnified Bed Leveling(UBL)というここで紹介するオートレベリングの上位互換のオートレベリングが使えるようになったりするからである。

ボードはモータードライバと合わせても手頃な価格(2000円前後)で手に入るので、わりといいことづくめであると思う。

Ender-3のボードを交換してUnified Bed Leveling(UBL)を使用する方法については下記記事参照。

オートレベリング用センサーを追加する

オートレベリング用のセンサーには色々とあるが、ここではBLTouchのコピー品である3DTouchを使う。

Amazonでも売ってるようだが、Amazonのほうはコピー品でも高い。

理由はBLTouchの純正品↓が単純に高いからである。

ThingiverseからBLTouch用のマウントを探してきて、取り付ける。

センサーの取り付け位置

3DTouchは接触式のセンサーであり、ホールセンサーによってプローブの先端が上下する機構となっている。

したがって、オートレベリング実行時にはプローブの先端がベッドと接触する必要がある。

このとき、プローブの先端がノズルの先端よりもベッド表面から離れた位置にあると、ノズルの先端がベッドに衝突してしまう。

プローブがベッド表面との接触を検知するよりも前に、ノズルの先端がベッド表面に到達してしまうためである。

なので、オートレベリング時は、引き出された状態のプローブの先端が、ノズルの先端よりもベッド表面に近い位置になければならない

ベッドレベリング時の3DTouch先端とノズル先端の位置関係

一方、プリント時にはプローブ先端は引き込まれた状態で、ノズルの先端よりも、ベッド表面から離れた位置にある必要がある。

プリント時にプローブの先端が、プリント中のオブジェクトに接触するのを防ぐためである。

プリント時の 3DTouch先端とノズル先端の位置関係

Ender-3に使われているボードでは、ピンの数に余裕がない。

そのため、このページの冒頭で紹介したようなアダプターを介さないと、3DTouchを接続することができない。

ここでは、アダプターと3DTouchから出ている3本の線(赤、茶、オレンジ)を以下の通りに配線する。

  • 5V:赤
  • GND:茶
  • Signal:オレンジ

3DTouchと接続したアダプターは、LCD用のピンに接続する。

また、残りの2本の線(白、黒)については、ボードを以下の向きで置いたときに、Zリミットスイッチ用のピンに対して以下の通りに配線する。

  • 右:白
  • 左:黒

これでオートレベリング用センサー(3DTouch)のハード面での追加が完了した。

次は、ソフト面での作業となる。

ファームウェアを書き換える

ファームウェアの書き換えを行うには、その前段階として、ファームウェアを書き込めるようにするための作業が必要となる。

そちらについては、別の記事で紹介しているので、そちらを参照していただきたい。

ここでは、上に紹介した記事でEnder-3用のMarline1.1.9の書き込みが終わっているという前提で話を進める。

Configuration.hの設定

Configuration.h」という名前のタブを開く。

ブートスクリーンの設定

ブートスクリーンの表示を無効にする設定。容量確保のために行う設定である。

「コントロールキー」と「Fキー」を同時押しして、検索ボックスを呼び出し、 「SHOW_BOOTSCREEN」 と入力して検索を行う。

見つかった行の先頭に「//」を加え、

とする。

MOTHERBOARD」で検索し、ボード名が「BOARD_MELZI_CREALITY」となっていることを確認する。

Zプローブの設定

ZMIN_PROBE」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

同様に、「Z_MIN_PROBE_ENDSTOP」で検索し、

見つかった行の先頭の「//」を削除し、

とする。

BLTouchの設定

BLTouch(+コピー品)を使用できるようにする設定。

define BLTOUCH」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

そこから2つ下の行に

を追加する。

Xプローブオフセットの設定

3DTouchのプローブ位置とノズル位置とのズレを修正するための設定。

define X_PROBE_OFFSET」で検索し、

スポンサーリンク

見つかった行の値を自分の環境に合わせて変更する。

私が使用したマウントパーツの場合、XプローブオフセットとYプローブオフセットの値は、作者が

  • define X_PROBE_OFFSET_FROM_EXTRUDER -44
  • define Y_PROBE_OFFSET_FROM_EXTRUDER -14

であるとしているが、実際に自分で測ってみたほうがよい。

ここでは私が実際に測定した値「-42」を入力している。

Yプローブオフセットの設定

3DTouchのプローブ位置とノズル位置とのズレを修正するための設定。

Xプローブオフセットと同様にYプローブオフセットの値も自分の環境に合わせて変更する。

ここでは、「-14」を入力している。

Zエンドストップの設定

MIN_SOFTWARE_ENDSTOP_Z」で検索し、

見つかった行の先頭に「//」を加え、

とする。

オートレベリングの設定

どのようなオートレベリング方式を使うかの設定。

ここでは、「BILINEAR」と呼ばれる方式を使う。

AUTO_BED_LEVELING_BILINEAR 」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

RESTORE_LEVELING_AFTER_G28」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

Zホーミングの設定

Zホーミング時の移動速度を緩やかにするための設定。

Z_SAFE_HOMING 」で検索し、

見つかった行の先頭にある「」を削除し、

とする。

メニューアイテムの設定

メニュー項目を減らす設定。容量確保のために行う設定である。

SLIM_LCD_MENUS」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

スピーカーの設定

スピーカーの機能を無効にする。容量確保のために行う設定である。

SPEAKER」で検索し、

見つかった行の先頭に「//」を加え、

とする。

ファンの設定

ファンのノイズを低減させるための設定。

FAST_PWM_FAN」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

Configuration_adv.hの設定

Configuration_adv.h」という名前のタブを開く。

ベイビーステップの設定

Zプローブオフセットを細かく調整できるようにするための設定。

BABYSTEP_ZPROBE_OFFSET 」で検索し、

見つかった行の先頭にある「//」を削除し、

とする。

1つ上の行に移動し、

値を変更して、

とする。

ARCサポートの設定

これは、容量確保のために行う設定である。

ARC_SUPPORT」で検索し、

見つかった行の先頭に「//」を加え、

とする。

ファームウェアを書き込む

ツール」→「ボード」→「ボードマネージャー」の順に選択し、以下のとおりに設定する。

  • ボード:Sanguino
  • プロセッサ:ATmega 1284 or ATmega 1284P (16MHz)
  • シリアルポート:Ender-3のボードをつないだポート
  • 書込装置:AVRISP mkII

設定が終わったら、画面左上にある➡マークをクリックして、ファームウェアを書き込む。

しばらく待つと、書き込みが完了する。

書き込み完了後のログを見ればわかるとおり、容量にはほとんど空きがない。

オートレベリングの動作確認

Zプローブオフセットの設定

ノズルの先端位置と3DTouchの先端位置にはズレがあるため、3DTouchの先端位置をノズルの先端位置に合わせるための補正をしておく必要がある。

それがZプローブオフセットの設定であり、そのための手順は以下のとおりである。

  1. Ender-3をOctoPrintPrintrunと接続
  2. M190 S?」を実行(ヒートベッドを?℃に設定する、?の値はプリント時のヒートベッドの温度にする)
  3. M851 Z0」を実行(Zプローブのオフセットを0に設定)
  4. M500」を実行(設定をEEPROMに保存)
  5. M501」を実行(EEPROMに保存されている設定をロード)
  6. G28」を実行(オートホーム)
  7. G1 X110 Y110」を実行(ノズルの位置を、オートホーム時の3DTouchのプローブ位置に合わせる)
  8. G1 Z0」を実行(Z位置を0にする)
  9. M211 S0」を実行(Zが設定上の最小位置を超えて移動するのを可能にする)
  10. プリント時のノズルとベッドの距離が最適 (ノズルとベッドの間に紙がちょうど1枚挟まる距離) になるまでZ位置を下げる(このZ位置の調整はLCDメニューから行うほうが効率的)。
  11. M211 S1」を実行(Zが設定上の最小位置を超えて移動するのを不可にする)
  12. 「M114」を実行し、表示された情報の中からZの値を確認する。
  13. M851 Z?」を実行(?には一つ前の手順で得たZの値をそのまま入れる、Zの値がマイナスだったらマイナスの値、プラスの値だったらプラスの値)
  14. M500」を実行(設定をEEPROMに保存 )

これでZオフセットの設定ができた。

Gコードの設定

プリント開始前のオートレベリングを有効にするには、使用しているスライサーソフト(Slic3r やCuraなど)でプリントスタート時のGコード欄に「G29」を追記すればよい。

Curaの場合であれば、「設定」→「プリンター」→「プリンターを管理する」→「プリンターの設定」 →「G-codeの開始」 で、プリントスタート時のGコードを編集できる。

G29」を追記する場所は「G28」の直後でいいと思う。

スポンサーリンク

まとめ

  • Ender-3のオートレベリングを導入した。
  • 実際にプリントしてみてオートレベリングが機能していることを確認できた。
  • 次は新しいボードとモータードライバを変更して静音化する。