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

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



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


2016年5月3日火曜日

CNCマシン:初カットにチャレンジ

昨日、カットの実験をやろうと思ってましたが、オフセット(刃の半径分ずらす)のパスのやり方がよくわからず、そのかわりProbeの実験をしていました。この際、Inkscapeのオフセット機能でもいいのですが。
せっかく材料を切るなら、以前つくりかけで中断していたシナ合板のパーツ(CNCマシンとは関係ないパーツ)をつくろうと思って、Inkscapeで図面を描こうとしていたところで時間切れ。以前のパーツはジグソーで切っていたのですが、だんだん面倒になり、そして今回CNCマシンをつくるにあたって、しばらく放置してあったものです。ようやくCNCマシンで切断できる準備が整ったので、以前のシナ合板パーツ制作の続きをしようということです。

Inkscapeでの作業:
・とりあえず、mm単位に設定したInkscapeでパーツの図面描画。大きさは210x100mmくらい。
・Inkscape内のオフセット機能でエンドミルの半径3mm分外側の線を描く(パス)。
・パーツの形と今回使う材料(端材)の形から、中央下を基準点に設定して製図した図形を配置。
・それをExtensionsのgcodetoolsでG-Codeに吐き出す。

CNCマシンの設定(bCNC使用):
・トリマに集塵機取り付け(以前つくった集塵用パーツ)。
・電源は、集塵機、トリマ、CNCマシンモーター用電源、それとパソコンとArduinoをUSB接続。
・材料:シナ合板12mm厚の配置(ビスで直に固定)。
・ホーミングでマシン原点の設定。
・作業エリア中央あたりに配置した材料へ移動しXY軸を微調整して材料に大体あわせる
・仮にWPos(0,0,0)に設定
・Probeを使ってZ軸ゼロ位置設定

準備OK(上画像)。以前つくった集塵パーツ、蛇腹ホースも黒いマジックテープで固定(使えるかどうか?ないよりはいいはず)。

bCNCの画面は以下のような感じ。

今回は12mm厚のシナ合板を3回パス(4mmずつ)で切る設定。材料として使っている端材がV字型しているので、原点を合わせやすいように中央下が図面上でも原点になってます。

カット開始:
準備は整ったので(ここまででもかなり時間かかる)、Startボタンをクリック(その前に集塵機とトリマのスイッチもON)。
思っていたより速く進むので、bCNC上のFeed Overrideを85%まで下げました(追記:この時点ではGrbl0.9、まだオーバーライド機能には未対応だったので意味なし)。それとトリマの回転数は50%くらいに下げていたのを80%くらいまであげました。トリマは下に排気するので、細いグレーの水道管では吸い取りきれません。しかも周囲についている透明塩ビのスカートと台との間にも隙間があります。ただ、空気中に細かい塵が舞うほどではありません。いちおうそれなりに機能はしてます。
3回目のパス。いちおう順調。Feedやトリマの回転速度もちょうどよさそう。焦げたりしていません。切りくずは周囲にたまっていますが、宙に舞うような細かい塵はあいかわらず吸い取ってくれてます。


カット終了:
カット直後の材料の状態(削りカスは集塵機で吸い取り済み)。バリや底面に薄皮が残っています。薄皮が少し残っているくらいがちょうどよさそうです。部品が動かないし、台を削らないので(今回、作業台は無傷でした)。
さて、台から材料を外して、どのくらいきれいか見てみます。
カッターで薄皮を切ってサンドペーパーでバリをとると、かなりきれい。寸法もあっています。
合格という感じです。

エッジもかなりシャープにでています(もっとひどいかと予想していました)。4枚刃のエンドミルですが、けっこう木材でも大丈夫なんですね。

上が今回CNCマシンで切った部品、下が数ヶ月前にジグソーで切った部品。見た目はあまりかわらないかも。CNCマシンだと凹みが丸くなってしまうのは仕方ないけど、あとからヤスリかノミなどで調整すればいい。

感想:
以前ジグソーで切ったほうも(上画像の下の部品)、丁寧に切ったのできれいなほうだと思うのですが(エッジにバリなどでないように一旦カッターで切り込みを入れている)、やはりそれだけ面倒。しかし時間的にはあまりかわらないかも。CNCマシンだと準備やら設定にもけっこう時間かかるので(慣れれば早いのかもしれないけれど)、ジグソーとクランプを駆使して切ったほうが圧倒的に早いはず。騒音や塵の量も少なくてすむし。
でも、何個も切るとなると体力が尽きたり飽きが来て、そういうときにはCNCマシンのほうがいい。使い分けかもしれないけれど、やはりCNCマシンだと疲れないというのが一番の利点かな。音がうるさいのが問題。そもそもトリマも集塵機もうるさい。

最後にCNCマシンで切ったパーツの凹み部分の丸みをヤスリで削ってはめ込むとこんな感じ。CNCマシンカットと手仕事との合体。やはりCNCマシンだとトラブルさえなければ、精確に形を切ってくれるからいいかもしれない。
ということで、今回のCNCマシン初カットは無事終了。使えるということが分かって一安心。
トリマのノイズもあるのかと思ってましたが、特に影響ありませんでした。
つぎはレーザーの実験をしなけれないけません。

CNCマシン:プローブ(Z軸のゼロ調整)

Probing
grbl0.9からは、ArduinoボードA5ピンにProbe端子(左下の端子)が割り当てられています。

Probe機能が使えるのですが、CNCシールドV3.5やV3.0にはProbe端子はついていなく、どうやらV3.5.1からのようです。しかし、V3.5やV3.0のA5端子を見ると、特に使っていないというか、シールド上のSCL端子(下画像の右上のほうのD1の下)とつながっています。
要は、A5もしくはシールド上の使っていないSCL端子とGNDにProbeをつなげれば、一応使えるということになります。以下の動画で説明してくれています。


これを見ると、どうやらGコードのG38.2がProbeのコマンドのようです。grbl0.9hからG38.2が使えるようになったみたいです。

AliExpressのProbe
動画ではProbingするための道具を自作していますが、以前AliExpressでZ軸用のProbeも衝動買いしてあったので使ってみようかと。

仕組みがよくわからないうちに安いので買ってしまったのですが、動画にあるように簡単に自作できるレベルのものでした。まあ、買ってしまったので使った方がいいということで試してみました。
こんな感じで材料の上に丸い方をのせてワニグチクリップでエンドミルをはさんでゆっくり下に下げていき、通電したら止まるというだけです。
ちなみに線は、先ほどのArduinoボードA5端子とGNDにつながるのですが、以下のように
白い線(左手前)がシールド上のSCL端子(A5端子とつながっている)、黒い線がシールド上のGND端子につないであります。
手順として、いちおうホーミングしてから(ホーミングなしでも構わない)、
適当な位置に移動して、そこを一旦G92X0Y0Z0で(0,0,0)にしておいて、先ほどのProbeの少し上までZ軸をさげます。
そして、動画にもあったように、
G38.2 Z-10 F20
という感じで、ZをF20mm/minの遅い速度で-10mmくらい下方に移動させます。値はこんな感じでいいと思います。
途中でワニグチクリップをはさんだエンドミルが丸いProbeと接するとそこで止まるという仕組みです。リミットスイッチと同じですが、リセットやロック解除する必要はありませんでした。
そのあと、Probeの厚み(高さ)分を以下のコマンドでずらして終了。
G92 Z19.4

AliExpressのProbeはそれ自体で19.4mm(ノギスで計測)ありました。20mmぴったりとか調整できるようになっているのかと思ったらそういうわけでもありませんでした。裏から止めてあるM6ボルトと表面の丸いアルミ部品の間にシムなどいれて調整すればいいのかもしれませんが、わざわざそこまでしようとは思いません。

bCNCのProbe機能
今回はGコードを直接入力でZ軸のゼロ調整をしましたが、いちおうbCNCにもProbe機能がついているようなので、少しいじってみました。
Control画面である程度近くまで寄って、とりあえずWPosを(0,0,0)にしておきました。
つぎにProbe画面に行き、Z軸の高さ移動が分かるように右画面もX-Z平面にしておきます。そして、Common欄にあるProbe Feed:に10〜20くらいの遅い速度を入れ、Probe欄のPos:でZ軸に-5とか充分下がるくらいの値(Probeツールの上面から5mm下という意味)をいれて、Probeボタンをクリック。そうするとゆっくりさがってきて刃がProbeにタッチすると止まります。
やってることはGコード38.2をただボタン操作しているだけで、わざわざこれでやらなくてもいいのかもしれません。Gコード入力だけでもすぐ終わってしまうので。
少し便利なのはCommon欄のTLO(ツール長さオフセット)に-19.4(Probeの厚み分)を入れたら、右の赤い▽も移動し、WPosのZの値もその分移動してくれました。
Probe欄のZ以外のPosは何なのかと思って適当な数値を入れてProbeボタンを押してみたら、XならX方向に同じように少しずつ動いて、もしProbeをX軸方向にもセットしてあれば、それにタッチしたときに止まるという仕組みになっていました。つまりZ軸だけでなくXY軸も同じことができるというわけです。

しかし、bCNCにはこれ以外にAutolevel機能もあって、基板なんかをつくるときに使うようですが、材料平面上の各地点の凹凸の誤差を設定した間隔で何カ所か計測して、その凹凸に応じて削る量も調整してくれるみたいです。まだ使い方は把握してませんが、確かにそれは便利な機能です。

関連:
エッジファインダーについて

2016年5月2日月曜日

CNCマシン:スピンドル(トリマ)ケーブル+オフセットカット

前回ホーミングも出来るようになったので、そろそろ試し切りをしてみたいと思ってます。レーザーはまだ後回しになっていますが、ルーター(トリマ)はすぐにでも使えそうです。マウントもつけてあるし、外付けスピードコントローラーもあります。ただそのままトリマを付けるとケーブルが垂れてしまうので少し工夫を加えてみました。

Φ1mmくらいのピアノ線が余っていたので、それをトリマ本体の電源コードの根元から50cmほど結束バンドで固定してみました。ある程度電源コードが自立するような感じで、引っ張られればしなやかに曲がる感じです。

ピアノ線の下端はC字型に折り曲げてケーブルにはめ込む感じです。あとは必要に応じて結束バンドで締めるだけ。トリマのノイズも拾うようなので、他のケーブルといっしょに沿わせないほうがいいらしく、CNCマシン本体とは別に(電源も別のところから)することにしました。どうせ取り外したりするし、GコードのほうではON/OFFや速度調節もしないので。

ケーブル先端のほうはダブルクリップでX軸に固定しているだけです。この先にスピードコントローラがついて、それから AC100Vにつながります。現在トリマには径6mmハイス4枚刃スクエアエンドのエンドミルがついています。このままアルミもいけるかもしれませんが、とりあえずこのエンドミルでどのくらいきれいに合板が切れるか試してみたいと思ってます。

オフセットカットのパスの作成方法がわからない
追記:結果的にオフセットパスを作成するには、Jscutというソフトで行うか、Inkscapeのオフカット(このページ下のほう)で新たにパスを作成するほうがよさそうです。

トリマのほうは準備できたのですが、同時に刃のオフセット(径6mmの刃なので半径3mm分外側を動くパス)を含んだ切断用パスをどうするのか?というのを調べていました。
以前InkscapeのExtensionであるgcodetoolsをちょっといじってみたのですが、オフセットの設定がよく分からない。すぐに出来るとのかと思っていたら、gcodetoolsのForumには以下の用に書いてありました(かなり古い投稿だけど)、

29/ноя(nov)/2011
Tool's diameter was used not for offseting, but for filling the area to make pocketing. Offset itself is a really hard procedure, and it does not work properly on every path. 

There are 3 options now how can you do the offset:
  1. Use inkspape's offsets:
    1. configure the steps in Properties dialog (Ctrl+Shift+P) and use Ctrl+( or Ctrl+), could be buggish, more or less depending on the Inkscape's version.
    2. use dynamic offset and set exact value in XML editor (select object, Ctrl+Shift+X, change offset diameter to needed value in px), could have buggs, not to handy.
    3. assign stroke width equal to 2 x needed offset radius, then Ctrl+Alt+C to Convert Stroke to path, Ctrl+Shift+K to break path appart, and finally delete inside path, not to handy again.
  2. Use one of G41 or G42 Gcodes to compensate tool's radius, it's a good solution, giving very clean path, but some times it can give an error if the tool can not reach every path piece. For smaller radiuses this error can appear rarely.
  3. Use Gcodetools offset function - it has more bugs that Inkscape's offset so not reccomended

PS in the dev version there's a function for plasma cutters that can add entering/exiting paths and special corner processing to make cut cleaner, but I do not know if it is actually needed in laser cutting. I'm only building my first laser cutting machine.

これによると、
・Inkscapeのオフセット描画を使う(バージョンによるけどバグがあるしやり方が不便)
・G-codeのG41かG42のツール半径補正機能を使う(かなりいいけど、小径の部分でエラーでる)
・gcodetoolsのオフセット機能を使う(Inkscapeのオフセットよりバグ多い)
とある。

というか、gcodetoolsの最新バージョンは1.7となっているけど(この英語フォーラムの一番上の投稿にある)、

これ↑は古いのかな?Shapeoko wikiのInkscapeチュートリアルもたぶんこれを使っているのだろうけど、このバージョンにはオフセット機能がついていないような?
調べてみると、devバージョン(開発中)もあるみたい。WindowsとLinux版しかないけど、MacはLinux版で大丈夫なはず。


gcodetool-dev版のインストール(dev版よりstable版のほうがいいかも)
まず「Download ZIP」から「gcodetools-master.zip」をダウンロード。
解凍すると、「gcodetools-master」フォルダが出来て、

中にはこんな感じ↑のたくさんのファイルが入ってる。
READMEを見ると、これ全部をInkscapeのextensionsに入れてInkscapeリスタート。
それと「python create_inx.py」を実行しろと。
Macなら、まずアプリケーション内の「Inkscape.app」を右クリックして「パッケージの内容を表示」で、
Incscape.app/Resources/share/inkscape/extensions内に、「gcodetools-master」フォルダの中身全部を入れる。
そのあとターミナルを開いて、
cd /Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions
をいれてリターン。
そして、
python create_inx.py
を入力してリターン。
そうすると、

こんな感じの「Done」がずらずらでてくればOKなはず。そうすると先ほどのApplications/Inkscape.app/Contents/Resources/share/inkscape/extensions内には、


こんな感じの「.inx」ファイルが出来ているはず。
あとはInkscapeを立ち上げると、


メニューバーのExtensionsには「Gcodetools-dev」というのが出来ているはず(なぜか2個あるけど下の方)。
Extensions>Gcodetools-dev>Path preparations-devを選択すると(確か最新stable版1.7にはこの項目はなかったはず)、

この画面が出て来て、「Prepare path for plasma or laser cutter」タブでオフセット設定できそうなんだけど、使い方がまだよくわからない。


Inkscapeのオフセット描画方法
仕方ないので、Inkscapeのオフセット描画を試してみることに。

まず、Edit>Preferences...>Behavior>Stepsを選ぶとこんな↑画面がでます。このなかのInset/Outset by:に3.0000mmを入力(径6mm、半径3mmの刃なので)。設定したら閉じる。
つぎに、


適当に描いた図形(パス)を選択して、Path>Outsetを選ぶと、

こんな↑感じで、一回り大きい(設定した3mm分)図形ができあがります(ちなみにわかりやすくするために、同じ図形を2個重ねて、Outsetした図形のほうは緑色の線にしてあります)。
角も丸くなっているし、これ(緑色の線のほうだけ)をgcodetoolでG Codeに変換すれば充分かも。

gcodetoolsでG Codeファイルの出力方法(stable版も同じ手順)

まず(上画像)、File>Document Propertyで単位がmmになっているかチェック。
そして、

Extensions>gcodetools-dev>Orientation points-dev(上画像)に行き、
・2-point modeを選択
・Z surface:0(材料表面の位置を0に)
・Z depth:-12mm(カットする材料の厚み、下へ行くのでマイナス)
そしてApply。


つぎに、Extensions>gcodetools-dev>Tools librariy-dev(上画像)で、
・cylinderを選ぶ(刃の形状)
そして、Applyを押す。すると、以下の緑の四角がキャンバス上にでてくる。

ここで↑、テキスト編集アイコンを使って、
・diameter 6(ツールの直径6mm)
・depth step 3(何mmずつ削るか:今回は12mm厚を3mmずつなので4回で切断)

つぎに、Extensions>gcodetools-dev>Path to Gcode-dev(以下)に行き、

・出力するファイル名と出力先ディレクトリを入れる。
・Unit:mm
・Post-processor:Round all values to 4 digits
そして、ここでApplyを押さずに、Path to Gcodeタブに移動してからApplyを押す。
これで、いちおうG-Code化されたファイルが出力されるはず。

bCNCで読み込んでカット作業
あとはbCNCなどのG-Code-Senderを起動して、出力された.ngcファイルを読み込む。

いちおう3mm分外側にオフセットしたパスがでてきて、Control画面でStartを押すと作業開始。
先ほどInkscape内のgcodetoolsで設定したDepth stepの3mmずつ計4周かけて切削するはずです。

切削中の画面。小さい赤丸がトリマ部分。よくみると線が少しガタガタしているようにも見えます。
今回は実際に合板を削っていないので、どんな仕上がりになるのかわかりません。明日にでも、実際に切ってみたいと思います。とりあえず今回はオフセットカットの手順確認ということで。

G CodeのG41とG42のCutter Compensationも気になる。grblでは、G40にCutter Radius Compensationがあります。この辺も調べてみます。
CNCマシンは大体出来たとはいえ、まだまだ実際に使えるようになるまではノウハウも含めまだまだ覚えることがありそう。

追記:
オフカットのパスを生成するならInkscapeでもいいのですが、JscutというブラウザベースのGコード生成ソフトがあるので、そのほうが楽かもしれません。Jscutについてはこちらへ。

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コードについて

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

人気の投稿