自作3Dプリンター(RAMPS)に近接センサーを取り付けてオートレベリングする

スポンサーリンク

こんばんは。

以前、自作した3Dプリンター(Prusa i3 rework)ですが、いろいろと改造をしていて、ほとんどPrusa i3 MK2のクローンぽくなってきたのですが、コントロールボードは、RAMPSのままです。

そんな、3DプリンターのZ軸エンドスイッチを近接センサーにして、近代3Dプリンターっぽくオートレベリングに対応したいと思っていました。

わからない事だらけですが、調べながら近接センサーの取り付け動作と、オートレベリングまでできるように挑戦していきます。

・Z軸エンドストップの近接センサー化

まずは、近接センサーを用意します。

スポンサーリンク

購入したのは、自作3Dプリンター業界ではメジャー?な、「LJ12A3-4-Z/BX」にしました。「LJ12A3-4-Z/BY」でもOKです。

金属に近づけるとスイッチが入ります。

値段も安くて良いのですが、金属にしか反応しないため、金属が埋め込まれたヒートベッドにしか使用できません。

代わりに、TRONXY TR SENSORであれば、不透明な素材であれば反応するのでヒートベッドの種類によっては、こちらもおススメです。使い勝手は、「LJ12A3-4-Z/BX」と同じです。

で、実際の近接センサーになります。

LJ12A3-4-Z/BX

ケーブルのアサインは、茶色が+、青色が-、黒がスイッチになり、入力電圧は6~36Vになります。

そのまま接続しても、RAMPSのエンドストップは、出力電圧が5Vのため正しく動きません。。。

ですので、ボード上から12Vを引っ張てきて、スイッチ側を5Vにする必要があるみたいです。(もう難しい。。。)

ってことでインターネットで調べていきます。

まず12Vを引っ張ってくるのは、直接電源から取ってくるか、RAMPSボード上のD2ダイオード近くにあるピンからも12Vが取れるようです。下記画像の赤丸の部分。

RAMPSボードピンアサイン

ただ、残念なことに現在使用しているRAMPSボードは、上記ピンヘッダが無く(はんだ付けすればよいのですが。。)取り付けるのもメンドクサイので、直接電源から取ろうと思います。

次に、スイッチの出力電圧を5Vにするのは、抵抗を使って分圧する方法と、レギュレーターを使って電圧を下げる?方法があるようです。

こちらのサイトで紹介されているので、これを参考にしようと思います。

(ちょっとだけ電気回路をかじっただけの知識ですので、全然わかっていないです。。)。

分圧する場合は、10kΩと15kΩの抵抗を使うと紹介されていたので、確かに計算をすると、4.8V(≒5V)にできそうです。

分圧計算

いやー世の中便利になりましたね。ってことで、分圧方式で進めようと思います。

ってことで、ブレッドボードを使って配線をしてみます。

ブレッドボード実装

おぉぉ。12Vの入力に対してちゃんと5Vが出力されました!

あとは、同じ回路をせっせとはんだ付けをして作成をします。

はんだ実装(赤と黒の線が電源で白と黒の線をRAMPSのエンドストップピンに接続)

って完成してから15kΩと10kΩの抵抗を逆につけてしまっていて、本来5Vになるところが、3.4Vしか出力されません。。

まー多少の誤差は大丈夫だと思うので上記をRAMPSボードに接続して確認をします。

赤い部分にそれぞれ接続をします。

実際の接続

接続が完了したら、MarlinファームウェアのZ_MIN_ENDSTOP_INVERTING設定をtrueに変更します。(今回使用したのが、「LJ12A3-4-Z/BX」でNPN型なので以下の設定になりますが、「LJ12A3-4-Z/BY」のPNP型であれば、falseの設定になるかと思います。)

#define Z_MIN_ENDSTOP_INVERTING true  // Set to true to invert the logic of the endstop.

次に近接センサーは、ヒートベッドから離れた状態にします。(センサー上部のランプが消灯している状態)

近接センサーが未検知の状態

この状態で、ちゃんとセンサーが反応しているかを確認するために、Repetier-Hostなどのソフトを使って3Dプリンターと接続をしてG-CodeのM119を送信します。

23:50:44.414 : N15 M119*30
23:50:44.418 : Reporting endstop status
23:50:44.422 : x_min: open
23:50:44.422 : y_min: open
23:50:44.422 : z_min: open

そうすると、リミットスイッチの状態が返ってきます。

まだ、センサーが反応していない状態なので、「z_min: open」が正しい結果になります。

次に、Z軸を少しずつ降ろしていき、センサー上部のランプが点灯して検知をしている状態にします。(この時にノズルとヒートベッドがぶつからない様に気を付けてください。)


近接センサーが検知した状態

上記の状態で、再度、G-CodeのM119を送信します。

00:17:48.074 : N29 M119*17
00:17:48.079 : Reporting endstop status
00:17:48.079 : x_min: open
00:17:48.083 : y_min: open
00:17:48.083 : z_min: TRIGGERED

おぉぉぉ!。ちゃんとZ軸が「z_min: TRIGGERED」になり、問題なく検知できています。

あと、Z軸のエンドストップですが手動でZ軸を下げた時には反応せず、Z軸をホームへ戻すときにエンドストップとして反応するようです。これはMarlin?の仕様っぽいです。

・オートベッドレベリング対応

Z軸エンドストップの近接センサー化とファームウェアの更新が完了して、きちんと動作することが確認できたので、次はこの近接センサーを使ってオートベッドレベリングするためのファームウェア設定になります。

こちらもいろいろと調べながらやっていきます。今回使用するMarlinのバージョンは、「2.0.9.5」になります。

MarlinのConfiguration.hを以下の内容で変更します。

#define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe.

こちらもエンドストップの種類(NPN型)に従って「true」を設定します。

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

ここは、デフォルトから変更なしですが、オートレベリングのプローブをZ軸のエンドストップで行うって内容かと思います。(多分。。)

#define FIX_MOUNTED_PROBE

FIX_MOUNTED_PROBEをコメントアウトしています。内容はわかっていません。。。

#define NOZZLE_TO_PROBE_OFFSET { 40, 0, 0 }

NOZZLE_TO_PROBE_OFFSETは、ノズルからみた近接センサーの相対位置になります。今回の3Dプリンターは、ノズルからX軸に40mmの位置にあるので、上記の内容になります。

3Dプリンターを手前に見て、右手側が+X、奥が+Yになり、Z軸は上側が+Xになります。

#define PROBING_MARGIN 10

PROBING_MARGINはデフォルト設定のままですが、この値を変更するとオートレベリング時のX,Y軸のマージンになります。

実際に写真を見てもらえれば分かりやすいかと思います。

PROBING_MARGINに10を設定
PROBING_MARGINに0を設定
//#define AUTO_BED_LEVELING_3POINT
#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING

オートレベリングの方式を指定します。まずは、AUTO_BED_LEVELING_LINEARでやってみるので、「#define AUTO_BED_LEVELING_LINEAR」部分をコメントアウトしました。

#define Z_SAFE_HOMING

最後のZ_SAFE_HOMINGについては、コメントのままだとコンパイル時に「Z_SAFE_HOMING is recommended when homing with a probe. Enable Z_SAFE_HOMING or comment out this line to continue.」エラーが出てしまうため、コメントアウトしました。

あとは、ファームウェアを書き込みRepetier-HostなどでG-CodeのM29を送信すると、オートレベリングが実行されるかと思います。

スポンサーリンク