Table of Contents
この記事で学習できること
- サーボモータの仕組み、Arduinoとの接続方法、操作方法を、標準サーボモーター(SG90)、連続回転サーボモーター(SG90-HV)を使って学習します。
関連する商品・製品の購入先は?
- Amazon で [Arduino用のUNO R3 最終版スタータキット] を購入しました。 SG90を含んでいます
- 秋月電子通商 で [360°連続回転サーボ SG90-HV]を購入しました。
サーボモータの仕組みは?
- 標準サーボモーター(SG90)は、位置フィードバックを使用してその動作と最終位置を制御するクローズドループのシステムです。シャフトの位置を正確に制御できる特徴があります。
- 連続回転サーボモーター(SG90-HV)は、速度と回転方向を変えて回転できます。
サーボモータの操作方法は?
- 標準サーボモーターは、サーボの信号線に PWM (パルス幅変調) 信号を送信することによって制御されます。 パルス幅によって出力軸の位置が決まります。 パルス幅 1.5 msec の信号をサーボに送ると、サーボモーターは90 度の位置 に移動します。 最小 (0 度) と最大 (180 度) の位置は通常、それぞれ 1 msec と 2 msec のパルス幅に対応します。 これは、サーボ モーターの種類やブランドによって若干異なる場合があるります。 (例えば: 最小パルス幅が0.5msecで最大パルス幅が 2.5 msecであったりします。) 多くのサーボモータの中間位置はほとんど常に 1.5 msecです。
- 連続回転サーボモーターは、パルス幅 1.5 msec のPWM信号をサーボに送ると回転が止まります。パルス幅1msec~1.5msecとパルス幅1.5msec~2msecで回転方向が変わり、PWM変調の度合いで回転速度が変わります。

Arduinoとサーボモータの接続は?
- 電源、アース、信号の 3 本のワイヤを接続するだけなので、サーボ モータの配線はとても簡単です。 電源線は通常赤で、5 V に接続する必要があります。 SG90 のようなマイクロ サーボは、アイドル時に約 10 mA、回転時に約 100 ~ 250 mA を消費するため、Arduino の 5 V 出力で直接電力を供給することができます。 ただし、複数台以上のサーボモータを使用する場合は注意が必要です。 モーターが 300 mA 以上を消費する場合、Arduino の損傷を避けるために、外部電源を使用する必要があります。

- サーボ モータを制御するのにArduino UNO R3ボードを使っています。このボードはサーボモータを制御用のPWM出力ができるポートがあらかじめ決められています。ピン番号の前に”~”の記号が付いている、3, 5, 6, 9, 10, 11ピンがPWM出力に使えます。
サーボモータ用のライブラリはどう使うの?
- サーボ モーターを制御するには、Arduino IDE にプリインストールされている Servoライブラリを使用します。
- Servo.h をインクルードします。
#include <Servo.h>- Servoのインスタンスを作成します。
Servo myservo;- サーボ信号を出力するPin番号を指定します。(9番ピンを指定した例です。)
myservo.attach(9);- サーボモータ-を回転する度数を指定します。(90度の位置を指定した例です。)
myservo.write(90);- サーボモータ-の回転位置はパルス幅でも指定できます。(1500usecを指定した例です。) write()関数は内部で、角度をパルス幅に変換しwriteMicroseconds()関数を呼び出しています。
myservo.writeMicroseconds(1500);サーボモータを操作するスケッチは?
- 標準サーボモーター(SG90)を90度->45度->90度->0度->90度->135度->90度->180度の順番で回転させます。
- 連続回転サーボモーター(SG90-HV)は同じスケッチで動作しますが動きが異なります。90度の設定で回転が止まり、角度設定がが90以下と90度以上で回転方向が変わり、90度からのずれ量に従って回転速度が変わります。(角度を90度に近い、80度や100度に設定すると回転速度の違いが良くわかります。)
//サーボモータの回転制御
#include <Servo.h>
Servo myservo;
void setup(){
myservo.attach(9);
myservo.write(90);// move servos to 90°
delay(5000);
}
void loop(){
myservo.write(90);// move servos to 90°
delay(5000);
myservo.write(45);// move servos to 45°
delay(2000);
myservo.write(90);// move servos to 90°
delay(2000);
myservo.write(0);// move servos to 0°
delay(2000);
myservo.write(90);// move servos to 90°
delay(2000);
myservo.write(135);// move servos to 135°
delay(2000);
myservo.write(90);// move servos to 90°
delay(2000);
myservo.write(180);// move servos to 180°
delay(2000);
}- 連続回転サーボモーター(SG90-HV)のスケッチの設定と回転数の関係を調べて記事にしました。
連続回転サーボモーター(SG90-HV)の回転数を測定する記事は?
回転しない場合は?
● 回転しない場合は関連しそうな箇所を調べます。
- PWM ピンではないピンに接続している
- 配線ミス(茶=GND、赤=5V、橙=信号)
- サーボの初期不良
- コードの書き間違い
サーボモーター固定治具を作りました
- Ardunoにサーボモータ-を接続して操作する時に、サーボモータ-を固定しないとモーターが回転時にサーボモータ-が振れて動きの観察が難しい場合があります。動作確認時にサーボモータ-を固定する治具を3Dプリンタで作成しました。

3Dプリンタの関連記事は?
学習の参考にしたサイトは?
- How to Control Servo Motors with Arduino
- Servo Motor: Diagram, Definition, Types, Working & Applications
- How to Control Servo Motors with Arduino – Complete Guide
まとめ
- サーボモータを回転させる基本的な知識を得られました。モーターの駆動は消費電流を考慮しないといけないので注意しないといけません。サーボモータに連続回転サーボモータがあることも知りました。
- 連続回転サーボモータの動作については[Arduinoの割込み関数を使って連続回転サーボモーターの回転速度を測定しました。]で学習しました。
ご質問、誤植の指摘などありましたら。「問い合わせ 」のページからお願いします。

