[Genuino 101][Johnny-Five] ポテンションメータと LED

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

johnny-five

車輪開発大好きおたいがです。こんにちは。( 挨拶 )

今回は Genuino 101 ( 以下 Genuino ) のアナログ入力ピンを使用して、PWM 出力を制御してみました。Johnny-Five で実装しています。

動作環境・道具など

  • Genuino 101
  • USB ケーブル
  • 3mm LED ( 2 本足 )
  • ブレッドボード
  • ジャンパーワイヤ
  • ポテンショメータ ( 3 本足 ) ( こんな感じのやつ )
  • Windows 7 Pro (64bit)
  • Arduino IDE 1.6.9 ( セットアップ記事を参考にしてください )
  • Node.js v4.4.7

回路図

genuino101-potentiometer-001

サンプルスケッチ ( プログラム ) をボードに書き込む

Genuino に StandardFirmata スケッチを書き込みます。
( 参照 : https://dev.classmethod.jp/hardware/johnny-five-genuino-101-debut/#toc--- )

Johnny-Five 実行用のサンプルプロジェクト作成および実行

Johnny-Five の導入および実行するためのプロジェクトを用意します。任意のプロジェクトディレクトリを作成して移動したあとに、下記コマンドを入力します。

package.json の初期化

$npm init

Johnny-Five のダウンロード

$npm install johnny-five

サンプルコードの作成

var five = require('johnny-five');
// Genuino が接続されているポート番号 ( `/dev/tty*` (Mac/Linux) or `COM*` (Windows) )
var board = new five.Board({ 'port': 'COM8' });
board.on('ready', function() {
  var sensor = new five.Sensor('A0'); //Genuino 101 のアナログ入力は `A0` ~ `A5`
  var led = new five.Led(9);          //Genuino 101 の 9 ピンは PWM
  sensor
    .scale(0, 255)
    .on('change', function() {
      console.log('this.value : ' + this.value); // 0~255
      console.log('this.raw   : ' + this.raw);   // 0~1023
      led.brightness(this.value);
    });
});

上記コードでは、Genuino のアナログ入力 A0 ピンをコントロールする Sensor クラスのインスタンスを作成して、scale メソッドにて値の範囲を定義しています。 ポテンションメータをひねることによって .on('change', … ) メソッドで定義したハンドラメソッドが実行され、Sensor インスタンスが保持するポテンションメータの値を取得することができるので、取得した値を Led インスタンスに渡して LED の明るさを変化させる…といったサンプルです。

サンプルコードの実行

$node index.js

実行結果

genuino101-potentiometer-002

実行中にポテンションメータをひねったときの出力結果

this.value : 250.26393127441406
this.raw   : 1004
this.value : 248.26979064941406
this.raw   : 996
this.value : 242.78591918945312
this.raw   : 974
this.value : 242.78591918945312
…
this.value : 0.4985337257385254
this.raw   : 2
this.value : 0.4985337257385254
this.raw   : 2
this.value : 0
this.raw   : 0

Board.repl に Sensor インスタンスを抽入することで、以下のように任意のタイミングでコマンドを入力して、値を取得することも可能です。

var five = require('johnny-five');
var board = new five.Board({ 'port': 'COM8' });
board.on('ready', function() {
  var sensor = new five.Sensor('A0');
  var led = new five.Led(9);
  this.repl.inject({
    'sensor' : sensor
  });
  sensor
    .scale(0, 255)
    .on('change', function() {
      led.brightness(this.value);
    });
});

sensor.raw sensor.value と、それぞれコマンドを打ち込むと、現在の値が出力されます。

$ node index
1470051431595 Connected COM8
1470051436701 Repl Initialized
>> sensor.raw
400
>> sensor.value
100.45454406738281