- Arduinoボードからシャフトの角度である電気パルスを送信してモータを制御する
- サーボは精密に制御できるギア(歯車)とシャフト(軸)を統合したモータで、 一般的なサーボはシャフトを様々な角度(0~180度)にすることができる
- 殆どのボードで12個のサーボオブジェクトを作成可能だが、
多くのサーボを制御する場合はArduinoの5Vピンではなく、
外部から電源を供給する
※ この場合必ずArduinoと外部電源のアースを接続する
書式 | 引数 | 説明 |
uint8_t Servo::attach(int pin) uint8_t Servo::attach(int pin, int min, int max) |
pin:デジタルピン番号 min:最小値 max:最大値 |
サーボにピンに割り当て 0~180度のパルス幅を マイクロ秒で指定 ※9,10ピンのPWM機能⇒不可 ※省略時:min[544],max[2400] (一部:min[700],max[2300]) |
void Servo::write(int value) | value:角度(0-180) | サーボに角度を書き込み シャフトを制御する |
void Servo::writeMicroseconds(int value) | value:角度(0-180) | サーボに角度のパルス幅を マイクロ秒単位で書き込み、 シャフトを制御する |
int Servo::read() | サーボの現在位置(0-180)の 角度を戻す |
|
bool Servo::attached() | サーボ変数がピンに 割り当てられているかを 戻す |
|
void Servo::detach() | サーボ変数をピンから 切り離す ※9,10ピンのPWM機能⇒可 |
/**********************************************/ /* 【 Elegoo:9 】サーボモータ */ /* ポテンショメータで */ /* サーボモータのシャフト(角度)を制御する */ /**********************************************/ /*----------------------------*/ /* サーボ ライブラリ /*----------------------------*/ #include <Servo.h> // サーボオブジェクトの作成 Servo objServo; // シャフトの角度 int intAngle = 0; /*----------------------------*/ // ポテンショメータ(10K)使用 /*----------------------------*/ #define METER /*----------------------------*/ // ピンの定義 /*----------------------------*/ #define PIN_SERVO 9 // D9:サーボモータ #define PIN_METER 0 // A0:ポテンショメータ(角度) /*********/ /* setup */ /*********/ void setup(){ // -------------------------------------------------- // サーボモータにピンに割り当て, // 0~180度のパルス幅をマイクロ秒で指定 // -------------------------------------------------- objServo.attach(PIN_SERVO, 700, 2300); // -------------------------------------------------- // シャフト位置の初期化 // -------------------------------------------------- objServo.write(0); // サーボに角度を書き込む delay(500); // シャフトがその位置に達するのを待つ } /********/ /* loop */ /********/ void loop(){ // -------------------------------------------------- // ポテンショメータでシャフトを制御する // -------------------------------------------------- #ifdef METER // ポテンショメータから角度(0-180)を読み込む intAngle = map(analogRead(PIN_METER), 0,1023,0,180); objServo.write(intAngle); // サーボに角度を書き込む delay(10); // シャフトがその位置に達するのを待つ // -------------------------------------------------- // 角度:0⇔180度でシャフトを制御する // -------------------------------------------------- #else // 角度:0 → 180度 for (intAngle = 0; intAngle <= 180; intAngle += 1){ objServo.write(intAngle); // サーボに角度を書き込む delay(10); // シャフトがその位置に達するのを待つ } // 角度:180 → 0度 for (intAngle = 180; 0 <= intAngle; intAngle -= 1){ objServo.write(intAngle); // サーボに角度を書き込む delay(10); // シャフトがその位置に達するのを待つ } #endif }
0 件のコメント:
コメントを投稿