はじめての電子工作超入門

第57回 Arduinoでモーター再入門(その1)サーボモーターの基本

DSC_0093

Arduinoで電子工作をするならやはりモーターは外せない部品です。これまで、連載の中でもいくつかモーターを扱ってデバイスなどを作成してきましたが、今回はおさらいの意味を込めて、特に利用頻度が高いと思われるサーボモーターの基本から詳しい使い方までじっくりと腰を据えて取り組んでみたいと思います。

目次

  1. サーボモーターってなに?
  2. サーボモーターの購入時のポイント
    1. トルクの計算について
  3. 必要な電圧と電源
  4. Arduinoのプログラムでサーボ制御
  5. まとめ

1. サーボモーターってなに?

写真1 サーボモーター

写真1 サーボモーター

サーボモーターはモーターの一種で、通常のモーターと違い、主に回転角度を指定して回転させる使い方を基本とするため、様々な工場で利用されているほか、ホビー用途ではロボットの関節や、ラジコンのステアリングなどに利用されています。

サーボモーター  – wikipedia
サーボモーター(Servomotor)とはサーボ機構において位置、速度等を制御する用途に使用するモーターである。モーターの種類としては、「電動機」、「油圧モーター」など、特定のモーター形式を示すものではない。しかし、現在は、ロボット用途などに使用される「検出器付の電動機」で、フィードバック制御するものが一般的である。

wikipediaにもあるように、サーボモーターは通常のモーターに回転角度を検出する機能がついていて、その信号を通信することができるため、回転角度を制御することが可能です。また、サーボモーターと第37回で出てきたステッピングモーターなどとの違いをおさらいしてみると

  • モーター:電力をかけるとひたすら回る
  • サーボモーター:信号に応じて0度からN度の範囲で回転する
  • ステッピングモーター:信号に応じてモーターを制限なく制御できる
  • ブラシレスモーター:安定した回転速度などの制御が可能(ドローンなどで利用されています)

となります。ですので、上記の用途に応じてモーターを使い分けることが重要です。

写真2 色々なモーター(左からブラシレス、ステッピング、サーボ、通常のモーター)

写真2 色々なモーター(左からブラシレス、ステッピング、サーボ、通常のモーター)

 

2. サーボモーターの種類と購入時のポイント

実際にサーボモーターを使う場合、どのサーボモーターを購入したら良いでしょうか?サーボモーターを購入する際の基本ポイントとしては、

  • トルク:モーターを動かす力、数値が大きければ大きいほど強い力になる(単位はkgf・cmなど)
  • 回転角度(制御角):モーターを表示されている角度まで回すことが可能
  • 動作速度:モーターを回転させるスピード
  • 動作電圧:動作させるための必要な電圧

基本、上記のポイントを抑えておけば、用途に応じたサーボモーターを手に入れることができると思います。

 

2.1 トルクの計算について

サーボモーターを扱う上で、もっとも大事なことはどれくらいの力で動かせるか(どれくらいのトルクが必要か)ということです。トルクは購入時にはkgf・cmやkgのみの単位で示されます。トルクの計算方法としてはkgf・cmの場合は1[cm]先でN[kg]のものを持ち上げられる力ということになります。例として5kgのものを持ち上げたい場合、サーボモーターの軸についている柄が2cmだと、5kgf × 2cm = 10kgf・cm以上のトルクが必要になります。

図2 トルクの計算方法

図1 トルクの計算方法

 

3. 必要な電圧と電源

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

例として、動作電圧が9Vのサーボモーターの場合は下記のような回路図でサーボモーターにArduinoとは別に電源を供給する必要があります。

図3 Arduinoとサーボモーターの回路

図2 Arduinoとサーボモーターの回路

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

図4 Arduinoとサーボモーターの電源を一緒に供給

図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 サンプルスケッチの回路

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

 

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

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

 

 

図4 サーボモーターのexample

図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);
}

 

まとめ

今回、改めてサーボモーターの基本をおさらいしました。次回は、実際にいろいろなサーボモーターを使ってどんなことができるのかを考えてみたり、これまでの連載で未完成だったあのデバイス(!?)を完成に向けて取り組んでみたいと思います!

 

■関連記事

電子工作マニュアル Vol.5
赤川シホロ

電子工作や新しいデバイスをこよなく愛するエンジニア。日常生活のちょっとしたことを電子工作で作って試して、おもしろく過ごしたいと日々考えています。