読者です 読者をやめる 読者になる 読者になる

容量式近接センサでオートレベルを試す

3Dプリンタ

容量式近接センサ LJC18A3-B-Z/BXを買ったのでGeeetech Prusa i3 proB の GT2560 でオートレベルを試します.
ファームウェアはMarlin-1.1.0-RC6です.

センサの電源 12Vなのでダイオードで信号電圧を5V以下に制限します. f:id:yotta0xFF:20160824155825p:plain

pins_ULTIMAKER.h

GT2560のピンアサインはpins_ULTIMAKER.hで設定されます.自分は一応保険としてもともとのZ_MINエンドストップも使いたかったので以下のコードを追記してZ_MAX_PINをプローブ用にします.
(後からためしてみるとZ_MINエンドストップはいらないかも)

// 55行目付近
// Define a pin to use as the signal pin on Arduino for the Z_PROBE endstop.
#undef Z_MAX_PIN
#define Z_MAX_PIN -1
#define Z_MIN_PROBE_PIN  32

Configuration.h

プルアップ

エンドストップにはプルアップ抵抗が必要ですが,プローブには不要なので ENDSTOPPULLUPS(全てのプルアップを有効) を無効にして各々必要なプルアップを指定します.

// 370行目
// coarse Endstop Settings
//#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

#if DISABLED(ENDSTOPPULLUPS)
  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
  //#define ENDSTOPPULLUP_XMAX
  //#define ENDSTOPPULLUP_YMAX
  //#define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
  //#define ENDSTOPPULLUP_ZMIN_PROBE
#endif

スイッチトリガ反転

必要応じてプローブのトリガ極性を反転します.各スイッチの状態確認はM119が便利です.

// 384行目
const bool Z_MIN_PROBE_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.

プローブピン設定

393行目付近のZプローブ設定で Z_MINエンドストップとZプローブのピンを共通にしないようにします.

#define Z_MIN_PROBE_ENDSTOP

//#define DISABLE_Z_MIN_PROBE_ENDSTOP

トラベルリミット設定

オートレベリングの際に必要となるのでワークサイズを入力します.

// 492行目
// Travel limits after homing (units are in mm)
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS 185
#define Y_MAX_POS 179
#define Z_MAX_POS 190

オートレベリング設定

#define AUTO_BED_LEVELING_FEATURE (546行目)コメントアウトしてオートレベリングを有効化.

・センサで走査する位置を指定します.

// 565行目
#define LEFT_PROBE_BED_POSITION 15
#define RIGHT_PROBE_BED_POSITION 140
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 120

・エクストルーダー先端とセンサの間の距離を指定します.

// 606行目
//X and Y offsets must be integers.
#define X_PROBE_OFFSET_FROM_EXTRUDER -40  // X offset: -left  +right  [of the nozzle] 
#define Y_PROBE_OFFSET_FROM_EXTRUDER -52  // Y offset: -front +behind [the nozzle] 
#define Z_PROBE_OFFSET_FROM_EXTRUDER -5.4   // Z offset: -below +above  [the nozzle]
Z方向のオフセットの計測方法
  1. 近接センサがベッド中心付近に来るようにしてZ軸のホーミング
  2. ノズルの下に紙を敷いてZ軸を少しずつ下げてノズルを密着させる
  3. ホーミング時のZ高さとノズルが紙に密着するときの高さの差をとってZオフセットとする

センサの感度を調整して高さを調整する事もできますが大雑把な感度調整が終わったらZオフセットでやるのがいいと思います.

・センサの種類を指定します. 今回は非接触の近接センサであるので#define FIX_MOUNTED_PROBE (625行目)コメントアウトします.

セーフホーミング

ここでホーミング時,エンドストップでもプローブでも反応する上,プローブでベッドを検出してもエンドストップで止めてもZオフセットは適用されてしまうことが判明しました.
従って,Zエンドストップはかえって邪魔になる場合があります.
こうなると最初からプローブでホーミングした方がいいかもしれません. ホームポジションでプローブがベッドの外に出てしまう場合 #define Z_SAFE_HOMING (668行目) を有効化します.

使用方法

G28でホーミングした後にG29でベッドの傾きを検出します.
その後普通に印刷を開始すると傾きを考慮して印刷が行われます.

結果

めでたくベッド全体に渡る大きなものも造形できるようになりました.しかし,場所によって第一層がソフトクリームマシン状態になる部分と押し付け気味になる部分があるので改善の余地がありそう.
ちなみにリミットスイッチプローブでも同様になったのでどうすればいいのやら.(結局いつかは手動でベッド調整をすることになるんだろうか)
とりあえず,第一層の張り付きは心配しなくていいレベルになったのでよほど精度が要求されないかぎり(そんなものを組み立てプリンタに要求するほうが間違ってるけど)これで十分だと思います.