Cafe Cappuccino

かふぇ・かぷちの/新幻想的独り言4 ねふぁの気まぐれな独り言

今回は様々な素材での出力結果をまとめる予定だったが、MicroSliceを動かしているArduinoのソフトウェアGRBLを修正し出力精度を上げる事が出来たので、こちらの情報から紹介する。

前回の記事でバックラッシュ(もしくはバックラッシ)の影響によりヘッドの移動方向が逆転した場合に遊び分のずれが生じ、円等の図形が歪んでしまう事を紹介した。これを改善するには、ハード的に改善するか、ソフト的に改善する必要がある。

ハード的にはなかなか難しいので、ソフト的に改善を試みた。MicroSliceが2015年1月現在公式に提供しているのはGRBL 0.8と言う少し古いバージョンのソースをベースとしたものである。最新のGRBLは0.9gで、0.9gは0.8に比べ処理が色々と改善されており、標準でAruduino IDEでのビルド・転送に対応している利点もある。

なんとか0.9gをMicroSliceで動かせるようにして、さらにバックラッシュ対策も入れて見たい、と思ったのだがこれがなかなか大変であった。0.8の通常版(元々はXYZ軸のフライス盤制御用ソフト)とレーザー出力対応したソースを比較し、差分を0.9gに適用すればすぐ出来るだろうと思っていたが、0.8と0.9で思った以上にソースが変更されており、結局すべてのソースに目を通して仕組みを理解した上でないと適当に修正しただけではエラーが連発するだけであった。

筆者がArduinoを触り始めたのは昨年12月末頃で、言語としてC/C++は理解できたがArduino特有のポートやタイマー、割り込み等を理解するのに時間がかかってしまった。最初ソースのみを推測で読んでいたが、どうしてもNCデータからモーターの動きに変換した所で行き止まりになってしまい、そこからどうやって実際のモーターを駆動する所へ繋がっていくのかが分からず大分悩んでしまった。動きとしては、NCデータからモーターやレーザー出力用のデータを生成するプロセスと、タイマー処理により定期的に生成されたデータを確認し、データがあればそれを元に実際に駆動制御するプロセスに分かれていた。

ともあれ、何とか0.9gのソースを修正し、バックラッシュ対策用の仕組みも入れ込み、ベクターモードのスイッチ切り替えを不要にしてベクターモード時のレーザー出力調整機能も入れたファームを作成しMicroSliceで動かせる様になった。

元と改造後のベクターデータの出力を見るとずれが大分改善されているのが分かる。Cの文字も歪まず綺麗に出る様になった。

gbrl_modified

ラスターデーターも往復で綺麗に出る様になった。

DSC02820

修正したソースにコメントをちゃんとつけてGitHubでアカウントを取ってフォークするのがベストなのだと思うが、面倒なのでここに適当にソースとhexファイルを置いておく事とする。筆者の方で追記・修正した箇所は「//nefa」のコメントのみ入れてある。利用は自己責任にてご自由に。

grbl-9g_mod_nefa20150120.zip

F50以上で焼いている分には問題無いが、F10等の低速で焼いていると途中パスが飛んでしまう事がある。今は解析する気力が無いが、いずれ気が向いたら調べてみようと思う。(多分放置しそう)

0.9gに対し修正したのは以下の点。

  • $L0、$L1でのレーザーモード切り替え
  • レーザーモード時Z#でレーザー出力
  • 各種デフォルト値の調整
  • ADAPTIVE_MULTI_AXIS_STEP_SMOOTHINGを無効化
  • MicroSlice本体のスイッチがR(Raster)でもベクターデータ出力可能
  • $Z#でベクターデータ出力時のレーザー出力調整(保存はしない)
  • $50、$51の数値でX、Y軸のバックラッシュ補正
  • ベクター/ラスターデータによりレーザーモード自動切り替え

元々本体のR/Vスイッチでラスターとベクター切り替えしていたが、Rの位置でベクターデータ時もレーザー出力出来る様にしたのでスイッチは常にR位置で切り替える必要が無くなった。また、「$Z#」でベクターモード時のレーザー出力も調整出来る様にした。

「Z#」のコマンドでレーザーモードオン、「G90」のコマンドでレーザーモードオフに自動的に切り替える様にしたので、起動後「Z25」等で調整する際に事前にいちいち「$L1」のコマンドを入力する必要も無くなり、ラスターデータやベクターデータを出力する際にも自動的にモード切り替わるため基本的に「$L1」「$L0」を入力は不要で、モード誤りによりヘッドが明後日の方向に進む事も無くなった。接続後、「$H/$X」でアラーム解除「Z25」でフォーカス調整、「Z0」でオフにした後ベクターデーター出力してもちゃんと動く。

その他、物理的に筆者が加えたちょっとした改造。

・台座のガイド設置とカバーの扉化

設置場所的にカバーを上に持ち上げにくく、持ち上げて素材をセットするのも手間だったのでカバーは固定し前面を扉にした。また、毎回レーザー位置を合わせるのが面倒なので、ガイドを設置した(白いL字のボード)。これで素材の設置と位置合わせが大分楽になった。

DSC02848

DSC02849

アクリサンデーで接着したので分解は難しいかもと思ったが、案外パキパキと簡単に外れた。・・・それはそれで他の部分の接着箇所が大丈夫か心配になるのだが。

・振動対策

モーターの振動で素材が動いてしまう事があったので、良くある耐震マットを足に貼り付けてみた。結果、振動がかなり改善された。

・Bluetooth化

HC-06と言うArduinoのシリアル通信を簡単にBluetooth化出来るモジュールが販売されている。

XINTE ワイヤレスBluetoothシリアルスレーブモジュールHC-06 のために合うArduinoの
XINTE ワイヤレスBluetoothシリアルスレーブモジュールHC-06

3.3v、GND、TX、RXをArduinoの端子に接続するだけでスケッチの変更無くArduinoのUSB接続がBluetooth接続になってしまう代物である。PC側もペアリングすると自動的にBluetooth COMポートが追加されるので、Grbl Controllerでそのポートを指定するだけで他は何の変更もいらない。

DSC02844

購入時はHC-06は9600bpsなので、ここだけちょっと変更を加えた。HC-06の設定を変更するには、KEYのピンをHIGHにした状態でATコマンドを発行する必要がある。この手順は下記サイトにやさしく解説されている。

http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/step1/Components-Wiring/

KEYピンは足がついていないので、まず足を付ける。

DSC02852

足を付けたら、適当なArduinoボードに3.3v、GND、9(KEY)、10(TX)、11(RX)を繋げる。(3.3v接続はスケッチ書き込み後がいいかも)

DSC02853

Arduino IDEで下記スケッチをビルドし書き込む。上記サイトの引用だが、HC-06はデフォルト9600bpsなのでBTSerial.beginも9600にしておく。

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
 pinMode(9, OUTPUT);
 digitalWrite(9, HIGH);
 Serial.begin(9600);
 Serial.println("Enter AT commands:");
 BTSerial.begin(9600);
}

void loop()
{
 if (BTSerial.available())
  Serial.write(BTSerial.read());
 if (Serial.available())
  BTSerial.write(Serial.read());
}

書き込み後、シリアルモニタを開き9600bpsに設定し、「AT」と入力し「OK」と帰ってきたらATコマンドが入力出来る。「AT+NAMEMICROSLICE」でBluetoothの表示名が「MICROSLICE」になる。「AT+BAUD8」で115200bpsに設定される。ATコマンドの説明等は下記サイトが参考になる。(デフォルト参照等のHC-05コマンドは使えないので注意)

http://www.instructables.com/id/AT-command-mode-of-HC-05-Bluetooth-module/all/?lang=ja

次に、配線。MicroSlice組立時のケーブルとハウジングが余っていたので、接続用ケーブルを作成。

DSC02845

これをArduinoの各コネクタに付ける。RX、TX、3.3vは元々空いているので挿すだけ。カバーのファン電源でGNDが空いていないので、カバーのファンのGNDケーブルの途中を少し剥いて繋いでヒートシュリンクで保護した(MicroSlice組立時に鍛えられた成果)。

DSC02846

HC-06モジュールは両面テープで適当にペタッと。

DSC02847

これでBluetooth経由でMicroSliceが使える様になった・・・のだが、ベクターデータの出力は問題無くできたが、ラスターデーターはデータ転送が追い付いていないのかヘッドがぎこちない動きになり、上手く焼けなかった。別のBluetoothモジュール(PC側含め)を試したりBaudrateを変更してみると改善するかもしれないが、疲れたので一休み。USB接続に戻すには、単にHC-06のコネクタを外してUSBを挿すだけ。3.3vケーブルにスイッチを追加すればもっと楽に切り替えできそうだ。

(※このHC-06には技適マークが付いていなかったので日本国内で使うと電波法違反になりますので気を付けましょう(^-^; )

さて、ベクターデータが無線経由で、綺麗に出る様になったのでInkscapeを使った少しお洒落な名前プレートの作り方を簡単に紹介。

まず、フレームとなる四角を二つ描いてテキストを適当に配置。

hatune001

テキストをパスへ変換する。

hatune002

テキストのパスを選択した状態で、アウトセットを実行する。これでテキストが太くなる。

hatune003

分かり易い様にフィルをなくしストロークのみにする。

hatune004

切断した時に中に浮くパーツが無いようにパスを調整する。

hatune005

パス選択で外の四角と内側の四角を選択後パスの差分を実行、さらにテキストのパスも選択しパスの統合を実行する事ですべてくっついたパスとなる。

hatune006

後はプラグインでncデータに変換。

hatune007

Grbl Controllerで読み込み焼く。

hatune008

DSC02854

焼いたらピンセットで抜いていく。これがぽろぽろ落ちてなかなか気持ちいい。焼いた素材はダイソーのカラーボード黒。

DSC02855

完成。

DSC02856

ダイソーで打っているマグネットテープを細く切って裏に貼り付ければマグネットになる。シートのマグネットと違い柔らかく切り易く、粘着が付いているので貼るのも簡単。使い道はなさそうだけど面白そうと思い買ったのだが、思いのほか使い勝手が良かった。ただ、磁力はかなり弱め。

DSC02857

テキストだけでなくネットで「影絵」等で検索して拾った画像をパス化しても同様に出来る。

DSC02840

筆者が現在使っているレーザーは500mWだが、thelittleboxで1000mWのレーザーキットを準備しているらしく、出力が上がれば加工できる素材の幅も広がるので楽しみである。

次回こそは各種素材で試した結果を紹介する。

XINTE ワイヤレスBluetoothシリアルスレーブモジュールHC-06 のために合うArduinoの
XINTE ワイヤレスBluetoothシリアルスレーブモジュールHC-06


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*