ArduinoでCNCシールド使うためにGRBLをインクルードする方法をわかりやすく説明します

ArduinoでCNCシールド使うためにGRBLをインクルードする方法をわかりやすく説明します




この記事では、ArduinoとCNCシールドを使ってステッピングモータやサーボモータを制御するために、GRBLというファームウェアをArduinoに導入する方法を紹介します。

CNC(Computer Numerical Control)はコンピュータ数値制御のことで、コンピュータを使ってステッピングモータなどを制御し、機械加工を行うときに使われます。

Arduinoでは安価なCNCシールドが手軽に入手できますが、それを使いこなすにはいろいろと調べる必要があります。

僕は機械加工の専門家ではありませんが、自分なりに調べてCNCシールドを使えるようになったので、その方法を初心者目線でわかりやすく紹介します。

作業の流れ

まずは全体の流れを簡単に説明します。

  • ArduinoにCNCシールド装着する。
  • Arduino IDEにGRBLというファームウェアを読み込ませる。
  • Arduinoにプログラムを書き込む。

この3つの作業ができればArduinoの準備は完了です。

この後、実際にステッピングモータを制御するにはCNC制御アプリが必要になりますが、CNC制御アプリの使い方は別の記事で紹介します(後日公開予定)。

また、実際にステッピングモータを利用した装置の例として2Dプロッターがあります。

実際に僕が制作した2Dプロッターの作り方を以下の記事で紹介しているので、興味があればそちらもご覧ください。

今回の記事を読めば、この2Dプロッターを制御して絵を描いたり文字を書いたりできるようになります。

CNCシールドにはバージョンがある

まずはCNCシールドを購入する必要がありますが、注意すべきことがあります。

CNCシールドにはバージョンがあり、バージョンによって機能が少しだけ異なります(ピン配列も少しだけ違います)。

現在入手できるCNCシールドの代表的なバージョンは以下の3つです。

  • Ver. 3.0
  • Ver. 3.1
  • Ver. 3.5.1

細かい説明は後日別の記事で紹介したいと思いますが、今回は最も手軽に入手できるCNCシールドVer. 3.0を使います(Amazonで1個300円程度で入手可能)。

僕が購入したCNCシールド(Ver. 3.0)は以下のものです。

CNCシールドVer. 3.0は基板表面に「CNC SHIELD」とだけ書かれており、バージョン番号が書かれていないものがほとんどです。

一方で商品説明欄にはV3と書かれているものが多いので、それを目安に選ぶようにしましょう。

なお、CNCシールドだけではステッピングモーターを制御することはできず、CNCシールドにステッピングモータ用のモータドライバを装着する必要があります。

例えば、A4988モータドライバです。

A4988の使い方の詳しい説明は以下の記事をご覧ください。

また、A4988モータドライバのCNCシールドへの装着方法は以下の記事をご覧ください。

GRBLファームウェアにもバージョンがある

ArduinoでCNCの制御をするためにはGRBLというファームウェアをArduinoのライブラリに読み込ませる必要があります。

ここでも注意すべきことがあります。それはGRBLにもバージョンがあることです。

さきほど、CNCシールドにバージョンがあることを軽く触れましたが、CNCシールドはバージョンによってピン配列が異なります。

GRBLのバージョンもCNCシールドのバージョンに合うようになっています。

簡単に説明すると以下のような対応関係です。

CNCシールドVer. 3.0 → GRBL Ver. 0.8
CNCシールドVer. 3.1以上 → GRBL Ver. 0.9、Ver. 1.1

ここが少し難しいところで、僕が最初にわからなくなったところです。

CNCシールドVer. 3.0に対応しているのはGRBL Ver. 0.8ですが、Ver. 0.9やVer. 1.1が使えないか?というところです。

結論を言うと、使えます!

というのは、バージョンの違いで一部の機能や端子の対応関係が変わっているだけで、その機能や端子を使わなければまったく影響しないからです。

詳しく知りたい方へ

ステッピングモータとリミットスイッチを使う場合、X軸、Y軸だけであればCNCシールドとGRBLのバージョンは気にしなくても大丈夫です。Z軸のステッピングモータも大丈夫です。

しかし、Z軸のリミットスイッチはCNCシールドVer. 3.0とVer. 3.1以上では端子の配置が変わっています(Arduinoのデジタル端子D11 → D12に移動)。

そして、それに対応してGRBL Ver. 0.8とVer. 0.9以上でも端子配置が変わっています。

CNCシールドVer. 3.0とGRBL Ver. 0.9以上の組み合わせでZ軸のリミットスイッチを使う場合は、リミットスイッチの配線を「Spindle Enable(SpnEn)」に接続すれば大丈夫です。

GRBLは以下のサイトからダウンロードできます。

https://github.com/grbl/grbl

このサイトの右上の「Code」をクリックして「Download ZIP」を選ぶとダウンロードできます。このページではVer. 0.9jがダウンロードされます。

ステッピングモーターを制御するだけであればGRBLのバージョンはどれでも大丈夫です。

なお、先に紹介した2Dプロッターではステッピングモーターの他にサーボモーターも使っているので、サーボモーターにも対応したGRBLを使う必要があります。

サーボモーターに対応したGRBLは以下のサイトからダウンロードできます。

https://github.com/cprezzi/grbl-servo

こちらのGRBLはGRBL ver. 1.1をベースにサーボモーターに対応するようにコードを変更したものです。

同様に右上の「Code」をクリックして「Download ZIP」を選んでダウンロードできます。

ダウンロードしたZIPファイルは解凍せずにそのままにしておきます(後でZIPファイルのままインクルードするため)。

Arduino IDEにGRBLを読み込ませる

GRBLのZIPファイルがダウンロードできたらArduino IDEのライブラリにGRBLを読み込みます。

Arduino IDEの「スケッチ」ー「ライブラリをインクルード」ー「.ZIP形式のライブラリをインクルード」を選び、ダウンロードしたGRBLのZIPファイルを選択します。

うまく行けば、Arduinoのライブラリに読み込まれます。

実際に読み込まれたかどうかはライブラリのフォルダの中身を見れば確認できます。

僕の場合は「ドキュメント」ー「Arduino」ー「libraries」というフォルダです。

ライブラリがインクルードできない場合の対処法

実は僕の環境ではGRBL Ver. 0.9はインクルードできたのですが、サーボモーターに対応したGRBLはエラーが出てインクルードできませんでした。

その時の僕の対処方法は以下の通りです。

まず、GRBL Ver. 0.9のZIPファイルをインクルードします。すると、Arduinoの「libraries」フォルダの中に「grbl」というフォルダが作成されます。

このgrblのフォルダの中身を削除します。

次に、サーボモーターに対応したGRBLのZIPファイルを解凍します。

解凍したフォルダの中に「grbl」というフォルダがあるので、その中身だけを
Arduinoの「libraries」の「grbl」フォルダの中にコピーします。

僕の場合はこれで解決しました。

ArduinoにGRBLをアップロードする

最後にArduinoにGRBLをアップロードすればArduinoでの作業は完了です。

Arduino IDEのスケッチ画面で以下の操作をします。

「ファイル」ー「開く…」を選択し、librariesフォルダの「grbl」ー「examples」ー「grblUpload」フォルダの中にある「grblUpload」というスケッチを開きます。

開いたスケッチには何も手を加えずに「マイコンボードに書き込む」ボタンを押します。

書き込みが完了すればArduinoでの作業は終了です。

まとめ

CNCシールドとGRBLはそれぞれバージョンが複数あるので混乱しますが、ステッピングモータとリミットスイッチを使うだけであれば、基本的にはバージョンの違いは気にしなくても大丈夫です。

※Z軸のリミットスイッチを使う場合は端子の入れ替えが必要!!!

また、2DプロッターのようにZ軸にサーボモーターを使う場合も、それに対応したGRBLを使えば大丈夫です。

今回の設定でArduinoの作業は終了したので、CNCを制御するアプリを使えばアプリ上ステッピングモータやサーボモーターを動かすことができます。

GRBLのダウンロード先
https://github.com/grbl/grbl

サーボモーターに対応したGRBLのダウンロード先
https://github.com/cprezzi/grbl-servo

僕が購入したCNCシールド

こちらの記事も合わせてどうぞ!

コメント

  1. このコメントは承認待ちです。

コメントする

CAPTCHA