2016年8月8日月曜日

Johnny-Fiveでマイコン制御19 - モーション・距離センサー

○Motionオブジェクトを作成する
 IR(PIR)モーションセンサーを使用するには、Motionオブジェクトを使います。Motionオブジェクトは、物理的なボード上に接続されているIRモーションセンサーを表すオブジェクトです
Johnny-FiveがサポートするIRモーションセンサーは、次のとおりです。
OSEPP IR Proximity Sensor
Sharp IR Motion Detection
GP2Y0D815Z0F

Motionオブジェクトを作成するには、Motionクラスのコンストラクタを使います。
Parallax PIRセンサーやHC-SR501など一般的なIRモーションセンサーのMotionオブジェクトを作成するには、引数にIRモーションセンサーを接続するデジタル入力のピン番号を指定します。
new five.Motion(ピン番号);

 オプションの「pins」プロパティでピン番号を指定する場合は、次のように書きます。
new five.Motion ({
  pin: ピン番号
});

・配線図

 「GP2Y0D810Z0F」「GP2Y0D815Z0F」のMotionオブジェクトを作成するには、「pin」プロパティにセンサーの出力を接続するアナログ入力ピンの名前(A0A5)を、「controller」プロパティにデバイス名を指定します。
var motion = new five.Motion({
  controller: "GP2Y0D810Z0F",
  pin: "A0"
});

var motion = new five.Motion({
  controller: "GP2Y0D815Z0F",
  pin: "A0"
});

 I2Cインターフェイスの「GP2Y0D810Z0F」モジュールを使用する場合は、デバイス名だけを指定します。
var motion = new five.Motion({
  controller: "GP2Y0D810Z0F",
});

 「GP2Y0D810Z0F」「GP2Y0D815Z0F」の使用用は、次のページを参照してください。

○IRモーションセンサーが感知したモーションを検出する
 IRモーションセンサーが感知したモーションを検出するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。取得した値は、引数に渡されます。
on("イベント", ハンドラ(引数))

 Motionオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
change
動きが検出されるたびに発生する
data
25ミリ秒(freq」プロパティで変更可)間隔で発生する
motionstart
動きが検出されたときに発生する
motionend
動きが停止したときに発生する
calibrated
動きを検出する準備ができたとき

 たとえば、モーションの開始と停止を検出するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Motionオブジェクトを作成
  // (7ピンをモーションセンサーの検出用に設定)
  var motion = new five.Motion(7);

  // calibrated」イベント: モーションセンサーの校正完了時に発生
  motion.on("calibrated", function() {
    console.log("calibrated", Date.now());
});

  // motionstart」イベント:動きを検出したときに発生
  motion.on("motionstart", function() {
    console.log("motionstart", Date.now());
  });

  // motionend」イベント:動きが停止したときに発生
  motion.on("motionend", function() {
    console.log("motionend", Date.now());
  });
});

○Proximityオブジェクトを作成する
 距離センサー(超音波、赤外線、レーザー)のデータを取得するには、Proximityオブジェクトを使います。Proximityオブジェクトは、物理的なボード上に接続されている距離センサーを表すオブジェクトです。Proximityオブジェクトを作成するには、Proximityクラスのコンストラクタを使います。
 Pulse/PWMおよびアナログインターフェイスの距離センサーを使用するためのProximityオブジェクトを作成するには、「controller」プロパティに使用する距離センサーのデバイス名を、「pin」プロパティに距離センサーを接続するPulse/PWMピンの番号、またはアナログピンの名前を指定します。
new five.Proximity ({
  controller:  デバイス名,
  pin: ピン番号
}

I2Cインターフェイスの距離センサーの場合は、「controller」プロパティに使用する距離センサーのデバイス名を指定します。
new five.Proximity ({
  controller:  デバイス名,
}

Johnny-Fiveがサポートする距離センサーは、次のとおりです。

Pulse/PWMインターフェイス
★超音波
SRF05
RadioShack 2760342

◇アナログインターフェイス
★超音波
MB1003, HRLV-MaxSonar-EZ0
★赤外線
GP2D120XJ00F
GP2Y0A710K0F
I2Cインターフェイス
★レーザー
★超音波
SRF10
HCSR04を使用したI2Cインターフェイスの モジュール

○Pulse/PWM接続の距離センサーを使用するための準備をする
 ArduinoPulse/PWMインターフェイスの超音波距離センサーを使用するには、「PingFirmata」をボードに書き込む必要があります。「PingFirmata」のソースをコピーして、Arduino IDEからボードに書き込んでください。

PingFirmataのソース

距離センサーの測定データを取得する
 距離センサーの測定データ(距離)を取得するには、イベントハンドラを使います。イベントハンドラは、「on」メソッドを使って書きます。イベントにはイベント名を、ハンドラにはイベント発生時に実行する処理(コールバック関数)を指定します。
on("イベント", ハンドラ)

 Proximityオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
change
障害物が変更されたときに発生する
data
25ミリ秒(freq」プロパティで変更可)間隔で発生する

取得した値は、次のプロパティで参照することができます。
プロパティ
説明
cmcentimeters
センチメートルでの障害物までの距離
ininches
インチでの障害物までの距離

 たとえば、HCSR04で計測した障害物までの距離を、センチメートルとインチの両方で取得するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Proximityオブジェクトを作成
  var proximity = new five.Proximity({
                      controller: "HCSR04",
                      pin: 7
                    });

  // データを取得して距離を表示
  proximity.on("data", function() {
    console.log("Proximity: ");
    console.log("  cm  : ", this.cm);
    console.log("  in  : ", this.in);
    console.log("-----------------");
  });
  // change」イベント:障害物が変更されたときに発生する
  proximity.on("change", function() {
    console.log("The obstruction has moved.");
  });
});

・配線図

距離センサーのデータの読み取り間隔を設定する
 距離センサーのデータの読み取り間隔(data」イベントの間隔)を設定するには、オプションの「freq」プロパティを使います。値にはミリ秒単位の時間を指定します。たとえば、500ミリ秒間隔でデータを取得するには、次のように書きます。
  var proximity = new five.Proximity({
                    controller: "HCSR04",
                    pin: 7,
                    freq: 500
                 });


0 件のコメント:

コメントを投稿