Arduino-サーボモーターの使い方

  • URLをコピーしました!

当記事では、Arduinoでサーボモーターを使う方法を詳しく解説します。

Arduinoのサーボモーター制御用ライブラリ「Servo」を使ったプログラムで、サーボモーターを動作させます。

なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。

目次

サーボモーターはどんな電子部品?

サーボモーターは、受信したパルス幅(PWM)によって特定の角度まで回転する電子部品です。例えば、パルス幅が0.5msecなら0°、1.45msecなら90°、2.4msecなら180°に回転します。

サーボモーターは、産業用機械、産業用ロボット、ラジコンなど様々な分野に使われていますが、当記事では電子工作でよく使われるモーター、ギヤボックス、制御基板が一体になった「SG-90」を使用して、サンプルプログラムを解説していきます。

サンプルプログラム(サンプルスケッチ)

Arduino Uno サーボモーター 配線図
用意するもの
  1. サーボモーター SG-90
  2. Arduino Uno
  3. USBケーブル
  4. ブレッドボード
  5. ジャンパ線
  6. PC(プログラム書き込み・シリアルモニタ表示)

角度指定でサーボモータを動作

#include <Servo.h>

Servo servo5;//サーボモータ制御用のインスタンス「servo5」を作成

void setup() {
  servo5.attach(5);//5番ピンにサーボモータの制御を割り当て
}

void loop() {
  servo5.write(0);//0°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.write(90);//90°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.write(180);//180°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.write(90);//90°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
}

サンプルプログラムでは、角度を指定してサーボモーターを動作させます。「0°⇒90°⇒180°⇒90°⇒0°...」と1秒ごとに回転していきます。

パルス幅指定でサーボモータを動作

#include <Servo.h>

Servo servo5;//サーボモータ制御用のインスタンス「servo5」を作成

void setup() {
  servo5.attach(5);//5番ピンにサーボモータの制御を割り当て
}

void loop() {
  servo5.writeMicroseconds(500);//送信するパルス幅を500usecに指定、0°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.writeMicroseconds(1450);//送信するパルス幅を1450usecに指定、90°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.writeMicroseconds(2400);//送信するパルス幅を2400usecに指定、180°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
  servo5.writeMicroseconds(1450);//送信するパルス幅を1450usecに指定、90°の角度にサーボモータを動かす
  delay(1000);//1000msec待機(1秒待機)
}

サンプルプログラムでは、パルス幅を指定してサーボモーターを動作させます。サーボモーターは受信するパルス幅によって回転する角度が決まっており、500usec(0.5msec)なら0°の角度にサーボモータが動きます。

「角度指定でサーボモータを動作」のサンプルプログラムと同様に、「0°⇒90°⇒180°⇒90°⇒0°...」と1秒ごとに回転していきます。

サーボモータの角度を読み取り

#include <Servo.h>

Servo servo5;//サーボモータ制御用のインスタンス「servo5」を作成

void setup() {
  servo5.attach(5);//5番ピンにサーボモータの制御を割り当て
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  servo5.write(0);//0°の角度にサーボモータを動かす
  Serial.print(servo5.read());//「サーボモータ(5番ピン)の角度」を送信
  Serial.println("°");//「°」を送信、改行
  delay(1000);//1000msec待機(1秒待機)

  servo5.write(90);//90°の角度にサーボモータを動かす
  Serial.print(servo5.read());//「サーボモータ(5番ピン)の角度」を送信
  Serial.println("°");//「°」を送信、改行
  delay(1000);//1000msec待機(1秒待機)

  servo5.write(180);//180°の角度にサーボモータを動かす
  Serial.print(servo5.read());//「サーボモータ(5番ピン)の角度」を送信
  Serial.println("°");//「°」を送信、改行
  delay(1000);//1000msec待機(1秒待機)

  servo5.write(90);//90°の角度にサーボモータを動かす
  Serial.print(servo5.read());//「サーボモータ(5番ピン)の角度」を送信
  Serial.println("°");//「°」を送信、改行
  delay(1000);//1000msec待機(1秒待機)
}
シリアルモニタ例


90°
180°
90°

90°
180°
90°

サンプルプログラムでは、現在のサーボモーターの角度をシリアルモニタに表示させます。

「角度指定でサーボモータを動作」のサンプルプログラムと同様の角度でサーボモーターを回転させ、その都度、サーボモーターの角度を取得します。

おすすめのArduinoボードはどれ?

当記事『Arduino-サーボモーターの使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。

やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。

電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。

また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。

このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次