Arduinoで電子工作をするならやはりモーターは外せない部品です。これまで、連載の中でもいくつかモーターを扱ってデバイスなどを作成してきましたが、今回はおさらいの意味を込めて、特に利用頻度が高いと思われるサーボモーターの基本から詳しい使い方までじっくりと腰を据えて取り組んでみたいと思います。
今回の電子工作レシピ
完成までの時間目安:60分
必要なパーツ
目次
- サーボモーターってなに?
- サーボモーターの購入時のポイント
- トルクの計算について
- 必要な電圧と電源
- Arduinoのプログラムでサーボ制御
- まとめ
1. サーボモーターってなに?

写真1 サーボモーター
サーボモーターはモーターの一種で、通常のモーターと違い、主に回転角度を指定して回転させる使い方を基本とするため、様々な工場で利用されているほか、ホビー用途ではロボットの関節や、ラジコンのステアリングなどに利用されています。
サーボモーター – wikipedia
サーボモーター(Servomotor)とはサーボ機構において位置、速度等を制御する用途に使用するモーターである。モーターの種類としては、「電動機」、「油圧モーター」など、特定のモーター形式を示すものではない。しかし、現在は、ロボット用途などに使用される「検出器付の電動機」で、フィードバック制御するものが一般的である。
wikipediaにもあるように、サーボモーターは通常のモーターに回転角度を検出する機能がついていて、その信号を通信することができるため、回転角度を制御することが可能です。また、サーボモーターと第37回で出てきたステッピングモーターなどとの違いをおさらいしてみると
- モーター:電力をかけるとひたすら回る
- サーボモーター:信号に応じて0度からN度の範囲で回転する
- ステッピングモーター:信号に応じてモーターを制限なく制御できる
- ブラシレスモーター:安定した回転速度などの制御が可能(ドローンなどで利用されています)
となります。ですので、上記の用途に応じてモーターを使い分けることが重要です。

写真2 色々なモーター(左からブラシレス、ステッピング、サーボ、通常のモーター)
2. サーボモーターの種類と購入時のポイント
実際にサーボモーターを使う場合、どのサーボモーターを購入したら良いでしょうか?サーボモーターを購入する際の基本ポイントとしては、
- トルク:モーターを動かす力、数値が大きければ大きいほど強い力になる(単位はkgf・cmなど)
- 回転角度(制御角):モーターを表示されている角度まで回すことが可能
- 動作速度:モーターを回転させるスピード
- 動作電圧:動作させるための必要な電圧
基本、上記のポイントを抑えておけば、用途に応じたサーボモーターを手に入れることができると思います。
2.1 トルクの計算について
サーボモーターを扱う上で、もっとも大事なことはどれくらいの力で動かせるか(どれくらいのトルクが必要か)ということです。トルクは購入時にはkgf・cmやkgのみの単位で示されます。トルクの計算方法としてはkgf・cmの場合は1[cm]先でN[kg]のものを持ち上げられる力ということになります。例として5kgのものを持ち上げたい場合、サーボモーターの軸についている柄が2cmだと、5kgf × 2cm = 10kgf・cm以上のトルクが必要になります。

図1 トルクの計算方法
3. 必要な電圧と電源
サーボモーターをArduinoで動かす場合、他のモーターと同様にArduinoから取り出せる電圧や電流だと足りない場合がほとんどです。その場合は、外部に電源をとって、角度の制御信号のみArduinoから送信してサーボモーターを制御してください。本連載でよく利用しているArduino UNO R3ではI/Oピン(デジタル・アナログピン)は1つのピンから流せる電流が大体20mA(40mA以上流すと壊れる可能性)なので、サーボモーターの動作電圧が5Vでも、デジタル・アナログピンからの供給は電流が不足するためサーボモーターやArduinoが壊れたり、サーボモーターは動くが力が非常に弱いなどといった現象になりますので、利用する際には注意が必要です。ただし、5Vや3.3Vピンは絶対最大定格電流値(これ以上は流せない電流値)が200mAとなっているので、小さいサイズのサーボモーターは利用することが可能です。
例として、動作電圧が9Vのサーボモーターの場合は下記のような回路図でサーボモーターにArduinoとは別に電源を供給する必要があります。

図2 Arduinoとサーボモーターの回路
また、サーボモーターの動作電圧が5Vなどの小さい場合で、Arduinoと電源を共用したい場合、下記のような回路で5Vから電流を引っ張ることが可能です。

図3 Arduinoとサーボモーターの電源を一緒に供給
4. Arduinoのプログラムでサーボ制御
サーボモーターの制御には、Arduinoの場合、ざっと2種類の方法があります。サーボモーターは本来PWMというパルス信号をオンオフしてモーターを制御する方法です(ステッピングモーターの回でも紹介)。PWMで直接サーボモーターを制御すると細かな動作の表現なども可能になりますが、プログラムとしては少し難易度が高くなるため、Arduinoで用意されているサーボモーター用のライブラリを利用することをお勧めします。
Arduino IDE – [ファイル] – [スケッチの例] – [10.StarterKit BasicKit] – [p05_ServoMoodindicator]
このサンプルでは、アナログ0番ピン(A0)の入力値をもとにサーボモーターの角度を変えることができるプログラムになっています。アナログピンにはボリュームスイッチなどの可変抵抗や光センサなどを利用することで、数値が変化した際にサーボモーターも動くようにしてみてください。
サーボモーターライブラリの関数
サーボモーターのライブラリはサーボモーターに送る制御信号のピン番号の指定と、サーボモーターを動かす際の角度指定の2種類の命令が基本となります。
myServo.attach(9); //サーボモーターの信号ピンを指定
myServo.write(angle); //サーボモーターを指定の角度(angle)まで動かす
下記の回路はFEETECH FS90 マイクロサーボを使った例です。このサーボモーターの動作電圧は6V、動作時の電流は200mAなのでサーボモーターの電源は単3電池を4本直列(6V)にしたものを利用します。

図4 サンプルスケッチの回路

写真3 サーボモーター制御回路

図4 サーボモーターのexample
/* Arduino Starter Kit example Project 5 - Servo Mood Indicator This sketch is written to accompany Project 5 in the Arduino Starter Kit Parts required: servo motor 10 kilohm potentiometer 2 100 uF electrolytic capacitors Created 13 September 2012 by Scott Fitzgerald http://www.arduino.cc/starterKit This example code is part of the public domain */ // include the servo library #include <Servo.h> Servo myServo; // create a servo object int const potPin = A0; // analog pin used to connect the potentiometer int potVal; // variable to read the value from the analog pin int angle; // variable to hold the angle for the servo motor void setup() { myServo.attach(9); // attaches the servo on pin 9 to the servo object Serial.begin(9600); // open a serial connection to your computer } void loop() { potVal = analogRead(potPin); // read the value of the potentiometer // print out the value to the serial monitor Serial.print("potVal: "); Serial.print(potVal); // scale the numbers from the pot angle = map(potVal, 0, 1023, 0, 179); // print out the angle for the servo motor Serial.print(", angle: "); Serial.println(angle); // set the servo position myServo.write(angle); // wait for the servo to get there delay(15); }
まとめ
今回、改めてサーボモーターの基本をおさらいしました。次回は、実際にいろいろなサーボモーターを使ってどんなことができるのかを考えてみたり、これまでの連載で未完成だったあのデバイス(!?)を完成に向けて取り組んでみたいと思います!
■関連記事