ブラックボックスの中身をちょっとだけ覗く
普段の生活の中で車に乗る機会はよくある。電車に乗ったり、飛行機に乗ったりもするだろう。だがしかし、車に乗る人のうち、車が動く仕組みを詳しく説明する自信があると断言できる人の割合はどれくらいだろうか。その割合は電車についてとなれば減るだろうし、飛行機についてならさらに減るだろう。吾輩も3Dプリンターについて良く分からないまま使ったり、組み立てたりしている。いわゆるひとつのブラックボックスになってしまっているのだ。LittleRPは、オープンソースのソフトウェアとハードウェアで構成されているので、本来の意味でいえばブラックボックスたり得ない。調べれば全て公開されているからだ。そうはいっても、それらをいちいち詳らかに読んだり調べたりすることはせずに使っていた。ブラックボックスたりえないものを、自分の中でブラックボックス化してしまっていたのだ。それでも、故障個所を修理したり、造形の精度向上を夢見てパーツ交換してみたりするたびに、ちょっとずつ中がどうなっているのかが見えてくる。ブラックボックスの中をちょっとだけ覗いて、ちょっとだけ理解すれば、少しもわからなかった時よりも自由に大胆に動けるようになる。先の記事、「Kickstarterで出資した光硬化式3DプリンターLittleRPの騒音をなんとかする」でLittleRPのモータードライバーを交換した時、モータードライバーとファームウェアについてパラメーターの変更方法などをちょこっと調べて、オープンソースのGBRLが使われているのだと言う事を知り、その存在を視界にとらえることができた。視界に入れば気になるもので、あれこれできるんじゃないかと思いついてしまったことを、あれこれやってみたくなるのだ。
LittleRPの中のArduino
LittleRPを、いじくりまわす過程でそのメインボードにはArduino Unoの互換ボードであるRedBoardが使われていると言う事が分かった。であるならば、本家Arduino Unoに取り換えても動くはずだ。将来、LittleRPのメインボードが故障したら、そのように取り替えて修理することがあるだろう。ならば今のうちに経験しておこうではないか。故障してから故障前の設定値はどうなっていたかなど確認できなくなってしまった状態で作業するよりは、完全に動作するお手本が手元にある状態で作業する方が幾分楽だろう。さらに、本家Arduino Unoにしておけば、メインチップの取り外しが可能なので、現在ののメインチップをそのまま保持して、別のチップで新しいファームウェアを試してみるなどと言ったことも可能になる。
Arduino UnoにGBRLを書き込む
LittleRPのファームウェアに使われているGBRLはVersion 0.8aであるが、最新版はversion 0.9iである。Version 0.9でどんなアップデートがあったかというと、モーターがスムーズに動くアルゴリズムが採用されていたり、安定性と堅牢性に関するアップデート施されていたり、Arduino IDEからのコンパイルとフラッシュが可能になっていたりと、魅力的な文句が躍る。LittleRPではZ軸の制御にしか使用しないが、Tilt Kitを追加してY軸の制御も行うようになったら、このあたりのアップデートが恩恵となるかもしれない。version 0.8に比べて設定項目が大幅に増えているが、今回はversion 0.9iを使ってみよう。まずは、GitHubから記事執筆時点での最新版であるversion 0.9iをダウンロードする。
右下の”Download ZIP”ボタンから”grbl-master.zip”をダウンロードし、任意の場所に解凍しておく。
つづいて、Arduino IDEもダウンロードする。
Windows版にはインストーラー版とZIP版があるが、今回はZIP版を使ってみる。インストールしなくてもいいのでお手軽でよい。ZIP版をダウンロードしたらこれも任意の場所に解凍しておく。
Arduino UnoをUSBケーブルでPCと接続する。ドライバーが見つからずに、不明なデバイスとして認識されるので、デバイスマネージャーから”ドライバーソフトウェアの更新”を選択する。
ドライバーソフトウェアの更新画面で、”参照”ボタンをクリックする。
解凍したArduino IDEの”drivers”ディレクトリを選択して、”OK”ボタンをクリックする。
次へをクリック!
ドライバーを信用するか聞かれるので、信用する。
ドライバーが正常にインストールされたことを確認して”閉じる”をクリック。
デバイスマネージャーから見ると、Arduino Unoとして認識されていることを確認する。ついでにCOMの番号もチェックしておく。
Arduino IDEを解凍ディレクトリにある、”arduino.exe”を実行する。
上部のメニューから”スケッチ”→”Include Library”→”Add ZIP Library…”を選択する。
インストールするライブラリを含むZIPファイル又はフォルダを指定するように言われるので、先ほどダウンロードしたgrbl-master.zipを解凍したディレクトリーの中から、gbrldディレクトリを選択して、”開く”ボタンをクリック。
さらに上部メニューの”ツール”→”ボード:”COMn”(Arduino Uno)”を選択し、接続されたCOM番号を選択する。
“ファイル”→”スケッチの例”→”gbrl”→”gbrlupload”を選択する。
矢印マークをクリックして、マイコンボードに書き込む。
マイコンボードへの書き込みが完了しました。のメッセージを確認して、ウィンドウを閉じる。
GBRLを設定してみる。
GBRLをLittleRPに合わせて設定していく。前は、GBRL controller3を使用したが、GBRL v0.9でこれを使うと、設定の変更がうまくいかなかった。GBRL v0.9の設定番号が連番になっていないためだと思われるが、まだGBRL controller3はGBRL v0.9に対応していないらしい。なので、ターミナルエミュレーターをつかってシリアルポート接続からコマンドをたたいて設定していく。今回は、Puttyを使用してみる。COMポートに確認したCOMポート番号をいれて、スピードに”115200″を入れる。GBRL v0.8以前ではスピードは”9600″だったが、バージョンアップしてスピードアップしたのだ。v0.9では”9600″としたら接続できないので注意がいる。接続ボタンで接続してみる。
接続に成功すれば、GBRLのバージョンが表示されるはずだ。
Grbl 0.9i ['
コマンドを打ち込んでもプロンプトには表示されないので、打ち間違えに注意しながら慎重にコマンドを打ち込んでいく。コマンドもv0.8とv0.9で微妙に異なる。v0.8では設定値の一覧を表示するためには、”$”+ Enterキーだったが、V0.9では、”$” + エンターキーとなる。また、v0.9の方が発行できるコマンドの数が増えており、ヘルプも表示できる。LittleRPで初期に設定されているGBRL v0.8aの設定値は以下の通りであった。
$0 = 200.00 (steps/mm x)
$1 = 200.00 (steps/mm y)
$2 = 200.00 (steps/mm z) ←ステッパーモータードライバーで1/16μstepに設定している場合は"400"に設定する。
$3 = 30 (microseconds step pulse)
$4 = 200.00 (mm/min default feed rate)
$5 = 200.00 (mm/min default seek rate)
$6 = 0.10 (mm/arc segment)
$7 = 255 (step port invert mask, binary=10000000)
$8 = 25.00 (acceleration in mm/sec^2)
$9 = 0.05 (comering junction deviation in )
Configuring Grbl v0.8で解説されているGBRL v0.8cとはパラメーターの数が違う。どちらかと言えば、Configuring Grbl v0.7で解説されているパラメータと同じだ。これに比べて、Gbrl v0.9iのデフォルトは以下の通り。
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=6 (dir port invert mask:00000110)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.020 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=1 (homing dir invert mask:00000001)
$24=50.000 (homing feed, mm/min)
$25=635.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=314.961 (x, step/mm)
$101=314.961 (y, step/mm)
$102=314.961 (z, step/mm)
$110=635.000 (x max rate, mm/min)
$111=635.000 (y max rate, mm/min)
$112=635.000 (z max rate, mm/min)
$120=50.000 (x accel, mm/sec^2)
$121=50.000 (y accel, mm/sec^2)
$122=50.000 (z accel, mm/sec^2)
$130=225.000 (x max travel, mm)
$131=125.000 (y max travel, mm)
$132=170.000 (z max travel, mm)
パラメータがすごく増えてる。これを0.8aの設定に読み替えて合わせていく。変更点だけ抜き出すと、以下の通りだ。変更は、”$n=変更したい値”と入力すればいい。”n”は設定値の番号である。
$2=7 (step port invert mask:00000111)
$3=7 (dir port invert mask:00000111)
$10=15 (status report mask:00001111)
$24=200.000 (homing feed, mm/min)
$25=200.000 (homing seek, mm/min)
$100=200.000 (x, step/mm)
$101=200.000 (y, step/mm)
$102=200.000 (z, step/mm) ←ステッパーモータードライバーで1/16μstepに設定している場合は"400"に設定する。
$110=500.000 (x max rate, mm/min)
$111=500.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)
設定変更が終了したら、Ctrl + “x”でいったんリフレッシュして、Puttyを閉じる。そしてCreation Workshopをきどうして、COMポート番号更新し、接続速度を”115200″へと変更する。そのうえで、テストプリントを行うと、見事、プリントに成功した!
パーツ交換によるバージョンアップと予備パーツの獲得
前回のモータードライバーの交換と、今回のarduino基盤の交換で、3枚あった基盤のうち2枚がオリジナルの状態から換装されたことになる。それによってオリジナルパーツは、故障時の予備パーツとして備蓄することができた。いろいろいじくったので、故障しても修理できるという自信もついた。これでLittleRPも長持ちするだろう。モータードライバーをマウントするためのシールドも、プリント基板がLittleRPのショップで売っているので、ピンや抵抗やコンデンサー、DCジャック、等を用意すれば簡単なはんだ付けだけで作ることができるだろう。これで基盤部分が部品を集めて自分で作ることができると言う事が分かった。あとは機械部分さえ何とかなれば、自作DLP-SLA 3Dプリンター機も作れちゃうかもしれない。LittleRPはとてもシンプルで、性能には不満が残る部分も多いが、シンプルであるがゆえに自分でいじくれる部分も多い。運用していくにしたがって不満点の原因が見えてきたら、自分で改善するための施策を打てるかもしれない。いじくり回せばいじくりまわすほど、愛着がわいてくる。もう自分ではどうしようもないほどに壊れるころには、もっと安価に、もっと手軽に、とんでもなく高精細に出力できる3Dプリンターが登場していることだろう。そのように洗練された機体が現れたら、それはもうはんだ付けでいじくれるほど解かりやすい形はしていないだろう。そうなったとき、昔はLittleRPっていうシンプルなのがあっていじくりまわしたもんさ、と昔話を使用ではないか。そのような完成された製品が登場するまで、新しい3Dプリンターの購入はせず、今手持ちの3Dプリンターをいじくりまわして試行錯誤していこうと思う。