3Dプリンター(5)2015年11月06日

3Dプリンターの改造

より綺麗な仕上がりを期待して改造を施しています。ものによっては効果が確認できないものもあります。(気休め) お金をかけずに3Dプリントしたもので改善できるのであればと思います。

Y軸ベルトテンションの調整
Prusa i3の基本形ではX、Y軸のベルトテンションのアジャスターはついていません。プリンター使用中に緩むことも少ないのでアジャスターがなくても不便を感じませんが、ベルト取り付け時に適切なテンションで取り付けることが難しいいのは確かです。

X軸ベルトテンションの調整
X軸のベルトテンションアジャスターはアイドラーエンドパーツの交換で行います。X軸、Y軸方向のバックラッシュの主な原因はベルトの緩みによるものです。こまめな調整でバックラッシュを低減できます。

Z軸のバックラッシュ対策
X、Y軸はベルト駆動でZ軸は両切りボルトによるリードスクリュー駆動です。精密加工されたリードスクリューであればバックラッシュなど起こらないのですが、両切り(寸切)のM5ボルトで簡易的に作っているためボルトとナット1個では完全に噛み合っていません。そこでバックラッシュを低減するためにナット2個とスプリングを使用したアンチバックラッシュを作成して取り付けました。バックラッシュが起こっていると高さ方向の出来上がりに影響します。結構大きな効果が期待できます。

キャリアプレートの剛性と耐熱
キャリアプレートの素材にはアクリル、アルミ、MDFなどが使用されます。最初はアクリル素材のキャリアプレートを使用しましたが、熱により変形してしまいました。キャリアプレートが変形するとホットエンドのギャップ調整がうまくいきません。そこでアルミ素材のキャリアプレートに変更しました。2台目は5.5mm厚のMDF版を使用しました。Y軸移動時の振動でバックラッシュを起こす可能性はありますが、ヒートベッドとの間隔を広めした熱対策をしました。このあたりは動かしてみて様子を見たいと思います。

3Dプリンター(6)2015年11月09日

コントロールボードとモータードライバー

3Dプリンターの制御系をHackします。このブログでもいろいろ作成しているArduinoが制御マイコンになります。デジタルポートとアナログポートを使用します。

Arduinoとコントロールボード
RapRep 3Dプリンターのコントロールボードのセットです。内容はArduino mega2560 R3互換ボード、RAMPS1.4コントロールボード、A4988ステッピングモータードライバーがセットになっています。特にセットで購入する必要はありませんが、今回はセットのほうが割安になっていました。
Arduino Mega2560 R3にはファームウエアに当たるスケッチを書き込みます。スケッチはMarlinをダウンロードし、自分の構成にパラメーターを合わせて修正します。Arduino IDEからArduino Mega2560 R3に書き込み完了です。

RAMPS1.4コントロールボードの各パーツとの結線図と回路図です。D8、D9、D10と電源入力端子はターミナルブロックでそれ以外の端子は2.54mmピッチです。たいがいのステッピングモーターについているケーブルはJSTコネクターがついています。ピッチは2.54mmなのですが2個分のZ軸端子間が狭くQIコネクターに替えないと2個刺さりません。

モータードライバー
ステッピングモーターはドライバーIC Pololu社のA4988 または Ti社のDRV8825Vを使用して駆動します。モータードライバーはサブ基盤になっていてA4988とDRV8825Vは同じピン配列になっていますので差し替えや混在が可能です。混在させるときはステップモードと制御電流の設定が異なりますので注意してください。モータードライバーはステッピングモーター1個につき一つ使用しますがZ軸は2個を並列に接続しますので合計4個必要になります。ステッピングモーターの駆動は定格電流の8割程度を目安に設定していますが、A4988は結構発熱します。発熱が気になるようであればDRV8825Vを使用してください。少しは発熱が少ないようです。
  • A4988使用時の計算式
      I_TripMax = Vref / (8 x Rs)
       I_TripMax : 制御電流
       Vref : VR-GND間の電圧
       Rs : シャント抵抗値
  • DRV8825V使用時の計算式
      Ifs = Vref / (5 x Rs)
       Ifs : 制御電流
       Vref : VR-GND間の電圧
       Rs : シャント抵抗値
今回購入したGeeetechのセットに入っていたA4988ドライバーボードはシャント抵抗がR200 = 0.20Ωでしたので計算式により、
  1.5A x 80% = Vref / (8 x 0.2Ω)  で Vref = 1.92V
に設定しました。互換A4988ドライバーボードはシャント抵抗値が異なることがあります。前に購入したAsShopで扱っているA4988ドライバーボードはR100 = 0.10Ωでした。ネットで解説されているI = Vref * 2.5 という計算式はPololu社のリファレンスボードの場合でシャント抵抗がR050 = 0.05Ω時の計算式です。ステッピングモータの制御電流値の設定はドライバーICとシャント抵抗値を確認し、発熱対策を考慮した設定にする必要があります。必要なトルクが得られているようなら制御電流を必要以上に上げないほうが良いでしょう。ドライバーICには過熱防止回路が内蔵されていますので印刷途中で過熱防止回路が働いてステッピングモーターが停止するといったトラブルもあります。必要な制御電流を得るためにドライバーボードの発熱がすごいようならファン冷却を行ってください。40mm小型ファンでも十分冷却できます。ファンの音はうるさいですが印刷の出来上がりにも影響しますので付けておいたほうが無難かもしれません。

ステッピングモーター
RepRap 3DプリンターはNEMA17というバイポーラステッピングモーターを使用します。NEMA17とはシャフト径が5mmでシャフト長24mm、取り付けネジが3mmで穴間隔が31mm、深さが4.5mmという規格です。モーター長は発生させるトルクによって異なります。モーター長40mmで2相 ステップ角: 1.8 ° 定格電流: 1.5A Holding torque: 500mN.m、Detent torque: 15mN.mのモーターを使用しています。RepRapは定格電流1.3Aのモーターを推奨しています。
e-bayなどで販売時に表記されているトルクの単位はいろいろありわかりにくいです。1N.m(ニュートン.メートル)は1000mN.m、100N.cm、0.001kN.mとも表記できます。また0.102kgf.m、10.197kgf.cm、10197.162gf.cmとも表記されます。変換計算をしてくれるページがありますので参照してください。
ドライバーボード同様にステッピングモーターも多少発熱します。しかし、熱くて触れないほどというのは定格電流値を超えている可能性があります。モーターの寿命にも影響しますので定格電流値以内で使用してください。

LCD表示ユニット
表示用の20文字4行のキャラクターまたは、128x64ドットグラフィックスLCDユニットです。表示される情報はどちらでも同じでXYZ軸の位置、温度(設定値/実測値)、SDカード使用量、経過時間です。RAMPS1.4に接続アダプターを取り付けてケーブルを接続します。MarlinFirmeareでLCDの使用を設定します。参考サイトです。
このユニットには操作用のロータリーエンコーダーとSDカードソケットが実装されています。SDカードに印刷データを転送してオフライン印刷が可能になります。

温度計測センサー
RepRapでは一般的に安価なNTCサーミスター素子を使用します。詳細はこちらのページで解説されています。だいたいホットエンドやヒーテッドベッドに付属してきますが、改めて購入するのであればPTFE耐熱ケーブル付きをおすすめします。細めの2心PTFE耐熱ケーブルがなかなか見つかりません。MarlinFirmeareにはたくさんのセンサーが予め記述されていますので購入したものを選択してください。RAMPS1.4コントロールボードの温度センサー端子に接続します。極性はありません。

エンドスイッチ
XYZ軸のゼロ点検出用のセンサーです。マイクロスイッチか、ホール素子を使用した位置検出センサーです。RAMPS1.4コントロールボードのエンドスイッチ端子に接続します。MIN、MAX合計で6個接続できますがMINのみ(3個のセンサー)で十分でしょう。MAXはMarlinFirmeareで最大移動距離が設定できますので代用が可能です。

3Dプリンター(7)2015年11月13日

3Dプリンターで印刷

3Dプリンターが完成したらいよいよ印刷です。プリンターという名称が付いているので印刷と言っています。日本語では造形/造型という言葉があるためそちらがよく使用されていますが3Dプリンターで印刷したからといって目的のオブジェクトが完成するわけではないのであえて印刷と言っています。鋳型から取り出した状態と言ったらよいでしょうか。バリ取りや仕上げ(修正)、塗装といった工程を経てオブジェクトは完成します。3Dプリンターで印刷するまでの工程は大きく分けて3つのステップが必要です。
PCでオブジェクトの作成
目的のオブジェクトは3D CADソフトを使用して作成するか、インターネット上で公開されているSTL形式のデータをダウンロードします。3D CADソフトは高価で操作が難しいものが多く初心者には手が出ません。その中でも比較的操作法が簡単なソフトを選択しています。もちろんフリーソフトです。私はAutoCADの123D Designぐらいしか使用できません。

印刷形式(Gコード)に変換する
slic3rを使用します。作成されるGコードは3Dプリンターの制御情報を含んでいます。自分の3Dプリンターの設定条件を理解していないといけません。印刷がうまくいかない時はこの条件を変更します。対象のオブジェクトやフィラメント、室温によっても条件は変わってきます。Arduinoには基本パラメーターしか設定しませんのであとの細かな設定はここで行います。作成されたオブジェクトに対しても3D表示で簡単な操作が行えます。設定する項目が多く、英語なので以下のサイトも参考にしください。


3Dプリンターで印刷する
3Dプリンターに変換されたGコードを送るソフトが必要です。PC用のスタンドアローンソフト(printrun)やWEBアプリケーションとして動作するソフト(octoprint)があります。Raspberry Piにoctoprintをインストールし、3DプリンターをRaspberry Piに接続します。これでPCの横に3Dプリンターを置かなくてもすみます。またWEBブラウザさえあればタブレットでもよいので何かあった時に離れたプリンターのそばで操作ができ便利です。
3Dプリンターでは送られてきたGコードを解釈してホットエンド、ヒートベッドの温度管理とヘッド、ベッドの移動、フィラメントの送出を行います。

3Dプリンター(8)2015年11月19日

3Dプリント・サーバー

ArduinoやRaspberry Piをいじってきましたが、3Dプリンターでそれらを全て使用することになりました。なんか嬉しくなります。

以前なら購入していたRaspberry Pi B+のケースを作りました。オープンなデザインがいっぱいあります。ケースの肉厚が薄いので印刷時の設定で100% infillで印刷しなければいけなかったのですが70% infillで印刷してしまいました。ちょっとスカスカして弱い感じがします。今度時間のあるときにでも印刷し直そうかと考えています。

ベースOSにRaspbianをインストールし、octoprintをインストールして3Dプリンターのプリントサーバーに仕上げました。

Raspberry Piのネットワークは無線LANで設定したので電源さえあればどこでも動作できるので機動性が増しました。消費電流は0.5A程度ですからモバイルバッテリーでも動作できるのですが印刷時間を考えるとバッテリーが持つかどうか難しいところです。なによりoctoprintはタブレットでも操作できるのでなかなか重宝しています。操作できる機能はもprintrunより優れていると感じています。(個人の感想です)

3Dプリンター用に300WATX電源を使用していますが、PC用の電源からはいろいろな電圧が出力されています。もちろんRaspberry Piが使用する5Vも出力されています。赤色の線は5Vですが、ATX電源の電源スイッチを切ると出力されません。3Dプリンターの電源スイッチを切るとRaspberry Piも電源が切れてしまいます。これではちょっと不便です。しかし、ATX電源には5VSB(スタンバイ)という出力があり、電源スイッチの状態に関係なく常に5V 2Aが出力されています。これを利用すればRaspberry Pi用の電源を別に用意する必要がなくなり、不用意に電源を切ってしまうこともありません。マザーボードに接続する20ピンまたは24ピンのATXコネクター配線の中に紫色の線を探してください。この線と黒色の線(グランド)間には電源スイッチに関係なく常に5Vが出力されています。そこにUSB A-typeコネクターを取り付け、適当な大きさのケースを作成すればRaspberry Piが利用できるUSB電源が完成です。Raspberry Piを接続する前にテスターで電圧、極性をチェックしてください。過電圧や逆極性で接続するとRaspberry Piを壊しますので注意してください。

3Dプリンター(9)2015年11月27日

Z軸の自動調整機能

各軸の位置調整はエンドストップスイッチの取り付け位置で行います。X、Y軸の位置調整はホットエンドがベッド内に収まるようにエンドストップスイッチの取り付け位置を決定しますが、Z軸の調整はホットエンドとベッド間のギャップ調整を行います。基本的にはX、Y軸と同じなのですがこれが結構面倒です。ベッドの取り付けネジ4本(水平調整)とエンドストップスイッチの取り付け位置(ギャップ調整)の2調整を同時に行います。ネットで検索しているうちにMarlinFirmeareの機能にAuto Bed Levelingというのがあることがわかりました。実際に使っている方もいらしてYouTubeに動作している動画を見つけました。こういう機能が欲しかったというべき機能です。それに動きがロボット的なのも良いです。
ベッドが水平でなくとも自動的にZ軸を調整してくれる素晴らしい機能です。ホットエンドのギャップはZ-Probe(Z軸のエンドストップスイッチ)のZ方向のオフセットで決まりますので最初の設定が肝心です。Z軸自動調整機能(Auto Bed Leveling)の実装にはマイクロサーボ1個とZエンドストップスイッチの取り付け位置変更を行います。3Dプリントした取り付けパーツで実現できます。

  • Z-Probe取り付けパーツを作成します。Xキャリアやホットエンドに合わせて選択するかデザインしてください。

  • YouTubeの動画がわかりやすいです。
    Part 1(組み立て)
    Part 2(設定)
    Part 3(調整)
    MarlinFirmeareのConfigurations設定を修正します。
    測定位置、X、Y、Z方向のホットエンドとのオフセット値、動作速度、マイクロサーボの動作角度を設定します。
  • オフセット値は試行錯誤で微調整します。
    一度オフセット値を設定してしまえば、ホットエンド周りを変更する時まで再調整の必要はないと思います。
自作の3Dプリンターはまだまだ手作業や微調整を行いながら印刷しなければなりません。それも面白いのですが印刷までの時間短縮と精度アップになるZ軸自動調整機能(Auto Bed Leveling)はおすすめできるのではないでしょうか。

Z軸自動調整機能(Auto Bed Leveling)を実装しようとしていますが、MarlinFirmeareの設定がうまくできません。G28コマンドでサーボが動作するとMarlinFirmeareがハングアップしてしまいます。サーボを使用せずにG28、G29コマンドを動かすとうまく動きます。サーボを使用しない誘導近接スイッチを使用した例もあります。スマートなのですがロボット的でないところがちょっとねと思っていたのですが、e-bayでLJ12A3-4-Z/BXが290円だったため、背に腹には替えられずクリックしてしまいました。でも安かったな日本では安価なものが売られていないですね。
誘導近接スイッチにはNPNタイプのLJ12A3-4-Z/BX(青色)とPNPタイプのLJ12A3-4-Z/BY(黄色)があり、接続が少し違います。また、電源に6V~36Vが必要です。RAMPS1.4コントロールボードのエンドスイッチ入力は5Vロジックです。誘導近接スイッチの出力を5Vにレベル変換する必要もありますが、抵抗分圧で簡単にすませることができます。 抵抗分圧では供給電圧によって出力電圧が変動しますので電源が安定していない場合は注意が必要です。抵抗が短絡した場合12VがArduinoに入力されてしまいます。パーツ箱の中にあったSharp PC900Vフォトカプラでアイソレートしてあげました。回路はいたって簡単です。