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

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



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


2016年5月4日水曜日

CNCマシン:レーザーカッターの準備/Inkscape Laser Tool Plug-in

前回、シナ合板をトリマで切断できたので、次はいよいよレーザーです。
レーザーの配線はZ軸裏までは届いているので、あとはドライバをつなげれば使えないこともないのですが、まだレーザーモジュール本体をZ軸に固定するブラケットをつくっていません。適当に現在取り付けてあるルーターマウントに挟み込んでしまえばいいのかもしれませんが、焦点を合わせる実験もしたいのである程度きちんと固定しようかと思っています。

焦点を探すためのGコードも用意しなければいけません。いまのところ50mmの線を20本くらい並べて、一本ごとにZ軸を2mm上げながらレーザーを照射して、どの距離がベストなのか調べるGコードをつくろうとしています。


Inkscape Laser Tool Plug-in
調べているあいだに、InkscapeのLaser用のExtension(Laser Tool Plug-in)があることが分かったので、早速ダウンロードしました。

使い方はシンプル。
Inkscapeで図形を描き(パス化しておく:Path>Object to Path)、そしてExtensions>Generate Laser Gcode>J Tech Photonics Laser Tool...を選ぶと、上画像の設定画面がでる。
GコードのM3でON、M5でOFF、あとはスピードや出力値、何回パスで切断するなど設定し、DirectoryとFilenameを入力して(入力しないとエラーになる)Applyを押せば、Gコードファイルが生成されます。あとはこのGコードファイルをG Code Senderで読み込んで実行するだけ。
レーザーの出力設定は、Laser PowerS#の欄に、grbl0.9なら1000で出力100%、500で50%、0で0%。生成されたGコードでは、M3 S1000などとなっています。

たぶん個人的にはEngravingは使わないと思います。なので簡単な設定で使えそうです。


レーザー防護アクリル
このサイトでは、レーザー防護用のアクリル板(24x12インチ:$24.99)も売っているようで、他のところと比べると結構安い。しかし送料が高い($67.61)。送料込みで1万円くらいになってしまうけど、それでも他より安いかも。もう少し探してみます。
レーザーは怖いので、いずれレーザーモジュールの真下あたりにつけたいと思ってます。

レーザーはレーザーでルーターやトリマとも違うし、もう少し調べたりしないといけません。


レーザーモジュールの取り付け
どのようにレーザーモジュールをZ軸に固定しようか悩みましたが、以下のようなブラケットをLアングルでつくってみました。

Lアングルは25x25x148mmです。レーザーモジュール(5.5W 450nm)はM3スクリュー2個でとめてあります。


このLアングルをルーターマウントの隙間にはさんで固定することにしました。ルーターマウントを外してから取り付けるのは面倒なので、そのままどこかに固定できないかと思ってこうしました。レーザーの場合は力が加わらないので、動かないように固定できれば充分なはずです。
まだ、焦点距離の実験をしていないので、一応レーザー先端と台座表面までの距離が0mmまで下げられるようにしてあります。焦点距離が分かれば、多少上のほうにずらすかもしれません。


まだ配線少し残っています。上画像のものは付属のレーザー用ドライバです。左側にLD+-端子、FAN(DC12V)+-端子、右側にTTL+-端子、電源(DC12V)+-端子の合計8端子あります。このドライバをレーザーモジュールの近く(Z軸上)に持って行くか、それともCNCシールドなどがあるコントロールボックスに持ってくるかも悩みましたが、とりあえずコントロールボックスに置いて、左側のLD+-、FAN+-端子をZ軸までつなげる感じです。Z軸までは配線済みなので、あとはコネクター端子をつくるだけです。
CNCシールドV3.5のSpnEn(pwm)端子とレーザードライバのTTLをつないで、Gコードで
M03 S10000
を入力すればレーザー最大出力となるはずです。grbl0.9ではS0〜S10000まで出力を可変できるようですリンク先ページ真ん中あたりにレーザーのPWMのことが書いてあります)。
追記:
bCNCで試してみましたが(grbl0.9j)、
M03 S500
を入力するとCNCシールド上のSpnEn(pwm)端子から2.5Vが出ているということは、
S1000で出力100%、
S500で50%、
S100で10%、
S0(もしくはM5)で出力ゼロ
ということです。S1000以上いれると5Vのまま、つまり100%。


焦点距離計測方法
それからレーザーの焦点距離計測実験のGコードも書かないといけません。Inkscape Laser Plug-inで50mmの線を5mm間隔で10本引くというのをGコード出力してみましたが、以下のような感じになっていました。単純なGコードなので見ると分かります。

M05 S0
G90
G21

G1 F600
G1  X56.8936 Y61.0874
G4 P0 
M03 S10000
G4 P0
G1 F400.000000
G1  X56.8936 Y11.0874
G4 P0 
M05 S0
 ・
 ・(繰り返し)
 ・
G1 F600
G1  X51.8936 Y61.0874
G4 P0 
M03 S10000
G4 P0
G1 F400.000000
G1  X51.8936 Y11.0874
G4 P0 
M05 S0

G1 F600
G1 X0 Y0
M30 (この部分、オリジナルのコードはM18ですが、grblだとエラーになるのでM30に変更)

基本的には、最初と最後の部分を除くと、一本線を引くごとにX座標が5mmずつ減っているだけです。それを10回繰り返しているだけ。ここにはZ軸のコマンドが入っていないので(Z軸は固定という設定だったので)、一本引くごとに5mmずつ上げていくとかすればいいと思います。

なんとなく焦点距離は50mm前後だと思うのですが、材料表面から10mmずつ100mmまであげていき、その結果から焦点に近い距離を1mm単位で動くGコードに書き直して、2段階くらいでやってみようと思ってます。
ただ、問題はレーザーモジュール先端についているレンズも調整可能なので、中のレーザーダイオードからレンズまでの距離も合わせる必要があるのだとすれば、少し面倒です。

実験の結果は次の投稿へ

追記:
その後、配線が終わりレーザーがつくかどうか試してみました。
ひとつ問題は、bCNCでシリアル通信でつなぐときにレーザーが一瞬光ってしまうということ。すぐに出力がゼロになるのですが、しかし出力ゼロにしても、よく見るとわずかながらレーザーが出ています。ちなみにレーザーの元電源を切ってしまうと、Hard limitが働いてエラーがでます。なので、元電源というよりレーザーだけの配線の途中にスイッチをいれたほうがよさそう。

それと焦点調整については、レーザーの出力をかなり弱くして(1/100くらい)、とりあえず手でレーザーモジュールの調整可能なレンズを動かしてみました。
どうやら、レンズをきつくしめた位置だと、ピントがぼけてしまうようです。けっこう緩めて、2mmくらい飛びでるくらいがちょうどよさそうです。ただ、ネジ山があまりタイトではないので、ゆるめると少しぐらつきます。薄いナットで動かないように固定できるといいのですが、おそらくレンズチューブのネジ山はM9/ピッチ0.5mmらしく、なかなかないタイプ。

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ルーターとして使えそうという感じが見えてきましたが、まだレーザーについては後回しになっています。


続き:合板の初カット

人気の投稿