2016年8月12日金曜日

Johnny-Fiveでマイコン制御29 - DCモーター

○Motorオブジェクトを作成する
 DCモーター(直流モーター)を制御するには、Motorオブジェクトを使います。Motorオブジェクトは、物理的なボードに接続された単一のDCモーターを表すオブジェクトです。Motorオブジェクトを作成するには、Motorクラスのコンストラクタを使います。
 Motorオブジェクトの作成方法は、DCモーターの制御方式(制御回路)により、次の3つがあります。

2ピンHブリッジ[pwm, dir]
 引数にPWMDIR(回転方向)に使うピン番号の配列を指定します。たとえば、PWM出力に3ピン、DIR12ピンを使用する場合は、次のように書きます。
new five.Motor([3, 12]);

 オブジェクト(JSON)形式で指定する場合は、次のように書きます。
new five.Motor({
  pins: {
    pwm: 3,
    dir: 12
  }
});

3ピンHブリッジ[pwm, dir, cdir]
 引数にPWMDIR(正転)CDIR(逆転)に使うピン番号の配列を指定します。たとえば、PWM出力に9ピン、DIR8ピン、CDIR11ピンを使用する場合は、次のように書きます。
new five.Motor([9, 8, 11]);

 オブジェクト(JSON)形式で指定する場合は、次のように書きます。
new five.Motor({
  pins: {
    pwm:9,
    dir:8,
    cdir: 11
  }
});

3ピンHブリッジ[pwm, dir, brake]
 引数にPWMDIR(回転方向)BRAKE(停止)に使うピン番号の配列を指定します。たとえば、PWM出力に3ピン、DIR12ピン、BRAKE9ピンを使用する場合は、次のように書きます(オブジェクト形式のみ)
new five.Motor({
  pins: {
    pwm:3,
    dir:12,
    brake: 9
  }
});


モーターシールド用のMotorオブジェクトを簡単に作成する
 モーターシールド用のMotorオブジェクトを簡単に作成するには、Johnny-Fiveにあらかじめ用意されているシールド構成を使います。たとえば、「ArduinoモーターシールドR3」用のMotorオブジェクトを作成するには、次のように書きます。
var configs = five.Motor.SHIELD_CONFIGS.ARDUINO_MOTOR_SHIELD_R3_1;

var motorA = new five.Motor(configs.A);
var motorB = new five.Motor(configs.B);

 その他のモーターシールド用のMotorオブジェクトを作成方法、モーターの制御ピンの対応などについては、次のWebページを参照してください。


○DCモーターを正転/逆転する
 DCモーターを正転するには、「forward(または「fwd)メソッドを、逆転するには「reverse(または「rev)メソッドを使います。引数にはスピード(0~255)を指定します。
 たとえば、最初に半分のスピードで正転させ、5秒後にフルスピードで逆転させるには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Motorオブジェクトを作成
  var motor = new five.Motor([3, 12]);
  // 半分のスピードで正転
  motor.forward(128);

  // 5秒後
  this.wait(5000, function(){
    // フルスピードで逆転
    motor.rev(255);
  });
});

 2ピンHブリッジ[pwm, dir]3ピンHブリッジ[pwm, dir, brake]構成では、正転時に「dir」が「HIGH」、逆転時に「dir」が「LOW」になります。
 3ピンHブリッジ[pwm, dir, cdir]構成では、正転時に「dir」が「HIGH」、「cdir」が「LOW」、逆転時に「dir」が「LOW」、「cdir」が「HIGH」になります。

・配線図
 


○DCモーターを停止・再開する
DCモーターを停止するには「stop」メソッドを、再開するには「start」メソッドを使います。「start」メソッドの引数には、回転スピード(0~255)を指定します。スピードを省略した場合、停止時の速度で再開されます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Motorオブジェクトを作成
  var motor = new five.Motor([11, 12]);
  // 半分のスピードで正転
  motor.forward(128);

  // 5秒後
  this.wait(5000, function(){
    // 停止
    motor.stop()
  });

  // 10秒後
  this.wait(10000, function(){
    // 半分のスピードで正転を再開
    motor.start();
  });

  // 15秒後
  this.wait(15000, function(){
    // フルスピードで正転
    motor.start(255);
  });
});


○DCモーターにブレーキをかけて停止する
 DCモーターにブレーキをかけて停止する(3ピンHブリッジ構成のみ有効)には、「brake」メソッドを使います。「brake」メソッドを実行すると、「brake」ピンが「HIGH」になります。
 また、ブレーキを解除するには、「release」メソッドを使います。「release」メソッドを実行すると、「brake」ピンが「LOW」になります。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Motorオブジェクトを作成
  var motor =new five.Motor({
              pins: {
                pwm: 3,
                dir: 12,

                brake: 9
              }
            });

  motor.forward(255);

  // 5秒後
  this.wait(5000, function() {
    // ブレーキで停止
    motor.brake();
  });

  // 10秒後
  this.wait(10000, function() {
    // ブレーキを解除
    motor.release();
  });
});


○DCモーター制御用のPWMを反転する
 DCモーター制御用のPWMを反転するには、オプションの「invertPWM」プロパティを「true」を指定し、Motorオブジェクトを作成します。
  var motor =new five.Motor({
               pins: {
                 pwm: 3,
                 dir: 12
               },
             invertPWM: true
           });


○DCモーターのイベントを検出する
 DCモーターのイベントを検出するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。
on("イベント", ハンドラ)

 Motorオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
start
モーターが回転を開始したとき
stop
モーターが停止したとき(stop」実行時)
brake
モーターがブレーキで停止したとき
forward
正転しているとき
reverse
反転しているとき
release
ブレーキを解除したとき

 たとえば、RPELDCモーターを操作したときに、各イベントを検出して、メッセージを表示するには、次のように書きます。
  // Motorオブジェクトを作成
  var motor =new five.Motor({
              pins: {
                pwm: 3,
                dir: 12,
                brake: 9
              }
            });

  // MotorオブジェクトをREPLに登録
  board.repl.inject({
    motor: motor
  });
  // start」イベントを検出
  motor.on("start", function() {
    console.log("start", Date.now());
  });
  // stop」イベントを検出
  motor.on("stop", function() {
    console.log("automated stop on timer", Date.now());
  });
  // brake」イベントを検出
  motor.on("brake", function() {
    console.log("automated brake on timer", Date.now());
  });
  // forward」イベントを検出
  motor.on("forward", function() {
    console.log("forward", Date.now());
  });
  // reverse」イベントを検出
  motor.on("reverse", function() {
    console.log("reverse", Date.now());
  });
  // release」イベントを検出
  motor.on("release", function() {
    console.log("release", Date.now());
  });
});

複数のDCモーターをまとめて制御する
 複数のDCモーターをまとめて制御するには、Motorsオブジェクトを使います。Motorsオブジェクトは、物理的なボードに接続された複数のDCモーターを表すオブジェクトのコレクションです。Motorsオブジェクトを作成するには、Motorsクラスのコンストラクタを使います。
無指向性(回転方向を制御しない)DCモーターのMotorsオブジェクトを作成するには、コンストラクタの引数に、DCモーターのPWMを出力するピン番号を配列で指定します。たとえば、91011ピンからPWMを出力し、3つのモーターを制御するためのMotorsオブジェクトを作成するには、次のように書きます。
new five.Motors([9, 10, 11]);

 回転制御するDCモーターのMotorsオブジェクトを作成するには、コンストラクタの引数に、DCモーターの制御ピン(PWMDIRCDIRなど)を指定したオブジェクトの配列を指定します。たとえば、3ピンをPWM12ピンをDIRに使用するDCモーターと、9ピンをPWM8ピンをDIR11ピンをCDIRに使用するDCモーターの2つを制御するためのMotorsオブジェクトを作成するには、次のように書きます。
new five.Motors([
  {pins: { pwm: 3, dir: 12}},
  {pins: { pwm:9, dir:8, cdir: 11}}
]);

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

board.on("ready", function() {
  // Motorsオブジェクト(Motorオブジェクトのコレクション)を作成
  var motors =new five.Motors([
                {pins: { pwm: 3, dir: 12}},
              {pins: { pwm:9, dir:8, cdir: 11}}
              ]);

  // すべてのモーターをフルスピードで正転
  motors.forward(255);
});


特定のDCモーターを制御する
 Motorsオブジェクトの特定のDCモーターを参照するには、配列のインデックスを指定します。インデックスは、制御ピンを指定したオブジェクトの記述順に0から割り当てられる連番です。たとえば、インデックスが「0」のDCモーターだけを正転させるには、次のように書きます。

  // Motorsオブジェクト(Motorオブジェクトのコレクション)を作成
  var motors =new five.Motors([
                {pins: { pwm: 3, dir: 12}},
                {pins: { pwm:9, dir:8, cdir: 11}}
              ]);

  // インデックス「0(3ピン)のモーターを正転
  motors[0].forward(255);


0 件のコメント:

コメントを投稿