Re:50歳から始めるArduino UNO-11
Re:50歳から始めるArduino UNO
amazon kindle版を出版しました。
4.4 サーボモータの実験
(1)サーボモータを使う-1
サーボモータを一定位置(ほぼ中央)にする。ラジコン用のサーボモータは約20msec周期に、1.5msecのパルスが中央で1.0~2.0msec程度のパルス幅によって、サーボ位置が変化します。周期やパルス幅はメーカーによって少しずつ違います。ここでは、1.5msecを90°と考えます。
サーボ端子の5Vは外部からの電源になります。
回路例
<プログラム>
void setup() {
// 13pinを出力に設定
pinMode(13,OUTPUT);
}
void loop() {
digitalWrite(13,HIGH);
delayMicroseconds(1500);
digitalWrite(13,LOW);
delay(18);
}
サーボモータ用のライブラリを用いるプログラムを作成します。
attach(pin番号,min,max);
で指定します。
デフォルトではmin:544μsec、max:2400μsecが設定されます。
ここでは、attach(10,1000,2000);と設定しました。
#include <Servo.h> //サーボモータのヘッダー
Servo srv1; //サーボモータを使う宣言
void setup() {
// PWM 10pinを出力に設定
//10pin 0°:min=1000μs、180°:max=2000
srv1.attach(10,1000,2000);
}
void loop() {
srv1.write(90);
}
とても、シンプルなプログラムになりました。Arduino UNOでは、3つのタイマーを持っており、
timer0が5,6pinのPWM出力
timer1が9,10pinのPWM出力
timer2が3,11pinのPWM出力
となっています。
このように、記述すると、2つ同時にサーボモータを動作させることができます。
#include <Servo.h> //サーボモータのヘッダー
Servo srv1; //サーボモータを使う宣言
Servo srv2; //サーボモータを使う宣言
void setup() {
// PWM 9、10pinを出力に設定
//9,10pin 0°:min=1000μs、180°:max=2000
srv1.attach(10,1000,2000);
srv2.attach(9,1000,2000);
}
void loop() {
srv1.write(0);
srv2.write(180);
delay(1000);
srv1.write(90);
srv2.write(90);
delay(1000);
srv1.write(180);
srv2.write(0);
delay(1000);
}