これまでのあらすじ:
2016年3月、フェルト生地を手で裁断している際にレーザーカッターがあれば複雑なカットが容易にできるなあと思って、安価になってきたレーザーカッターを購入しようと思ったのがきっかけ。調べていくうちに、合板も切れたほうがいいと思うようになって、CNCルーター(CNCミリング)についても考えるようになった。
Arduinoは以前から使っており、CNCシールドがあると気付いて自作も可能と思うようになった。当初はShapeOkoやX-CARVEを参考にMakerSlide、OpenRail、V-Wheel、2GTタイミングベルトなどで5万円くらいで自作しようと思っていた。AliExpressでも部品が安く買えることが分かって、しばらくは部品探し。探せば探すほど安くて本格的な部品も見つかってくるので、そんなにケチらなくてもいいのではないかと徐々にスペックアップ。最終的には剛性や精度のことも考えてボールスクリューやリニアスライドを使うことになり、予想以上に重厚な3軸CNCマシンをつくることに(約7万円)。
構想から約5週間(制作約3週間)でルーターとレーザーともに使えるようになり、現在はgrbl1.1+Arduino CNCシールドV3.5+bCNCを使用中(Macで)。余っていたBluetoothモジュールをつけてワイヤレス化。bCNCのPendant機能でスマホやタブレット上のブラウザからもワイヤレス操作可能。


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

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

2017年2月2日木曜日

Xbox360ワイヤレスコントローラーでジョグ操作(Mac版)

ゲーム用ジョイスティックで、CNCマシンのジョグ操作をするというのをネットでたまに見かけます。確かにパソコン以外にもジョグ操作できる装置があると便利です。
現状ではbCNCのPendant機能でWifiを介してスマホから遠隔操作可能ですが、たまたま昔購入したXbox360ワイヤレスコントローラー(Xbox本体は持っていない)があるのを思い出して、試しにできるかどうかやってみました。
ワイヤレスなのでCNCマシンのペンダントとしては便利そう。右側のドングルをMacBookにUSB接続して使います。MacだとMicroSoftのXboxとは相性悪そうですが、ネットで調べるとMac用のドライバもいくつかありました。Windowsならかなりあるはず。


いまだにAmazonでも売っているんですね。XboxOneというのは新しいタイプでしょうか。意外に高い。

ちなみにAliExpressでCNC用リモートペンダントを探すと以下のような感じ。
AliExpress.com Product - Free shipping Hot sell cnc part Manual Pulse Generator Ncstudio CNC Wireless Handwheel CNC RF Electronic Remote Pendant8226円(送料込み)、これは比較的安い方。大体は1万円以上。Macで使えるかは不明(たぶん無理)。Mach3用が多い。

Mac版ジョイスティック用ドライバ+キーマッピングソフト:
Xbox360コントローラーを認識させるドライバはあるのですが、キーマッピングでXbox360コントローラーをマウスやキーボードとして使ったり、さらには複合的なキー入力の使い方ができるものとなると少ない。それと、結構古いコントローラーでもあるので、ドライバも古かったりして現在のOSバージョンに対応していないなど。

360Controller
ここは現在でも更新してありGitにソースが置いてあることからも良さそう。

しかし、目的としていた複雑なキーマッピングまではできないみたい。オープンソースなので、ファイルを開いてコードを改造すればいいのかもしれないけど、もう少し探してみることに。
普通にゲームするには問題ないと思う。

Joystick Mapper
これは有料(600円)、説明など見る限りいろいろできそう。
プレステのコントローラでもいいかもしれないけど持っていない。

bCNCのPendant機能でスマホから遠隔操作できるので、必ずしも今回Xbox360コントローラで操作する必要もないということで、有料ソフトは保留。
しかし、無料ソフトだとやはり単純なものしかない。

次に見つけたのはこのソフト「ControllerMate」。無料ソフトだとらちがあかないので試しに、この有料ソフト($24.95)をダウンロードしてみました。おそらくトライアルか無料利用だと何かしらの制限があるはず。
説明を見る限りは、かなり複雑な設定ができるみたい。しかもアップデートも最近までされています。
こんな感じで、単純なモジュールを線でつないで複雑化していくタイプ。期待できそう。
ということでインストールして試してみました。

ControllerMateの使い方:
まず、Xbox360コントローラーには2個のアナログスティックと十字キー、そしてたくさんのボタンがあります。今回はせいぜい、
・アナログスティックでXY軸の移動(G91X10、G91Y10など)
・ボタンでロック解除($X)
というくらいでしょうか(以下)。

当然ホーミング($H)や加工原点復帰(G92X0Y0Z0)なども設定していいのですが、まだ本気で使うつもりもないので、とりあえず動けばいいという程度で。というのも、今まで通りbCNCのPendant機能で十分間に合うので。

この手の入力の場合、ボタンを押すと「$X(リターン)」という設定ができないといけない。通常のゲームパッド用ソフトだと、「Start」ボタン=「s」キー(キーボード上の)という1対1対応になっていて、連続した任意の文字列を入力設定できないものが多い。しかし、このControllerMateは、文字列も入力できるらしい。こんなのを探していました。無料でも一応使えるようです。対応機種コントローラーはここに書いてあります。Xbox以外にもたくさんあります。

設定方法:
まずプロジェクトの開始は、右側にあるProgramming Itemsの歯車マークのプルダウンメニューで、Create Programming Pageを選択。

そうすると、以下のようにNew Page1が出来上がり、グリッドの作業エリアが出てきます。

次に、接続してあるコントローラーのジョイスティックを動かすと、右側にあるモジュールが光って、対応するジョイスティックやボタンがどれなのかわかります。一つのジョイスティックはX軸とY軸の二つのモジュールに分かれてあります。それぞれをドラッグして作業エリア上にのせます。

最終的には、X軸だけをみると以下のようになります。それほど複雑ではありません。というかやっていること自体が単純なので。左に倒すと「G91X-10(リターン)」、右に倒すと「G91X10(リターン)」という内容です。
これらのモジュールは作業エリア上で右クリックをするとタブが出てくるので、その中から選んで配置していきます。以下から、それぞれのモジュールの説明です。

「Controller X-Axis」:
まず、これがコントローラのボタンやジョイスティックのどの部分かというモジュール。これに機能のモジュールを色々ぶら下げて行く感じ。コントローラーを接続しないと右側のリストに出てこないかもしれません。

「Range(ジョイスティック範囲設定)」:
これは、ジョイスティックをどのくらい倒すと(条件)どうしたいか(結果:出力)という入力範囲の設定(条件設定)。右クリックで以下のタブから選ぶと作業エリアに出てきます。

作業エリア上の「Range」モジュールを選択して画面右にあるInspector画面で内容を設定します。
これは、ジョイスティックX軸:左側に倒した時の設定です(縦:Y軸方向に動かす設定はまた別のモジュールでする必要があります)。左に倒したら、CNCマシンのヘッドも左に動くという前提とします。倒した量によってスピードが変わるようにしてもいいのですが、このジョイスティックではあまり細かく操作できないので、倒したら「G91X-10」で左に10mm移動するコマンドを一回投げるという設定にしようと思います。20mm動かしたいときは2回倒すということです。
青い水平バーで反応する範囲を調整します。中央付近は無反応にして、左側-32768〜-10000の時だけ反応する設定にしておきます。このジョイスティックはぴったり中央で止まることがないので、かなりゆとりを持って中央の無反応範囲をとっておきました。
同じように、今度は右側に倒した時の設定も必要になります。そのため「Range」モジュールが二つあります。
もちろん倒した量によって1mm、もう少し倒すと5mm、めいっぱい倒すと10mmという感じで細かく範囲を設定してもいいとは思います。そうすると、「Range」モジュールだけでも3つ、両側も含めて合計6個を「Controller X-Axis」モジュールにつなげることになります。ただ、無料だとモジュール数の制限があって、そこまで複雑化するには有料にしないとダメかもしれません。

「T(テキスト出力)」設定:(追記:改良策「Keystrokes」を使う方法はページ最後の方にあります)
次に、「Range」モジュールの反応範囲の時に出すコマンドを「T(テキスト出力)」モジュールで設定します。つまり、ジョイスティックを左に倒したら「G91X-10」という文字列を書き出すプログラムになるということです。
「T(テキスト出力)」モジュールは右クリックでこの場所↑にあります。また「T」モジュールを選択して、Inspector画面で設定します。
こんな感じで、空白欄に「G91X-10」と入れておきます。ONタブは、これがONになったら「G91X-10」が出力されるということです。OFFの設定は特にないのでスキップ。

Speedタブの方では、as fast as possibleにして、出力速めにしておきます。
このテキスト出力設定では、最後のリターンキーの入力ができないので、それは次の設定で。ラインフィードやキャリッジリターン記号を入れればいいのかもしれませんが、そのまま書き出しそうなので、以下の設定でやることにします。

「Single Key」設定:
「G91X-10」のあと「リターン」を押してGコード入力終了となるで、このリターンキーも忘れずに設定しておきます。
「Single Key」はこの場所にあります。
そしてまたInspector画面で設定します。
BehaviorはOne Shotで一回だけの出力にしておきます。Press and Holdにしてしまうと、リターンキーを連続出力してしまいます。
Open Keystrokes Paletteを押すと、小さいキーボード画面が出てきて、この中からリターンキーを選んで作業エリアにドラッグします。
これでモジュールは全部揃ったので、あとはモジュールの端子のような部分をドラッグして相手のモジュールにくっつけるだけです。同様にY軸方向も設定もします。

それと、最終的には画面左上にあるMaster Enable: ON、Helper: Runningにしないと機能しないかもしれません。クリックすれば、赤→緑に変わります。

出来上がり:
最終的には、ボタンでロック解除($X)もつけて、以下のようになりました。

無料利用の場合の制限:
無料利用の場合は以下のような制限があります。出力系のモジュール(building block)は10個までらしい。そのほかは無制限。今回の場合は、テキスト出力とリターンキー出力だけで10個あるので、これが限界っぽい。

それと無料の場合は、このソフトがバックグラウンドで動いている場合(他のソフトを使っている場合)20分で切れてしまうようです。フォアグラウンドにしていれば無制限。

Grbl1.1なら$J=コマンドでジョグ操作:
今回はGコードを使って「G91X-10(リターン)」:相対座標でX軸を-10mm移動させましたが、Grbl1.1からは、ジョグ操作は$J=コマンドでやった方がいいかもしれません。$J=コマンドはGコードとは別に制御されるので、実際のペンダントを使ってのジョグ操作に適しています。
$J=X10F800
という感じです。
単に、
$JX10
を入力すると(最後にフィードをつけないと)、error:22が出ました。error:22はフィード未設定のエラーのようです。
また、$J=X10F800と入力しても、事前に設定してあるG90(絶対座標)かG91(相対座標)によって、
G90ならX座標10mmのところへ移動(WPosのX:10mmの位置)
G91なら現在地から10mmX軸方向へ移動(+10mm右へ動かす)
となるようです。

まとめ:
実際にbCNC上で試してみました。bCNCのコマンド入力欄を一度クリックしておいて(フォーカスを与えておいて)、あとはXbox360ワイヤレスコントローラーのジョイスティックでジョグ操作。特に問題なし。順調でした。
ただ、bCNCのPendant機能があるので、わざわざXbox360ワイヤレスコントローラーを使ってまでしてジョグ操作しなくてもいいという感じです。Laserweb3の場合もスマホからホストのIPアドレスにアクセスすれば遠隔操作可能なので、bCNCとLaserweb3以外で作業する時、ペンダントがないのであれば、余っているゲームパッドを利用することはありえるのかもしれません。
とりあえず、できるということが分かったので、もし今後使うようなことがあればという感じでしょうか。

追記:「Keystrokes」を使って改良
その後、コマンド入力(特にリターンキー入力)のところを改行コード(キャリッジリターンやラインフィード)を使ってやってみましたが、そのまま改行記号を出力してしまうのでダメでした。
そして、「T」や「Single Key」の代わりに「Keystrokes」という複数のキー入力を可能にするモジュールで試してみると、それなら大丈夫でした。
この画像にあるように、前回は左側の「Range」「T」「Single Key(改行)」でしたが、改良した右側は「Range」「Keystrokes」だけで済みます。Output系のモジュールは無料利用の場合10個までしか使えないので、一つ減らすことができたという感じです。
「Keystroke」の場合、Inspector画面で以下のように設定します。
Open Keystrokes Paletteボタンでミニキーボードを表示します。そしてWhen turned ON:の欄にキーを出力したい順番で入れていきます。今回出力したい内容は「G91X10(リターン)」ですが小文字「g91x10(リターン)」でも問題ありません。
キーボードからドラッグすると、黒と白の2個のキーが出てきます。黒がキーを押す、白がキーを離すという意味です。通常なら、g(押す)、g(離す)でgの文字一つを入力したことになります。その要領で、「g91x10(リターン)」をキー入力すると、
こんな感じで長くなりますが、この「Keystrokes」を使うことで一応最後のリターンまで押すことができます。Open Keystrokes Paletteボタンのミニキーボードを使う代わりに、Captureボタンを押せば、実際のパソコンのキーボードで入力した結果が画面に出てきます。
シフトキーを押しながらキー入力するような「$」は、「shift(押す)」「4(押す)」「4(離す)」、「shift(離す)」という順番になりますが(以下)、Captureボタンでやったほうが間違わないかもしれません。

ということで「Keystorkes」を使えば、連続した文字列(リターンキーなども含め)が出力できるのでOutput系のモジュールを節約できるという感じです。前回の方法だと10個使ってしまいましたが、今回は5個で済みました。残り5個あるので、他の機能を追加することができそうです。
しかしながら、bCNCのPendant機能の方が便利なので、おそらくXbox360コントローラを使ってのジョグ操作は使用しないと思います。ちょっと残念。まあ、きっと何かに応用できるでしょう。

0 件のコメント:

コメントを投稿

人気の投稿