サーボモーターとは?Arduinoでサーボを制御する
サーボモーターとは何か、どう動くのか、Arduinoにどうつなぐのか。SG90・MG90S・MG996Rの比較、Servoライブラリ、サーボの電源、よくある失敗を解説します。
サーボモーターは、軸が指定した角度まで回ってそこで止まる小さなモーターです。普通のDCモーターは回り続けますが、サーボは90度と指示すればぴったり90度まで動き、負荷がかかってもその位置を保ちます。ロボットアーム、パン・チルトのカメラマウント、自動ドアロック、模型飛行機の舵は、どれもサーボで動いています。



サーボモーターはどう動く?
サーボの中には4つの部品があります。小さなDCモーター、速度を下げてトルクを上げるギアボックス、軸の位置を測るポテンショメーター、そしてそれらを管理する制御回路です。制御回路は、指示された角度とポテンショメーターが読み取った角度を常に比べ、差がゼロになるまでモーターを回します。このクローズドループのおかげで、サーボは負荷がかかっても位置を保てます。
角度はPWM信号でサーボに送られます。20 msごと(50 Hz)にパルスが届き、そのパルス幅で角度が決まります。約1 msが0°、1.5 msが90°、2 msが180°です。多くのサーボは0.5〜2.5 msの範囲に対応していますが、正確な値はモデルによって少し異なります。
サーボのワイヤーと配線
| ワイヤーの色 | 役割 | Arduinoでのつなぎ先 |
|---|---|---|
| 茶 / 黒 | GND(グラウンド) | GND |
| 赤 | 電源(+4.8〜6 V) | 5Vまたは外部の5〜6 V電源 |
| オレンジ / 黄 / 白 | 信号(PWM) | 任意のデジタルピン(例:9) |
どのサーボを選べばいい?

| モデル | トルク(目安) | ギア | 向いている用途 |
|---|---|---|---|
| SG90 | 1.8 kg·cm | プラスチック | 軽い作業、最初の実験、パン・チルト |
| MG90S | 2.2 kg·cm | 金属 | SG90と同じサイズで、より丈夫 |
| MG996R | 9〜11 kg·cm | 金属 | ロボットアーム、重いふたや機構 |
| FS90R | 1.5 kg·cm | プラスチック | 連続回転:小型の車輪付きロボット |
Arduinoでサーボを制御する:ポテンショメーターで角度を調整


- サーボの茶色のワイヤーをGNDに、赤いワイヤーを5Vにつなぎます(SG90が1つの場合)。
- オレンジの信号線をデジタル9番ピンにつなぎます。
- ポテンショメーターの両端の足を5VとGNDに、真ん中の足をA0につなぎます。
- 下のコードを書き込みます。ポテンショメーターを回すと、サーボが0〜180°の間で動きます。
1#include <Servo.h>
2
3Servo servo; // servo nesnesi / servo object
4const int POT_PIN = A0; // potansiyometre / potentiometer
5
6void setup() {
7 servo.attach(9); // sinyal 9. pinde / signal on pin 9
8}
9
10void loop() {
11 int value = analogRead(POT_PIN); // 0–1023 oku / read 0–1023
12 int angle = map(value, 0, 1023, 0, 180); // açıya çevir / convert to angle
13 servo.write(angle); // servoyu döndür / move the servo
14 delay(15); // servo yetişsin / let the servo settle
15}servo.write(angle)は0〜180の角度を受け取ります。より細かく制御するには、servo.writeMicroseconds(1500)でパルス幅をマイクロ秒単位で直接指定します。ボードのどのピンがPWMやデジタルなのかは、ピン配置ツールで確認できます。
ESP32やRaspberry Pi Picoでサーボを使う
- ESP32:標準のServoライブラリは動きません。Arduino IDEでESP32Servoライブラリをインストールしてください。使い方は同じです。ほとんどのサーボは3.3 Vの信号で十分に動きます。
- Raspberry Pi Pico(MicroPython):PWMを50 Hzに設定し、duty_ns()でパルス幅を指定します。1,000,000 ns ≈ 0°、1,500,000 ns ≈ 90°、2,000,000 ns ≈ 180°です。
- どちらのボードでも、サーボをボードの3.3 Vピンから給電しないでください。5 Vのラインか外部電源を使いましょう。
サーボでよくある失敗
- 震えや不規則な動き:たいていは電源不足が原因です。外部電源を使い、サーボの電源に470〜1000 µFのコンデンサを入れてください。
- GNDの共通化を忘れる:外部電源で給電したサーボは、GNDをつながないと信号を理解できません。
- サーボを限界まで動かそうとする:機械的なストッパーに押しつけられたサーボは、ジーッと音を立てて熱くなります。必要なら範囲を10〜170°に制限してください。
- 9番と10番ピンでPWMを使おうとする:UnoではServoライブラリがTimer1を使うため、サーボを接続している間はこれらのピンでanalogWriteが動きません。
- 連続回転サーボに角度を期待する:FS90Rのようなモデルは自分の位置を把握していません。制御できるのは速度と向きだけです。
サーボで何が作れるかは、BlueGraysのロボットやモーターのプロジェクトで確認してください。Arduinoが初めてなら、まずArduinoとは?を、回路をボード上に組むにはブレッドボードとは?を読んでみてください。
よくある質問
サーボモーターは何度回りますか?
標準のサーボは約180°回ります。90°や270°のモデルもあります。連続回転サーボは制限なく回りますが、角度は保持しません。
サーボをArduinoの5Vピンから給電できますか?
軽い負荷のSG90を1つだけなら、テスト用に給電できます。複数のサーボ、MG996Rのような強力なモデル、負荷のかかるプロジェクトでは、外部の5〜6 V電源を使い、GNDをつないでください。
1台のArduinoでいくつのサーボを制御できますか?
Servoライブラリは、Arduino Unoで最大12個、Megaで最大48個のサーボに対応しています。たくさんのサーボを使うなら、PCA9685のような16チャンネルのI2Cドライバーボードのほうが実用的です。
サーボが震えるのはなぜですか?
よくある原因は、電源不足、GNDの共通化漏れ、長い信号線です。十分な電源を使い、サーボの電源にコンデンサを入れ、ワイヤーを短くしてください。
サーボモーターとステッピングモーターの違いは何ですか?
サーボはフィードバックを使って特定の角度に移動してそこで止まり、ふつうは180°までに制限されています。ステッピングモーターは1ステップずつ制限なく回ります。正確な位置決めにはドライバーボードが必要で、自分の位置を測ることはできません。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
サーボモーターの使い方
小型サーボモーターのアームが、一方の端、中央、もう一方の端の3つの位置へ順番に回り、それぞれの位置で2秒間止まります。Arduinoが保持する角度をモーターに指示すると、モーターはその位置まで動いて止まります。ロボットアームや自動開閉するふたが動く仕組みを学べます。

ポテンショメーターでサーボモーターを操作
ポテンショメーターのつまみを回すと、サーボモーターのアームもそれに合わせて回ります。つまみの一方の端が0度、もう一方の端が半回転に対応します。Arduinoがつまみの位置を常に読み取り、サーボモーターが動きにすぐ反応します。ロボットアームや回転式カメラ台などのプロジェクトへの第一歩です。

ジョイスティックでサーボモーターを制御
防犯カメラの向きを変えるように、ジョイスティックで2つのモーターを操作します。スティックを左右に倒すと下側のサーボモーターがゆっくり回り、上下に倒すと上側のサーボモーターが上下に傾きます。手を離すと、どちらもその位置で止まります。カメラやレーザーの台座など、2方向に動く装置の基礎を作ります。

ステッピングモーターで作る360度サーボモーター
普通のステッピングモーターを、1周の範囲で好きな角度へ動かせるようにします。Arduinoが各角度に必要なステップ数を計算し、モーターは0、90、45、180、135、360度へ順番に移動します。それぞれの位置で少し止まり、最初から繰り返します。通常は半回転の範囲に限られるサーボモーターの働きを、1周全体で実現する仕組みを作れます。

ESP32サーボモーター(ポテンショメーター制御)
このプロジェクトでは、ポテンショメーターでSG90サーボモーターを制御します。ポテンショメーターから読み取ったアナログ値を0~180度の範囲に変換し、サーボの角度を調整します。ESP32Servoライブラリは、ESP32の出力に対応した適切なGPIOでサーボ信号を生成します。このプロジェクトではGPIO 18を使います。ロボットアームやカメラ用ジンバル、自動ドアの機構に使われる基本的な制御方法です。

ESP32のRFIDドアロック(RC522 + サーボモーター + OLED + ブザー + LED)
ESP32、RC522 RFIDモジュール、SG90サーボモーター、SSD1306 OLEDディスプレイ、アクティブブザー、LED2個を使ってスマートドアロックを作ります。カードを読み取ると、UIDをコード内に登録した許可済みカードの一覧と照合します。許可されたカードなら、サーボモーターを回して解錠し、緑色のLEDが点灯して短い音が2回鳴ります。5秒後に自動で施錠します。許可されていないカードでは赤色のLEDが点灯し、短い間隔で3回音を鳴らして警告し、読み取ったUIDをOLEDに表示します。実際のIoTセキュリティの仕組みを実践的に学べます。

サーボの円形ダンス — 32個のサーボで動く模様
Arduino Megaで、円形に並べた32個のサーボモーターを動かすビジュアルアニメーションのプロジェクトです。サーボは1つの配列で管理し、Megaの22–53番ピンに接続します。ランダムな角度でばらばらに振動する動き、全体が同時に動く同期スイープ、円周を滑らかに巡る波、左右に揺れる方位磁針の針という4種類の動きを見せます。回転する波の効果は、各サーボと動作中のサーボとの関係によって生まれます。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

