3Dプリンタ2号機~その7~

前回の続きでpronsoleの中を調べています。まだよくわからない部分も多々あるのですが、まず1番の疑問としてGコードのロードになぜ時間がかかるのか、またどこにロードしているのかについては、どうやらPythonの配列に全てのコードを読み込んでいる様です。という事はメインメモリーに取り込んでいる事になります。但し時間がかかっているのは読み込みそのものではなく、その後にレイヤー数や実行時間を計算する部分の様です。という事は実行時間表示を諦めたらロードが早くなってサクサク動くんではないかと期待し、そのうち試してみたいと思います。

LCDコントローラ検討

そもそもは制御PCをどうするかという話でしたが、LCDコントロールパネル+SDカードでも良いんではないかという気がしてきました。これまた世の中では当たり前なのでしょうけどウチでは今までPC接続でしか動かした事が無かったんです(このあたりが世の中から周回遅れなのです)。

手持ちのLCDで丁度良いのがなく、Aliexpressをみたら¥1031-でこんなのがあったのでポチりました。ロータリーエンコーダやSDカードソケットまでついて送料無料です(今見たら若干値段が変っていましたが)。

そして随分と早く、9日間で到着。

3DP27_1

立派な箱に入って到着しました。

開封・・・

3DP27_2

中身一式。
ケーブルに加えRAMPSに挿す為の変換基板も付いています。

接続

早速接続します。配線は本体と変換基板をケーブルでつなぎ、変換基板をRAMPSに挿すだけです。
そしてMarlin側は次の4箇所のコメントを外しました。

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
       ←接続するコントローラのタイプが「Discount Full graphic controller」である事を示す。
#define REVERSE_ENCODER_DIRECTION     ←ロータリエンコーダの回転方向を逆にする。
#define SDSUPPORT             ←SDカードを使用可能にする。
#define LCD_LANGUAGE kana        ←表示をカナ表示にする。
#define INDIVIDUAL_AXIS_HOMING_MENU  ←各軸単独でHOMINGする為のメニューを追加する。

電源投入

そして電源を入れると・・・

3DP27_3

おお、灯いた。

事前の情報でSDカードに保存するGコードは8+3形式のファイル名でないとダメと聞いていたのでこの通りに作成し、余っていた128MBのSDカード(128GBではなく128MB)に入れてみましたが・・・ファイルを見つける事が出来ません。そこで8GBのSDHCに入れたところ問題なく読み出せました。今どき128MBは想定外なのでしょうか? ま、しかしこれで問題なくプリントできます。

取付け

本体に取付ける為、Thingiverseから適当なケースを落としてきてプリントしました。そしてケースに入れてねじ止めすると、画面の真ん中あたりの横一列に表示の欠損が発生しました。

3DP27_4

真ん中付近に横一列の表示欠けが出ました。

改めてケースから外してみると正常に表示できます。どうやらサイズギリギリにプリントしたケースに基板を押し込んだ為、応力が加わりディスプレイの配線が接触不良をおこしているのだと思います。 そこでケースを少し削って余裕を持たせたら正常に戻りました。

そして本体に取付け。
おー!いい感じです。

3DP27_5

本体に取付けたところ。

そして・・・

元々1号機があった場所に置いてみました。
手前からレーザー加工機、3Dプリンタ2号機、基板切削用CNCです。

3DP27_6

わが家の自作工作機器

結局のところ、まだRaspberry piは繋いでいません。
なんだかこのままSDカードだけでで行ってしまいそうです。

3Dプリンタ2号機~その5~

前回までで大体上手く動作する様になり、精度も1号機より上がった感があるのですが、一層目のベッドへの貼り付きが今ひとつなのです。

これはフィラメントの違いもありそうな気がします。1号機で使っていたフィラメントを丁度使い果たしたので2号機は最初から新たなフィラメントを使っています。

3DP25_1

1号機。
貧乏性なので最後のギリギリまで、スペーサーなんかをプリントして使い切りました。

以前のフィラメントも十分安物だったのですが、あれから何年か経っているので新しいものは性能が上がっているだろうと勝手に期待し、またもや安物を買いました(Amazonで¥2290-/1Kgの韓国製です)。
でも貼り付き性に加え収縮率も大きい気がします。
・・と言いつつ、プリンタとフィラメントを同時に変えてしまったので実はどちらが原因なのか切り分けが出来ていません(こういう事態も頭をよぎったのに、つい前のを使い切ってしまった・・・)。

・・・という事で少しでも貼り付きを良くする為、ベッドの水平度調整を厳密にすべくオートレベリングを試してみることにします。世の中から何周も遅れた感がありますが、今までは手動で調整していたのです。

オートレベリングの構想

ネットで見ると皆さんオートレベリングのプローブには色々なタイプのセンサーを使われている様です。大別するとリミットスイッチ等の接触式と、近接センサーを使った非接触式に分かれる様です。 リミットスイッチ自体はシンプルなのですがレベル検出時にはノズルよりも下に配置し、プリント時には造形物に当たらない位置まで上げておく必要があり、サーボ、ソレノイド、手動などで移動させる必要があります。この点、近接センサーだとプローブ先端よりも高い位置に固定しておけますが、手元にはリミットスイッチしかないのでこれでやってみる事にしました。またサーボを取付けるのも面倒なのでまずは手動での着脱式でやってみます。

という事で次の様にしたいと思います・・・

  • 調整したくなった時だけプローブを取付けてレベル検出を行う。
  • 普段のプリント時は過去に取得した検出値を使ってレベル補正を行う。
  • 全体の高さ調整は今まで通りZ-MINのEND-STOPスイッチで行う。
オートレベリングを使った時の動きがよくわかっていないので調べながら進めていきました。特にEND-STOPの検出レべルとプローブの検出レベルとの関係とか。。
実際は色々と試行錯誤があったのですが以下そのあたりは省略して結果だけ書きます。

プローブ

何はともあれプローブを作成する必要があります。といっても下の写真の通り、DCプラグにリミットスイッチを取り付けただけです(DCプラグは差し込んだ状態で揺らすと若干ブレるので、3.5mmのイヤホンプラグを使った方が良かったと思います)。
3DP25_2

着脱式プローブ

ヘッド側には図の様にDCジャックを取付けておきます。

3DP25_3

プリントヘッド側

そしてレベル出しをする時だけプローブを差し込み、レベル出しが終わったらプローブを引っこ抜きます(抜き忘れてプリントするとベッドにぶつかるので要注意)。

3DP25_4

プローブ取付け

リミットスイッチには電極が三つありますが、普段は導通しベッドに接触すると切断状態となる配線にしています。これはENDSTOPスイッチや非常停止スイッチで停止位置を取りこぼさない為の鉄則です。この配線をArduinoMegaの19番端子(本来はZ-Max-ENDSTOPにつながる)に接続しました。

Marinの設定

設定はMarlinのConfiguration.hを次の様に変更します。

#define Z_MIN_PROBE_ENDSTOP  ←コメントだったのを外す(なんか判りにくいのですがZMINとは別の端子にプローブ信号を接続する場合にはこれを宣言する様です)。
#define Z_MIN_PROBE_PIN 19  ←19pinである事を指定するため追加。

 

なおスイッチの動作は’M119′コマンドで確認できます。

>>> M119
SENDING:M119
Reporting endstop status
x_min: open
y_min: open
z_min: open
z_probe: TRIGGERED  ←プローブが接触した時
>>> M119
SENDING:M119
Reporting endstop status
x_min: open
y_min: open
z_min: open
z_probe: open  ←プローブが空中にある時

 

次にプローブの取り付け方の設定です。サーボやソレノイドで出し入れする場合の設定や、よくわからない設定もありますが、今回は手動なので恐らく’FIX_MOUNTED_PROBE’を選択すればよいと思います。

#define FIX_MOUNTED_PROBE
またプローブ位置はノズルと全く同じ位置にはできないので何mmかはズレており、この差を設定します。2号機プリンタはノズルに対しプローブが右に12mm,奥に34mmの位置にあるので以下の様に設定しました。
#define X_PROBE_OFFSET_FROM_EXTRUDER 12
#define Y_PROBE_OFFSET_FROM_EXTRUDER 34
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0

 

レベル補正の計算方法も色々とある様です。高さを3点測定して傾きを求める方法(これはベッドの歪みは無いものとして傾きだけを補正する)や、何ポイントか測定して歪みまで補正する方法、その他よくわからないのも。。。
今回は’AUTO_BED_LEVELING_BILINEAR’という方法を選んでみました。この方法は複数ポイント(デフォルトは格子状に9点)を測定し、何やら上手く計算して補正してくれます

次に9点の計測位置(の最大・最小値)を指定します。上にも書いた通り、プローブがノズルに対しX側に12mm,Y側に34mmずれた位置にあるのでこれよりも小さい値の位置では計測できません。とりあえず各1mmの余裕を見て13mm,35mmを最小値とし、最大値はそれぞれ170mmとして次の様に設定しました。

#define LEFT_PROBE_BED_POSITION 13
#define RIGHT_PROBE_BED_POSITION 170
#define FRONT_PROBE_BED_POSITION 35
#define BACK_PROBE_BED_POSITION 170

 

そして最後に計測したデータをEEPROMに書き込むための許可を与えておきます
毎回レベルを計測するなら不要かもしれませんが、当面は必要な時だけ計測してその値を使い続けるつもりなので測定値をEEPROMに保存する必要があるのです。

#define EEPROM_SETTINGS

 

ここまでの設定でコンパイルしてArduinoMegaに書き込みました。

レベル計測

全軸をHOMINGした後、プローブを取付けて’G29′コマンドを送ると9点の計測が始まります(簡単に書きましたが本当にプローブ位置で止まるか不安だったので電源スイッチに指を掛け、いつでも止めることができる態勢で実行しました)。

実行が終わると次の様な結果が出てきます。

0 1 2
0 +5.313 +5.491 +5.679
1 +5.309 +5.427 +5.623
2 +5.456 +5.518 +5.674

これが9点のベッド高さの測定結果です。Zのホーミング調整はベッドの中央付近で行なったので、この位置に近い中央の+5.427を基準に考えます。この値はZホーミングで得た位置を0としたとき、これよりも5.427mm上の位置でプローブが接触した事を示します。プローブはノズルよりも下に出っ張っているのでノズルがまだ浮いている(高い)位置でプローブが接触する訳です。

結果の反映

ここまででノズルとプローブの差が5.427mmと分かったので、この値を次のコマンドでMarlinに設定してやります。

M851 Z-5.427

M851命令で設定した補正値はG29実行時に計算されるので、この補正値が有効な状態でもう一度’G29′コマンドを実行すると次の結果となりました。

0 1 2
0 -0.088 +0.062 +0.282
1 -0.115 +0.015 +0.225
2 +0.037 +0.109 +0.257

M851で設定した補正値が測定結果に足され中央の値が0.015mmになっています(ピッタリ0mmでないのは恐らく測定誤差のためです)。

これらの測定値は’M500′コマンドでEEPROMに格納しておきます(上で設定した「#define EEPROM_SETTINGS」が無いと’M500′実行時にエラーが出る様なので要注意)。

プリント

あとは「M420 S1」を実行するとオートレベリングが有効になります。試しにジョギングさせてみると、X/Yの動作に合わせてZ軸モーターも僅かに回転するのが確認できます。

なお、このオートレベリング有効設定はホーミングを行うと解除される様なので、Gコード先頭のホーミング命令(G28)の後に「M420 S1」を追加する様にスライサーの設定を変更しました。

以上でオートレベリングの設定完了です。プリントしてみるとZ軸のモーターが常に細かく動いています。一層目のベッドへの貼り付きも良くなった(マシになった)気がします。

その後・・・

やっぱりベッドへの貼り付きがイマイチなので試しにプリントベッドをアルコールで拭いてみたら良くなった様です。今まではガラスクリーナーで拭いていたのですが今のところアルコールの方が良い結果になっています。
そうだとするとフィラメントにはあらぬ疑いをかけていた事になります。フィラメントさんごめんなさい。

3Dプリンタ2号機~その3~

引き続きZ軸を作成していきます。

このプリンターを作り始めた当初はまだレーザー加工機が無かったので殆どのパーツを3Dプリンター1号機で作成していました。でも今はレーザーが使えるので適材適所で組み合わせていきます。

まずモーターを取付ける台とカップリング。

3DP3_1

ダイソーの6mmMDFから切りだしました。

その他諸々のパーツ一式。

3DP3_2

Z軸用パーツ

例によってMakerSlideと組み合わせます。
この次に作るなら中華製リニアガイドも有りだと思いますが、今回のプリンタは途中までMakerSlideで作っていたのでこのまま行きます。

3DP3_3

Z軸機構一式

本体に取付けたところ。

3DP3_4

Z軸パーツ取付け。

次にプリントベッドです。
ヒートベッドが早く届いてほしかったので今回はAliexpressではなくAmazonに発注しましたが、マーケットプレイスってやつだったので結局2週間程度たってから中国から届きました。ところが右下のねじ穴部分が欠けています。

3DP3_5

右下のねじ穴部分が欠けています。

このまま使おうかとも思いましたが一応ショップにクレームを出すとすぐに正しい品を送ってくれるとの事。ダメな方は廃棄してくれという事ですが、正しい物が届くまではこれを使ってみます(その後壊れていない品が届きましたが・・・まだ最初に届いた方を使っています。まっ、そうゆう事です)。

で、プリントベッドを取り付けました。これで一気に3Dプリンタらしくなりました。

3DP3_6

プリントベッド装着。

現在テストプリント&調整中ですが、ベッド高さを調整中にノズルとぶつけてしまったらしく、いつの間にかガラスにヒビが入ってしまいました。どうしようかと考えながらも、そのまま使っています。

3DP3_7

あとはもう少し調整をしていきます。
また実はZ軸の造りがいい加減なのです。モーターと送りねじの間にあるカップリングは引っ張ると分離してしまうタイプなので、もし送りねじを上に引っ張ると抜けてしまう状態です。ここも改善し、更に電源や基板がバラック状態なのをキチンと固定していこうと思います。

3Dプリンタ2号機~その2~

前回の投稿後3年近く放ったらかしでしたが、正月明け頃から3Dプリンタ2号機の制作を再開しています。

まずは前回の写真・・・

3DP2

前回投稿した時の写真

 

そして現状。ぱっと見あまり変わっていませんがモーター、ベルト、エクストルーダが付きました。
3DP_2

 

ホットエンドは900円のを見つけて買っておいたのですが大丈夫でしょうか?
なおノズルは複数取付ける場所を準備しています(どうやって高さの調整をするかまでは考え付いていません)。

3DP2_3

コントローラは1号機で実績のあるArduinoMEGA256+RAMPS。とりあえずX/Yの移動ができるところまで来ました。

3DP2_4

ArduinoMEGA256+RAMPS1.4

続いてZ軸を製作中です。