はじめに
自作CNCシリーズ 第1回
はじめに
こんにちは。にんじんです🥕
この記事は、手元にある自作XYテーブルを流用して、ArduinoとA4988でCNC制御の基盤を作る「自作CNCシリーズ」の第1回です。今回のゴールはシンプルで、Arduinoからの指示でX軸・Y軸のステッピングモーターを回すところまで。加工機としての完成ではなく、まず「配線と電気的な仕様に問題がないか」を確認します。
この記事で分かること
- 自作CNCに必要な部品構成(Arduino UNO・A4988ドライバボード・A4988・ステッピングモーター)
- CNC制御でRaspberry PiではなくArduinoを選ぶ理由(リアルタイム処理の適性)
- モーター電源に電解コンデンサ(100μF以上)を並列で入れる理由と、入れないとA4988が壊れる仕組み
- Arduino IDEのインストール手順(画面キャプチャ付き)
- X軸・Y軸を正転/逆転させるテストコード(
test_code_XY.ino、ZIP配布)と動作確認のポイント
今回の検証ゴールとハードウェア構成
今回の到達目標は 「Arduinoからの指示でX軸・Y軸を動作させること」です。加工機としての完成ではなく、まず「問題なく動く状態」を作り、結線や電気的な仕様に問題がないかを確認します。
自作CNCのハードウェア構成と部品選定
テストにあたり、以下の部品一式を用意しました。
※一部のリンクはアフィリエイトプログラムを利用しています。
ステッピングモータードライバ「A4988」の特徴と電流調整(Vref)の注意点
CNC自作の定番ドライバが「A4988」です。特徴は次のとおりです。
- マイクロステップ制御に対応し、細かな位置決め(1/16分割など)ができる
- 基板上の半固定抵抗を回して、電流制限値を手動で調整できる
- 比較的安価で入手性が良い
CNC制御でRaspberry PiではなくArduinoを選ぶ理由
CNCの制御にRaspberry Pi(ラズパイ)を使う構成も見かけますが、今回はメインのモーター制御にArduinoを選びました。理由は、CNCで極めて重要な「リアルタイム処理」の適性にあります。
Raspberry Piの特性:汎用OS(Linux)が動いており、バックグラウンドで様々な処理が同時に走ります。そのため厳密なリアルタイム処理が苦手で、モーター制御では次の課題が出ます。
- パルス信号の出力タイミングにわずかなバラつきが生じる
- 信号の遅延がモーターの「脱調(ステップ抜け)」の原因になり得る
実際にオシロスコープで波形を見ても、ラズパイ単体でシビアなCNC制御を行うのは難しいという印象でした。
Arduinoの強み:OSを持たず「単一のプログラムだけを愚直に実行する」構造のため、リアルタイム制御に非常に強いです。測定したパルス波形も安定していました。
これはラズパイが劣るという話ではなく、適材適所です。実機を動かすパルス制御はArduino、命令を送る上位の頭脳(GUI操作盤)はRaspberry Pi、という組み合わせが理想的で、このシリーズもその構成でCNCマシンを製作していきます。
ハードウェアの回路接続と電解コンデンサによるノイズ対策
電源ラインに電解コンデンサ(100μF以上)が必須となる理由
結線図をよく見ると、モーター電源(12V)に電解コンデンサ(100μF以上)を並列で入れています。目的は「電圧の安定化」です。
豆知識:なぜA4988に電解コンデンサを入れるのか
ステッピングモーターは動作中、コイルに急激な電流変化が起きるため、電源ラインにノイズや電圧の揺れが発生します。
コンデンサなしだと何が起きるか:
- 電圧が瞬間的に落ちる(電圧降下)
- 逆起電力によるスパイクが発生する
- その結果、モーターが不安定になる・ステップ抜け(脱調)・最悪の場合 A4988が破損する
コンデンサの役割:電解コンデンサは「電気のバッファ(貯水タンク)」として働きます。電圧が下がったときは電気を供給し、上がりすぎたときは吸収して、電源を安定させます。
実務的なポイント:
- 容量は 100μF〜470μF程度が一般的
- 耐圧は使用電圧(12V)より余裕を持たせる(例:30V〜50V)
- できるだけ A4988の近くに配置する
開発環境の準備:Arduino IDEのインストール手順
Arduino UNO R3 を動かすために、専用アプリ「Arduino IDE」をインストールします。Arduino公式のソフトウェアページから、使用するPCに対応するインストーラーをダウンロードしてください。

対応するインストーラーを選択し「DOWNLOAD」をクリック

ダウンロードしたファイルを実行し、「同意する」をクリック

どちらかを選択し「次へ」をクリック

「インストール」をクリック

「完了」をクリックして終了
テストコードによるステッピングモーターの動作確認手順
結線と開発環境が整ったら、テストプログラムを実行して動作を確認します。検証用のテストコード test_code_XY.ino は、X軸・Y軸をそれぞれ正転→逆転させるシンプルな内容です。シリアルモニタで s を送ると停止します。
test_code_XY.ino(Arduino IDEに貼り付けて書き込みます)
// テストコード test_code_XY.ino
#define X_STEP 2
#define X_DIR 5
#define Y_STEP 3
#define Y_DIR 6
#define ENABLE 8
bool stopFlag = false;
void setup() {
pinMode(X_STEP, OUTPUT);
pinMode(X_DIR, OUTPUT);
pinMode(Y_STEP, OUTPUT);
pinMode(Y_DIR, OUTPUT);
pinMode(ENABLE, OUTPUT);
digitalWrite(ENABLE, LOW); // 有効化
Serial.begin(115200);
Serial.println("Press 's' to STOP");
}
// 停止チェック
void checkStop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 's' || c == 'S') {
stopFlag = true;
}
}
}
// 停止処理
void stopAll() {
Serial.println("STOPPED");
digitalWrite(ENABLE, HIGH); // モーターOFF
while (1); // 完全停止
}
// 指定軸を指定方向に回す
void moveMotor(int stepPin, int dirPin, bool dir, int steps) {
digitalWrite(dirPin, dir);
for (int i = 0; i < steps; i++) {
checkStop();
if (stopFlag) stopAll();
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
}
void loop() {
stopFlag = false;
// ===== X軸 =====
moveMotor(X_STEP, X_DIR, LOW, 300); // 正転
delay(500);
moveMotor(X_STEP, X_DIR, HIGH, 300); // 逆転
delay(1000);
// ===== Y軸 =====
moveMotor(Y_STEP, Y_DIR, HIGH, 300); // 正転
delay(500);
moveMotor(Y_STEP, Y_DIR, LOW, 300); // 逆転
delay(2000);
}
- Arduino IDEを開く
- 上部のプルダウンで、Arduinoが接続されているポートを選択
- デフォルトのコードを削除し、テストコードを貼り付け
- 左上の → ボタンをクリックして書き込み
- 自動でX軸・Y軸の動作が始まります
※ 動作を一時停止したい場合は、Arduino IDE右上のボタンから「シリアルモニタ」を起動し、キーボードの S を入力して Enter を押してください。
動作動画
プログラム実行時に重点的に確認するポイント
- 意図した方向に軸(モーター)が回転しているか
- 回転時に異常な異音や、不自然な激しい振動が出ていないか
- 引っかかりがなく、スムーズに同期して回転しているか
この段階で違和感がある場合は、モーターの配線順(相の組み合わせ)が間違っているか、A4988の電流制限値(Vref)の設定が不適切な可能性が高いので、再確認してください。
まとめと次回予告:リミットスイッチの実装と機械原点の確定へ
今回は、Arduinoを使ったCNC制御の基本構成と、最初の回転テストまでの手順を紹介しました。本来はリミットスイッチの配線までまとめる予定でしたが、解説が長くなったため、回路の安全に関わるスイッチの実装は次回に回します。
次回・第2回では、工作機械として正確な位置決め(原点復帰/ホーミング)を行うための、リミットスイッチの実装と配線を進めます。
次に読む記事
🔧 次回はこちら(第2回) 自作CNCの原点出し(ホーミング)とリミットスイッチの配線・設定方法 リミットスイッチで機械原点(0,0)を確定させます。GRBLが2回触れて原点を特定する理由も解説。 → ⚡ モーターを回す前に(必読) A4988の電流制限(Vref)調整方法|焼損を防ぐ計算式とテスターでの設定手順 今回「必須」と書いたVref調整を、計算式とテスターでの手順で詳しく解説しています。 → 🗺️ シリーズ全体像 ゼロから自作するCNCの全手順ロードマップ|Arduino・GRBL・CNCjsでレーザー刻印機を作る 第1回〜第10回の全工程をまとめたロードマップ。どの順で読めばいいかが分かります。 →よくある質問(FAQ)
QCNC制御になぜArduinoを使うのですか?Raspberry Piではダメですか?
ARaspberry PiはOS(Linux)上で動くため、パルス信号の出力タイミングにバラつきが出やすく、脱調の原因になります。OSを持たないArduinoはリアルタイム制御に強く、パルス波形が安定します。ラズパイは上位のGUI操作盤として組み合わせるのが理想です。
Q電解コンデンサはどのくらいの容量を入れればいいですか?
A100μF〜470μF程度が一般的です。耐圧は使用電圧(12V)より余裕を持たせて30V〜50Vのものを選び、できるだけA4988の近くに配置します。
Qコードを書き込んでもモーターが回りません。
A次を順に確認してください。(1)ENABLEピン(D8)がLOWになっているか(コードでは digitalWrite(ENABLE, LOW) で有効化)。(2)A4988のVref調整をしたか。(3)モーターの配線(コイルA/Bの相順)が合っているか。(4)モーター用電源(12V)が入っているか。
Qモーターが「ガガガ」と鳴って回らない・脱調します。
AVref(電流)が低すぎる/高すぎる、delayMicroseconds() の値が短すぎて速すぎる、電源容量不足、などが原因です。まずVref調整とステップ間隔(コードの 1000 の値)を見直してください。
QA4988がかなり熱くなります。壊れませんか?
Aマイクロステップ動作中はある程度発熱します。触れないほど熱い・焦げ臭い場合はVrefが過大です。ヒートシンクを貼り、Vrefをモーターの定格電流に合わせて下げてください。
Qこのシリーズは後半でGRBLを使いますが、第1回でGRBLを入れないのはなぜですか?
A第1回は「配線と電気仕様に問題がないか」を、素のArduinoスケッチで確認するのが目的だからです。GRBLの書き込みとCNCjsでのPC制御は第3回で解説しています。
自作CNCシリーズ 全10回
- XYテーブルをCNC化!ArduinoとA4988を使ったステッピングモーター制御の基本【自作CNC第1回】(この記事)
- 自作CNCのリミットスイッチ配線とホーミング設定|プルアップ回路・チャタリング対策【自作CNC第2回】
- ArduinoへGRBLを書き込む手順とCNCjsの使い方|XYテーブルをPC制御【自作CNC第3回】
- GRBLの$100キャリブレーションと$110速度制限の解除|CNCjsでステップ数を実測補正【自作CNC第4回】
- CNCシールドでリミットが常時ON(Pn:Z)になる原因|GRBLのD11・D12ピン反転の罠【自作CNC第5回】
- GRBLホーミング失敗「ALARM:8」の原因と対策|4ステップ動作(ON-OFF-ON-OFF)とプルオフ設定【自作CNC第6回】
- GRBLで「Check Door」が誤発生する原因と対策|Gコードの日本語コメント(UTF-8)の罠【自作CNC第7回】
- 自作CNCに1064nm赤外線レーザーで金属刻印|GRBL設定変更($32=1)とLightBurn素材テスト【自作CNC第8回】
- 自作CNCのレーザー加工を10倍高速化する方法|アルミフレーム剛性強化と速度検証【自作CNC第9回】
- 【設計データ配布】自作CNCレーザー刻印機の全部品リストと2D/3D図面一式【自作CNC第10回・完結編】
シリーズ記事一覧
電子工作・自動化ツールの製作記録をシリーズごとにまとめています。気になるテーマからお読みください。
-
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アプリ化まで、実務で役立つ自動化ノウハウが満載です。
シリーズを読む








コメント