○Motorオブジェクトを作成する
DCモーター(直流モーター)を制御するには、Motorオブジェクトを使います。Motorオブジェクトは、物理的なボードに接続された単一のDCモーターを表すオブジェクトです。Motorオブジェクトを作成するには、Motorクラスのコンストラクタを使います。
Motorオブジェクトの作成方法は、DCモーターの制御方式(制御回路)により、次の3つがあります。
・2ピンHブリッジ[pwm, dir]
引数にPWMとDIR(回転方向)に使うピン番号の配列を指定します。たとえば、PWM出力に3ピン、DIRに12ピンを使用する場合は、次のように書きます。
new five.Motor([3, 12]);
|
オブジェクト(JSON)形式で指定する場合は、次のように書きます。
new five.Motor({
pins:
{
pwm: 3,
dir: 12
}
});
|
・3ピンHブリッジ[pwm, dir, cdir]
引数にPWM、DIR(正転)、CDIR(逆転)に使うピン番号の配列を指定します。たとえば、PWM出力に9ピン、DIRに8ピン、CDIRに11ピンを使用する場合は、次のように書きます。
new five.Motor([9, 8, 11]);
|
オブジェクト(JSON)形式で指定する場合は、次のように書きます。
new five.Motor({
pins:
{
pwm:9,
dir:8,
cdir: 11
}
});
|
・3ピンHブリッジ[pwm, dir, brake]
引数にPWM、DIR(回転方向)、BRAKE(停止)に使うピン番号の配列を指定します。たとえば、PWM出力に3ピン、DIRに12ピン、BRAKEに9ピンを使用する場合は、次のように書きます(オブジェクト形式のみ)。
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
|
ブレーキを解除したとき
|
たとえば、RPELでDCモーターを操作したときに、各イベントを検出して、メッセージを表示するには、次のように書きます。
// 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を出力するピン番号を配列で指定します。たとえば、9、10、11ピンからPWMを出力し、3つのモーターを制御するためのMotorsオブジェクトを作成するには、次のように書きます。
new five.Motors([9,
10,
11]);
|
回転制御するDCモーターのMotorsオブジェクトを作成するには、コンストラクタの引数に、DCモーターの制御ピン(PWM、DIR、CDIRなど)を指定したオブジェクトの配列を指定します。たとえば、3ピンをPWM、12ピンをDIRに使用するDCモーターと、9ピンをPWM、8ピンをDIR、11ピンを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 件のコメント:
コメントを投稿