grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


ラベル G-Code Seder の投稿を表示しています。 すべての投稿を表示
ラベル G-Code Seder の投稿を表示しています。 すべての投稿を表示

2017年3月4日土曜日

Universal-G-Code-Sender(Nightly builds)について

普段はbCNCを使っていますが、久しぶりにUniversal-G-Code-Sender(UGS)を使ってみました。UGSはJavaベースなので、MacでもWinでも使えるし、bCNCのようにPythonをインストールしたりする必要もなく、すぐに使えるところがいいと思います。
現在の安定版は1.0.9ですが、今回はNightly buildsを試してみました。
UGSのGitに行くと、このように↑ダウンロード可能な幾つかのバージョンがあります。これの2.0 Nightly buildsというまだ開発中のバージョン。classic GUIとUGS Platformの2種類あります。

こちらはUGS Platformの方です。全く見た目も違います。特にVisualizerがかなりよくなって、このように画面分割表示も可能です。bCNCでは画面分割はできないと思います。

以前のUGSのVisualizer、別画面で座標もないし超シンプル。確かにこれに比べると断然良くなったと思います。

ちなみに画面分割など、表示させたいウィンドウを追加するには、表示領域を選びつつメニューバーから項目を選べば、さらなるウィンドウを追加して行くことができます。

 Grbl1.1のオーバーライド機能にも対応したウィンドウもあります。

そしてジョグ操作もGrbl1.1に合わせて、「$J=」コマンドで送信されるようです。
このUGS Platformは、ほとんど別のソフトというくらい改良されている感じです。Nightly buildsなので、まだ細かなバグなどあるのかもしれませんが、それほど問題なさそうです。というか、オープンソースなので、使ってみてバグがあれば改良するか報告してあげるのがいいと思います。

そして、こちらはNightly buildsのclassic GUIの方の画面。見た目的にはそれほど変わってないのですが、ジョグ操作は「$J=」に対応しています。
そして、今更気づきましたが、画面左上の方にPendantがあります。
これを押すと、なんとUGSでもPendant機能が使えるではありませんか。
スマホからアクセスしてみると、ちゃんと繋がります。これはbCNCのPendant機能同様に加工原点出しの際には便利です。試しにスマホからジョグボタンを押してみると、step sizeが10mmになっているのですが、なぜかゆっくりとFeed1の移動になってしまいます。どこかに設定できるメニューがあるのかと探してみましたが見当たりません。バグでしょうか?
しかし、それよりも現在安定版である1.0.9の方も見てみると、同様にPendant機能がついていました(今まで気づきませんでした)。

総合的に見ると、bCNCの方が、オフセット加工、タブ配置機能、カメラ機能など、実際によく使う機能が豊富についているので便利なことは確かです。ただbCNCの場合は、少しボタンの反応が遅いのが難点かもしれません。
とはいっても、Gコードの方であらかじめオフセットパスやタブをつけておいたりすればいいので、G Code Senderがそれほど多機能である必要もないかもしれません。あとはパソコンとの相性だったり好みの違いになるくらいでしょうか。

2017年2月16日木曜日

Grbl1.1の$コマンドやGコードについて

Gコードについてはまだまとめていないので、とりあえず覚書程度に書いておこうと思います。
普段Gコードや$コマンドについては、やっているうちに覚えるだろうと思って、それほど深く勉強はしていません。作業の効率化が必要というほどでもないので、だいたい動けば問題ないという程度です。全て覚えようとすると大変なので、いつも使っているGコードや$コマンド(よく使うものや設定の際に必要そうなもの)についてです。

参考としているのは、
・Grbl:CommandsページConfigurationページ
LinuxCNC/クイックリファレンス
・一般的なNCコード(ここがわかりやすい

まずは$コマンド(Grbl用)から:
$$
CNCマシンの各設定を表示させるコマンド。$$と入力。一度設定してしまえば、あまり用はないかもしれませんが、たまに間違って設定したままになっていることがあります。レーザーモード($32=0または$32=1)をオンにし忘れていたなど。とりあえず通信できているか確認する時にもよく使います。

$I
Grblのバージョンを確認するコマンド。$Iと入力。
入力すると、[VER:1.1e.20161208:]などと表示され、バージョン1.1、2016年12月8日ビルドということがわかります。古いバージョンだとバグが直っていなかったりするので、最新の方がいいと思います。問題がありそうなら最新バージョンにしてみるというのも解決策だったりします。特に問題なく動いているのであれば、そのままの方がいいかもしれません。

$X
ロック解除。$Xと入力。最初にCNCマシンと接続開始すると、このコマンド(あるいは専用ボタン)を押さないと、その後の操作ができないようになっています。また作業中に異変があって自動停止したあと再開する時も入力する必要があります。

$H
$Hを入力するとホーミングサイクルが開始します。ただし事前に$22=1で設定をオンにしておく必要があります。ホーミングサイクルによってリミットスイッチを頼りに機械原点を探しに動き始めます。
リミットスイッチの設置や事前の設定がなされていない場合は、$22=1にしたり、$Hに相当するボタンなど押さないよう注意した方がいいと思います。

$G
$Gと入力すると(あるいは毎回表示される)、現在アクティブになっている設定モードが出てきます。
[GC:G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 S0.0 F500.0]
それぞれ何なのか、最低限これくらいを覚えればいいと思います。
G0は位置決め用の早送りモード(G1に変更しない限り移動速度は一定)、G21で単位はmm、G90で絶対座標を使用中など。
例えば、この設定の状態のまま[G0の速度($110で設定)で、単位はmm(インチではなく)、絶対座標(G90)]、X10とだけ入力するとX軸座標10mmの位置へ動くことになります。最後の項目でF500.0が設定されていますが、G0になっているため$110で設定した速度が優先されます。もしF500の速度を反映したい場合はG0をG1へ切り替えます(G1と入力)。

$J=
ジョグ操作コマンド。
$J=G91X10F100入力で、現在地からXを10mm分F100の速度で動かすというジョグコマンド。これはGrbl1.1からの新機能で、従来まで(Grbl0.9)は、$Gにある設定モードに左右された入力方法になっていましたが、それとは無関係に入力できるようになりました。例えば、$G内で早送りモード(G0)かつ絶対座標設定(G90)になっているときに、相対座標(G91)でゆっくり(G1)ジョグ操作したい時には、今までは設定を変えてからジョグ操作し、それが終わればまた元の設定に戻すということでしたが、元のモードに戻さなくても$Gの内容はキープされたままというわけです。
ペンダント(ジョグダイヤルやジョイスティックなど)で操作する場合は、これを使った方がいいらしいです。フィードが設定されていないと動かないのでFも入力必要。

$3
XYZ軸の移動向きの設定。配線したものの、実際動かしてみるとY軸だけ逆の動きになっていたという場合は、ここで向きを反転設定できます。
$3=0 (N/N/N:X軸/Y軸/Z軸:デフォルト値)
$3=1 (Y/N/N:デフォルト値に対してX軸だけ反転)
$3=2 (N/Y/N:デフォルト値に対してY軸だけ反転)
$3=3 (Y/Y/N:デフォルト値に対してX軸とY軸を反転)
$3=4 (N/N/Y:デフォルト値に対してZ軸だけ反転)
$3=5 (Y/N/Y:デフォルト値に対してX軸とZ軸を反転)
$3=6 (N/Y/Y:デフォルト値に対してY軸とZ軸を反転)
$3=7 (Y/Y/Y:デフォルト値に対してすべて反転)
例えば、Y軸だけ反転したいのであれば、$3=2を入力


$10
現在のマシンのステータスを知らせる設定。$10=1になっていないと、使っているG Code Senderに現在の座標値MPosやWPosが表示されなくなります。$10=2にすることでバッファの内容を表示することもできるようですが、通常は$10=1でいいと思います。たまにMPosやWPosが表示されなくなったというときはここをチェックしてみるといいと思います。

$13
$13=0で作業単位mm、$13=1でインチ。

$20
ソフトリミット設定。$20=0でオフ、$20=1でオン。
$130、$131、$132で、そのCNCマシンのXYZ軸の最大移動距離を設定できます。ソフトリミットをオンにしておけば、この設定距離を超えると自動停止してくれます。$Xで再開。

$21
ハードリミット設定。$21=0でオフ、$21=1でオン。
リミットスイッチを各軸につけておけば、$21=1にすることでリミットスイッチが押された時に自動停止してくれます。$Xで再開。

$22
ホーミングサイクル設定。$22=0でオフ、$22=1でオン。
ホーミングサイクルを可能にするには、各軸にリミットスイッチを接続する必要があります。
$Hをコマンド入力(あるいは専用ボタン)すると、ホーミングサイクル開始となり、Z軸が+方向へ、続いてXとY軸も+方向へ移動し、リミットスイッチを感知して機械原点MPos(0,0,0)を見つけ出します。通常は左奥上が機械原点MPos(0,0,0)となり、作業エリアはWPos座標上では全てマイナス座標となります。毎回作業前に、ホーミングサイクルを行えば、CNCマシンは機械原点を覚えるので、その後座標をずらしても常にどこにいるのか把握できます。
しかし、実際の作業はMPosとは別に作業用の原点WPos(0,0,0)を任意の位置に設定し(G92で)、WPosを元に位置を割り出すので、MPosがなくても問題ありません。ただ、複数の部品を複数の座標系を使って作業するときなどは、MPosが絶対座標となってくれるのであった方がいいとはおもいますが、個人的にはホーミングやMPosは毎回使っていません。

$23
ホーミングの際のXYZ軸の動く方向の設定。通常は右奥上ですが、使いやすいように左前上に設定する人もいます。$3の反転設定の表と同じで、デフォルト($23=0)に対してY軸だけ反転したい場合は$23=2を入力。

$24
ホーミングの際にリミットスイッチ手前で位置合わせする移動速度。正確に位置合わせをするためにゆっくりめの速度にしておく。20〜50mm/minなど。$24=25などと入力。

$25
ホーミングでリミットスイッチを探しに行く際の移動速度。最高速よりは遅めで。
$25=600などと入力で600mm/minで移動開始します。

$26
ホーミング中にリミットスイッチを押した際のデバウンス/チャタリング(特に機械式スイッチ)防止用のディレイ時間。20〜250msec程度。$25=50と入力でディレイ時間50msecに設定。

$27
ホーミング終了後、安全のためリミットスイッチから少しだけ離れておく距離の設定。1〜5mm程度。例えば、$27=3.0と入力でリミットスイッチが押されたポイントから3mm戻った位置に止まるように設定。

$32
レーザーモードの設定。$32=0でオフ、$32=1でオン。
Grbl1.1からはレーザモード機能が追加され、主にはダイナミックレーザーモード(M4)というヘッドの移動速度に応じてレーザー出力を微調整する機能があります。
従来までは、$32=0のまま、M3S500(レーザーオン、出力50%)などと入力していましたが、$32=1にするならば、M4S500となります。
レーザーを使わないのであれば、$32=0にしておいた方がいいと思います。

$100、$101、$102
XYZ軸のsteps/mm設定。CNCマシンのスペックに応じて設定する必要があります。
以下の条件であれば:
・ステッピングモーター:1回転200ステップ
・ステッピングモータードライバのマイクロステッピング設定:1/8
・送りネジの1回転で進む量:5mm
1/8のきめ細かさでマイクロステップすることになるので、ステッピングモーターは200x8で1回転するには1600ステップ、1回転で送りネジが5mm進むので、1600/5=320steps/mmとなります。$100=320などと入力。
ここは最初に設定すれば、もう変えることもないでしょう。

$110、$111、$112
XYZ軸の最高速度設定。mm/min。
例えば、$110=1000を入力でX軸を1000mm/minに設定。
これらの値は、G0の速度に適用されます。

$130、$131、$132
XYZ軸の最大移動距離。
そのCNCマシンの各軸の移動可能な距離を入力しておくことで、$20=1でソフトリミットをオンにした時にこの値を越えれば非常停止するようになります。
例えば、$130=600を入力でX軸の移動可能な距離を600mmまでと設定。

おそらく初期設定で必要な$コマンドはこのくらいでしょうか。その他の設定はデフォルトのままでも大丈夫かと思います。


ここからGコード:
G0
位置決め用の移動速度モード(速め:一定速度)。
最初はG0になっていますが、G0またはG1のどちらかにモードを切り替え指定します。
$$で表示される$110、$111、$112(XYZ軸の各最高移動速度)に設定してある一定速度で動く。速度を設定し直したい場合、$110=800などと入力し直す。
ジョグボタンで移動する場合は、この移動速度が適用されます。G0のままF100などフィードを入力設定しても移動速度はG0($110〜$112)の速度になってしまいます。一時的に速度を変えて動かしたい場合は次のG1を入力してモードを変えるか、ジョグ操作であれば$J=を使うといいと思います。
ある地点へ斜め方向に移動する場合、X軸もY軸も固定速度($110〜$112で設定した速度)で動くため、例えばX軸が目標となるX座標へたどり着いたら、Y軸だけがまだ動き続けているという現象になることがあります。最短距離で目標地点に動くのではなく、各軸の固定速度で動くために折れ曲がった軌道を描くことから加工作業には適していないようです。

G1
フィード(F)設定による移動モード。Gコードで設定した速度で移動可能なモード。G0とは違って、その都度設定したフィードで動きます。主に加工用のモードです。モードがG0になっている場合は、G1を入力することで、このモードに切り替わります。
加工条件に合わせたフィード設定が必要となります。F値が設定してない場合(F=0になっている場合)は、移動コマンドを入力してもフィード未設定というエラーが出るので、F値も忘れずに入力。

G2、G3
円弧を描く移動モード。G2が時計回り、G3が反時計回り。
G0とG1が直線なのに対し、G2とG3が円弧で動くという程度で覚えておけばいいと思います。円を描く際には、このほかI、J、K、Rなどの値も設定しなければいけないのですが、わかりにくいのでCADなどで描いてGコード化した方が早いかもしれません。
G2 X0 Y0 I0 J-20 F300
これは以前実験のために使った円を描くGコード(現在地から時計回りに半径20mmの円を描く)ですが、直感的にわかりにくいです。
G2(円弧時計回り)、X0 Y0(終点座標/開始点でもあるけど)、I0 J-20(現在地からの中心座標の差分)、F300(300mm/minのfeed速度設定)。
IはXに、JはYに対応しており、J-20の部分は、現在地からY軸方向へ20mm下がったところに中心点があるという意味になります。
この程度の試運転用Gコードであるならば、覚えるというよりも、コードを記録しておいてコピペして使ったり、ソフトのボタンなどに割り当てておけばいいと思います。

G17
作業がXY平面という設定。これも変えたことがない。G18(XZ平面)、G19(YZ平面)らしい。おそらくXY平面が基本となることがほとんどなので、これもこのままでいいかと。

G21
作業の単位がmm。G20でインチへ変更可能。これも大抵はmmなので、このままでいいかと。動きが変だと思ったら一応チェックする程度。G20かG21で切り替え。

G28、G30
G28(あるいはG30)を入力することで、予め任意に設定しておいた位置(ツール交換位置、ホームポジションなど)へ移動。位置を記憶させるには、ジョグボダンなどで任意の位置まで移動し、その地点でG28.1を入力する。同様にG30.1でもうひとつの位置を登録できる。


G54
これは変えたことがない。G54〜G59までの6種類の異なる加工用の座標系を登録しておくことができるようです。その都度単体のものしか加工しないのであれば、おそらくずっとG54のままで大丈夫かと。大量生産や異なる部品を複数作業台に並べて加工するときは、それに合わせて複数の座標系があったほうが便利なので、そのうち使うかもしれないという程度。

G90
絶対座標系。これは位置調整するときに、よく使うかもしれません。G90X10Y20Z10などと入力。
絶対座標なので、X10という移動コマンドは座標上のX軸10mmの位置へ移動ということ。10mm右へ(X軸上に)動かすというのと混同するので要注意。
よく勘違いしていたのは、G90のままX10を入力して右へ10mm動いた後、再度X10を入力してさらに10mm右へ動かそうとしたのに動かないという現象。この場合は次の相対座標(インクリメンタル/増加分)の設定にしないといけない。
ちなみにG90のままX0Y0Z0と入力すれば、原点に移動ということになります。
G90を入力して、一旦絶対座標に切り替えると、変更しない限りこのモードは持続します。

G91
相対座標系(インクリメンタル/増加分)。G90と比べればわかると思いますが、G91を入力してX10を入力すれば、現在地から10mm右へ動きます。再度X10を入力すれば、さらに右へ10mm動きます。人によっても違うと思いますが、直感的に絶対座標の方がイメージしやすい場合と相対座標の方がイメージしやすい場合があると思います。10mm右へ移動した後、あと5mm右へ移動したいと思うか、それとも15mmの位置へ移動したいと思うかの違いです。
よくあるミスとしては、あと5mm右へ動かそうと思って(相対座標系でのイメージ)X5を入力したら、G91ではなくG90になっており、いきなり原点近く(座標上のX5mmの位置)まで戻ってしまったという現象。移動途中に障害物などなければいいのですが、材料固定用金具にぶつかってしまったり、場合によっては作業エリアをはみ出るまで動こうとしたりするのでかなり危険です。
なので、毎回G91X10と入力すれば、その勘違いも防げると思います。

G92
座標系の設定コマンド。現在地の座標を任意の座標値にセットするコマンド。
例えば現在地でG92X0Y0Z0を入力すると、そこがWPos(0,0,0)に変更されます。また、G92Z20と入力すれば、現在のZ軸の高さが20mmという設定になり、プローブなど使ってZ軸の位置を設定する際に使います。
大抵は、材料に対してのスピンドルの位置決め(加工原点出し)の時に使います。
ソフトによっては、「X=0」というような現在の位置を原点にしてくれるボタンもありますが、同じコマンドを使っているというわけです。

G94
毎分送りというフィードの単位設定。F800mm/minやF20inch/mmという〜/mm。これもこのまま。
このほかG95なら毎回転送り〜/revolutionらしい。G93だとInverse Timeモードと言ってF2.0なら1min/2.0つまりその工程を30秒で終わらせる速度となるみたいです。ここまでは覚えなくても良さそう。

M0
プログラム一時停止。起動させれば、残りの工程を再開。このほかM1も一時停止。

M3
スピンドル出力オン(時計回り)。Grblでスピンドルを制御している場合。ただしM3S1000などと、S値も入力しないといけない。M3S0ならスピンドルオンだけれど出力ゼロ。Grblの場合、S0で出力0%、S1000で100%。
ルーターやミリングでは、加工中にあまりオンオフはしないけれども(Z軸の昇降で切削するかしないかなので)、レーザーなら常に加工中はオンオフしたりS値で出力の強弱をつけたりします。ただし、Grbl1.1からはレーザモードが導入されたため、M3(従来の方法)ではなく、M4を使う方が便利かもしれません。

M4
スピンドル出力オン(反時計回り)。Grblでスピンドルを制御している場合。これもS値が必要。M4S1000などと入力。
Grbl1.1の場合、M4はレーザーモードとして機能が割り当てられています。M3でもレーザー可変出力加工は可能ですが(Grbl0.9の方法)、M4のレーザーモードにするとヘッドの移動速度に応じてレーザー出力を微調整してくれます。その結果、移動開始直後やパスの折り返し地点などの速度が変わる箇所の焦げムラが少なくなります(かなり効果あります)。ただし、M4を使うには事前に$32=1でレーザーモードをオンにしておく必要があります。

S
スピンドルの出力値。GrblならS0で0%、S500で50%、S1000で100%。Arduino Unoの11番ピン(PWM)を使っており8bitの設定になっているようでS0~1000とは言っても256段階しかないようです。cpu_map.h内でPWM周波数を変えることができます。デフォルトは0.98kHz。
ルーターやミリングならスピンドルモーターの可変制御を可能にしてくれるTTLモータードライバをCNCシールドのSpnEn(pwm)へ接続する必要があります。
レーザーならレーザー用TTLドライバを接続し、可変出力制御が可能になります。
オンオフしかできないリレーを使っている場合は、S0(オフ)かS1000(オン:Max値)に設定することになります。

M5
スピンドル停止。Grblでスピンドルを制御している場合。特にレーザーの場合はM5でオフにするかS0で出力ゼロにしないと危険。

M9
クーラント停止。冷却装置をつなげていなければ関係なし。

M30
プログラム終了。Gコードの最後につけることで、作業の終了ということを告げます。生成したGコードファイルをエディタなどで見てみると、たまにM30がない時もあるので、書き足しておくといいと思います。

T0, M6
ツールチェンジ。Tはツールの種類。M6で加工作業中で異なる刃に変えるときのコマンド。これも使わないかと。オートツールチェンジャがあって、自動で刃先を変えてくれるなら必要かもしれませんが、普通は加工中断して手で変えることになると思います。加工途中でのツール交換すらあまりしないし、したことはないです。

F
フィード。送り速度。G1(加工用の移動速度)で必要なフィードを設定します。単位は大抵はmm/minですが、たまにmm/secになっているソフトもあったりします。
個人的には、F600(10mm/sec)くらいがゆっくりめのちょうどいい速度という感じがします。
素材や加工方法に応じて、この速度を設定しなければいけません(詳しくはこちらなどで)。
X10Y20F600などと入力すれば、X軸10mm、Y軸20mmへ600mm/minで移動します。


このうち実際使うのは、$$、$X、M3、M4、S、G90、G91くらいでしょうか。あとはだいたいソフトのボタン操作になるので、それほど覚える必要はないと思います。ただ、ちょっとした動きを確認したり、トラブルがあった時に、コンソール画面のコマンドを多少読めた方がいいというくらいです。
当初はGコードも覚えないとダメなのかなと思っていましたが、ソフトでGコードを自動生成してくれるので、ほとんど覚えなくても作業上問題ないという感じです。
Gコードを入力するとエラーが出る場合は、このページにエラーコード表があるので見てみるといいと思います。設定や入力の仕方が間違っている場合があります。

実際の使用例(接続から加工までの流れ):
・CNCマシンと接続(ソフト上のOpenボタン押す)
・$Xで初期ロック状態解除(Unlockボタンでも可)
・$$で設定内容表示(一応確認)
・ジョグボタンで動作確認(少し動かしてみる)
・必要であれば、ここでホーミングサイクル($H)、機械原点MPos(0,0,0)のセット
・材料を作業エリアに固定する
・Gコードファイルの読み込み(ファイル読み込みボタンなど押す)
・ジョグボタンで材料左手前角に移動(XY軸のみ)
・ジョグボタンでZ軸(刃先)を材料上面ぴったりまで下げる(移動量0.01〜0.1mmボタン使用)
・この位置を加工原点WPos(0,0,0)にセットする(「X=0」ボタンなど押す、もしくはG92X0Y0Z0)
・Z軸を材料上面から少し上げておく(5mm程度の逃げ)
・加工スタート
・加工終了
という感じで、Gコードファイルを読み込ませて加工するときは、Gコード手入力はほとんど使いません。ボタンがソフト側にもついているので、それらのボタンで済んでしまいます。ホーミングサイクル($H)も普段はやりません。MPosではなくWPosで位置決めするという感じです。

このほかG41とG42のオフセット(工具径補正)機能もあるようなのですが、Grblには実装されていないようです。G41(左へオフセット)とG42(右へオフセット)のモードをキャンセルするG40は入っているみたいなので、将来的に実装されるのかもしれません。ただ、Arduino UNO(ATmega328)では、もうメモリに余裕がないので、Arduino MegaやArm CoreのArduino などになってしまうと思います。
ちなみにオフセット加工については、Jscutbcnc、あるいはIncscapeでも可能です。



さらに追記していく予定です。曖昧な部分もあるので、知っている方いらっしゃったらコメントお願いします。

2017年2月5日日曜日

Android GRBL Controller(スマホアプリ)

Android用スマホアプリのGRBL Controllerを見つけたので試してみました。
Instructablesに使い方が載っています(これを見るとこのアプリはGrbl0.9用?)。

まだBETA版のようです。スマホなので当然ワイヤレスですが、WifiではなくBluetooth通信のようです。以前CNCマシンにはBluetoothモジュールをつけておいたので、それを使って通信できそうです。
今はどちらかというとWifiモジュール(EPS8266など)が人気だと思います。数年前にワイヤレスUSBというのも一瞬でて、いつの間にか消えてしまいましたが、Bluetoothはまだいろんな機器に使われているので大丈夫そうです。
AliExpress.com Product - Free shipping! JY-MCU anti-reverse Bluetooth serial pass-through module, wireless serial, HC-05, master-slave 6pin for arduinoAliExpressだとBluetoothモジュールは341円(送料無料)で売ってますね。昔買った時の1/10以下の値段です。IoTによく使われているWifiのESP8266も300〜500円くらいです。いろんなテクノロジーがかなり安くなってきました。

接続開始:
まず、CNCマシンのBluetoothモジュールとスマホをペアリング。特にパスワードは設定してないのですが、パスワード(パスキー)要求画面が出てきて、設定していない場合は0000か1234を入れろと。0000はダメだったので1234を入れたらペアリング成功。

この画面をタップすると、スマホとペアリングしてあるBluetooth機器のリストが出てきて、その中から選択。この画面はもうすでに接続された状態です。

操作開始:

早速ジョグボタンを押してみると、UnlockもしくはMachine startを押せと出てきます。

Machine startを押すとロック解除、さらにこのように赤いEmergency Stopボタンになります。
そこでジョグボタンを押すと、あっさり動きました。おお、これはすごい。パソコンなしで、CNCマシンを動かしているということです。
下の方には、ホーミングなどのボタンもあります。
さらに上部にある他のタブを見ていくと、

ここは、Gコードファイルを読み込ませるところのようです。CloudにGコードファイルを上げて
おけば、すぐにここから作業ができそうです。ファイルの読み込ませ方はここに書いてありました。スマホのSD Cardにファイルを入れておかなければならないようです。しかもサブフォルダなどに入れず、ルートディレクトリ(トップの階層)に置かないといけないようです。
Single Blockボタンは、Gコードを1行ずつ実行するようです。Cycle Startは一気に最後までGコードを実行するようです。簡単なサンプルで試して見ると、Single Blockで1行ずつ実行させれば最後までいけましたが、Cycle Startだと途中で止まってしまいました。読み込みバッファあたりに問題があるのでしょうか?メモリー不足?

ここでは、Gコードを手入力できます。ためにし$$を入力するとGrblの設定が出てきました。しかし下の方にスクロールできない。

ここはGコードの中身を確認できるところのようですが、まだ使えないようです。

そして最後はマシン設定用画面です。先ほどのGコード入力画面でもできますが、ここで各項目に対応したパラメータを入力できるようになっています。

ということで、いまどきは何でもスマホという感じです。
bCNCのPendant機能やLaserweb3でもスマホから操作はできますが、パソコンがホストになる必要があるので、スマホはあくまでサブという位置付けです。しかし、このスマホアプリは、本当にスマホだけで操作できるというところがすごい。
画面が小さいので操作性は良くないかもしれないけれど、CNCも今やスマホゲームのような感覚で操作するということでしょうか。

6軸用アプリも:
さらには、6軸用のアプリもあります。新しいバージョンでしょうか?


しかしGRBLは3軸までしか対応していないけれど、本当に6軸も操作できるのでしょうか?

一応、操作画面には下の方にA Axis、B Axis、C Axisまであります。とりあえずソフト的には、6軸まで作っておいたということでしょうか。
まだこちらもBETA版なので、今後の進化に期待したいところです。

追記:
どうやらこの6軸アプリは、ArduinoMega2560用(6軸GRBLファームウェア搭載)に対応しているようです。
6軸ファームウェアをXloader(Win)、HexUploader(Mac)、Easy Flash Script(Linux)を使ってArduinoMega2560にアップロードすれば6軸CNCとして使えるようです(こちらに書いてあります)。
そもそもGrblControllerを開発していたZapmaker.orgがArduinoMega2560用に4軸用Grbl0.8〜も開発していたようです。Zapmakerの4軸用ファームウェア(Mega2560用)は、2014年を最後にGrbl-0.845までアップデートされています。おそらく、3軸では物足りない人たちのために、この6軸用ファームウェアが引き継いだ感じになったのかもしれません。

AliExpress.com Product - Free Shipping hc-06 HC 06 RF Wireless Bluetooth Transceiver Slave Module RS232 / TTL to UART converter and adapterもう少し安いBluetoothモジュールありました。327円(送料こみ)。
Bluetoothの親機と子機について:よくみるとこれはSlave(子機専用)かもしれません。多分、スマホが親機になればいいので大丈夫だとは思いますが、このページ上の方にあるBluetoothモジュール(341円)はMaster-Slaveと書いてあるので、親機・子機兼用なのかもしれません。調べて見ると、HC-05というのが親機にもなるタイプ、HC-06は子機専用らしいです。親子なら通信可能だけれども、おそらく子機同士は通信できないのかもしれません。スマホはBluetoothイヤホンなど接続できることから親機だと思うので、子機(HC-06)と通信はできるはずです。ただし、どちらも技適は通ってないので、原則的に国内での使用は認められていないということです(個人的に狭い範囲で使うなら大丈夫でしょう、まあよくある自己責任でということです)。 Amazonでも似たようなBluetoothモジュールが売ってます。これも中国からの配送だとは思いますが。
BluetoothモジュールとCNCシールドとの接続方法:
これは以前CNCシールドにBluetoothを接続実験した時の画像です。基本的に4本線で、CNCシールドTX端子---BluetoothRX端子(送信/受信)CNCシールドRX端子---BluetoothTX端子(受信/送信)CNCシールド5V端子---BluetoothVcc端子(電源:5V)CNCシールドGND端子---BluetoothGND端子(電源:GND)という感じでつなぎます。注意するところは、送信と受信という組み合わせになるようにTXとRXをクロス接続するところです。あとは、BluetoothモジュールがCNCシールドからの5V電源で大丈夫かどうか(3.3Vだったりしないか)。Grbl1.1のBaudrateが115200なので、それも合わせておいた方がいいのかもしれません。このアプリは実際のところGrbl0.9用で、InstructablesにはBaudrateを9600に変えろと書いてありますが、デフォルトのBluetoothモジュールを使う場合ということでした(BluetoothのBaudrateを115200に変えるにはATコマンドを使って設定し直します)。
接続するには、Gコード送信ソフトでBluetoothモジュールのシリアルポートを選ぶだけです。通信自体はUSBケーブル接続の時と同様にシリアル通信なので同じように通信するだけです。ただし、BluetoothのTXとRX端子は、Arduino UnoのD0とD1端子と接続することになるので、Arduino UnoとパソコンをUSB接続してシリアル通信するときに干渉してしまいます(同じピンを使っているため)。Arduino UnoとパソコンがUSBケーブルを通して通信しあうときは、BluetoothのTXとRX端子を抜くか電源を抜いた方がいいと思います。また、通常Arduino UnoはUSBケーブルでパソコンから電源供給されているので、パソコンと切り離すと別途外部電源(DC7〜12V/1A程度のACアダプターなど)が必要となります。

2017年1月26日木曜日

bCNCのインストールや使い方

普段は、G Code Sender(PC上のGコード送信ソフト)としてbCNCを使用しています。GrblのサイトUsing Grblに掲載されているGrbl1.1対応ソフトの一つでもあります。



bCNCの特長:
・Grbl1.1に対応(頻繁にアップデートされている)
・シンプルかつ機能も豊富
・Gコード以外にもdxfファイルも読み込み可
・Raspberry Piでも使用可能
・機能割当も含めボタンなどをカスタマイズできる
・リアルタイムでフィードやスピンドル出力調整可能
・Probe機能、オートレベリング機能(基板制作用)
・Gコードを視覚的に編集可能
・Pendant機能によりWifi環境下で他の端末(スマホなど)からも操作可能
・オフセットカット、穴あけ、タブ配置などの補助加工機能
・OpencvによるWebカメラを使った位置決め機能/映像モニタリング

まだ一部の機能しか使っていませんが、けっこう便利そうです。bCNCはPythonベースのソフトであるためPythonがPCにインストールされている必要があります。
bCNCのWikiページに一応OSごとのインストールの仕方がのっています(こちら)。


目次:
Pythonやモジュールのインストール方法:(事前準備)
Pythonのインストール方法
Pythonの有無/バージョンを確認するには
Pythonのディレクトリを調べるには
Pythonのバージョンを選んで起動する
pipやpyserialのモジュールの有無を調べる
pipをインストールする(Anacondaを使わない場合)
モジュールのインストールが上手くいかない場合
pyserialのインストール
pyserialがインストールされているか確認
bCNCのインストールや起動方法:
bCNCのインストール&起動
bCNCとArduino Unoとの通信開始
「Terminal」タブでGコード入力内容やエラーを確認
「Command:」欄にコマンドを手入力する
画面の調整
bCNCの利用方法:
bCNCの使い方(利用例)
bCNCの日本語化
ホーミング($H)について
リファレンス点復帰(G28、G30)
いつものやり方(ホーミングなし)
現在のGrbl設定
オーバーライド機能
.bCNC(不可視ファイル)で設定する場合
Pendant機能(スマホで遠隔操作)
Webカメラを使う場合
タブ自動配置機能
パスが選べないとき
オフセット(工具径補正)加工
アップデート確認
その他:
起動アイコン・ランチャー
PyenvとAnacondaを導入した場合
「conda activate py27」へ変更
アイコン画像のつくりかた(Mac)


Pythonのインストール方法:
Macの場合すでにApple-Python(root権限)がインストールされていますが、できればローカル環境に新たにインストールしたほうが無難です。
bCNCのインストールの仕方に書いてあるようにWindows/Macともにインストールできますが、まずはAnacondaというPythonパッケージ管理システムをインストールするのがおすすめです。Anacondaを使うとPythonやその他のモジュールなどを設定した環境内にインストール/アップグレードすることができます。AnacondaにはNavigatorというGUI操作でインストールやアップグレードができる機能もあるのでターミナルでコマンドを打ち込む必要もありません。またVSCODEやJupyter Notebookもボタンひとつでインストールできます。
AnacondaのGUI画面

Pythonには2.7系と3.X系がありますが互換性はないので、bCNCを使うならばPython2.7をインストールする必要があります。最近は3.X系が多くなってきたので面倒なのですが、これもAnacondaがあれば両方インストールしておいて必要に応じて簡単に切り替えることができます。
2020年4月以降、Python2がサポート切れとなったのでPython3を使う必要があります。
bCNCのwikiではpipを使用したインストール方法が紹介されていますが、以下はAnacondaをでインストールする場合についてです。個人的にはAnacondaを利用したほうが便利だと思うので。

インストールの流れとしては:
Anacondaのインストール(2021年現在Python3.8がインストールされる)。
・デフォルトだとbaseというAnaconda環境ができあがり、その中のPythonを使用することになる。
・Anacondaをインストールした場合は、pipを使ったインストールの代わりに必要なモジュールは「conda install 必要なモジュール」でインストールする。
・コマンドプロンプト、ターミナルを使って、pyserialをAnacondaでインストールする(conda install pyserial)

Macに入っているルート権限のPythonだとトラブルが起きた場合修復が面倒になるので、Anacondaなどの設定したローカル環境にPythonをインストールしたほうが何かと便利です。
Windowsの場合はいずれにせよ新たにPythonをインストールすることになるため、Anacondaをインストールしたほうがいいと思います。


Pythonの有無/バージョンを確認するには:
ターミナル(Mac)あるいはコマンドプロンプト(Win)を開き、
python -V
を入力。
Python 3.8.5
と表示されれば、Python3.8.5がインストールされていることになります。
*Anaconda利用の場合は、その環境内のPythonのバージョンが出てきます。


Pythonのディレクトリを調べるには:
which python(あるいはwhere python)
を入力。
C:\Users\username\anaconda3\python.exe(Windowsの場合)
/Users/username/opt/anaconda3/bin/python(Macの場合)
が表示されれば、このディレクトリのPythonが使われます。


Pythonから起動する:
Macの場合はダウンロードした「bCNC-master」フォルダ内にある「bCNC」ファイルをダブルクリックして起動することもできます。Windowsの場合は「bCNC.bat」をダブルクリックして起動。

bCNC-masterフォルダをDownloadフォルダ内へダウンロードした場合は以下のディレクトにあるはずです(Macの場合)。

/User/username/Downloads/bCNC-master

「bCNC-master」フォルダ内には「bCNC.py」ファイルがあるはずなので、それをターミナル(コマンドプロンプト)を使ってPythonで起動します。

python /User/username/Downloads/bCNC-master/bCNC.py


尚、起動アイコンのつくりかたは下のほうに書いてあります。


pipやpyserialのモジュールの有無を調べる:
python -c "help('modules')"
を入力。そうするとアルファベット順にたくさんのモジュールが出てきます。その中にpipとpyserialが入っていればインストールする必要はありませんが、初期状態では入っていません。
あるいは、
pip list
もしくは
pip freeze

Anacondaの場合は
conda list

pipをインストールする(Anacondaを使わない場合):
まずpyserialをインストールする前にpipをインストールします。
easy_install pip
を入力。もし管理者権限がないためにエラーがでるようなら、
sudo easy_install pip
と入力すると、
Password:
が表示され、管理者権限パスワード要求されるのでそのままパスワードを入力。パスワードを入力しても画面には表示されないので、そのまま入力。
問題なければpipがインストールされます。


モジュールのインストールが上手くいかない場合:詳細はこちら
python -m pip install -U pyserial --user
と入力すると、PC本体のシステム(ルート)ではなくユーザーごとのディレクトリにインストールされます。たまにシステムからインストール権限がないためエラーが出ることがあるので、この方法であれば大体大丈夫かと。
また、python2.7やpython3など、バージョンを使い分けてインストールするならば、
python2.7 -m pip install -U pyserial --user
python3 -m pip install -U pyserial --user
という感じになります。

インストールする場合に管理者権限パスワードが要求される場合は、ルートにインストールしているということなので、できればルートではなくユーザー以下のディレクトリかAnacondaなどで設定したローカル環境にインストールしたほうがトラブル回避につながります。

Anacondaであればこういったトラブルには遭遇しないかと思いますが、たまにバージョンの異なるモジュールをインストールしてコンフリクトを起こす場合もあります。Anacondaであれば、つくった環境ごと消去し再度環境をつくり直せばいいので簡単です。


pyserialのインストール:
pipを使ってpyserialをインストールする場合。
pip install pyserial
を入力。
管理者権限パスワードが必要なら、前回同様sudoを頭につけて入力(できれば管理者パスワードを使ってのルートへのインストールはしないほうがいいと思います)。
sudo pip install pyserial
もしアップグレードする必要があるならば、
pip install pyserial --upgrade
を入力。
上記の方法でインストールできない場合は、こちらの方法で。

Ancondaの場合は、
conda install pyserial


pyserialがインストールされているか確認:
python -c "import serial"
を入力してエラーがでなければ、pyserialがインストールされたことになります。
あるいは、先ほどの
python -c "help('modules')"
を入力し、モジュールリストの中から確認。
もしくは
pip list
あるいは、
pip freeze

Anacondaの場合は、
conda list


bCNCのインストール&起動:
bCNCのこのページの緑色のボタン「Clone or download」から、「Download ZIP」をクリック。

適当なところにダウンロードし、解凍すると「bCNC-master」フォルダが出来上がります。「bCNC-master」フォルダを開き、Macなら「bCNC」、Winなら「bCNC.bat」をダブルクリックで起動。

ダブルクリックしても起動しない場合は、ターミナル(コマンドプロンプト)を起動して、以下のようにPythonを使って直接プログラムを立ち上げることもできます。

python C:\Users\username\Downloads\bCNC-master\bCNC.py(Winの場合)
python /User/username/Downloads/bCNC-master/bCNC.py(Macの場合)
*上記usernameは各自のユーザー名。

毎回この方法で起動するのが面倒という場合は、下の方に書いてある「起動アイコン・ランチャー」の作り方を参考に独自の起動コマンドを作成するといいと思います。

Gitを使ってのインストール方法などについてはこちらへ(本家)


bCNCとArduino Unoとの通信開始:
Arduino UnoとUSB接続しbCNCを起動したら上部「File」タブを押す。
Serial内のPort:でArduinoのポート選択、Baud:115200、Controller:Grbl、「Open」ボタンで接続開始。
Status:Alarmになったら、上部「Control」タブに切り替えて(以下画面)、
「Unlock」で解除(あるいは$Xをコマンド入力)。そうすると、Status:Idleに変わります。「Unlock」しないと以後の操作ができないので要注意。
「Open」ボタンを押しても、Status:Not connectedのままなら「Reset」ボタンでやり直し。

Unlock後(Idle状態)、下のほうにあるジョグボタン(十字ボタン)の操作が可能となります。
ジョグボタン右側にある数値10.0は10.0mm、ボタン一回で進む量です。一度に進む量は数値の周りにあるボタンで調整できます。
ジョグボタン中央の○ボタンは、WPos加工原点(0,0,0)に戻るボタンです。
「Home」はホーミングサイクル($H)、まだ設定していない場合は使えません(ホーミングについてはこちらへ)。
エラーなど生じたら「Reset」でソフトをリセット。



「Terminal」タブでGコード入力内容やエラーを確認:
上部右端「Terminal」タブを選択すれば、ボタン操作した内容がGコードとしてコンソール画面上に確認できます。ボタン操作したのに反応がないときは、ここでエラーがでているか確認できます。
先ほどのジョグボタン中央の○ボタンは、
G90G0X0Y0Z0
というコマンドを送信したことになっています。ボタン送信によるコマンドの内容を変更したい場合は、そのボタンを右クリック(あるいは中クリック)で設定し直すことができます。


「Command:」欄にコマンドを手入力する:
ボタン操作以外に、画面左下の「Command:」欄に直接Gコードを手入力できます。
「Unlock」ボタンのかわりに、$Xなどと直接打ち込んだほうが早いかもしれません。


画面の調整:
ラズパイ用の小さな画面に表示している際は画面がはみ出てしまうことがありますが、以下のように画面内の表示エリアを調整すれば大丈夫な場合もあります。
「State:」はクリックすれば折りたたむことができ、下の「Control」や「Command:」の表示エリアが少し上にあがります。また、中央の画面境目を左右に動かすことで、左右画面幅を調整することができます。


bCNCの使い方(利用例):
以下は、これまでのbCNC使用例のリストです。
G Code Sender(bCNCなど)
bCNCでGrbl1.1レーザーモードの実験
Jscutでオフセットカット設定、bCNC上で加工原点を移動する
Gコード38.2のプローブ設定とbCNCプローブ機能
Raspberry Pi3にbCNCをインストール&Pendant機能で遠隔操作
bCNCのIPカメラ化(実験段階)

また、CNCマシン使用前の設定についてはこちらへ。リンク先では、bCNCではなくUniversal-G-Code Sender(UGS)を使用していますが、手入力設定なのでbCNCの画面左下のCommand:に同様のコマンドを入力することで設定可能です。


bCNCの日本語化:
最近(2017/01/22)、bCNCも日本語化されたようです。画面右上のほうに言語タブがあり、Japaneseが選べるようになっています。最新のbCNCをダウンロードしてみたら設定変更できました。
bCNCを他言語化するには、このページにやりかたが書いてあります。このあたりは、オープンソースなので利用者(参加者)によって徐々に改良されていくという感じですね。おかげで見やすくなりました。まだ部分的に日本語になっていないところもあるので、このページのやり方で追加更新していけそうです。


ホーミング($H)について:
bCNCの「Home」ボタンを押すと、Grblにおける$Hコマンドが送信され、ホーミングサイクルが開始します(詳しくはこちらへ)。ホーミングを可能にするためには、XYZ軸にリミットスイッチをつけ、Grblの設定$22=1にしておく必要があります。ホーミングサイクルが終了すれば、CNCマシンは自分の位置(MPos:マシン座標)を把握できるようになりますが、ホーミングサイクルをしなくてもWPosを基準にして加工作業はできます。


リファレンス点復帰(G28、G30):
ホーミング後、G28(リファレンス点復帰)やG30(第2リファレンス点復帰)を入力することで、作業エリア中央やツール交換場所などの任意の位置へ自動で移動することができます。その設定をするには、ジョグボタンなどで任意の位置まで行き、その位置でG28.1あるいはG30.1を入力します。そうすると、その場所の座標がG28やG30用に登録されるようです(個人的には使ったことありませんが)。


いつものやり方(ホーミングなし):
だいたいは作業エリア中央で加工しているので、個人的にはホーミングは普段使っていません。MPos(機械座標)は無視して、WPos(加工座標)だけで以下のような流れでやっています。
・CNCマシン電源投入、bCNCと接続
・bCNCの「Open」ボタン(接続開始)、「Unlock」ボタン(初期ロック解除)
・材料を任意の場所(作業エリア中央付近)に固定する
・材料の左手前角(加工原点)までジョグボタンでXY軸を移動
・エンドミル先端を材料上面と接するまで(紙1枚はさんで)ジョグボタンでZ軸を下げる
・bCNCで「X=0」、「Y=0」、「Z=0」を押す(加工原点設定)、G92 X0 Y0 Z0でも可
・エンドミル先端を10mmほど上に戻しておく(安全のため)
・Gコードファイルを読み込んで加工開始
*Gコードファイル内の加工パスも、材料左手前角を加工原点にしておき、加工開始点は材料左手前角、加工終了後も材料左手前角に戻ります。
*Grbl設定は、$20=0(ソフトリミット:OFF)、$21=1(ハードリミット:ON)、$22=1(ホーミング:ON)にしてあります。


現在のGrbl設定:各設定コマンドについてはこちらへ
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=2 (dir port invert mask:00000010)
$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.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=1 (hard limits, bool)
$22=1 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=30.000 (homing feed, mm/min)
$25=600.000 (homing seek, mm/min)
$26=25 (homing debounce, msec)
$27=5.000 (homing pull-off, mm)
$100=320.000 (x, step/mm)
$101=320.000 (y, step/mm)
$102=320.000 (z, step/mm)
$110=1000.000 (x max rate, mm/min)
$111=1000.000 (y max rate, mm/min)
$112=400.000 (z max rate, mm/min)
$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=740.000 (x max travel, mm)
$131=940.000 (y max travel, mm)
$132=190.000 (z max travel, mm)


オーバーライド機能:
Grbl1.1からはリアルタイムで加工中にもフィードやスピンドル出力数を可変制御できるようになりました。bCNCのControlタブを選択すれば以下のようなスライダーが表示されます。
この状態であれば、フィード100%(上段の100という数値)であり、スライダーを使って25%〜200%まで調節できます。Resetを押せば瞬時に100%の位置に戻ります。
その下のSpindleボタンでスピンドルON/OFF切り替え、スライダーで回転数(レーザーであれば出力数)を調整できます。ただし、スピンドルに関してはTTL端子付きの可変出力制御可能なスピンドル用ドライバを接続しておかないとこの機能は使えません。
スライダーにおける回転数や出力数は、Tools>Configで設定します。

スピンドルの回転数表示にしたい場合は、Spindle max(RPM)の欄へ使用しているスピンドルの最大回転数に合わせた数値を入力しておきます。こうすることで、回転数(RPM)から判断したいときは見やすくなると思います。
レーザーの場合は回転数ではないので、M3やM4で設定するS値(S0〜S1000)やワット数など入れておくといいと思います。
尚、設定したら一度bCNCを再起動する必要があります。


.bCNC(不可視ファイル)で設定する場合:
上記のTools>Configでマシンに合わせた設定がある程度できますが、ここで設定できないようなことは.bCNCファイル(不可視ファイル)に書き込むことで可能になるようです(本家説明はこちら)。
.bCNCファイル(不可視ファイル)の場所は、ダウンロードした「bCNC-master」フォルダ内ではなく、パソコンのユーザーディレクトリ内にあります(Macなら/User/username/.bCNC)。
不可視ファイルを見えるようにするには(Macの場合)、ターミナルから、
defaults write com.apple.finder AppleShowAllFiles -boolean true
そして、
killall Finder
を入力します。これで不可視ファイルが見えるようになります。
元に戻すなら、
defaults delete com.apple.finder AppleShowAllFiles
そして、
killall Finder
を入力し不可視ファイルを見えない設定にします。

Windowsにおける不可視ファイルの表示/非表示に関しては、こちらが参考になるかと

追記(Mac用):
もっと簡単なのは、ファインダーを開き、左側のリスト内にあるホームディレクトリを選択し、「command+shift+.(コマンド+シフト+ピリオド)」で可視/不可視に切り替わります。


Pendant機能(スマホで遠隔操作):
CNCマシンとUSB接続してあるパソコン上のbCNC画面から操作する以外に、Wifi環境があればPendant機能を使うことで、他の端末(スマホなど)からも遠隔操作可能となります。エンドミル先端と材料との距離を見ながら、手元のスマホで加工原点合わせすることも楽になります。
File画面↑で、Playボタン(Start pendant)を押せばすぐに使えます。他の端末のブラウザで「localhost:8080(あるいは192.168.X.X:8080などのローカルIPアドレス+ポート番号)」にアクセスすれば、以下のような操作画面が出てきます。
Androidタブレット上の画面です。
ここで、|Home|Unlock|Reset|の下に「Idle」が表示されていれば使うことができます。「Disconnected」と表示されている場合は、再接続した方がいいと思います。


Webカメラを使う場合:
パソコン(ホスト側)に接続したカメラ(Opencv、PIL:要インストール:pip install opencv pillow)をオンにすれば(以下の赤丸のボタン)、
http://localhost:8080/camera.html(あるいは192.168.x.x:8080/camera.htmlなど)にスマホなどからアクセスしてカメラ映像を見ることができます。例えば、スピンドル近くに設置したカメラで加工状況などをカメラを通して確認できます。

関連:bCNCのIPカメラ化(実験段階)


タブ自動配置機能:
ルーターやフライス加工の際に、加工後半で部品が材料から完全に切り離されて、部品そのものの固定が不安定になってしまう時があります。そうならないようにTool>Tabsボタンで部品の周囲にタブ(部分的に部品と材料とつなげておく処理)を配置することができます。bCNCのwikiに説明が載っています(こちら)。
Gコードの一番下のパスだけ選んだ後、Tabsボタンを押すと画面左に設定項目が出てきます。

ここで、タブの数、配置間隔、大きさ(Dx、Dy)、高さ(マイナスの値で入力)を設定。
この画面上部のTabsを押すと黄色いタブが生成されます。その後、Cutボタンを押し、厚みや深さなど設定し(場合によってはStockボタンの方でも材料の厚みなど設定し)、Cut設定項目上部のCutボタンを押すと、一番下のパスにタブ(一段上がったパス)が出来上がります。


パスが選べないとき:
もし、一番下のパスだけを選択できない場合は、すべてのパスが一つのHeaderやblockに入っているのかもしれません(Editorタブの画面に切り替える)。そのような時は、一番下のパスが含まれているパス用のフォルダを展開し、以下のように真横に視点を変えて、選択ツールで一番下のパスだけを囲んで選びます。
その際、左側に見える選択したパスの内容を確認して、抜けているような部分も含めてGコードをカットします。

左側のパス用フォルダのリスト上でペーストすると、先ほどカットした一番下のパスだけのデータがblockという名前で出てきます。ペーストされたフォルダの上下の順番を変えるにはUp/Downを押します。その後、一番下のパスを選ぶ時は、このパス用フォルダをクリックすることで選べるようになります。
不必要なフォルダはDeleteボタン、新たにフォルダを追加する時はAddなど、ここでGコードの編集が可能です。


オフセット(工具径補正)加工:
例えば、直径6mmのエンドミルを使用している場合、加工パス(加工する軌道)は、図面外形線に対して3mm分(エンドミル半径)外側や内側を通らなければいけません。bCNCではこの補正(オフセットしたパスを描く)も可能です(InkscapeやJscutでも可能)。
まず、Toolタブで画面を切り替えProfileボタンを押します。
そうすると画面左に設定画面がでてきます。
例えば、3mm外側をオフセット加工するなら、以下のように入力します。
Direction: outside(図形外側にオフセット)
Additional offset distance: 3.0(この場合3mm)

そして、オフセットしたい図形を画面内で選びます(青線になる)。
設定項目の上にある横長のProfileボタンを押せば、選択した図形の線(パス)が、3mm外側にずれてくれます。
この機能を使わずに、InkscapeやJscutなどであらかじめオフセット加工用のパスに変換しておくこともできます。もしオフセットされていないデータを使用するなら、このようにしてbCNC上でも可能となります。


アップデート確認:
Fileタブ画面内のUpdatesボタンで使っているbCNCが最新かどうか確認できます。


こんな感じで表示されますが、自動的にアップデートしてくれるというわけではないようです。Git pullでアップデートできるのかもしれませんが、そのままサイトからダウンロードした方が早いかもしれません。
常に開発中(改良中)のオープンソースなので、微妙にエラーなどでたりする時があります。調子が悪かったり、きちんと機能しない部分があるときは、アップデートした方がいいかもしれません。


起動アイコン・ランチャー:
テキストエディタで、「bCNC-launcher.sh」などと名前をつけたファイルをつくり(「.sh」の拡張子は省略可)、中にはシェルコマンドを書いておきます。

#!/bin/bash
cd `dirname $0`
python bCNC.py

シェルコマンドとしては、このコマンドファイルが置かれているディレクトリへ移動して、そこでPythonでbCNC.pyを起動という感じです。ちなみに、「`dirname $0`」に使われている「``」はバッククオート(Shift + @)で、「''」のシングルクオート(Shift + 7)とは違うので要注意。
記入したらファイルを閉じて、このファイルに実行権限を与えるため、

chmod +x bCNC-launcher.sh

と打ち込みます。
そして、このコマンドファイルを「bCNC-master」フォルダ内に入れておきます。あとはエイリアスをつくってデスクトップやDockに配置しクリックすれば起動するようになります(Macにおけるアイコンのつくりかたについては次の項目に書いてあります)。


PyenvとAnacondaを導入した場合:
PythonでプログラミングもするためAnacondaを導入したことから、

source activate py27
python bCNC.py

などとPython2.7の環境に切り替えてから起動するときもあります(「py27」はAnaconda内につくった任意の環境名)。しかしながら、pyenvとAnacondaの両方を導入すると「activate」が競合してしまうので以下のようなシェルスクリプトとなります。

#!/bin/bash
source ~/.pyenv/versions/anaconda3-5.1.0/bin/activate py27
cd `dirname $0`
python bCNC.py

Anacondaの仮想環境「py27」に入り、このスクリプトのあるディレクトリへ移動し、そこでpythonにてbCNC.pyを起動させるという感じです。pyenvのコマンドである「activate」と競合してしまうため、Anacondaの「activate」のフルパスを書き込んでいます。解決方法は以下。


「conda activate py27」へ変更:
このためなのか、conda4.4以上からは仕様が変わったようで、「source activate py27」と入力するよりも「conda activate py27」の使用が推奨されているようです。その場合は、「.bashrc」もしくは「.bash_profile」に書いてあるパスを書き換える必要があるようです(こちらに説明がかいてあります)。
試してみたところ、「.bash_profile」に(「.bashrc」には書かない)、

export PYENV_ROOT=$HOME/.pyenv
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
. $PYENV_ROOT/versions/anaconda3-5.1.0/etc/profile.d/conda.sh
conda activate base

を書き込んでみました。5行目の「conda activate base」を書き込むと、Anacondaの「base(ルート)」環境に入った状態でターミナルが起動するので、それが嫌ならなくてもいいかもしれません。
そして環境を変えるには「source activate py27」のかわりに、

conda activate py27

を入力します。
これでpyenvとの競合がなくなったと思います。
またアイコン用のシェルスクリプトなら、

#!/bin/bash
. ~/.pyenv/versions/anaconda3-5.1.0/etc/profile.d/conda.sh
conda activate py27
cd `dirname $0`
python bCNC.py

とすればいいと思います。


アイコン画像のつくりかた(Mac):
任意の画像をアイコンにするには、画像ファイルをPreviewなどで開き、画像をセレクトオールでコピーしておきます。
そして、先ほどつくったコマンドファイルを右クリック「情報を見る(command+I)」で表示させ、左上にあるアイコン画像をクリック選択してペーストすればアイコンとして表示されます。


この他の機能については今後追記していきます。

2016年12月14日水曜日

最新版Grbl1.1をインストール

早速grbl1.1をインストールしてみました(Macの場合)。基本的にはgrbl0.9のインストールと同じようです(grbl0.8と0.9のインストールについてはこちら)。
注意としては、もうすでにgrbl0.9や0.8などをArduino IDEに以前インストールしてある場合は、保存されるフォルダ名が同じなので、一旦古いのは捨てたほうがいいです(もしくは古い方をリネームしておくとか)。
Macの場合なら、
/Users/username/Documents/Arduino/libraries内のgrblフォルダ(旧バージョンのgrbl)を捨てる。

Arduino IDEによるインストール方法:(インストールの仕方はこちらを参照
このページの緑色のボタン(Clone or download)のDownload ZIPを選択。
「grbl-master.zip」ファイルがダウンロードされるので、それを解凍すると「grbl-master」フォルダが出来上がります。
次に、Arduino IDEを立ち上げて、メニューバー>スケッチ>ライブラリをインクルード>.ZIP形式のライブラリをインクルードを選択(以下)。
そうすると、ファイル選択の画面がでてきて、先ほど解凍した「grbl-master」内の「grbl」フォルダを選択(以下)。
そして、Arduino IDEのメニューバーでファイル>スケッチの例>grbl>grblUploadを選択(以下)。
そうすると、以下のようなgrblのプログラムが書かれた画面がでます。
注意書きとして、ここには何も書き込まないようにと。

あとは、ArduinoボードをUSB接続して、「検証」「マイコンボードに書き込む」を押してアップロードします。メモリめいっぱい使って書いてあるコードなので、書き込みが不安定になることがあるような注意がでますが、なんとか書き込めればOKです。

たまに、中国製Arduinoボードの場合、シリアル通信用のICが違うためか(CH340など使用している)、Arduino IDE上のシリアルポート選択でボードのポートが見当たらないときがあります。そのため専用ドライバが必要な場合もあります。「CH340 Arduino」などで検索すると、専用ドライバが見つかると思います。

Arduino IDEのシリアルモニタでgrbl設定内容確認:
Arduino IDE画面の右上にあるシリアルモニタ機能を使ってアップロードしたgrblの内容を確認してみます(アップロード後、一度Arduino IDEを再起動してみたほうがいいかもしれません)。
こんな感じ↑で、「Grbl 1.1e ['$' for help]」が先頭にでます(ボード再接続やIDEの再起動しないとでないかもしれません)。画面右下のbaudrateは115200bpsを選択。
$$
を入力してリターンを押せば、このような各設定がでてくるかと思います。
あるいは、$I(ドル大文字アイ)を入力すれば、
[VER:1.1e.20161208:]
というように、バージョンとビルドされた日付がでてきます。
あとは、CNCマシンに合わせて各項目を設定していけば、すぐに使えると思います。
ちなみに、grbl0.9までは$xの各項目のあとに()でそれぞれの説明/コメントがついていましたが、メモリ削減のためgrbl1.1ではカットしたようです。

Universal-G-Code-Senderの場合:
以下はUniversal-G-Code-Senderの画面。バージョンは1.0.9です。
使っているArduinoボードのPortを選び、Baud:は115200、Openボタンを押すと先ほどと同じように、「Grbl 1.1e ['$' for help]」がでて、$$入力で各種設定内容が出てきます。

古いG Code Senderだとダメっぽい:(理由不明/もしかしたら大丈夫かも)
ためしに、やや古いバージョンである1.0.7でやってみると(以下)、
冒頭に「Grbl 1.1e ['$' for help]」は出て来たのですが、$$を入力しても反応なし。
画面中ほどにある「Show verbose output」にチェックを入れてみると、このような↑反応がずらずらと止まることなくでてきました(追記:これは1.0.9でも同じでした)。まだ理由は分かりませんが、1.0.9では大丈夫だったので、この際grbl1.1にすると同時にUniversal-G-Code-Senderも1.0.9の最新版にアップデートしておいたほうがよさそうです。

同様にbCNCの場合もそうでした。ということから、grbl1.1にバージョンアップするなら、G Code Senderも最新のものにしたほうがよさそうです(理由不明)

追記:
上記画面でShow verbose outputにチェックを入れると、このように連続的に状況がアウトプットされるので、通常はチェックを入れないでおく方がいいです。

その他エラーなど:
Known Issuesに書いてありましたが、USBシリアル変換チップであるCH340Gが搭載されているArduinoボード(特に中国製クローンに多い)でシリアル通信のエラーが発生するらしいです(いまのところ対応策なし)。
同様にAtmel 16U2(ATmega328ではなく)を搭載してあるボードにも同様のエラーが生じるようです。解決方法などはKnown Issuesのリンク先にのっています。

ということから、grblを使うならATmega328搭載のArduinoボードのほうがよさそうです。

以下は個人的メモ:grbl0.9jの時の設定内容(grbl1.1へこの設定を引っ越し)
$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=2 (dir port invert mask:00000010)
$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.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=1 (hard limits, bool)
$22=1 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=30.000 (homing feed, mm/min)
$25=600.000 (homing seek, mm/min)
$26=25 (homing debounce, msec)
$27=5.000 (homing pull-off, mm)
$100=320.000 (x, step/mm)
$101=320.000 (y, step/mm)
$102=320.000 (z, step/mm)
$110=1000.000 (x max rate, mm/min)
$111=1000.000 (y max rate, mm/min)
$112=400.000 (z max rate, mm/min)
$120=10.000 (x accel, mm/sec^2)
$121=10.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=740.000 (x max travel, mm)
$131=940.000 (y max travel, mm)
$132=190.000 (z max travel, mm)

人気の投稿