Arduinoでサーボモータ(SG90、SG90-HV)を操作しました。

サーボモータをどのよう学習するの?

  • サーボモータの仕組み、Arduinoとの接続方法、操作方法を、標準サーボモーター(SG90)、連続回転サーボモーター(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)の回転数を測定する記事は?

サーボモーター固定治具を作りました

  • Ardunoにサーボモータ-を接続して操作する時に、サーボモータ-を固定しないとモーターが回転時にサーボモータ-が振れて動きの観察が難しい場合があります。動作確認時にサーボモータ-を固定する治具を3Dプリンタで作成しました。

学習の参考にしたサイトは?


ご質問、誤植の指摘などありましたら。「問い合わせ 」のページからお願いします。