Arduino-サーボモーターの使い方
当記事では、Arduinoでサーボモーターを使う方法を詳しく解説します。
Arduinoのサーボモーター制御用ライブラリ「Servo」を使ったプログラムで、サーボモーターを動作させます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
サーボモーターはどんな電子部品?
サーボモーターは、受信したパルス幅(PWM)によって特定の角度まで回転する電子部品です。例えば、パルス幅が0.5msecなら0°、1.45msecなら90°、2.4msecなら180°に回転します。
サーボモーターは、産業用機械、産業用ロボット、ラジコンなど様々な分野に使われていますが、当記事では電子工作でよく使われるモーター、ギヤボックス、制御基板が一体になった「SG-90」を使用して、サンプルプログラムを解説していきます。
サンプルプログラム(サンプルスケッチ)
- サーボモーター SG-90
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- 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秒待機)
}
0°
90°
180°
90°
0°
90°
180°
90°
0°
サンプルプログラムでは、現在のサーボモーターの角度をシリアルモニタに表示させます。
「角度指定でサーボモータを動作」のサンプルプログラムと同様の角度でサーボモーターを回転させ、その都度、サーボモーターの角度を取得します。
おすすめのArduinoボードはどれ?
当記事『Arduino-サーボモーターの使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。