PR

ArduinoへGRBLを書き込む手順とCNCjsの使い方|XYテーブルをPC制御【自作CNC第3回】

CNC自作

自作CNC 第3回

スポンサーリンク

はじめに:Arduino+GRBL+CNCjsでXYテーブルをPCから動かす

こんにちは。にんじんです🥕

この記事では、Arduino Uno にCNC用ファームウェア「GRBL」を書き込み、PC制御ソフト「CNCjs(v1.9.22)」を導入して、自作XYテーブルをパソコンから動かすところまでを、実機の画面キャプチャつきで解説します。あわせて、動作テストで発覚した「移動距離が最大0.7mmバラつく」問題の原因を、電気信号から駆動系まで順番に切り分けた記録も残します。

自作CNC製作記の第3回です。前回はリミットスイッチを実装して「原点(0, 0)」という物理的な基準を手に入れました。ハードウェアとしての土台が整ったので、今回はいよいよPCからマシンを操作する環境を構築していきます。

この記事で分かること

  • Arduino Uno にGRBL(gnea/grbl)を書き込んでCNCコントローラ化する手順
  • CNCjs v1.9.22 のインストールと、Arduinoとの接続設定(Windows)
  • CNCjsのジョグ操作でX軸を10mm動かす動作確認のやり方
  • 移動距離がバラついたときの原因の切り分け方($100/$101・オシロスコープ・駆動系・脱調)
  • 安価なステッピングモーターの限界と、次に何を変えるべきか
スポンサーリンク

今回の検証ゴール(ミッション)

本日の目的は以下の3点です。

  • Arduinoに「GRBL」を導入してコントローラ化する
  • 「CNCjs」を導入してPCから操作できる環境を整える
  • 実際の移動距離を測定し、想定通りの精度が出ているか検証する

最終的には、単に動作するだけでなく、工作機械として使える精度が出ているかを厳しくチェックしていきます。


スポンサーリンク

GRBLとは:ArduinoをCNC専用コントローラにするファームウェア

まず、CNCの中核を担うソフトウェア「GRBL(ガーブル)」について解説します。

簡単に言うと、GRBLは通常のArduinoをCNC専用のコントローラに変身させるためのオープンソースのファームウェアです。主な役割は以下の通りです。

  • PCから送られてくる「Gコード(座標指示)」を解釈する
  • ステッピングモーターに適切なパルス信号を送り、移動を制御する
  • 加速・減速、そして現在位置を1ステップ単位で管理する

このファームウェアを書き込むことで、Arduinoは「CNCの脳」として機能するようになります。

GRBL(grblUpload)のダウンロードとArduino IDEでの書き込み手順

GitHubのgnea/grblリポジトリで緑色のCodeボタンからDownload ZIPを選ぶ画面

▲ GitHub(gnea/grbl)で「Code」→「Download ZIP」

まず、GitHubの公式リポジトリ gnea/grbl からソースをダウンロードします。

  • ページの「Code」をクリック
  • 「Download ZIP」をクリック
ダウンロードしたgrbl-master.zipを右クリックして「すべて展開」を選んでいる画面

▲ ダウンロードしたZIPを右クリック →「すべて展開」

  • ダウンロードしたZIPフォルダを右クリックして「すべて展開」します
展開したフォルダの中にあるgrblサブフォルダを右クリックしてZIPに圧縮している画面

▲ 展開後、中の「grbl」フォルダだけを再度ZIPに圧縮

  • 展開したフォルダを開く
  • フォルダ内の「grbl」フォルダを右クリックしてZIPに圧縮します(このZIPをArduino IDEに読み込ませます)
Arduino IDEのスケッチメニューからライブラリをインクルード→ZIP形式ライブラリをインストールを選ぶ画面

▲ Arduino IDE「スケッチ」→「ライブラリをインクルード」→「ZIP形式ライブラリをインストール」

  • Arduino IDEを開く
  • 「スケッチ」-「ライブラリをインクルード」-「ZIP形式ライブラリをインストール」をクリック
ファイル選択ダイアログでgrbl.zipを選んで開くところ

▲ 先ほど作った「grbl.zip」を選択して開く

  • 「grbl.zip」を選択する
  • 「開く」をクリック
Arduino IDEのファイルメニューからスケッチ例→grbl→grblUploadを選ぶ画面

▲ 「ファイル」→「スケッチ例」→「grbl」→「grblUpload」

  • Arduino IDEにて「ファイル」-「スケッチ例」-「grbl」-「grblUpload」をクリック
Arduino Uno R3のCOMポートを選択して書き込みボタンを押す画面

▲ Arduino Uno R3のポートを選び、「→」で書き込み

  • 接続しているArduino Uno R3のポートを選択
  • 「→」(書き込み)をクリックしてGRBLをArduino Uno R3に書き込めば完了です
書き込みできたか確認:書き込み完了後、Arduino IDEのシリアルモニタを開いて $$ と入力し、設定一覧が出力されれば成功です。この数値のひとつひとつが、CNCの最高速度・加速度・1mmあたりの移動量(ステップ数)を決める重要なパラメータになります。

スポンサーリンク

CNCjsとは:PCから操作するオープンソースのインターフェース

次に、PC側からマシンを操作するためのユーザーインターフェースとして「CNCjs」を準備します。ブラウザベースで動作するオープンソースのCNC制御ソフトウェアです。CNCjsを使うと、以下のような操作ができます。

  • ジョグ操作:画面上のボタンで各軸を前後左右に動かす
  • Gコード送信:作成した切削・刻印データをマシンへ転送する
  • 状態監視:現在の座標やリミットスイッチの反応をリアルタイムで確認する

いわば、CNCマシンの「コックピット」のような存在です。

Windows環境へのCNCjs(v1.9.22)のインストールと接続設定

GitHubのcncjsリリースページでv1.9.22のタグを開いた画面

▲ GitHubのリリースページから CNCjs v1.9.22 を開く

今回はWindows環境で安定して動くバージョン 1.9.22 を使います。GitHubのリリースページを開きます。
https://github.com/cncjs/cncjs/releases/tag/v1.9.22

cncjs-app-1.9.22-win-x64.exeをダウンロードしてインストーラーを実行している画面

▲ win-x64版の .exe をダウンロードしてインストール

  • cncjs-app-1.9.22-win-x64.exe をダウンロード
  • インストーラーを実行し、指示に従って「次へ」→「次へ」で進めればOKです
CNCjsの接続設定画面でポートとボーレート115200を指定して開くボタンを押す画面

▲ ポートとボーレート(115200)を指定して「開く」

  • CNCjsを開く
  • ポート:Arduino Uno R3が接続されているポート
  • ボーレート:115200
  • 「開く」をクリック
CNCjsのコンソール領域にGRBLの初期設定一覧が表示され接続が完了した画面

▲ コンソールに初期設定一覧が出れば接続完了

  • 画面のコンソール領域にGRBLの初期設定一覧が表示されれば、CNCjsとArduinoの通信接続は完了です

スポンサーリンク

動作確認:PCからのジョグ操作と移動距離の測定テスト

PCから「X軸を+10mm」と指示を出すと、静かに、かつスムーズにテーブルが移動します。「ついに自分専用のCNCが完成した!」と感動する瞬間ですが……ここで避けては通れない「現実」に直面しました。

CNCjsのジョグ操作パネルで移動距離を10mmに設定しX+ボタンを押す画面

▲ CNCjsのジョグ操作パネル(移動距離10mm・X+)

  • 移動距離を「10mm」に設定する
  • 「X+」ボタンを押して10mm移動させる
ノギスでテーブルの実移動距離を測定している写真。指示10mmに対し実測10.7mm

▲ ノギスで実測(指示10.00mmに対し10.00〜10.70mm)

精度に問題あり:0.7mmのバラつき
指示どおりの距離を移動しているかノギスで計測したところ、衝撃の結果が出ました。

  • 指示値:10.00mm
  • 実測値:10.00〜10.70mm

スポンサーリンク

精度の壁:0・1のキャリブレーションと距離がバラつく原因の考察

GRBLには、移動距離を補正するためのパラメータとして $100(X軸)と $101(Y軸)が用意されています。これは「1mm進むためにモーターを何ステップ動かすか(steps/mm)」を調整する機能です。

通常なら、理論値と実測値の比率からこの数値を計算して書き換えれば誤差を修正できます。しかし今回のように「測定のたびに実測値そのものが変化してバラつく」状態では、いくらパラメータを計算して調整しても根本的な解決には至りません。

CNCで最も重要なのは、絶対的な寸法精度以上に「再現性」です。「常に1mm短く動く」という一定の傾向ならソフト側で補正できますが、「ある時は短く、ある時は長い」という不規則な状態では、工作機械としての実用に耐えられません。


スポンサーリンク

まとめと次回予告:オリエンタルモーターへの交換によるハードウェア改善へ

今回の挑戦で得られた成果と、突きつけられた課題を整理します。

【今回の成果】

  • GRBLの導入により、ArduinoをCNCコントローラとして機能させられた
  • CNCjsの環境を構築し、PCからの軸操作を可能にした

【現在の課題】

  • 移動距離に最大0.7mmの不規則なバラつきがあり、加工精度が安定しない

現状の構成のままでは精密な加工が難しいため、駆動力を強化する目的で、信頼性の高いオリエンタルモーター製のステッピングモーターを新しく手配しました。……メーカー製を買わないとダメだったか。

次回予告

第4回では「ハードウェア改善編:モーターの交換と精度出しのキャリブレーション」として、パーツを変更してどこまで精度を追い込めるかを検証していきます。


スポンサーリンク

よくある質問(GRBL書き込み・CNCjs接続・精度)

QGRBLをArduino IDEで書き込もうとするとコンパイルエラーになります

Agrblはスケッチ(.ino)ではなくライブラリとして扱います。GitHubのZIPを展開し、中の「grbl」フォルダだけを再度ZIP圧縮して「スケッチ」→「ライブラリをインクルード」→「ZIP形式ライブラリをインストール」で読み込みます。書き込むスケッチは「ファイル」→「スケッチ例」→「grbl」→「grblUpload」を使います。ボードは「Arduino Uno」、ポートは接続中のCOMポートを選んでください。

QCNCjsでArduinoに接続できません(ポートが出ない・開けない)

Aボーレートを115200にしてください。Arduino IDEのシリアルモニタなど他のソフトが同じCOMポートを掴んでいると開けないので閉じます。ポートが一覧に出ない場合は、データ通信対応のUSBケーブルか、CH340などのドライバが入っているかを確認します。接続に成功するとコンソールにGRBLの初期設定一覧が表示されます。

QGRBLの $100・$101 とは何ですか?

A1mm動かすのに必要なモーターのステップ数(steps/mm)を決めるパラメータです。$100がX軸、$101がY軸。シリアルモニタやCNCjsのコンソールで $$ と入力すると現在値を確認できます。理論値と実測値の比から「新しい$100 = 現在の$100 ×(指示距離 ÷ 実測距離)」で補正します。

Q指示した距離どおりにテーブルが動きません(バラつきます)

A「毎回同じだけズレる」なら $100・$101 のキャリブレーションで補正できます。「測るたびに値が変わる」不規則なバラつきはソフトでは直せません。ベルトの張り、カップリングの緩み、脱調(モーターのトルク不足)を疑ってください。この記事では、安価な12Vステッピングモーターのトルク不足による脱調が原因でした。

QCNCjsは最新版ではなく v1.9.22 を使うのはなぜですか?

A検証した時点でWindows向けに安定して動くバージョンだったためです。より新しい版は環境によって動作が不安定なことがあります。まずは1.9.22で環境を固め、慣れてから更新を検討するのがおすすめです。


ニンジン🥕アイコン

Follow me on X

本ブログの中の人「ニンジン🥕」はXやってます。新着記事はいち早くポストでお知らせしているので、見逃したくない方は @ninjin_py_vba をフォローしてみてください🥕

@ninjin_py_vba をフォロー

この記事が役に立ったら、シェアしてもらえると嬉しいです🥕

Xでポスト はてブ LINE Pocket
スポンサーリンク

CNC自作シリーズ

【CNC自作①】Arduino+GRBLでXYテーブルをCNC化してみた

【CNC自作②】リミットスイッチ実装|原点出し(ホーミング)で精度を出す

【CNC自作③】GRBL+CNCjsでPC制御に挑戦!動いたけれど見えてきた「精度の壁」

【CNC自作 ④】ついに届いた本命モーター!精度ブレの解決とGコード初テスト

【CNC自作】2軸同期走行テスト成功!…と思いきや、中華製基板の「致命的な罠」にハマる(第5回)

【CNC自作】ホーミング失敗(ALARM:8)の原因はこれ!4ステップ動作とZ軸未連動での突破方法(第6回)

【CNC自作】本番アルミ筐体完成!CNCjs(GRBL)でのテストと「Check Door」エラーの意外すぎる罠(第7回)

自作CNC 1064nm赤外線レーザーで金属刻印!GRBL設定変更とLightBurn素材テスト(第8回)


PROJECT LOG — SERIES INDEX
スポンサーリンク

シリーズ記事一覧

電子工作・自動化ツールの製作記録をシリーズごとにまとめています。気になるテーマからお読みください。

超音波距離センサーHC-SR04をRaspberry Pi Picoで使う|仕組み・配線・精度検証
.uds1-block { position: relative; overflow: hidden; border-radius: 12px; border: 1px solid #f0cba8; background: linear-g…
今週の注目ガジェット〜09/07週〜|電子工作・自作向け新製品まとめ(TickrCast/Radxa Linkr ほか)
ニンジンのガジェット通信 09/07週。ESP32-P4の自作気象モニター、極小IP-KVM「Radxa Linkr」、ESP32のDINレール型PLC、LTE開発キットなど、電子工作で使えそうな新製品5つを解説。
サーボモータの角度をタクトスイッチで可変|OLED(SSD1306)に現在角度をリアルタイム表示
Raspberry Pi Pico 2W×MG996RにタクトスイッチとOLED(SSD1306)を追加。ボタンで角度を可変しながら現在角度をリアルタイム表示するMicroPython実装を、framebufの文字拡大やサーボの遊び対策まで実機ベースで解説します。
MG996RサーボモーターをRaspberry Pi Pico 2Wで動かす:PWM制御とキャリブレーション実践
MG996RサーボモーターをRaspberry Pi Pico 2Wで動かす方法を解説。公称180度のはずが実測198度だった個体差の原因究明から、ホーンのズレ補正、タクトスイッチでの角度制御まで実機検証の様子を紹介します。
Tapo P110Mの消費電力をExcelレポート化する【年次集計・電気代試算・セキュリティ判断編】
FastAPI+openpyxlでTapo P110Mの消費電力をExcelレポート化。15秒間隔の生ログを日次集計する設計や、31円/kWhでの電気代試算、外部公開を見送った理由まで解説します。

コメント