2016年8月5日金曜日

Johnny-Fiveでマイコン制御17 - センサー

○Sensorオブジェクトを作成する
 アナログセンサー(ポテンショメーター、フレックス/感温/感圧/ホール/傾斜/光センサーなど)の測定値を取得するには、Sensorオブジェクトを使います。Sensorオブジェクトは、物理的なボード上に接続されているアナログセンサーを表すオブジェクトです。Sensorオブジェクトを作成するには、Sensorクラスのコンストラクタを使います。引数にはアナログセンサーの出力を接続するアナログピンの名前(A0A5)を指定します。
new five.Sensor("アナログピン名");

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

 実験的にデジタルセンサーもサポートされています。デジタルセンサーのSensorオブジェクトを作成するには、ピン番号(pin」プロパティ)にデジタルピンを、オプションの「type」プロパティに「digital」を指定します。
new five.Sensor({
  pin: 2,
  type: "digital"
});

// または次のようにも記述できる
new five.Sensor.Digital(2);


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

 Sensorオブジェクトで発生するイベントは、次のとおりです。
イベント
説明
change
センサーの入力データが変化したときに発生する
data
25ミリ秒(frea」プロパティで変更可)間隔で発生する

 たとえば、既定の間隔(25ミリ秒)でデータを取得するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // アナログセンサーのSensorオブジェクトを作成
  // A0ピンをセンサー入力に設定
  var sensor = new five.Sensor("A0");

  // センサー値を取得
  sensor.on("data", function(value) {
    console.log(value);
  });
});

・配線図


 センサーのデータは、次のプロパティで参照することもできます。
プロパティ
説明
boolean
ADコンバータの読みをブール値にスケーリング
raw
ADコンバータ値(01023)
analog
ADコンバータの読みを8ビット値にスケーリング(0255)
value
ADコンバータ値、またはスケーリングされた値

 たとえば、センサーのデータが変化したときに、「analog」と「value」プロパティでデータを参照するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // アナログセンサーのSensorオブジェクトを作成
  // A0ピンをセンサー入力に設定
  var sensor = new five.Sensor("A0");

  // センサー値を取得
  sensor.on("change", function() {
    console.log("analog :" + this.analog);
    console.log("value  :" + this.value);
  });
});


センサー・データの読み取り間隔を設定する
 センサーのデータの読み取り間隔(data」イベントの間隔)を設定するには、オプションの「freq」プロパティを使います。値にはミリ秒単位の時間を指定します。たとえば、100ミリ秒間隔でデータを読み取るには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // アナログセンサーのSensorオブジェクトを作成
  // 読み取り間隔を100ミリ秒に設定
  var sensor = new five.Sensor({
                 pin: "A0",
                 freq: 100
               });

  // センサー値を取得
  sensor.on("data", function(value) {
    console.log(value);
  });
});


センサー・データのしきい値を設定する
 センサー・データのしきい値(既定値は「1)を設定するには、オプションの「threshold」プロパティを使います。センサー・データの値がしきい値以上になると、「change」イベントが発生します。たとえば、しきい値を「10」に設定するには、次のように書きます。
  // アナログセンサーのSensorオブジェクトを作成
  // しきい値を100に設定
  var sensor = new five.Sensor({
                 pin: "A0",
                 threshold: 10
               });

センサー・データをスケーリングする
 センサー・データをスケーリングするには、「scaleTo」メソッドまたは「fscaleTo」メソッドを使います。引数には、最大値と最小値を指定します。「scaleTo」メソッドの戻り値は整数(integer)、「fscaleTo」の戻り値は浮動小数(float)です、
scaleTo(最小値, 最大値)
scaleTo([最小値, 最大値])

fscaleTo(最小値, 最大値)
fscaleTo([最小値, 最大値])

 たとえば、0100の範囲にスケーリングするには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Sensorオブジェクトを作成
  var potentiometer = new five.Sensor("A0");
  // ポテンショメーターの位置に応じて0100の値を出力
  potentiometer.on("change", function() {
    console.log(this.scaleTo(0,180));
  });
});


 センサー・データの真偽のしきい値を設定する
 センサー・データの真偽のしきい値を設定するには、「booleanAt」メソッドを使います。しきい値は「0」から「1023」の整数値で指定します。既定値は「512」です。
booleanAt(しきい値)

 たとえば、真偽のしきい値を「100(100以上なら「true」、100より小さいなら「false) に設定するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Sensorオブジェクトを作成
  var sensor = new five.Sensor("A0");

  // 真偽のしきい値を100に設定
  sensor.booleanAt(100);

  sensor.on("change", function() {
    console.log(this.boolean);
    console.log(this.value);
  });
});


センサー・データが指定範囲内のときに処理を実行する
 センサー・データが指定範囲内のときに処理を実行するには、「within」メソッドを使います。引数には、値範囲(最小値と最大値)とハンドラを指定します。ハンドラには、値が指定範囲内にあるときに実行するコールバック関数を指定します。
within([最初値, 最大値], ハンドラ)

 たとえば、データが50から150の範囲内のときに「In a range」とメッセージを表示するには、次のように書きます。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Sensorオブジェクトを作成
  var sensor = new five.Sensor("A0");

  // データが50150範囲内ならメッセージを表示
  sensor.within([50, 150], function() {
    console.log("In a range");
  });
});


複数のセンサーをまとめて管理する
 複数のセンサーをまとめて管理するには、Sensorsオブジェクトを使います。Sensorsオブジェクトは、物理的なボード上に接続されている複数のセンサーを表すオブジェクトのコレクションです。Sensorsオブジェクトを作成するには、Sensorsクラスのコンストラクタを使います。引数には、センサーを接続するピン番号またはSensorオブジェクトの配列を指定します。
new five.Sensors (配列);

たとえば、A0A1A5ピンに接続された3つのアナログセンサーを管理するSensorsオブジェクトを作成するには、次のように書きます。
new five.Sensors (["A0", "A1", "A2"]);

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

特定のセンサーのデータを取得する
 Sensorsオブジェクトの特定のセンサーを参照するには、配列のインデックスを指定します。インデックスは、ピン番号の記述順に0から割り当てられる連番です。たとえば、インデックスが「0」のセンサーのデータを取得するには、次のように書きます。
  // A0の接続されているセンサーのデータを取得
  sensor[0].on("change", function(value) {
    console.log(value);
  });


0 件のコメント:

コメントを投稿