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

やっぱり二代目3Dプリンターにラズパイを取付けました。
初代RaspberryPiのModelBです。

3dp28_1

Raspberry Piをねじ止め。

ラズパイにモニターやキーボードは取付けていませんが、Xwindowの画面をメインPCに飛ばしPronterfaceを実行できます。
又はTeratermでログインしてPronsoleを使う事も。。。

フロントパネルにはラズパイ専用の電源スイッチとシャットダウンボタンを設置したのでLCDコントローラだけで動作させる場合にはラズパイ電源はOFFにできます。

3dp28_2

手持ちのスイッチを取付け。

なお特に対策をしなければラズパイ専用電源をOFFにしてもArduinoからの電圧でラズパイのLEDが点いてしまいます。正常動作する程の力はない様ですがArduino側のレギュレータに負荷が掛かりそうです。気持ち悪いのでUSBコネクタの+5V端子にカプトンテープを貼って絶縁するという、いい加減な対策をしました。

3dp28_3

USBコネクタの+5V端子を絶縁。

 

これで3Dプリンタ2号機は一旦完成とします(多分まだ何かやりますが)。

3dp28_4

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号機~その6~

前回の投稿では1層目の貼り付きが悪いと言って一生懸命Z軸のレベル調整を行なった挙句、結局はプリントベッドをアルコールで拭いたら改善したというオチでした。その後も貼り付き性には問題なく、ネットで調べたらアルコール拭きは常識みたいですね。勉強不足でした。

コントロールPCのラズパイ化検討

3Dプリンタ1号機ではこの時設定したUbuntuマシンをまだ使っていました。たしかCPUはPentium4だったかな?
2号機もコイツで動かしてもいいのですが、レーザー加工機の制御PCも兼ねているので両方同時に使えないんですよね。また先日はボタン電池が切れて交換したし、そろそろいつ止まっても不思議ではない状態です。
他に使えるPCもないのでわが家に何個かあるラズパイで試してみようと思います。

Raspberry Pi1 ModelB

ラズパイの中では最も古いModelBです(+でも2でも、もちろん3でもないヤツ)。動作速度がどうかなーと思いますが、まずは試してみます。

3DP26_1

Raspberry Pi1 ModelB

Pronterfaceをインストール

Pronterfaceをインストールするのですが、まずはその前に今このRaspberry Piに入っているOSはいつのだか判らないので最新版のRaspbian(STREATCHと言うそうです)を入れ直しました。
その後・・・
’sudo apt-get install printrun’ で何事もなくインストール完了。

実行すると見慣れた画面が立ち上がります。
そしてプリンターと繋いで実行すると・・・なんかやっぱり遅いです。モデルの表示を2Dにしても操作した後10秒ぐらいしてからやっと反応する感じ。3D表示だと固まったかと思います。これはちょっと使えるレベルではありません。

pronsole

pronterfaceと一緒にpronsoleというのもインストールされています。こちらはコマンドラインでプリンターを操作できるものなので、メインPCからSSHでログインして操作可能です。 これだとGコードのロード時以外は遅さを感じないので、これもアリかと思います。

Raspberry Pi 2

Pi1だと遅いのですが、ならばRaspberry Pi2ではどうなのか試してみます。 このラスパイ、流行りに乗ってAIY VOICE KITに使ったのでこんな箱に入ったままです(AIY VOICE KITは Raspberry PI3を使うものとされていますが、わが家にPi3はないので2で試したところ、それなりに動いていました)。

3DP26_2

Raspberry Pi2(AIY VOICE KITに収納)

OSはAIY projectのイメージをSDに焼いたもの(ベースはRaspbian Jessie)が入っているのでこのまま使います。
ここでも上と同様にapt-getでインストールを試みたのですが、printurnが見つからないと言ってきます(apt-getの使い方を良くわかっていないだけかもしれません)。そこでGithubからソースを取ってきました。
実行してみると3D表示はやはり遅くてダメですが2Dなら問題なく使えるレベルです。

それぞれのレビジョン確認

ここでPi1とPi2で微妙に画面表示が異なるのが気になり、レビジョンを確認したところ・・・

Pi1   :2015.03.10
Pi2   :1.6.0

なんかレビジョン番号の付け方から異なっていて、どっちが新しいのか分かりません(当然GitHubから取ってきた1.6.0が最新だとは思いますが)。

もう一度Pi1に戻って最新版Pronterfaceをインストール

そこで再びPi1に戻って1.6.0をインストールしてみました。すると結構速度は改善されている様です。当然Pi2には負けますがなんとか使えるレベルだと思います。

(ここら辺の「使えるレベル」とか「遅い」とかは全て私の主観です。念の為。)

・・・という事で

Pi1で行こうかと考えながらも、ラズパイがつながるモニターはメインPCのしか持ってないんですよね。結局、RAMPSに液晶ディスプレイとSDカードを付ければそれでもいいかなとも思って揺れています。

RepRapのSenderって・・・

ところでPronterface等のSenderソフトって何をやっているんでしょう?想像では単にファイルからGコードを読んでArduionoに向けてシリアル送信するだけで、いくら古いラズパイだからってそんなに重い処理ではない様な気がします。実際Teratermでプリンターに接続し、’G0X10Y10F300’とか打ち込んでやるとその通りに動作します(エコーバックがないのでローカルエコーをONにし、改行コードを’LF’にしておく必要あり)。

Senderの動作としてとりあえず次のあたりが疑問です。

  • ロードとはどこにロードするのか?
    RAM上?
  • プリント中のフロー制御。
    プリンターの動作にどうやって同期しているのか?Arduinoとの接続では恐らくハードウェアフロー制御はできないと思っているので、Xon/Xoffなのか、または別の方法なのか?

という事でpronsoleのソースを眺めています(Pythonの経験値が低いので苦労しながら)。わかったら報告します。

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号機~その4~

3Dプリンタ2号機製作の続きです。

Z軸を上に引っ張ると抜けてしまう構造だった件はこの写真の様にMDFボードを上下からベアリングで挟みストッパーで固定する方式にしました。多分これで大丈夫。

3DP2_41

Z軸抜け対策

 

調整で苦労したのはエクストルーダからの吐出量が安定しない(なんだか少ない)点です。最初こんなエクストルーダを使っていました。

3DP24_1

PLAでプリントしたWade’s Extruder

そこで1号機で使っていたMakerGear製エクストルーダに交換しようとしたらパーツが割れていました。つい先日まで1号機で働いていたのですが。

3DP24_2

MakerGear製エクストルーダのパーツ破損

仕方ないので2号機で補修パーツをプリントして取付けます。

3DP24_3

補修して取付け。
黄色いパーツが新たにプリントした部分。

このエクストルーダは実績があり音も静かです。しかし吐出量が少ないのは変化ありません。プリントしたエクストルーダが原因では無かった様ですが静かなのでこのままこっちを使います。

改めて、エクストルーダの送り量を再測定してみると・・・
無負荷では指定通りの長さが出ていくのですが、温めたノズルから吐き出しながらだと1割くらい少ない量しか出ません。そこで送りギヤの締め付けネジを強くしたらだいぶマシになった(でもまだちょっと少ない)のですが、この状態でプリントしていると途中でエクストルーダのモーターがゴトゴトという音をたてて脱調し始めました。フィラメントを引き抜いてみると送りギヤで傷付けた部分がテフロンチューブ内で抵抗になり、手で出し入れしても明らかに滑りが悪くなっています。仕方ないので締め付けネジを少し緩め、脱調はせずに送り量もまあまあなギリギリのところに調整しています。結局これでも吐出量が少な目なのでスライサー(curaです)側で少し多めに出す設定にしました。

今回の2号機のエクストルーダは’Bowdenタイプ’にしています。ホットエンドとコールドエンドを分離してテフロンチューブでつないでいるので、X-Y動作時にエクストルーダのモーターを一緒に振り回さなくて済む(なので動作が軽い)のと、将来的に複数のエクストルーダを付けるためヘッド周りのスペースを空けておけるというメリットがありあります。しかしチューブで間を繋いで精度的に大丈夫かという不安がありましたが、やっぱりこのあたりが難しいのかもしれません。

次に前回プリントベッドのガラスにヒビを入れてしまったのでガラスを交換します。いつだったか複合プリンタをバラしたときに取っておいたスキャンベッドのガラスを使います。ガラスを切るのは初めてですが過去に家のタイル補修時に買ったタイル切りがあるのでこれでガラスを切ってみます。

3DP24_5

ガラス板を切ります。

適当なゴム板があったので滑らない様に定規との間に挟み、タイルカッターで傷を入れます。Youtubeで見た動画だと「キー」という高い音と共に傷が入っていましたが「ゴリゴリ」という音しかしません。腕の違いなのかカッターの違いなのか。でも何とか傷は入った様です。

3DP24_6

細長いゴム板があったので定規との間に挟んでガラスに傷をつけました。

そして恐る恐る力を入れると・・・

3DP24_7

おおっ、上手く割れました。

もう一辺も切る必要があります。同様にやっていくと・・・

3DP24_8

今度は失敗です。ギタギタになりました。

仕方ないのでダイヤモンドヤスリと回転ツールで削って真っ直ぐにしていきます。

3DP24_9

削ってなるべく真っすぐに修正した後。
(でもデコボコしています)

まだデコボコしていますが、手を切らない様にエッジは丸めておいたので実用上の問題は無いと思います。

カプトンテープを貼って取付けました。今度は割らない様に注意します。

3DP24_10

筋が入って見えるのはヒビではなく反射です。

 

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軸を製作中です。