なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Zプローブとオートベッドレベリング

Posted by arms22 on 2014年12月20日 14  0

3DプリンターatomにZプローブを取り付けてオートベッドレベリング機能を有効にしてみました。オートベッドレベリングとは自動的にプリントベッドの水平調整を行う機能で、ノズルがX・Y方向に移動した時にプリントベッドとノズルの距離が一定になるようZ方向に補正をかけるよう動作します。



Zプロービングの様子。オートベッドレベリングの前準備としてZプローブを使って指定した3カ所でベッドとの距離を計測しZ方向の補正値を求めます。1度計測を行えばベッドを交換したりしない限り再度計測する必要ありません。



オートベッドレベリング設定後のプリントの様子。ベッドとノズルの距離が一定になるように絶えずZ軸の高さが変化しています。

オートベッドレベリングのメリットは、

  • プリントベッドの水平調整が不要になる
  • 1層目の張り付きが良くなる(ABSの反りが抑えられる)
デメリットは、
  • Z軸の負担が増える
  • 送りナットが摩耗する
デメリットよりメリットの方が十分大きいと感じました。かなりおススメの機能です。


Zプローブアダプタ


IMGP0560

IMGP0559

海外の作例を見るとサーボモータやバネを使って自動的にZプローブを上げ下げするタイプを良く見かけますが、今回はシンプルにノズル先端に手で取り付けて使えるZプローブを作りました。ベッドとの接触検知にはマイクロスイッチを使っています。

Z Probe Adapter for RepRapPro Huxley HotEnd
http://www.thingiverse.com/thing:594204


コンフィグレーションファイルの変更


ここではatomで使っているRepetier-Firmwareのコンフィグレーションファイル(Configuration.h)の変更方法について説明します。
/* Z-Probing */

#define FEATURE_Z_PROBE true
#define Z_PROBE_PIN 2
#define Z_PROBE_PULLUP true
#define Z_PROBE_ON_HIGH false
#define Z_PROBE_X_OFFSET 0
#define Z_PROBE_Y_OFFSET 0
#define Z_PROBE_BED_DISTANCE 5.0 // Higher than max bed level distance error in mm

// Waits for a signal to start. Valid signals are probe hit and ok button.
// This is needful if you have the probe trigger by hand.
#define Z_PROBE_WAIT_BEFORE_TEST false
/** Speed of z-axis in mm/s when probing */
#define Z_PROBE_SPEED 1
#define Z_PROBE_XY_SPEED 80
#define Z_PROBE_SWITCHING_DISTANCE 1.5 // Distance to safely switch off probe
#define Z_PROBE_REPETITIONS 3 // Repetitions for probing at one point.
/** The height is the difference between activated probe position and nozzle height. */
#define Z_PROBE_HEIGHT 0
/** These scripts are run before resp. after the z-probe is done. Add here code to activate/deactivate probe if needed. */
#define Z_PROBE_START_SCRIPT ""
#define Z_PROBE_FINISHED_SCRIPT ""

まず最初にZプローブを有効にして(FEATURE_Z_PROBE true)Zプローブで使用するピンを決めます(Z_PROBE_PIN 2)。atomに使用している制御ボード(RAMPS)のX_MAX(2)が空いていたので2番を指定しました。お使いの制御ボードに合わせて変更してください。適宜、プルアップ(Z_PROBE_PULLUP)と信号の反転(Z_PROBE_ON_HIGH)、X/Yオフセット(Z_PROBE_X[Y]_OFFSET)を設定してください。Z_PROBE_BED_DISTANCEの用途は不明。。

Zプローブをマニュアル操作で上げ下げする場合、Z_PROBE_WAIT_BEFORE_TEST trueに設定してください。Zプローブを計測ポイントに移動した後、ユーザーがZプローブのスイッチをオンにするのを待ちます。

Z_PROBE_SPEEDはZプローブを上げ下げする時の速度(mm/s)、Z_PROBE_XY_SPEEDはZプローブを移動する時の速度(mm/s)、Z_PROBE_SWITCHING_DISTANCEはZプローブがONになった後、完全にOFFになるまでZプローブを上げる距離、Z_PROBE_REPETITIONSは繰り返し回数。Z_PROBE_HEIGHTの用途は不明。。

Z_PROBE_START_SCRIPT、Z_PROBE_FINISHED_SCRIPTはZプローブ開始前後で実行したいコマンドを記述します。サーボモータでZプローブを上げ下げしている場合などココに記述すると良いと思います。

ここまではZプローブに関する設定でした。後はオートベッドレベリングを有効(FEATURE_AUTOLEVEL true)にして、計測を行う3カ所の座標を設定すれば完了です。

/* Autoleveling allows it to z-probe 3 points to compute the inclination and compensates the error for the print.
   This feature requires a working z-probe and you should have z-endstop at the top not at the bottom.
   The same 3 points are used for the G29 command.
*/
#define FEATURE_AUTOLEVEL true
#define Z_PROBE_X1 45
#define Z_PROBE_Y1 0
#define Z_PROBE_X2 90
#define Z_PROBE_Y2 90
#define Z_PROBE_X3 0
#define Z_PROBE_Y3 90

Zプローブの動作確認


Zプローブを動かす前にZプローブが正しく動作しているかテストします。次のコマンドはZプローブの現在の状態を出力します。ZプローブがOFFの時はL、ONの時はHと出力されます。
G31
Z-probe state:L
次のコマンドで現在の位置でベッドまでの距離を計測します。
G30
Z-probe:2.84 X:0.04 Y:0.00

オートベッドレベリング(自動水平調整)


Zプローブの動作が確認できたらオートベッドレベリングを有効にします。次のコマンドでベッドまでの距離の計測とZ方向の補正値を求めます。以降、オートベッドレベリングが有効になります。
G32
Z-probe:2.98 X:60.00 Y:10.00
Z-probe:3.02 X:110.00 Y:110.00
Z-probe:2.87 X:10.00 Y:110.00
Info: 1.00000 0.00000 -0.00152 0.00000 1.00000 0.00035 0.00152 -0.00035 1.00000
次のコマンドでEEPROMに補正値とオートベッドレベリングの有効状態が保存されます。EEPROMに補正値を保存すれば電源を切っても消えないのでベッドを交換するまで再調整の必要はありません。
M500
次のコマンドでオートベッドレベリングの有効・無効を切り替えることができます。
M320 ; 一時的にオートベッドレベリングを有効にする
M320 S2 ; 恒久的にオートベッドレベリングを有効にする
M321 ; 一時的にオートベッドレベリングを無効にする
M321 S2 ; 恒久的にオートベッドレベリングを無効にする
M322 ; 補正値をリセットする
M322 S3 ; 補正値をリセットして保存する

マニュアルベッドレベリング(手動水平調整)


オートベッドレベリングは必要ないけどプリントベッドの水平調整を楽に行いたい!という時は次のコマンドが使えます。
G29
Z-probe:2.98 X:60.00 Y:10.00
Z-probe:3.02 X:110.00 Y:110.00
Z-probe:2.87 X:10.00 Y:110.00
Z-probe average height:2.95
このコマンドはコンフィギュレーションファイルで指定した3カ所でベッドまでの距離を計測しその平均値を出力します。3カ所すべての距離が同じになるようプリントベッドの傾きを調整すると良いでしょう。


参考リンク


Z-Probing with Repetier-Firmware
http://www.repetier.com/documentation/repetier-firmware/z-probing/

G-code - RepRapWiki
http://reprap.org/wiki/G-code#G29-G32:_Bed_probing

Ads by Google

14 Comments

says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2014.12.27 17:11 | | # [edit]
arms22 says..."Re: ご教示お願いしたいです。"
こんにちは。
こちらにコメントいただければわかる範囲で回答しますよ。
2014.12.29 00:22 | URL | #- [edit]
1g says..."End stopについて教えて下さい"
勢い込んで、いざ・・・とおもったのですが、
もしかしてですが、atomの制御ボードにendストップの空きがなければ、これってやはり出来ませんか?
オートレベルリングするならZ-endストップが不要になるので、それを使うことはできないかと・・・
Rostock miniの場合は・・・ww
2015.01.09 15:51 | URL | #wCs1aNTw [edit]
arms22 says..."No title"
あー確かに。

momoinololuやったらISPヘッダのMOSI(PB5)ピンが使えそう。
GNDの横にあるし。

https://www.dropbox.com/s/ztgb20zu3a884v3/momoinololu%5BRev1.1%5D%5Bsch%5D.pdf
2015.01.10 10:59 | URL | #j7sy4omY [edit]
1g says..."ISPヘッダ"
momoinololu M3に換えないと駄目かと思いましたが、望みはあるんですね!ありがとうございます。しかし、回路はほとんど初心者以前で、ISPあたりからググッてみます。
2015.01.10 13:32 | URL | #wCs1aNTw [edit]
arms22 says..."Re: ISPヘッダ"
ISPヘッダピンがあいているからそれを使えばいいだけだよー。
PB5がArduinoの何番ピンかは調べないとわかんないけど。
2015.01.12 19:39 | URL | #- [edit]
1g says..."Re:ISPヘッダ"
Thanks !
Arduinoへ飛びますm(_ _)m
2015.01.12 22:29 | URL | #wCs1aNTw [edit]
arms22 says..."No title"
たぶんデジタルの5番ピンだと思う。

https://github.com/Lauszus/Sanguino/blob/master/variants/sanguino/pins_arduino.h
2015.01.13 09:17 | URL | #j7sy4omY [edit]
1g says..."No title"
38行目 const static uint8_t MOSI = 5;と64行目 MOSI (D 5) PB5 ですね!v-481m(_ _)m
2015.01.14 01:27 | URL | #wCs1aNTw [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2015.01.29 11:48 | | # [edit]
says..."Marlinほか"
いつも貴重な情報をありがとうございます。
今回、何も考えずにえいやっとプリントだけしてみてから気づいたんですが、Genkeiエクストルーダとでは径が違っていたので、次回再挑戦してみます。
おそらくgenkeiでatomを手に入れた方々は、上記エクストルーダ以外に、制御ボードがmomoinololuであることと、ファームウェアがMarlinであることが差異として挙がるのではと思います。
制御ボードのmomoinololuとの差異が上で書かれていましたが、Repetier-firmwareとMarlinの違いも初心者には敷居が高い現状です。Marinではどうしたらいいのか……
2015.02.11 00:35 | URL | #- [edit]
arms22 says..."Re: No title"
marlinでも似たような設定項目があると思います。
ファームウェアに書かれているコメントを読み解くのは少々難しいと思いますが、
同じようなことはできると思います。
"probe"でConfiguration.hを検索すると関連する設定が見つかりますね。
2015.02.11 20:41 | URL | #- [edit]
arms22 says..."Re: Marlinほか"
英語だけど一応ドキュメントはあるみたい。

https://github.com/MarlinFirmware/Marlin/blob/Development/Documentation/BedLeveling.md
2015.02.11 20:48 | URL | #- [edit]
says..."No title"
ありがとうございます。
自分でもあれからMarlinのソースコードを読んで、コメントからウェブで検索してはいたのですが、インストラクションにはたどり着けていませんでした。
これから読み込んでみます。
2015.02.12 01:45 | URL | #d50EZr9Q [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。