16.サーボモーター
サーボモーター
サーボモーターとは、位置や速度など制御するモーターで、ロボットの関節等に使用されます。
回路
回路を作成してみましょう。
今回は外部電源(電池)を使用するため、プラスマイナスや、ショートに注意して下さい。
スケッチ
スケッチしてみましょう。 電池を入れる前にスケッチ書き込みを行い、一旦PCから外してから電池をセットし、もう一度接続して確認しましょう。
#include <Servo.h>
int servo_pin = 3;
int vol_pin = 0;
Servo myservo;
void setup()
{
myservo.attach(servo_pin);
}
void loop()
{
// 可変抵抗のデータを取得
int get_data = analogRead(vol_pin);
// 取得した可変抵抗の電圧を位置情報に変換
int move_pos = map(get_data, 0, 1023, 0, 180);
// サーボモーターを動かす
myservo.write(move_pos);
delay(10);
}
可変抵抗をドライバー等で操作し、サーボモーターの動きを確認してみましょう。
プログラムでサーボモーターを制御
次は、プログラムにてサーボモーターを制御してみましょう。
サーボモーターを動かす場合は、下記の関数で位置を指定する必要があります。
myservo.write( 位置 );
myservo.write(0);とすると角度が0度の場所に移動し、
myservo.write(180);とすると角度が180度の場所に移動する
といったイメージです。
※サーボモーターには移動できる範囲があり、その範囲(今回使用するものでは0〜200程度)を超えて移動させようとするとサーボモーターが壊れる可能性がありますので注意して下さい。
ループ処理にて0から1ずつ移動し、180になったら0まで移動する処理を作ってみましょう。
回路
力は弱くなりますが、電池がなくてもサーボを動かすことができます。
今回は電池なしで作成してみましょう。
スケッチ
#include <Servo.h>
Servo myservo;
#define servo_pin 9
#define max_pos 180
#define min_pos 0
int mv = 1; // 1度に移動する角度
int pos = 0; // 位置
void setup() {
myservo.attach(servo_pin);
Serial.begin(9600);
}
void loop()
{
pos += mv;
// 限界地点まで移動した場合、移動する向きを反転
if (pos > max_pos){
pos = max_pos;
mv *= -1;
} else if(pos < min_pos){
pos = min_pos;
mv *= -1;
}
// サーボモーターを動かす
myservo.write(pos);
delay(30);
}