Arduino IDEには、よく使うスケッチのユニットをライブラリという形式で保存しておくことができます。ライブラリは自分で作ったものを追加することもできますが、標準で搭載されているものもあります。今回は、その内の<Servo.h>というライブラリを使って、サーボモーターを回してみました。
今回必要な部品
- Arduino×1
- USBケーブル( Aコネクタ – Bコネクタ )×1
- ミニブレットボード×1
- サーボモーター(SG90)×1
- ジャンプワイヤー×3
回路図
メニューバーの“新規ファイル”ボタンをクリックして開いたArduino IDEで、“スケッチ” → “ライブラリをインクルード” → “Servo”をクリックすると、新規ファイルの先頭に「#include <Servo.h>」が入力されるので、“ファイル” → “名前を付けて保存” をクリックし、ファイル名「servoMOTOR」で保存しておきます。
<Servo.h>には、PWM出力でサーボモーターのシャフトの保持角度を指定する関数として、
“write(angle)”と“writeMicroseconds(uS)”がありますが、先ず、“write(angle)”を使ってサーボモーターを回してみましょう。
スケッチ(その1)
#include <Servo.h> //ライブラリ<Servo.h>を組み込む Servo sv; //Servoオブジェクト“sv”を作成する void setup() { sv.attach(6); //svの出力をD6番ピンに割り当てる } void loop() { sv.write( 0 ); //D6番ピンに“0度”を出力する delay( 1000 ); //そのままで1000ミリ秒待機する sv.write( 90 ); //D6番ピンに“90度”を出力する delay( 1000 ); //そのままで1000ミリ秒待機する sv.write( 180 ); //D6番ピンに“180度”を出力する delay( 1000 ); //そのままで1000ミリ秒待機する sv.write( 90 ); //D6番ピンに“90度”を出力する delay( 1000 ); //そのままで1000ミリ秒待機する }
“write(angle)”では、サーボモーターのシャフトの保持角度を直接、指定できます。このスケッチでは、1秒毎に、0度 → 90度 → 180度 → 90度 → 0度と角度が変わります。
次の“writeMicroseconds(uS)”では、PWM出力のパルス周期:20ミリ秒に対するhighパルス幅をマイクロ秒で指定します。highパルス幅とシャフトの保持角度の相関は、サーボモーターの仕様によって違うので、事前に確認しておきましょう。
スケッチ(その2)
#include <Servo.h> //ライブラリ<Servo.h>を組み込む Servo sv; //svをServoの変数とする void setup() { //svの出力をリセットした上で、D6番ピンに割り当て、パルス幅を500~2400マイクロ秒とする sv.attach(6, 500, 2400) ; } void loop() { //iの初期値は1500;2400未満の場合は次の{}内を実行する;iに1を足す for(int i = 1500; i<2400; i++){ sv.writeMicroseconds(i) ; delay(10) ; } //iの初期値は2400;500より大きい場合は次の{}内を実行する;iから1を引く for(int i = 2400; i>500; i--) { sv.writeMicroseconds(i) ; delay(10) ; } //iの初期値は500;1500未満の場合は次の{}内を実行する;iに1を足す for(int i = 500; i<1500; i++){ sv.writeMicroseconds(i) ; delay(10) ; } }
このサーボモーターの仕様を見ると、+90度のときのhighパルス幅が2400マイクロ秒、-90度のときは、500マイクロ秒で、中間の0度は1450マイクロ秒となっています。
このスケッチ(その2)では、“attach”関数でhighパルス幅の上下限を規定した上で、変数:iをD6端子からPWM出力しています。
“attach”関数によるリセット出力が1500マイクロ秒なので、そこから繰返し処理を開始しました。各ステップ毎の待機時間は10ミリ秒なので、-90度 ~ +90度の周期は(2400-500)×10 = 19秒になります。“write(angle)”のときより、回転がスムーズで音も静かです。