サーボモーターをマイコンから使うにはPWMを扱うことになりますが、Arduinoならサーボモーターを制御するためのライブラリが用意されています。
このライブラリを使えばとても簡単に複数のサーボモーターを動かすことが出来てしまいます。
ここではサーボモーター「SG92R」をArduino NANOと接続して実際に動作させてみようと思います。
サーボモーターを動かすための回路
実体配線図
サーボモーターの配線は使用しているサーボモーターのデータシート等を確認してください。
実際の配線画像
実体配線図と違っている事に気付きましたか?
この画像では5V電源を用意してあるので、Vin端子は使用していません。Vin端子は5Vより高い電圧を入力する端子になるので、電池4本以上で動かす場合は実体配線図と同じ配線にします。
電源に関して
Vin端子の先には5Vのレギュレータがあります。今回は5V電源を用意しましたので使用しませんでした。
このVin端子は最大DC12Vを目安に電源を入力します。ですので乾電池4本や6P電池辺りを繋ぐ形になるかと思います。
ちなみに今回使用した5V電源はこちらです。
使わなくなったUSBメモリの端子だけ取り外して配線を付けただけのものです。
これでもちょっとした電源として使えるので作っておくと何かと便利です。
そしてこれらのUSBタイプのACアダプタやモバイルバッテリーに繋いで電源を取ります。
サーボモーター動作確認用スケッチ
テスト用スケッチ
#include <Servo.h> // サーボライブラリ
Servo myservo; // サーボオブジェクト
void setup() {
// put your setup code here, to run once:
myservo.attach(6); // D6ピンをサーボ制御に使用
}
void loop() {
// put your main code here, to run repeatedly:
myservo.write(0); // D6番ピンに“0度”を出力する
delay( 1000 ); // 1000ミリ秒待機する
myservo.write(45); // D6番ピンに“45度”を出力する
delay( 1000 ); // 1000ミリ秒待機する
myservo.write(90); // D6番ピンに“90度”を出力する
delay( 1000 ); // 1000ミリ秒待機する
myservo.write(135); // D6番ピンに“135度”を出力する
delay( 1000 ); // 1000ミリ秒待機する
myservo.write(180); // D6番ピンに“180度”を出力する
delay( 1000 ); // 1000ミリ秒待機する
}
スケッチの動作説明
コードにコメントを書いたので大体動作は理解頂けると思います。
電源オンで0度に移動してから、1秒毎に45度づつ回転して180度まで行ったら一気に0度に戻ってループします。
このサーボモーターは0度から180度まで動くタイプなのですが、360度タイプもあるのでその場合は0度から360度まで設定できます。
回転位置を角度で指定するので直観的で分かりやすいですね。
サーボモーターの動作を見てみる
動くものですので、動画を用意してみました。
まとめ
いかがでしたか、思ったより簡単にサーボモーターを動かせますよね。今回はただ動かすだけでしたが、サーボモーターに合わせて細かく制御する方法も用意されているので興味があればチャレンジしてみては如何でしょうか。