はじめに

こんにちは。にんじんです🥕
それでは自作CNC製作記第3回はじめます。
前回はリミットスイッチを実装したことで、「原点(0, 0)」という物理的な基準を手に入れました。これにより、マシンが自分自身の現在位置を正確に認識できるようになりました。
ハードウェアとしての土台が整いましたので、今回はいよいよPCからマシンを自在に操作できる環境を構築していきます。ただ動かすだけでなく、工作機械として実用的なステップへ進めていきましょう。
今回の検証ゴール(ミッション)
本日の目的は以下の3点です。
- Arduinoに「GRBL」を導入してコントローラ化する
- 「CNCjs」を導入してPCから操作できる環境を整える
- 実際の移動距離を測定し、想定通りの精度が出ているか検証する
最終的には、単に動作するだけでなく、工作機械として使える精度が出ているかを厳しくチェックしていきます。
GRBLとは:ArduinoをCNC専用コントローラにするファームウェア
まず、CNCの中核を担うソフトウェア「GRBL(ガーブル)」について解説します。
簡単に言うと、GRBLは通常のArduinoをCNC専用のコントローラに変身させるためのオープンソースのファームウェアです。主な役割としては以下の通りです。
- PCから送られてくる「Gコード(座標指示)」を解釈する
- ステッピングモーターに適切なパルス信号を送り、移動を制御する
- 加速・減速、そして現在位置を1ステップ単位で管理する。
このファームウェアを書き込むことで、Arduinoは「CNCの脳」として機能するようになります。
GRBLのダウンロードとArduino IDEでの書き込み手順

githubよりGRBLをダウンロード
https://github.com/gnea/grbl
- Codeをクリック
- Download ZIOをクリック
書き込み完了後、Arduino IDEのシリアルモニタを開いて「$$」と入力し、設定一覧が画面に出力されれば成功です。この数値のひとつひとつが、CNCの最高速度や加速度、1mmあたりの移動量(ステップ数)を決定する重要なパラメータになります。
CNCjsの導入:PCから操作するオープンソースのインターフェース
次に、PC側からマシンを操作するためのユーザーインターフェースとして「CNCjs」を準備します。これはブラウザベースで動作するオープンソースのCNC制御ソフトウェアです。
CNCjsを使用することで、以下のような操作が可能になります。
- ジョグ操作: 画面上のボタン操作で各軸を前後左右に動かす
- Gコード送信: 作成した切削や刻印のデータをマシンへ転送する
- 状態監視: 現在の座標やリミットスイッチの反応をリアルタイムで確認する
いわば、CNCマシンの「コックピット」のような存在ですね。
Windows環境へのCNCjs(v1.9.22)のインストールと接続設定

今回はWindows環境に対応した安定版であるバージョン 1.9.22 を使用して進めます。
githubよりCNCjsをダウンロード
https://github.com/cncjs/cncjs/releases/tag/v1.9.22
画面のコンソール領域に初期設定の一覧が表示されれば、CNCjsとArduinoとの間の通信接続は完了です。
動作確認:PCからのジョグ操作と移動距離の測定テスト
PCから「X軸を+10mm」と指示を出すと、静かに、かつスムーズにテーブルが移動します。
「ついに自分専用のCNCが完成した!」と感動する瞬間ですが……ここで避けては通れない「現実」に直面しました。

精度に問題あり:0.7mmのバラつき
指示通りの距離を移動しているかノギスで計測してみたところ、衝撃の結果が出ました。
- 指示値: 10.00mm
- 実測値: 10.00~10.70mm
精度の壁:キャリブレーションの試行と距離がバラつく原因の考察
GRBLには、移動距離を補正するためのパラメータとして「$100(X軸)」および「$101(Y軸)」が用意されています。これは「1mm進むためにモーターを何ステップ動かすか」を調整する機能です。
通常であれば、理論値と実測値の比率からこの数値を計算して書き換えることで誤差を修正できます。しかし、今回のように「測定のたびに実測値そのものが変化してバラつく」という状態では、いくらパラメータを計算して調整しても、根本的な解決には至りません。
CNCにおいて最も重要となるのは、絶対的な寸法精度以上に「再現性」です。「常に1mm短く動く」という一定の傾向であればソフトウェア側で補正が可能ですが、「ある時は短く、ある時は長い」という不規則な状態では、工作機械としての実用に耐えられません.....。
信号波形と物理駆動系の検証によるハードウェアのボトルネック特定
このバラつきの原因を特定するため、以下の手順で切り分けを行いました。
- 電気信号の検証: オシロスコープを使用してArduinoからの出力波形を確認したところ、きれいな方形波が確認できました。
- パルス数の確認: 周波数カウンタを接続して測定したところ、指示通りの正確なパルス数が送信されており、Arduino側の信号抜けはありませんでした。
- 物理駆動系の確認: タイミングベルトの張りを再調整し、各部のネジの緩みや駆動系のガタつきを確認しましたが、症状に変化はありませんでした。
回路および機構部に問題が見られないことから、消去法としてステッピングモーターそのものに原因がある可能性が高まってきました。テストに使用した秋月電子通商で購入した安価なステッピングモーター(12V仕様)では、今回の駆動負荷に対してトルクや保持力が不足し、動作中に脱調(ステップ抜け)が発生しているものと推測されます。
まとめと次回予告:オリエンタルモーターへの交換によるハードウェア改善へ
今回の挑戦で得られた成果と、突きつけられた課題を整理します。
【今回の成果】
- GRBLの導入により、ArduinoをCNCコントローラとして機能させることができた
- CNCjsの環境を構築し、PCからの軸操作を可能にした
【現在の課題】
- 移動距離に最大0.7mmの不規則なバラつきがあり、加工精度が安定しない
現状の構成のままでは精密な加工を行うことが難しいため、駆動力を強化する目的で、信頼性の高いオリエンタルモーター製のステッピングモーターを新しく手配しました。メーカー製を買わないとダメだったか......
次回予告
第4回では、「ハードウェア改善編:モーターの交換と精度出しのキャリブレーション」として、パーツを変更してどこまで精度を追い込めるかを検証していきます。
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回)

















コメント