自作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」をクリック
- 展開したフォルダを開く
- フォルダ内の「grbl」フォルダを右クリックしてZIPに圧縮します(このZIPをArduino IDEに読み込ませます)
- Arduino IDEを開く
- 「スケッチ」-「ライブラリをインクルード」-「ZIP形式ライブラリをインストール」をクリック
- 接続しているArduino Uno R3のポートを選択
- 「→」(書き込み)をクリックしてGRBLをArduino Uno R3に書き込めば完了です
$$ と入力し、設定一覧が出力されれば成功です。この数値のひとつひとつが、CNCの最高速度・加速度・1mmあたりの移動量(ステップ数)を決める重要なパラメータになります。CNCjsとは:PCから操作するオープンソースのインターフェース
次に、PC側からマシンを操作するためのユーザーインターフェースとして「CNCjs」を準備します。ブラウザベースで動作するオープンソースのCNC制御ソフトウェアです。CNCjsを使うと、以下のような操作ができます。
- ジョグ操作:画面上のボタンで各軸を前後左右に動かす
- Gコード送信:作成した切削・刻印データをマシンへ転送する
- 状態監視:現在の座標やリミットスイッチの反応をリアルタイムで確認する
いわば、CNCマシンの「コックピット」のような存在です。
Windows環境への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をダウンロード- インストーラーを実行し、指示に従って「次へ」→「次へ」で進めればOKです
動作確認:PCからのジョグ操作と移動距離の測定テスト
PCから「X軸を+10mm」と指示を出すと、静かに、かつスムーズにテーブルが移動します。「ついに自分専用のCNCが完成した!」と感動する瞬間ですが……ここで避けては通れない「現実」に直面しました。
精度の壁: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 をフォロー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回)
シリーズ記事一覧
電子工作・自動化ツールの製作記録をシリーズごとにまとめています。気になるテーマからお読みください。
-
FILE.01 — IoT
Raspberry Pi Pico W × GASラズパイPico W×GASで自作!「LINEで動く温湿度&スマートリモコン」完全ロードマップ
「外出中のペットの室温が心配…」そんな思いからスタートしたIoT自作プロジェクトの総集編。温湿度監視からエアコン遠隔操作まで、仕組みをゼロから作りたい方のための全5回の開発記録です。
シリーズを読む -
FILE.02 — CNC
Arduino × レーザー刻印CNCCNC自作シリーズ
高精度な加工を目指し、本格的な自作CNC製作に挑戦中。現在は基幹パーツであるオリエンタルモーターの納品を待つ「設計・準備編」を公開。ハードとソフトの両面から、理想のマシンを形にする過程をリアルタイムにお届けします。
シリーズを読む -
FILE.03 — XY軸制御
Raspberry Pi × ステッピングモーターXYテーブルシリーズ
Raspberry Piとステッパモーターを使い、ゼロから2軸制御に挑む記録。OS設定から回路設計、多軸制御のPythonコードまで、躓きやすいポイントを徹底図解。電子工作初心者が「動く感動」を味わうための実戦ガイドです。
シリーズを読む -
FILE.04 — 業務自動化
Python × Excel × CustomTkinter【Python開発記】NINJIN Mail制作記
PythonとExcelを連携させ、実務で即戦力となるメール送信ツールを開発。CustomTkinterによるUI構築や、ミスを防ぐテンプレート活用術など、現場の「痒い所に手が届く」自動化ノウハウを細部まで丁寧に解説します。
シリーズを読む -
FILE.05 — 業務自動化
Python × Excel × GUIアプリ化Invoice Maker(請求書・見積書自動作成)
手作業の請求書作成から卒業!PythonでExcelデータを読み込み一括PDF化する「Invoice_Maker」の作り方を全3回で解説。基本ロジックからGUIアプリ化まで、実務で役立つ自動化ノウハウが満載です。
シリーズを読む















コメント