Arduino日本語リファレンス


ServoTimer1(サーボモータのドライブ)

原文

ServoTimer1ライブラリはピン9と10に接続されたサーボをドライブします。このAPIはwiring.orgのサーボライブラリでパターン化されたものですが、コードは異なります。

このライブラリは約450バイトのFlashメモリと、2+(4*サーボ数)バイトのSRAMを消費します。

【インストール方法】

servotimer1.zip
http://www.arduino.cc/playground/uploads/ComponentLib/servotimer1.zip

上記のファイルをArduino IDEのライブラリフォルダにコピーします。

【メソッド】

attach(int pinNum) 指定したピンにサーボを割り当てます。戻り値が0の場合は失敗です

detach() ピンをサーボから解放します

write(int angle) サーボを0度から180度の指定した角度にセットします

read() 最後にwrite()でセットした値を取得します

attached() サーボが割り当てられているときは1を返します

refresh() 無視してください。SoftwareServoライブラリとの互換性のために存在します

setMinimumPulseWidth(uint16_t duration) 0度のときのパルス幅をマイクロ秒単位で指定します

setMaximumPulseWidth(uint16_t duration) 180度のときのパルス幅をマイクロ秒単位で指定します

【補足】

このライブラリはサーボを完全にハードウェアで制御します。ジッタは1クロック以内に抑えられ、パルスの損失や遅延が生じません。また、実行中の別の処理を邪魔することもありません。

このライブラリはピン9と10でのみ使用でき、そのピンをアナログ出力と兼用することはできません。すべてのサーボに対してdetach()を実行した後ならば、timer1を他の目的に使うことができます。再度attach()を実行すると、timer1はまたサーボのために使われます。


【例】

"90s"や"80w"といった文字列を送ることでサーボを90度あるいは80度にセットします。"d"(detach)でピン10のサーボを無効にし、"a"(attach)で再度有効にすることができます。ServoTimer1::refresh()は必要ありません。

#include <ServoTimer1.h>

ServoTimer1 servo1;
ServoTimer1 servo2;

void setup() {
  pinMode(1,OUTPUT);
  servo1.attach(9);
  servo2.attach(10);
  Serial.begin(19200);
  Serial.print("Ready");
}

void loop() {
  static int v = 0;

  if ( Serial.available()) {
    char ch = Serial.read();

    switch(ch) {
      case '0'...'9':
        v = v * 10 + ch - '0';
        break;
      case 's':
        servo1.write(v);
        v = 0;
        break;
      case 'w':
        servo2.write(v);
        v = 0;
        break;
      case 'd':
        servo2.detach();
        break;
      case 'a':
        servo2.attach(10);
        break;
    }
  }
}



[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [ドキュメント一覧]