記事一覧

スポンサーサイト

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

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ページを参照してください。

 

Pre-packaged Shield Configs

Motor Control Shield Survey

 

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」になります。

 

・配線図

2016080812.png 

 

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);



スポンサーサイト

コメント

コメントの投稿

非公開コメント

ads

プロフィール

部員3号

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

kindle本

最新コメント

温度計

ads

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