2007年10月20日

Arduino

サーボを動かす方法

以前試したサーボを動かす方法は、20msの間に、heightとlowをつくる方法だった。
今回は、可変抵抗をセンサーにして、前回の方法も含め3つの方法で試してみる。

1 │ analogWriteコマンドを使う

void setup(){
  pinMode(3,OUTPUT);
}
void loop(){
  int val=analogRead(0)/4; // (0~1023)/4
  analogWrite(3,val); // (0~255)
  delay(20);
}

この方法は、
Arduino基盤にpwmと書いてあるポートにだけ可能。
分解能は、256
※サーボのメーカーによっては、動かないときがある。

2 │ Servoオブジェクトを使う

ここからオブジェクトをダウンロードして、Arduinoのフォルダのなかのlib/targets/librariesに入れてArduinoを起動する。

#include <Servo.h>
Servo servo;
void setup() {
  servo.attach(3);
}
void loop(){
  float val=analogRead(0)*180.00/1023;
  servo.write(int(val));
  delay(20);
  Servo::refresh();
}

この方法は、
どのポートでも可能
分解能は、180
※arduinoのバージョン8以上で動作します

3 │1024の分解能をつかう

void setup(){
  pinMode(3,OUTPUT);
}
void loop(){
  int val=analogRead(0)*2; //1023を2倍して、振幅を約2000として
  digitalWrite(3,HIGH);
  delayMicroseconds(val+500); //振幅値+最小パルス500
  digitalWrite(3,LOW);
  delayMicroseconds(20000-val-500); //20msから上記のパルス長を差し引いて、常に20ms(20000us)にサイクルに調整する。
}

これは、以前試した方法と同じ。