- 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
}

