何が起きていたのか、写真を見ていただくとわかる人は凄い。これは、組み込みの里でアレンジしているプリント基板用のバイス(卓上万力)の主要部品である左右でネジの異なるネジである。これにより中心に向かって万力の嘴が移動することになるのだが、上下をカットしているのは確かに設計通りなのだが、底面が設計以上にカットされているのだ
従来品の右側の黒いパーツ(嘴も結合しているのでちょっと位置が違いますが・・・)と比較すると上下の整形が異なっているのが見て取れます。
Robo3Dのフォーラムの仲間と意見交換をして、現象からみてZ-offsetの処理が正しくハンドリングされていないようだというのが現象面からの推察。
実は、Robo3Dが使っているFirmwareはMarlinというメジャーなreprapプロジェクトのオープンソースなプリンター制御Firmwareなのですが、AutoLevel処理については、とてもユニークなのです。オートレベリングとは、3Dプリンターのヘッドと出力されるヒートベッドを基点とするゼロ設定を自動的に行い、プリントギャップを正しく確保するものです。この調整はマニュアルでやるととてもクリティカルなもので、ヘッドとプレートの間を0.1mm程度になるように基準の紙や隙間ゲージなどを使って出し入れした際の引っかかり具合で判定して、プレートの水平も含めて何点かで調整するというものなんです。
そんなオートレベリングにはz-probeというセンサーを取り付けて自動調整の段階では、ヘッドよりも下になる位置にこのセンサーを下げてプローブがプレートに当たるまで下げていきます。当たりが検知されたときの位置をfirmwareでは記録しておき、メカ的なセンサープローブとヘッドの相対距離を引くことで、正しいZ軸のレベルを測ることが出来るわけです。この相対距離をz-offsetと呼んでいるのですが、通常の構成では、この値は正の値となりますが、Robo3Dではマイナスとなるのです。
なぜマイナスになるかというと、Robo3DのレベルセンサーはX軸のフレームを支えているZ軸上の移動台座との間にセンサーが付いていて、実際にX軸を下げ過ぎてさらにいくと、このセンサースイッチが開放されて衝突をしるという逆転の方法で検知しているからです。実際には、開放された後に、Z軸を上げていくことで短絡するまでのZ軸の移動距離がz-offsetとなります。そのため、扱う値は負の値となります。
こうした特性から、ソフトウェアの設定メニューなどにおいてマイナスになる要素が、この一点しかないといったことからRobo3D用のFirmwareは独自のパッチをして提供していたようです。液晶制御コンソールからはz-offsetの登録編集メニューがあるのですが、こちらではマイナス範囲に対応しないといった問題もあり、メインライン化されていないコードを使っての制御は難しく、通常と同様なセンサーメカを搭載して利用しているメンバーも多いようです。
ざくっとFirmwareのコードを見直して、マイナスの取り扱いが出来るように修正したところ、正しく期待通りに動くようになりました。
メニューからもZ offsetをマイナスに設定できます。印刷結果も確認出来ました。