GO-AHEADの日記

GO-AHEADで出版した書籍の紹介をします

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°と考えます。

f:id:GO-AHEAD:20201222100922p:plain

サーボ端子の5Vは外部からの電源になります。

f:id:GO-AHEAD:20201222100939p:plain

回路例

f:id:GO-AHEAD:20201222100954p:plain

<プログラム>
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);

}