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 の投稿を表示しています。 すべての投稿を表示

2016年5月11日水曜日

CNCマシン:JscutでオフセットカットやポケットカットのG Code生成

grbl wikiのUsing GrblページにのっているGRBLwebというG Code Senderを見てみると、ブラウザ上で作業できるようなのですが、ネットワークに接続されたRaspberry PIをホストとしてCNCマシンの遠隔操作も可能なので便利そうです。CNCマシン用の小型コンピュータを設置するような感じでしょうか。そうすればわざわざMacBookをUSB接続せずに使えるので、5000円前後で可能ならいいかもしれません。でも、それならArduinoじゃなくてRaspberry PIで直接動かした方がよさそう。

Jscut:
同時にGRBLweb用に、JscutというsvgファイルをG Codeに変換してくれるweb上のソフトもあるようです。こちらは、http://jscut.org/jscut.htmlにアクセスすればすぐに使えるので試してみました。

こんな画面(ブラウザ上)です。真ん中上のほうにある「Open SVG」で以前合板でつくったパーツのデータ(Inkscapeで描画したsvgファイル)を開いてみました。右上の水色の部分に手順がでてくるので、図形を選択しながら左右のパラメータ(エンドミルの直径、フィード、材料の厚みなど)を設定します。
設定が終われば、左上の「Operations」内にどんな加工をしたいかを選ぶところがあります。Pocket、Inside、Outside、Engrave、VPocketの5種類あるので、大体の加工ができそうです。
今回の図形では、オフセットで3mm外側のラインで加工したいので、「Outside」を選択。最終的に合計深さ3mm削るなら「3 Deep」を入力。
その右となりにある「Generate」をクリックするとG Codeが生成されます。

図形画面上の「Simulate GCODE」を選択すれば、どんな感じに削るか見ることが出来ます。「Save GCODE」をクリックし、保存名や保存先を指定して.gcodeファイルとして保存できます。そしてbCNCなどで.gcodeファイルを読みこませて加工という手順。

追記:
尚、「Tabs」(タブ:部品が母材から完全に切り離れないようにつなぎ目をつける機能)に関しては、こちらの作業例にかいてあります。

今回生成されたG Codeだと問題なさそうです。これを使えば以前困っていたオフセットカットもすぐにできそうです。

Raspberry Piがあれば、GRBLwebとJscutの両方をブラウザ上でできるし、カメラも設置しておけば切削状況も確認しながら遠隔操作可能となるので、かなり便利そうです。
レーザーカットするときなどは、カメラ越しに見ればいいので安全対策にもいいかもしれません。

あと、WebベースのCNCソフトなら、cheton/cncも気になる。調べれば調べるほど、いろいろでてくる。開発が終わっていそうなものもあれば、いまでも頻繁に更新されているものとか。基本的な操作をするならどれでもよさそう。別に遠隔操作などしなくてもいいけど、オフセットカットパスを自動生成してくれたり、2.5Dだけでなく3D切削/Engravingにも対応しているようなG Code Generatorで便利そうなのが欲しい感じです。


bCNCにおける加工原点の移動方法:
Gコードは生成したけれども、切削作業前に、やっぱり加工原点を変更したいというときがあります(材料が思ったより小さかったり、微妙に形状に合ってなかったなど)。以下は、G Code SenderであるbCNCで加工原点を編集する方法です。

 bCNCのメニューバーのFileタブを選択し、フォルダアイコンをクリックすれば、ファイル選択画面が出て、PC内に保存されているJscutなどで生成したGコードのファイルを読み込むことができます。
今回の図面は部品の下中央を加工原点として、Inkscapeで描きました。左右対称ということもあったので。この原点をbCNC上でずらそうと思います。

 メニューバーのEditorタブに切り替えます。そうすると上の画面のようになります。ここで、Originボタンを押して、加工原点にしたい位置(今回の場合、部品の左上→右上の間違い)をクリックします。

そうすると瞬時に加工原点は部品の右上に移動します。以上です。

Moveボタンで図形移動:
また、他のやり方として、Originボタンの左にあるMoveボタンで部品の図形ごと移動してしまうという方法。
 まずMoveボタンを押します。移動したい図形全体をマウスで囲んで選びます(クリックなら部分的なパスを選ぶことも出来ます)。あとはドラッグして移動します(今回の場合、やや左下へドラッグ)。失敗したらUndo。

 先ほどは部品の右角に加工原点がありましたが、ドラッグしてここまでずれました。

あとは、視点を切り替えてみて(赤丸で囲んだタブで選択:ISO1など)、大丈夫か確認します。
真上や真横から見た視点にも変えられるので、X-Y平面上での移動ならX-Yタブ、上下方向で移動したいならX-Zなどを選んでパスを移動させます。この加工パスの場合、3回で切断するパスなのでそれぞれ同じパスが3層になっています。一つの層だけのパスを選びたい場合は、X-Y平面の視点だと選びにくいので、このようなISO1や横から見たX-Zなどの視点にするとやりやすくなります。
このほか、ある程度のパスの編集もこのEditorタブの画面内で可能です。すべては試してないので分かりませんが、いろいろいじってみるといいと思います。


2016年5月1日日曜日

CNCマシン:リミットスイッチ/ホーミングのトラブル(無事解決)

追記:
*リミットスイッチの配線については、GrblサイトのWiring Limit Switchesに追記されたので参考にするといいと思います。ノイズフィルターの有無、ノーマルオープン/ノーマルクローズドなど画像付きで詳しく書かれています(英語)。

G-Code-Senderは、以前書いたようにbCNCを使うことにしました。そこでCNCマシン本体にせっかくつけたリミットスイッチを確かめようと実験開始。bCNCで$$を入力し設定を確かめて、リミットスイッチを使う設定$21=0を$21=1にして動かしてみました。しかし、動かすとなぜかすぐにロックされてしまいました。
bCNC画面のTerminalボタンで、コンソール画面にすると、以下のようなメッセージ。

ALARM: Hard limit
[Reset to continue]

再度Control画面に戻り、画面左上にある以下の「Reset」と「Unlock」で解除。
何度やっても、動かした瞬間にリミットスイッチが反応しているようで、まったく先に進みません。CNCマシン本体をいろいろ調べてみました。Shapeoko wikiにもリミットスイッチはノイズを拾いやすいからシールド線を使うといいと書いてあったのを思い出し、たしかにモーターの近くを線が通っているし、シールドなしのケーブルを使っているのでそういうノイズの問題かな?と、またオヤイデ行かないといけないのかなと思いながらもケーブルをたどるように調べてみました。しかし、最終的にはCNCシールドのリミットスイッチをつなぐ端子でおかしなことが起こっているというのが分かりました。
使っているCNCシールドはV3.5なので、grbl0.9のピン配列に対応しています(V3.0の場合はZ limit端子がArduinoボードのD11からD12に入れ替わっているので注意、詳しくはこちらへ)。
上の写真のように、CNCマシン本体からのリミットスイッチ線を外し、かわりに緑色のジャンパワイヤをZ limitのZ+(5V)に接続しつつ、白いジャンパワイヤ(手でもっているだけで何にも接続されていない)をちょっとつけるだけで、そのノイズに反応してリミットスイッチが入ってしまうという現象。試しにテスターで計測しながらやってみると、たしかに5Vが外乱(白ジャンパワイヤ)によって1~3Vくらいまで下がってしまう。それで通常HIGH状態がLOWを瞬間的に検出して反応してしまうみたい。
なんでこんなに敏感すぎるんだ?じゃあ、コンデンサでもかましてみたほうがいいかな?と思って、ちょっと検索してみると、やっぱりこのようなリミットスイッチのノイズ問題はよくあるそうです。その対策としてシールド線を使うとか安物ではなくノイズに強い部品にするとかいろいろあるけど、手っ取り早いのがやはりコンデンサーをつけるというのが、instructablesにのってました
そこでは0.47uFのコンデンサーをArduinoボード上のリミットスイッチ用の端子(grbl0.9の場合、D9、D10、D12)につけるといいと書いてあります。ためしに手持ちのコンデンサーをつけてみることにしました。
こんな感じ↑で、CNCシールドV3.5に電解コンデンサー3個を直づけ(ちょうどArduinoボードD9、D10、D12の真上の端子とGND)。
これで動かしてみました。bCNCでGコードを入力。$21=1にしてHard limitをオンにしておきます。
Control画面の矢印で前後左右上下に動かしてみると、リミットがかからずちゃんと動きます(感動)。なるほど、やはり何らかのノイズがコンデンサーで解消されたというわけです。


ホーミングサイクルにチャレンジ
そのまま$21=1にしてHard limitをオンにして、今度はホーミングサイクルにチャレンジ。
しかし、、、動き始めましたが、途中で止まってしまいました。一歩進んだけど、また壁にぶちあたりました。
何が原因なんだろう?といろいろ調べてみたり、設定を変えてみたりしました。

grbl0.9にはホーミングの設定がいくつかあります(grblサイト参照)。
・$22:Homing cycle bool
  ホーミングサイクルするかどうかの設定(する場合$22=1)
  ホーミングサイクルによって、Z軸、X軸、Y軸、(A軸)という順番でゼロ地点設定
  そのためにはリミットスイッチを最低各軸の+側につける必要あり
  $23によってホーミングの方向を変更可能(通常各軸+側)
・$24:Homing feed mm/min
  ホーミングサイクルで最終的に座標ゼロポイントを決定するときの速度設定
  かなり遅めにして少しずつ進む感じ
  25mm/minくらい
・$25:Homing seek mm/min
  ホーミング開始後、各軸のリミットスイッチを探しだすときの速度設定
  慎重すぎて遅すぎると時間がかりすぎるので、スイッチをなぎたおさないくらいの速度
  600mm/minくらい(最終的には300に下げました)
・$26:Homing debounce ms
  ホーミングサイクルによってリミットスイッチを押す際のチャタリング/デバウンス防止のためのディレイ時間設定
  5〜25ms(最初250msになっていました)
・$27:Homing pull-off mm
  ホーミングサイクル後にリミットスイッチから事故防止のため少しだけ離れておく距離
  3〜5mm

と、こんな感じであります。

まずは、リミットスイッチのノイズがなくなったので、即停止はなくなったのですが、以下のような感じで止まってしまいます。

・Z軸+リミットスイッチを探しに上にあがる。
・Z軸+リミットスイッチを押す
・Z軸一旦少し下がる
・再度ゆっくり上昇(多分$24のHoming feedの速度で)
・また少し下がる(多分$27の5mm分)

ここまではいいのですが、次の行程でつまづきます。
・XとY軸が+方向に向かって同時に動き始める
・それぞれリミットスイッチを押す
・それぞれ少し戻る
そして、ここで止まる

おそらく次はZ軸の動きから察すると、ゆっくりHoming feedでゼロ地点を設定しに動くはずですが、なぜか止まります。またノイズなのかなとも思ったりして、いろいろ検索してみましたが、解決できるようなネタは見つかりません。
リミットスイッチにもコンデンサーつけてみたり、Y軸片側のモーターだけで駆動させてみたり。
なんとなくモーターに負荷がかかっているようにも見えるので(送りネジとガイドレールの平行がとれていなくて窮屈になっているとか)、ドライバが一時的にシャットダウンしているのかと思ってみたりして、それでマイクロステッピングを1/8から1/4に変えてみたりしてみました。


コンデンサー付け替え
いろいろやっているうちに分からなくなってきて、先ほどつけたノイズ対策のコンデンサーを見てみると、0.47uFなのに47uFをつけていることに気がつきました。容量がデカすぎるけど、つけたことによって一応ノイズは消えたわけだし大丈夫だろうと思いましたが、もうちょっと他のコンデンサーがないか探してみると、1uFのコンデンサー一袋が見つかったのでためしに付け替えてみました。
こんどはこんな感じ。コンデンサーも小さくなりました。同じようにArduinoボードD9、D10、D12、GNDの真上の部分です。0.47uFに対して1uFなのでまあまあ近い。
念のためと思ってつけたリミットスイッチのコンデンサーも外してしまいました。この3つで勝負。
それと、上記に書いたgrbl0.9ホーミングの設定値も少し変えてみました。

主には、$24=30、$25=300、$26=25、$27=5、そしてマイクロステッピングは1/4。
さて、ホーミングボタン(Home)を押すと、
まずは、Z軸が動き始めました。そしてX軸、Y軸です。速度をちょっと変えたので、なんとなくいい感じ。それで、問題のXとY軸のHoming feed速度で動く部分(最初600でしたが300に下げたことで負荷が下がったのかも)。おお、ゆっくり動き始めした。このままいけるかな?と息をのんで見守っていると、なんとか最後まで無事ホーミングサイクルが終了しました。エラーなしです。思わずコンソール画面を見てみました。
偶然なのかなんなのか分かりませんが、ようやくホーミング達成(感動)。

追記:

AliExpress.com Product - 3D Printer Parts Limit Switch End stop for CNC 3D Printer RepRap RAMPS 1.4 Board Mechanical Limit Switches Printing Accessories
リミットスイッチ6個セット、324円(送料込み)。
このようなノイズキラー付きのリミットスイッチを使えばトラブルが少なくなるかもしれません。


ホーミングサイクルの流れ
・XYZ軸の+側(右、奥、上)にリミットスイッチ(この場合ホームスイッチと呼ぶのかも)をつける。
 *grbl0.9ではZ+端子とSpinEn端子が入れ替わったので、CNCシールドV3.0を使う場合は、Z+リミットスイッチをSpinEnへつなぐ。Z+とZ-は内部でパラレルにつながっているので、Z-リミットスイッチもSpinEnにつなぐ(詳しくはこちらへ)。
・デフォルト$21=0(リミットスイッチ:オフ)のままでも構わない。
・$22=1にしてホーミングサイクル機能をオンにしておく。
・$24〜$27は上記のような数値にしておく。場合によっては少し遅めにする。
・あとは$Hをコマンド入力して(あるいはHomeボタン)ホーミングサイクルを開始する。
・最初にZ軸がリミットスイッチ方向に動き出しマシン原点を見つける。つぎにXY軸も同じように原点を探し出して終了。これでリミットスイッチがある箇所、右奥上がマシン原点(0,0,0)となる。最終停止位置は、$27で設定した値分だけ戻った位置になり、そこで終了(ホーミングサイクル中に各リミットスイッチを押すけれども、S21=1でHard limitがオンになっていても関係なく動き続ける)。

この画面↑でも分かるように、右側のX-Y平面上で、きちんと右上に矢印と現在位置が重なりました。原因はコンデンサーなのか、設定値なのか分かりませんが、なんとかここまで辿りつけました。
これでようやくゼロ地点設定可能となったので、思うように操作できそうです。
というのが、今日の収穫でした。ここまで来るのにかなり疲れました。
あとで設定値などを変えてみてどこが原因だったのか究明したいと思います。途中試行錯誤していた段階でも、速度を変えると動き始めたりしたので、適度な速度設定などがもしかしたら必要なのかもしれません。当然マシンによっても違うので、調べても最適な値は分からないのかもしれません。

ちなみにホーミングが成功するまでは、以下のように現在値と原点がずれた感じになっていました。
追記:
このずれは、現在地をWPosのリセットをすることで解消できます。G92X0Y0Z0のGコードを入力することで現在地を原点(加工原点)にセットすることができます。あるいは、bCNCならX=0、Y=0、Z=0ボタンで各軸ごとに、現在地を0に設定できます。

このままでも作業できないわけでもないのですが、やはりせっかくリミットスイッチもつけたことだし、ホーミングが機能しないと、なんとなく気持ちが悪い。

ということで、ホーミング直後の状態。右奥が原点です。見た目は前から特に変わっていません。
完成目標は4月中としていたので、ぎりぎり予定通りという感じです(まだ少し作業は残ってますが)。まあ、とりあえず一段落つきました。

作業エリア940x740mmの3軸CNCマシンとしてこの段階で、
Grbl0.9j+bCNC:Mac対応フリーウェア
ボールネジ+リニアレール一式:37000円
ステッピングモーターNEMA23(4個):9000円
アルミ構造フレーム材料+ネジ類:12000円
Arduino Uno:3000円
CNCシールドV3.5+モータドライバDRV8824(4個):3000円
配線材料+ケーブルドラッグチェーン:6000円
合計約70000円くらいかかりました。
予算の半分はボールネジ+リニアレールという感じ。MakerSlide、V-Wheel、タイミングベルトなどにしていれば、50000円くらいで済んだかもしれません。
その他:
レーザーモジュール5.5W(購入済み:17000円)、トリマ300W(手持ち:10000円くらい)、DC24V/7A電源(手持ち:5000円くらい)
という感じです。
使用工具など:
卓上マルノコ、小型ボール盤、ジグソー、ハンダゴテ、ホットボンド、各種タップ、各種ドリルビットくらいです。


追記:
その後、ドライバ(DRV8825)のマイクロステッピング設定を1/4から1/8に戻してホーミングしてみましたが問題ありませんでした。
ついでに、以前サンプルで拾った星形の.ngcファイルを読み込ませて実行してみました。
ホーミングでマシン原点を出してから、作業エリアの中央あたりに移動させて、そこをWPosの原点にしてから実行してみました。まだトリマはつけてないですが、MDFを3回パスで削るファイルのようで、きちんと3周して元の定位置に戻りました。もうそろそろCNCルーターとして使えそうという感じが見えてきましたが、まだレーザーについては後回しになっています。


続き:合板の初カット

2016年4月30日土曜日

CNCマシン:G-Code-Sender(bCNCなど)

前回、試運転をして一応動くことは確認できましたが、調整やコントロールボックスなどつくるところは残っているので、CNCマシンを使った本格的な作業はまだできないといったところです。
Universal-G-Code-Senderを使って簡単なG-Codeを直接入力することで直線運動や円運動をしてみました。Universal-G-Code-Senderは、GitHubのgrblサイトにあったので使ってみたという感じです。
比較的シンプルで分かりやすいのですが、Consoleの出てくる文字をコピペできないというのが少し不便。

そして次に、CNCシールドのProtoneer経由でGrblController3.4.1-T4(ダウンロードなどは以前の記事参照)を見つけて使ってみました。
こちら↑は、もう少しいろいろ機能があって良さそうですが、右上のスライダーで移動量を調節するとき、きりのいい値を入力できなくてちょっと使いにくい。座標値はRefresh Posを押さないと更新されないのも不便。G-Codeを入力するかわりとなるボタンがあってそれなりに便利ではあるのですが。

以前、Shapeoko wikiのG-Code-Senderリストにもいろいろあったのを見て(以前の記事)、Shapeoko3やX-CARVEの専用ソフトは初心者にとっても使いやすそうに思いましたが、自作用にはいろいろ設定できないところもあって結局使えない。

「bCNC」というソフト:
grblサイトのUsing Grblを見てみるとG-Code-Senderリストがあり、bCNCというのが一番上に出ていて(もしかしたら、これが人気なのかな?と思い)、見た目も便利そうなので試してみました。
Pythonベースで、使うにはtk-inter(Macなら既にインストール済み)とpyserial(PipかPypiを先にインストールしてから)が必要。
OSごとのインストール方法はこちらへ(本家Wiki)。
このブログ上でのインストール方法の説明はこちらへ

以下がbCNCの画面。かなりいろんなことができそう。
初心者にとっては、機能が多すぎてどれが何なのかわかりにくいですが、便利そうなことはたしか。
右側にXY平面がありますが、マシンのヘッド部分がリアルタイムで動くのがすごい。Move Gantryボタンを押して、マウスでXY平面上をクリックすると、そこにマシンが動いていく。画面もFile、Control、Probe、Tools、Editor、Terminalと切り替えができるし、G54〜G59に複数の設定を当て込むことができるらしい。

当然座標値もリアルタイムで動くし、Serial接続も自動で行えるように設定できる。
はじめはボタンとかありすぎて難しそうと思いましたが、いろいろいじっているうちに見慣れてきて、なんとなくどんなことができるのか見えてきました。ということで、しばらくはこれを使ってみようかなという感じです。最初の二つよりは使いやすいと思います。いちおうDXFも大丈夫らしい。ただ、検索しても日本の記事はあまりでてこない。日本ではあまり使われていないのでしょうか?

Pendant機能:
bCNCには、Wifi環境を利用しスマホなどをコントローラーとして遠隔操作出来るPendant機能があります。単純に以下の画面のスイッチ(以下画像の▶︎ボタン)をONにすれば自動的にブラウザが立ち上がってブラウザ上の画面からも操作可能となります。

CNCマシン本体(Arduinoボード)とUSB接続したパソコンがネットワークのホストになり、Wifiを使っていればその他のパソコン、スマホ、タブレットなどからもブラウザからホストのIPアドレスにアクセスすることで、CNCマシンを操作することができます。
タブレット上の画面はこんな↑感じ。いちおうファイルも送ることが可能。ちょっとしたリモコンとしてスマホやタブレットを使ってもいいし、ポートマッピングを使えばローカルネットワーク外から遠隔操作することも可能となるはずです。

関連:
bCNCのインストール&使い方
bCNC上で加工原点を移動編集する方法(リンク先ページ後半)

2016年4月29日金曜日

CNCマシン:試運転+Grblの設定

配線はレーザー以外はほぼ終わったので、試しに動かしてみようと思います。まだコントロールボックスも出来ていませんが、最低でもモーター用DC24V電源とCNCシールドがあるのでなんとか動くはずです。
現状はこんな感じ↑です。まだCNCシールドやDC24V(7A)電源はむき出しのまま。各種スイッチ類もまだ。右奥に少しだけレーザードライバーが見えますが、今回は未接続です。

今回、Arduinoボードにはgrbl v0.9jがアップロードされています(アップロード方法はこちらへ)。
念のため、配線が間違っていないか再確認し、DC24V電源を入れ、CNCシールド付きのArduinoボードをMacBookに接続。もし異音や異臭がしたら即CNCシールドのリセットボタンを押す準備を整えておく。

今回はUniversal-G-Code-Sender v1.0.7を使ってみます。Zipファイルをダウンロード+解凍すると以下のような感じ。
この中のUniversalGcodeSender.jarをダブルクリックするとソフトが開きますが、その前にREADMEに注意書きとして、Macの場合パソコン上に"/var/lock"ディレクトリをつくる必要があると。ターミナルを開いて、以下のコマンド入力(要:管理者権限パスワード)。
sudo mkdir /var/lock 
sudo chmod 777 /var/lock 
*UniversalGcodeSender1.0.8以下のバージョン(最新版は1.0.9)をMacで使う場合は、上のようにコマンド入力でディレクトリをつくる必要があるようです。1.0.9の場合は不必要(未確認ですが)。

これで、ようやくUniversalGcodeSender.jarを開くことができます。以下のような画面。
Port:をArduinoボードのポートに設定。Baud:は115200(grbl v0.8までは9600)。
そして「Open」ボタンをクリック。そうすると以下の画面。
ちょっとモーターがカクッと動いて、上の画像のようにすぐロック状態。これは?と思いましたが、そういう仕様のようです。ただ、ここで確認できるのは、一応つながったということと、Arduinoボード内のGrblが0.9jのバージョンであるということ。
['$H'|'$X' to unlock]とコンソールに出ているので、ロック解除するために$Hか$Xを入力しろと。$Hはホーミングらしいですが、まだよくわからないので、今回は$Xの方で。
$XをCommand:に入力しリターンを押すと、以下の画面。
ロック解除されてコンソールにはokと出ています。これで入力可能になります。
試しに、Command:に
X10
を入力すると、X軸が10mm右に動きます。
X-10
なら左へ10mm。
Y10
なら奥へ10mm。
Z10
なら
上に10mm。

いちおう動きましたが、Y軸だけ逆向きです。
どれかの向きが逆転している場合は、$3で以下のように変えられましたが、まず$3で設定する前に、$$で今の設定内容を確認します。
$$
を入力するとずらずらずらと出てきます。

$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=0 (hard limits, bool)
$22=1 (homing cycle, bool)
$23=4 (homing dir invert mask:00000100)
$24=25.000 (homing feed, mm/min)
$25=600.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=320.000 (x, step/mm)
$101=320.000 (y, step/mm)
$102=320.000 (z, step/mm)
$110=600.000 (x max rate, mm/min)
$111=600.000 (y max rate, mm/min)
$112=600.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)

すこしいじったのでちょっと違うかもしれませんが、こんな感じです。
上からそれぞれの項目の現在の設定内容が出ています。
$3
が、XYZ各軸の移動反転設定です。
最初は$3=0になっており、Y軸だけ逆だったので、以下の設定テーブルを参照して$3=2を入力(設定変更)しました。

  $3=0 X:反転、Y:反転、Z:反転
  $3=1 X:正転、Y:反転、Z:反転
  $3=2 X:反転、Y:正転、Z:反転
  $3=3 X:正転、Y:正転、Z:反転
  $3=4 X:反転、Y:反転、Z:正転
  $3=5 X:正転、Y:反転、Z:正転
  $3=6 X:反転、Y:正転、Z:正転
  $3=7 X:正転、Y:正転、Z:正転

このようなことは、grblのサイトにあるConfiguring Grbl v0.9に書いてあります。
このほか確認するところは、
$13
使う単位をインチにするなら$13=1にすればいいのですが、だいたいの人はmmだと思うので、$13=0で大丈夫かと。

$23
これはリミットスイッチの+方向とー方向の反転設定です。Z軸が逆になっていたので、$23=0だった設定を$23=4に変えました。これも$3の反転テーブルと同じように変えます。

$100、$101、$102
この三つは移動量のstep/mmなのでマシンに応じて変える必要があると思います。
今回のCNCマシンでは、
・各ステッピングモーターは1回転200ステップ
・DRV8825ドライバのマイクロステッピング設定が1/8
・ボールネジが1回転5mm
なので、各ステッピングモーターは1回転1600ステップで5mm進むことになり、320step/mmということになります。
ということから、
$100=320
$101=320
$102=320
を入力してあります。

$110、$111、$112
は、各軸の最高速度のようです。例えば、
G0 X50
と入力すると、最速で50mm右に動きますが、このG0(速度制限なし)のコマンドの速度の10〜20%少なめくらいがいいと書いてあります。現在は$110=600(たぶん遅め)という感じで適当に入れているだけです。

$130、$131、$132
は、各軸の移動可能距離です。$20のsoft limitsや$21のhard limitsをオンにしたときに有効になるようです($20=0、$21=0なのでオフ状態)。一応CNCマシンの移動可能距離は入力しておきました。

とりあえず、動作確認ではこんなものでしょうか。
まあ、とりあえず動いてよかったです。
DRV8825のヒートシンクもそれほど熱くなっていませんでした。Z軸は、けっこう平行を調整しましたが、まだX軸とY軸に関してはきちんと調整していないので(そのため、接合部のボルトは少し緩めで試運転してみました)、これから再調整必要です。

続き(試し描き):
X10やY10で、あるいはG1 X10 F300などのコマンドを使って、それぞれの軸を直線で動かすことはできましたが、円を描かせてどのくらいの精度があるか確かめてみました。円の描き方はShapeoko wikiのこのページを参考にしました。

ミニクランプで水性ボールペンをはさんでXY軸だけの移動で描いてみました。半径20mmです。
一応きれいに描けています。寸法も合っていました。
Gコードはまだぜんぜん覚えていませんが、G90(絶対座標)とG91(相対座標)の設定ができるようです。この実験のときは、紙の真ん中あたりを原点にしていたので、G90の絶対座標設定にして円を描かせました。
円弧はG2(時計回り)、G3(半時計回り)があり、XYのパラメータ以外にIとJ(Rもあるけどあまり使わないらしい)。
相対座標G91でも試してみました(現在地から半径20mmの円を描く/直径40mm円を12時の位置から時計回りに描く)。
G2 X0 Y0 I0 J-20 F300
G2(円弧時計回り)、X0 Y0(終点座標/開始点でもあるけど)、I0 J-20(現在地からの中心座標の差分)、F300(300mm/minのfeed速度設定)

そのうち、この辺の基本的なGコード入力方法をまとめたいと思います。
追記:
Grblの$コマンドやGコードについて

続き:ホーミングサイクル/リミットスイッチのトラブル

2016年4月2日土曜日

CNCマシン:分解能について

今回の部品を分解能的に見ると。

・ステッピングモーターNEMA23:1回転200ステップ、1ステップ1.8度
・モータードライバDRV8825:マイクロステップ駆動1、1/2、1/4、1/8、1/16、1/32選択可
・ボールネジ:1回転5mm

マックスの分解能は、DRV8825のマイクロステップ設定を1/32に設定した場合、
ステッピングモーター1回転:200×32=6400ステップ
つまり6400ステップでボールネジ上を5mm移動することになる。
そうすると1ステップで、5/6400=0.00078125mm進むことになり、これが一番細かい解像度となる。理論上1/1000ミリ以下。
1280step/mm

ただ、単純に分解能をマックスまであげればいいというわけでもないみたい。その分トルクが下がるらしい。Shapeokoではマイクロステップは1/8がいいと言っている。

仮に1/8なら、
ステッピングモーター1回転:200×8=1600ステップ
1600ステップで5mm進む
5/1600=0.003125mm
なので、これでも1/100ミリ以下の精度。
320step/mm。

これらの数値はパソコン上でつかうGcode Senderソフトに初期設定として入力する必要がある。
Gcode Sender自体が、1/16までしか対応してないものもあったはず。実際に1/16と1/8を比較して、1/8でも充分きれいに削れるなら1/8でいいと思う。1/8だとしても、解像度的には8128dpiもある計算になる。Shapeokoだと40step/mmくらいらしい。1016dpi。たしかにこのくらいでも大丈夫そう。そうすると、マイクロステップを1/2にしてもいいのかも。ただ、その分振動が大きくなるし、音もうるさくなるかも。ステッピングモーター独特のパルス音がどのくらいうるさいかも気になる。
いずれにしても、ステッピングモータードライバDRV8825上にジャンパーピンを差し込むことで、マイクロステップ数1〜1/32までを簡単に変えられる。あとはGcode Senderの初期設定値をそれに変えるだけ。
もうひとつパラメータがあるとすれば、5000〜6000円のスピードコントローラーを買い足して、それを介してトリマーのスピード調節するという感じ。切削する材料にちょうどいいスピードを試し切りしてみて、それから本格的な作業をすればいいと思う。

2016年3月26日土曜日

いろいろあるG-Code Senderについて

Grbl Controller:(使い方はこちらへ
Mac+Arduinoという環境で、Arduino用CNCシールドを探すところから始まったので、まずは:
Protoneer Arduino CNC Shield V3.10
この↑シールド(A4988付き)でステッピングモーターを動かすことができるけれども、それをPC(Mac)から操作するソフトも必要なので、
Zapmaker Grbl Controller 3.6.1(for Mac)
が見つかった。インストールが面倒そうなのですが、このページの以下の投稿から「3.6.1-T4」か「3.6.1」が簡単にインストール出来る。ちなみにWin/Linux版はこちらから
この人↑が「3.6.1-T4」と「3.6.1」のバイナリーをつくってくれたらしいので、青文字の「3.6.1-T4」か「3.6.1」をクリックすればソフトをダウンロードできる。

しかし、調べていくうちにこの手のソフトがたくさんあることが分かってきた。
基本的にはGRBL関係なら以下のサイトに行くといいみたい。
https://github.com/grbl
ここには、
・grbl:(Arduinoにアップロードするファームウェア)
・grbl-builds(コンパイルされていないファームウェア保管場所)
・grbl-sim:(Arduinoなしでシミュレーションできるらしい)
・Universal-G-Code-Sender(JavaベースのクロスプラットホームのGコード操作ソフト)
の4項目がある。

Universal-G-Code-Sender:
Zapmaker Grbl ControllerのかわりにUniversal-G-Code-Senderを使うこともできるようで、もしかしたら、こちらのほうがメジャーなのかもしれない。以下のようなインターフェース。
似たような感じではあるけれど、使ってみてどちらが自分に合うかで決めればいいと思う。

ShapeOko Wikiにあるリスト:
ほかにもこの手のソフトはいろいろな人によって開発されていて、以下の「Shapeoko」のwikiサイトに載っている。
http://www.shapeoko.com/wiki/index.php/Communication_/_Control
この中のリストにも「Zapmaker Grbl Controller」があるけど、「Shapeoko」でも使っていたようだ
現在の「Shapeoko3」では、「Carbide Motion Machine Control Software」を使っているみたい。こんな画面(以下↓)。
ちなみに「Shapeoko3」は、Arduinoシールドに「CNC Shield」ではなく「gShield」を使っている。

この手のソフトは、G-Code-Senderと呼ばれているようだ。そしてArduinoにアップロードされるファームウェアはG-Code-Interpriterと呼ばれているらしい。日本語ではGコード送信プログラムとかGコード解析プログラムとでもいうのでしょうか?

他には、Interactive G-Code-Generatorというのもあり、Javascriptでできる「Javascript G-Code Generator」というのもあるらしい、Webやブラウザ上でするにはいいかもしれない。
たしか、Smart Laser Miniがブラウザ上のインターフェースであるため、ネットを通して遠隔操作もできるようである。と、いまSmart Laser Miniのサイトを見に行ったら、来月(2016年4月)に新しいのでるみたいです(以下)。
レーザーモジュールが3Wにパワーアップしそうな感じです。価格は10万円くらいになってしまうのでしょうか。

ということで再びG-Code-Senderに戻りますが。
「X-CARVE」も「gShield」を使っている。インターフェースはブラウザ(今回はSafariで)で操作可能。以下のような感じ。これも右側に3Dシミュレーション画面のようなものがある。シンプルにまとまっていて素人でも使いやすい感じになっている。
いろんなG-Code-Senderが使えるということが分かったのですが、この際G-Code-Sender自体も自分の使い方に合わせてプログラムしようと思いましたが、今回はそこまではやらないで、既存の使いやすいものを試しながら選んで行こうと思います。

追記:
この記事を書いているときは、まだよく知らなかったので上記のようなソフトを試していました。現在はbCNC(以下のリンク)というG-Code-Senderを使っています。

関連:
CNC関連のソフト(まとめ)
G-Code-Sender(bCNCなど)

GRBLソフトウェアを試してみる

追記:
2017年現在では、このページの内容はやや古いものとなっています(Grbl0.9以前のもの)。
現行のGrbl1.1ならびにそれに対応したG Code Senderを使用する場合は、こちらのページを参考にして下さい。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ハードのほうは、ネットで調べながらなんとなく検討はついてきました。
ソフトのほうは思っていたより簡単でArduinoがあれば何とかなりそう。
とりあえず、目をつけておいた「CNCシールド」を使おうと思っているので秋葉原で売っていないかチェック。

aitendoで中国製CNCシールドが売っていることが分かった。ネットで買ってもよかったけれども、すぐに試してみたいので店頭で購入することに。aitendoと言えば、昔は自作液晶スクリーン屋だったと思うけど、いつのまにか店も引っ越して、Arduino関係をかなり増やしていた。新店舗もすごい量の商品。全部中国製ぽいけど。まあ、安いから実験するにはいいかも。
追記:
以下のCNCシールドはV3.0(grbl0.8対応)です。最新版はCNCシールドV3.51(grbl0.9)になります。V3.0とV3.51の違い、あるいはV3.0でgrbl0.9/1.1を使う場合についてはこちらへ

CNCシールド950円、安い。ついでにドライバも。

ドライバは、ネットでもっと安いのがあるけど、実験ということで3個購入。
ついでに、Arduino UNOも買っておこうと秋月へ。Arduinoも中国製のクローンでもいいかもしれないけれど、一応純正品を。ArduinoはDiemilanove以後買っていないし、そのDiemilanoveも壊れてしまったので、交換用ATMEGA328も1個購入。
AliExpress.com Product - Free shipping! New cnc shield v3 engraving machine / 3D Printer / + 4pcs A4988 driver expansion board これ↑なんかは(AliExpressで)、シールドとドライバ(4個)セットで456円しかしない。安い。

アマゾンでも売っていて、送料込みで670円(以下)。


これでコントローラーは一応揃ってしまったので、Arduino UnoにCNC libraryを入れてみることに。

手順(旧型Grbl v0.8):*v0.8は古いので、v0.9あるいはv1.1の場合はここをスキップ
https://github.com/Protoneer/GRBL-Arduino-Library
にアクセスし、画面下のほうにある「How to install it:」から、
https://github.com/Protoneer/GRBL-Arduino-Library/archive/master.zip
このzipファイルをダウンロード。おそらく自動解凍するので、
「GRBL-Arduino-Library-master」というフォルダが出来上がる。
フォルダ名を「GRBL」に改名し、Arduinoのlibrariesフォルダへ入れる。Macなら、
/Users/username/Documents/Arduino/libraries
の中へ入れるだけ。
あとはArduinoソフトを起動して、
「Arduinoメニューバー>ファイル>スケッチの例>カスタムライブラリのスケッチの例>GRBL>GRBLtoArduino」を読み込む。
以下の画面が出て来て、
あとはArduinoボードをUSB接続しアップロード(ツール>マイコンボードでArduinoボードの種類、ツール>シリアルポートも正しく選択しておくように)。
これでArduino側は終了。Arduinoボードは、ゆくゆくはCNCマシンのステッピングモーターを動かすために、マシン本体へ取り付けられることになる。


Grbl v0.9の場合:(追記:最新版grbl1.1についてはこちら
上記はGrbl v0.8だったけど、v0.9をインストールすることに。
*Grbl v0.8をインストール済みの場合は、Grbl v0.8を消去してからインストール
つまり、「/Users/username/Documents/Arduino/libraries」内の「GRBL」フォルダを捨てる
このページ(grbl本家wiki)を見ると、Arduino IDEを立ち上げてから、インポートする方法が載っている。
・まずこのサイトの画面右側の「Download ZIP」をクリック。
・そうすると「grbl-master.zip」がダウンロードされる。
・「grbl-master.zip」をダブルクリックして解凍する。
・解凍すると「grbl-master」フォルダができあがる。
・Arduino IDEを立ち上げる。
・「Arduinoメニューバー>スケッチ>ライブラリをインクルード>.ZIP形式のライブラリをインクルード...」を選択。
・そうするとファイル選択のウィンドウが出るので、先ほど解凍したフォルダのほう「grbl-master>grbl」を選択。
・インクルードされたら、「Arduinoメニューバー>ファイル>スケッチの例>カスタムライブラリのスケッチの例>grbl>grblUpload」を選択。

現れた画面↑上で、「検証」、「マイコンへ書き込む」でArduinoボードへアップロード。
以上。

Arduino IDEでArduinoボードにアップロードされたgrbl0.9jを確認する:
CNCシールドを装着したArduinoボードをパソコンとUSB接続し、Arduino IDEを立ち上げて、メニューバーの「ツール>マイコンボード」から使用しているArduinoボードのタイプ(Arduino UnoならArduino/Genuino Uno)を選択。続いて「ツール>シリアルポート」からArduinoボードのシリアルポートを選択。
Arduino IDEの画面右上にあるシリアルモニタボタンをクリックする(以下)。


そうすると、シリアル通信用の画面が出てきます(以下)。
この画面↑右下にあるbaudrateをgrbl0.9以上なら115200 bps(grbl0.8なら9600)にしておきます。

最初に接続すると、上画像にのように「Grbl 0.9j ['$' for help]」と出てきます。ここでArduinoにアップロードされたgrblのバージョンが0.9jであることが確認できます。
続いて、コマンド入力欄に$$(設定内容確認コマンド)を入力し(以下)、
そして、右上の「送信」ボタン↑を押すと、

このような↑、現在のArduinoボード内にアップロードされたgrblの各種設定がでてきます。
それぞれの設定内容(grbl0.9)については、grblのサイトに書いてあります。
例えば、ここで各種設定の下から3行目にある$130=500.000に対して、
$130=300
を入力するとX軸の移動範囲を300mmに設定し直すことができます。
再度、$$を入力し設定内容を確認すれば、
このように↑設定内容の下から3行目にある$130の項目は、
$130=300.000
に変更されたことが確認できます。
このような設定は後々使うG Code Sender(GRBL Controller、Universal G-Code Sender、bCNCなど)で行えばいいのですが、一応Arduino IDEのシリアルモニタ機能でも可能なので、動作確認のために試してみるといいでしょう。


GRBL Controller:
つぎに、CNCマシン(Arduinoボード)をMac上で操作する「GRBL Controller3.6.1」ソフトをダウンロード。「GRBL Controller3.6.1-T4」というのもあるみたい。Win用はこちらから
このソフトで何をするかというと、
・CNCマシンの各種パラメータ(移動距離、移動スピードなど)の設定
・左右前後上下ボタン(ジョグボタン)でヘッドを材料の位置へ移動したり(加工原点設定)
・このソフトとは別にあらかじめ用意しておいたGコードファイルを読み込んでCNCマシンへ送信し加工開始
という感じ。Gコードを送信するためのソフト(G Code Sender)であって、このソフトでGコードを生成するわけではない。Gコード生成(G Code Generator)などほかのソフトについてはこちらへ
追記:
その後、Gコードを送信するソフト(G Code Sender)をいくつか試してみましたが、個人的にはGRBL ControllerではなくbCNCというのが便利で使っています。

あとはステッピングモータードライバ(A4988)をのせたCNCシールドをArduinoボードに装着し、MacとUSB接続、GRBL Controller3.6.1を立ち上げる。
GRBL Controller3.6.1の画面はこんな感じ↑。Grbl v0.8ならBaudRateは9600。v0.9なら115200。
CNCシールド(Arduino)とUSB接続後、Port name、Baudrateを選び、Openボタンで開始。
画面右のほうに3つのタブがあり、Advancedタブを押すと、
こんな画面↑が現れて、GRBL Settingsボタンを押すと各種設定ができそう。

そうすると、こんな設定画面↑が現れて、下から3行目にあるX軸の最大移動範囲(x max travel, mm)に400.000を入力(設定)してみる。数値を入れたらリターンを押してから、下のApplyボタンを押す。しかし、、、
> $28=400.000
error: Invalid statement
というエラーが出てしまう。どうやら、他の項目も同じようにエラーがでるようで、このソフト自体にエラーがありそう。$130=400.000のはずなのに、なぜか$28=400.000と認識しているようで、そのためにエラーがでているみたい。対応する項目がずれているのかもしれません。
なので、画面左にあるCommand欄に手動で、以下のように$130=400を入力しリターン。
そうすると、コンソールには
> $130=400
と出て来て、設定されたはず。ちなみに、先ほどのAdvanced>GRBL Settingsを押してみると、
こんな感じで↑、下から3行目には400.000がきちんと設定されています。どうも、このGrbl Settings画面で入力するとエラーが出るようなので、Commandから手入力したほうがよさそうです。このような理由からも、このソフトは使わなくなりました。
以下は、GRBL Controller3.6.1-T4(こちらはエラーでなさそうです)
GRBL Controller3.6.1-T4の画面はこんな感じ↑。なんか3Dの画面がついてる。

まとめ:
・Arduinoボードへアップロードするプログラム/ライブラリ(Grbl v0.8またはv0.9)
・Mac上で操作するアプリのインストール(Grbl Controller 3.6.1-T4がおすすめ)
の二つが必要。
そして、
・Grbl v0.8の場合はGrbl Controller上のBaudRateを9600
・Grbl v0.9の場合はGrbl Controller上のBaudRateを115200
にする必要がある。
*Grbl Controller 3.6.1のほうは、なぜかエラーがでるので、使うならGrbl Controller 3.6.1-T4のほうがよさげ、機能も豊富だし改善されているようです。
おそらく、Arduino経由でCNCマシンを検索すると(特に日本語で)、CNCシールドやGrbl Controllerに行き着くと思うのですが、Grblで調べると(Grbl Wikiなどから)、Universal G-Code SenderやbCNCというソフトに辿り着くと思います。個人的には、どちらかというとUniversal G-Code SenderやbCNCのほうが使いやすいと思います。
追記:
2017年以降であれば、最新版Grbl1.1を使ったほうがいいと思います。おそらくGRBL Controller3.6.1は、数年前のGrbl0.8用という感じなので(使えないというわけでもないのですが)、Grbl1.1に対応した新しいソフトのほうがいいかもしれません。Grbl1.1についてはこちらへ

「Grbl v0.9 + GrblController3.6.1-T4」 の場合
上記のようにGrbl v0.9をアップロードしたArduino UNOをMacにUSB接続し、GrblController3.6.1-T4をMac上で立ち上げてみました。まだステッピングモーターは未接続。
GrblController3.6.1-T4の画面左上の
・「Port name」でArduinoのポートを選択
・「Baud Rate」で115200を選択
・画面左上「Open」ボタンをクリック
そうすると以下のような画面。
Openボタンで開始したら、Grbl Settingsボタンで各種設定ができます(こちらはエラーでません)。なので、こっちのほうがいいかもしれません。

よくみると「Spindle On」だけでなく「Speed spindle」もついています。TTLドライバ付きのレーザーモジュールならレーザー出力調整できそうです。この機能を生かすには「CNC Shield V3.10」にしたほうがよさそう。先日aitendoで買った中国製の「CNC Shield V3.0」だとgrbl0.8対応なので端子がON/OFF制御になっている(追記:grbl0.9ではピン配列が少し変わったので、それにあわせて接続を入れ替えればV3.0でも使えるようです)。まあ、そのへんは後々バージョンアップしようと思います。
とりあえず、ソフトのほうはなんとかなりそうです。ということで、またハードの検討に戻ります。

関連:
CNC関連のソフト(まとめ):GrblController以外にも使いやすいソフトはあります。
CNCシールドV3.0とV3.1以上の違いについて:(最新版はV3.51)

人気の投稿