Servo
LGPL-2.1V1.3.0 Michael Margolis, Arduino2026/07/03
Arduino

種々のサーボモーターを制御することを可能とする。

このライブラリは多くのサーボを制御することができる。タイマーを注意深く利用し、12個のサーボを1つのタイマーで制御する。Arduino Dueでは、60個まで制御することができる。

リポジトリ

このライブラリを使うとArduinoボードを使ってRCサーボモーターを制御することができる。サーボは精密に制御できるギアとシャフトを統合したものである。一般的なサーボはシャフトを様々な角度にすることができ、それは、通常0度から180度である。連続回転サーボはシャフトの回転速度を制御することができる。

サーボライブラリは、ほとんどのArduinoボードで12個のモーターを制御できる。Arduino Megaでは48個のモーターを制御できる。Mega以外のボードでは、サーボライブラリを使うと、サーボを接続していなくても、9番ピンと10番ピンのanalogWrite()(PWM)が使えなくなる。Megaでは、12個までPWMの機能を妨げずに利用できる。12から23までのモーターを使うと11番ピンと12番ピンのPWMが使えなくなる。

このライブラリを使うためには、以下を宣言する。

#include <Servo.h> 

回路

サーボモーターは、電源、アース、制御信号の3線を持っている。電源線は多くの場合赤で、Arduinoボードの5Vピンに接続する。アース線は多くの場合黒か茶色で、ArduinoボードのGNDピンに接続する。制御信号線は黄色かオレンジ、白で、Arduinoボードのデジタルピンに接続する。サーボは大量の電力を消費するので、1個か2個よりも多くのサーボを制御する場合は、Arduinoの5Vピンではなく、外部から電源を供給する必要がある。この場合Arduinoと外部電源のアースを接続することを忘れないように。

プログラム例

  • Knob: 可変抵抗を使ってサーボの位置を制御する。
  • Sweep: サーボのシャフトを行き来させる。

このライブラリは、avr、megaavr、sam、samd、nrf52、stm32f4、mbed、mbed_nano、mbed_portenta、mbed_rp2040、renesas、renesas_portenta、renesas_uno, zephyrアーキテクチャで利用できるので、以下のArduinoボードで利用可能である。

アーキテクチャの互換性とは、以下のリストにあるボードで、コードをコンパイル・アップロードで切るということである。

Samd

AVR

MegaAVR

Mbed

このライブラリを使うためには、Arduino IDEでライブラリマネージャを開きインストールする。

attach()

名称

Servo::attach()

説明

Servo変数をピンに割り当てる。Arduino0016とそれ以前のバージョンでは、サーボライブラリは9番ピンと10番ピンの2つのピンしか使えない。

書式

uint8_t Servo::attach(int pin);

uint8_t Servo::attach(int pin, int min, int max);

引数

pinサーボが接続されているピン番号。
min(オプション)最小角度(0度)のときのパルス幅をマイクロ秒で指定する。デフォルトは544。
max(オプション)最大角度(180度)のときのパルス幅をマイクロ秒で指定する。デフォルトは2400。

戻り値

サーボのインデックス番号。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <Servo.h> 

Servo myservo;

void setup() 
{ 
  myservo.attach(9);
} 

void loop() {} 
write()

名称

Servo::write()

説明

サーボに値を書き込み、シャフトの制御を行う。通常のサーボではシャフトの角度(度数法)を設定し、シャフトをその方向に動かす。連続回転サーボでは、サーボのスピードを設定する。この場合0がある方向での最大スピードで、180が逆方向への最大スピード、90付近が停止である。

書式

void Servo::write(int value);

引数

valueサーボに設定する値。0から180。

戻り値

なし。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <Servo.h> 

Servo myservo;

void setup() 
{ 
  myservo.attach(9);
  myservo.write(90);  // set servo to mid-point
} 

void loop() {} 
writeMicroseconds()

名称

Servo::writeMicroseconds()

説明

サーボに与えるパルス幅をマイクロ秒単位で設定し、シャフトを制御する。一般的なサーボでは、1000が反時計回りの最大値、2000が時計回りの最大値、1500が中央である。

一部メーカーのサーボはこの標準に従わないことがある。その場合700から2300の値であることが多い。サーボが動かなくなるまでこの値を変更してもいい。ただし、範囲を超えた値を設定すると過電流状態になるので避けるべきである。

連続回転サーボでは、write()と同様の反応をする。

書式

void Servo::writeMicroseconds(int value);

引数

value設定する値(マイクロ秒)。

戻り値

なし。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <Servo.h> 

Servo myservo;

void setup() 
{ 
  myservo.attach(9);
  myservo.writeMicroseconds(1500);  // set servo to mid-point
} 

void loop() {} 
read()

名称

Servo::read()

説明

現在のサーボの値(最後にwrite()に渡した値)を読み出す。

書式

int Servo::read();

引数

なし。

戻り値

サーボの角度。0度から180度。

attached()

名称

Servo::attached()

説明

サーボ変数がピンに割り当てられているかを調べる。

書式

bool Servo::attached();

引数

なし。

戻り値

サーボ変数がピンに割り当てられていればtrue、そうでなければfalse。

detach()

名称

Servo::detach()

説明

サーボ変数をピンから切り離す。すべてのサーボ変数が切り離されると、9番ピンと10番ピンをanalogWrite()を使ってPWM出力に利用することができる。

書式

void Servo::detach();

引数

なし。

戻り値

なし。

オリジナルのページ

https://docs.arduino.cc/libraries/servo/

inserted by FC2 system