記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

○Servoオブジェクトを作成する

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

new five.Servo(ピン番号);

 

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

new five.Servo ({

  pin: ピン番号

})

 

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

new five.Servo(10);

 

・配線図

2016080808.png 

 

 I2Cインターフェイスの「PCA9685」を使用する場合は、「controller」プロパティにデバイス名「PCA9685」を、「pin」プロパティにサーボモーターが接続されているPCA9685のピン番号を指定します。

new five.Servo({

  controller: "PCA9685",

  pin: 0

});

 

・配線図

 2016080809.png

 

オプションを指定して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();

 

 

サーボモーターをホームポジションに設定する

 サーボモーターをホームポジションに設定するには、「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);

 

スポンサーサイト

コメント

コメントの投稿

非公開コメント

ads

プロフィール

部員3号

Author:部員3号
FC2ブログへようこそ!

kindle本

最新コメント

温度計

ads

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。