部品 · 読了まで4分

サーボモーターとは?Arduinoでサーボを制御する

サーボモーターとは何か、どう動くのか、Arduinoにどうつなぐのか。SG90・MG90S・MG996Rの比較、Servoライブラリ、サーボの電源、よくある失敗を解説します。

サーボモーターは、軸が指定した角度まで回ってそこで止まる小さなモーターです。普通のDCモーターは回り続けますが、サーボは90度と指示すればぴったり90度まで動き、負荷がかかってもその位置を保ちます。ロボットアーム、パン・チルトのカメラマウント、自動ドアロック、模型飛行機の舵は、どれもサーボで動いています。

SG90
SG90
MG90S
MG90S
MG996R
MG996R

サーボモーターはどう動く?

サーボの中には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)
複数のサーボや、MG996Rのような力の強いサーボをArduinoの5Vピンから給電しないでください。負荷がかかったサーボは1 A以上の電流を流すことがあり、ボードがリセットされたり、USBポートが傷んだりします。外部の5〜6 V電源を使い、そのGNDを必ずArduinoのGNDとつないでください。

どのサーボを選べばいい?

FS90R
モデルトルク(目安)ギア向いている用途
SG901.8 kg·cmプラスチック軽い作業、最初の実験、パン・チルト
MG90S2.2 kg·cm金属SG90と同じサイズで、より丈夫
MG996R9〜11 kg·cm金属ロボットアーム、重いふたや機構
FS90R1.5 kg·cmプラスチック連続回転:小型の車輪付きロボット
FS90Rのような連続回転サーボは角度に移動せず、信号で速度と向きが決まります(90で停止、0で一方向に全速、180で反対方向に全速)。位置を制御したいなら、標準のサーボを選んでください。

Arduinoでサーボを制御する:ポテンショメーターで角度を調整

ポテンショメーター
ポテンショメーター
Arduino Uno
Arduino Uno
  1. サーボの茶色のワイヤーをGNDに、赤いワイヤーを5Vにつなぎます(SG90が1つの場合)。
  2. オレンジの信号線をデジタル9番ピンにつなぎます。
  3. ポテンショメーターの両端の足を5VとGNDに、真ん中の足をA0につなぎます。
  4. 下のコードを書き込みます。ポテンショメーターを回すと、サーボが0〜180°の間で動きます。
C++ (Arduino IDE)
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ステップずつ制限なく回ります。正確な位置決めにはドライバーボードが必要で、自分の位置を測ることはできません。

全プロジェクトを見る
サーボモーターの使い方
#35初級
プレミアム

サーボモーターの使い方

小型サーボモーターのアームが、一方の端、中央、もう一方の端の3つの位置へ順番に回り、それぞれの位置で2秒間止まります。Arduinoが保持する角度をモーターに指示すると、モーターはその位置まで動いて止まります。ロボットアームや自動開閉するふたが動く仕組みを学べます。

4.7(48)
67
ポテンショメーターでサーボモーターを操作
#36初級
プレミアム

ポテンショメーターでサーボモーターを操作

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

4.6(37)
52
ジョイスティックでサーボモーターを制御
#60中級
プレミアム

ジョイスティックでサーボモーターを制御

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

4.7(42)
58
ステッピングモーターで作る360度サーボモーター
#68中級
プレミアム

ステッピングモーターで作る360度サーボモーター

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

4.5(22)
32
ESP32サーボモーター(ポテンショメーター制御)
#118中級
プレミアム

ESP32サーボモーター(ポテンショメーター制御)

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

4.3(29)
42
ESP32のRFIDドアロック(RC522 + サーボモーター + OLED + ブザー + LED)
#137上級
プレミアム

ESP32のRFIDドアロック(RC522 + サーボモーター + OLED + ブザー + LED)

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

4.8(9)
15
サーボの円形ダンス — 32個のサーボで動く模様
#102上級
プレミアム

サーボの円形ダンス — 32個のサーボで動く模様

Arduino Megaで、円形に並べた32個のサーボモーターを動かすビジュアルアニメーションのプロジェクトです。サーボは1つの配列で管理し、Megaの22–53番ピンに接続します。ランダムな角度でばらばらに振動する動き、全体が同時に動く同期スイープ、円周を滑らかに巡る波、左右に揺れる方位磁針の針という4種類の動きを見せます。回転する波の効果は、各サーボと動作中のサーボとの関係によって生まれます。

4.5(40)
62