2016年8月11日木曜日

Johnny-Fiveでマイコン制御27 - サーボモーターその2

○Servoオブジェクトを作成する
 サーボモーターを制御するには、Servoオブジェクトを使います。Servoオブジェクトは、物理的なボードに接続された単一のサーボモーターを表すオブジェクトです。Servoオブジェクトを作成するには、Servoクラスのコンストラクタを使います。引数には、サーボモーターのパルス端子を接続するピンの番号を指定します。
new five.Servo(ピン番号);

 オプションの「pin」プロパティでピン番号を指定する場合は、オブジェクト形式(JSON)で次のように書きます。
new five.Servo ({
  pin: ピン番号
})

 たとえば、10ピンに接続したサーボモーターを制御するServoオブジェクトを作成するには、次のように指定します。
new five.Servo(10);

・配線図

 I2Cインターフェイスの「PCA9685」を使用する場合は、「controller」プロパティにデバイス名「PCA9685」を、「pin」プロパティにサーボモーターが接続されているPCA9685のピン番号を指定します。
new five.Servo({
  controller: "PCA9685",
  pin: 0
});

・配線図


オプションを指定してServoオブジェクトを作成する
 Servoオブジェクトは、次のオプションを指定して作成することができます。

・一般的なオプション
プロパティ
タイプ
/説明
既定値
range
配列
動きの範囲、[最小角度, 最大角度]
[0, 180]
type
文字列
サーボのタイプ、「standard」または「continuous
standard
startAt
数値
開始角度(0180)
90
offset
数値
オフセット値

invert
真偽
true」で反転、「false」で正転
false
center
真偽
true」で中央ポジションに動かす
false

・デバッグオプション
プロパティ
タイプ
/説明
既定値
debug
真偽
true」でデバッグモード
false

・連続(continuous)サーボオプション
プロパティ
タイプ
/説明
既定値
deadband
配列
デットバンドの範囲、[最小角度, 最大角度]
[90, 90]

PCA9685オプション(controller: "PCA9685")
プロパティ
タイプ
/説明
既定値
address
数値
I2Cデバイスのアドレス
0x40


サーボモーターを指定した角度に設定する
 サーボモーターを指定した角度に設定するには、「to」メソッドを使います。角度に0180の数値を指定します。
to(角度 [, 時間 [, レート]])
角度に0180の数値を指定します。オプションの時間には、指定した角度に到達するまでの時間(ミリ秒単位)を、レートには指定した角度に到達するまでのステップ数を指定します。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Servoオブジェクトを作成
  // (10ピンをサーボモーター制御用に設定)
  var servo = new five.Servo(10);

  // 0度の位置に動かす
  servo.to(0);

  this.wait(1000,function(){
    // 2000ミリ秒かけて90度の位置まで動かす
    servo.to(90,2000);
  });

  this.wait(5000,function(){
    // 1000ミリ秒、5ステップで180度の位置まで動かす
    servo.to(180,1000,5);
  }

サーボモーターを最小/最大角度に設定する
 サーボモーターを最小角度に設定するには、「min」メソッドを、最大角度に設定するには「max」メソッドを使います。最小角度は「0」、最大角度は「180」が既定値です。
  var servo = new five.Servo(10);

  // 0度に設定
  servo.min();

  // 180度に設定
  servo.max();
オプションの「range」プロパティで最小/最大角度が指定されている場合、その位置に設定されます。
  var servo = new five.Servo({
                pin: 10,
                range: [ 45, 135 ]
              });

  // 45度に設定
  servo.min();


サーボモーターをセンター位置に設定する
 サーボモーターをセンター位置(既定は90)に設定するには、「center」メソッドを使います。
center([ 時間 [, レート]])
オプションの時間には、センターに到達するまでの時間(ミリ秒単位)を、レートにはセンターに到達するまでのステップ数を指定します。
  // 90度に設定
  servo.center();

  // 2000ミリ秒かけてセンターに設定
  servo.center (2000);

  // 1000ミリ秒、5ステップでセンターに設定
   servo.center(1000,5);

オプションの「range」プロパティで最小/最大角度が指定されている場合、その範囲の中心に設定されます。
  var servo = new five.Servo({
                pin: 10,
                range: [ 40, 80]
              });

  // 60度に設定
  servo.center();


9.6 サーボモーターをホームポジションに設定する
 サーボモーターをホームポジションに設定するには、「home」メソッドを使います。ホームポジションは、「startAt」プロパティで設定します。規定値は90度です。
  var servo = new five.Servo(10);

  // 90度に設定
  servo.home();

  var servo = new five.Servo({
                pin: 10,
                startAt: 20
              });

  // 20度に設定
  servo.home();
});


サーボモーターをスイープする
 サーボモーターをスイープするには、「sweep」メソッドを使います。引数なしで実行した場合は、最小値と最大値の間でサーボモーターをスイープします。
  var servo = new five.Servo(10);

  // サーボモーターをスイープ
  servo.sweep();

 指定の範囲でサーボモーターをスイープするには、引数に最小値と最大値を配列([最小値, 最大値])で指定します。
  // 45135の範囲内でサーボモーターをスイープ
  servo.sweep([45,135]);

 インターバル(スイープの間隔)やステップ数を指定するには、引数にオプションオブジェクト(JSON)を指定します。指定できるオプションは、次のとおりです。
オプション
説明
range
スイープの範囲、[最小角度, 最大角度]
interval
1回のスイープ(最小値から最大値まで)に費やす時間(ミリ秒)
step
1回のスイープ(最小値から最大値まで)に費やすステップ数

 たとえば、45135度の範囲を1000ミリ秒かけて、10ステップでスイープするには、次のように書きます。
  // 45135度の範囲を1000ミリ秒かけて、10ステップでスイープ
  servo.sweep({
    range: [45, 135],
    interval: 5000,
    step: 10
  });
});


サーボモーターの動きを停止する
 サーボモーターの動きを停止するには、「stop」メソッドを使います。たとえば、5秒後にサーボモーターのスイープを停止するには、次のように書きます。
  var servo = new five.Servo(10);

  // サーボモーターをスイープ
  servo.sweep();

  // 5秒後に
  this.wait(5000,function(){
    // サーボモーターを停止
    servo.stop()
  });
});


連続サーボモーターを時計回り/反時計回りに回転させる
 連続(Continuous)サーボモーターを時計回りに回転するには、「cw」メソッドを、時計回りに回転させるには「ccw」メソッドを使います。引数はスピードを0から1の範囲の数値で指定します。
  var servo = new five.Servo({
                pin: 10,
                type: "continuous"
              });

  // フルスピードで時計回りに回転
  servo.cw(1);

  this.wait(5000,function(){
    //フルスピードで反時計回りに回転
    servo.ccw(1);
  });
});


複数のサーボモーターをまとめて制御する
 複数のサーボモーターをまとめて制御するには、Servosオブジェクトを使います。Servosオブジェクトは、物理的なボードに接続された複数のサーボモーターを表すオブジェクトのコレクションです。Servosオブジェクトを作成するには、Servosクラスのコンストラクタを使います。引数には、サーボモーターを接続するピン番号またはServoオブジェクトの配列を指定します。

new five.Servos(配列);

たとえば、91011ピンに接続された3つのサーボモーターを制御するServosオブジェクトを作成するには、次のように書きます。
new five.Servos ([ 9, 10, 11]);

 オプションプロパティを指定してServosオブジェクトを作成するには、オブジェクト形式(JSON)で次のように書きます。
new five.Servos([{
  pin: 9,
  center: true
}, {
  pin: 10,
  range: [20,140],
  startAt: 20
}]);

 Servosオブジェクトのオプションのプロパティ、およびAPIのメソッドはServoオブジェクトと同じです。
 たとえば、2つのサーボモーターをスイープするには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

  // Servosオブジェクト(Servoオブジェクトのコレクション)を作成
  // (10,11ピンをサーボモーター制御用に設定)
  var servos = new five.Servos([10,11]);

  // すべてのサーボモーターをスイープ
  servos.sweep();
});


特定のサーボモーターを制御する
 Servosオブジェクトの特定のサーボモーターを参照するには、配列のインデックスを指定します。インデックスは、ピン番号の記述順に0から割り当てられる連番です。たとえば、インデックスが「0」のサーボモーターを180度に設定するには、次のように書きます。
  var servos = new five.Servos([10,11]);

  // 10ピン(インデックス「0)のサーボモーターを180度回転
  servos[0].to(180);


0 件のコメント:

コメントを投稿