Arduino 資料一覧
2016/12/24更新
対応バージョン: Node.js 4.2.6, Johnny-Five 0.9.58
Node.jsでArduino Unoにつないだフォトリフレクタ(RPR-220)の値を読み取る。
反射型フォトセンサ(フォトリフレクタ) - RPR-220 (ROHM(ローム))
Node.jsを動かす母艦はUbuntu 16.04とする。
結線

このセンサーは刻印面に向かって左が赤外線LED(出力側)、右が対象物からの反射を受けるフォトトランジスタ(入力側)になっている。
ピンは4つで左の赤外線LEDは手前がアノード(長いピン)で奥がカソード(短いピン)、右のフォトトランジスタは手前がコレクタ(短いピン)で奥がエミッタ(長いピン)である。
結線はそれぞれ以下のようになる。
赤外線LED
Arduinoの5V電源ピン → 330Ω抵抗(*1) → アノード(長いピン) → カソード(短いピン) → ArduinoのGNDピン
フォトトランジスタ
Arduinoの5V電源ピン → コレクタ(長いピン) → エミッタ(短いピン) → Arduinoのアナログ"A0"ピン → 1kΩ抵抗(*2) → ArduinoのGNDピン
抵抗値の計算方法については、データシートの絶対最大定格によると赤外線LEDの順電流が50mAでフォトトランジスタのコレクタ電流が30mAなので最低限必要な抵抗値はそれぞれ以下のようになる。
(*1) 赤外線LED側
抵抗 = (電源電圧5V - 順電圧1.34V) / 順電流50mA
= 3.66 / 0.050
= 73 (→ ここでは330Ωを使用)
(*2) フォトトランジスタ側
抵抗 = 電源電圧5V / コレクタ電流30mA
= 5 / 0.030
= 166 (→ ここでは1kΩを使用)


ソース
以下のようなコードを書きNode.jsで実行する。
sensor.js
var five = require("johnny-five"); var board = new five.Board(); board.on("ready", function() { var sensor = new five.Sensor("A0"); sensor.on("change", function() { var val = this.value; console.log(val); }); });
実行
% node sensor.js 1483360780654 Device(s) /dev/ttyACM0 1483360780661 Connected /dev/ttyACM0 >> 0

色によって反射率が異なるので例えば白は光が反射するのでセンサーが反応し、黒は光が吸収されるのでセンサーが反応しなくなる。
関連資料・記事
[Arduino] Node.jsのJohnny-Fiveフレームワークを使ってArduino UnoでLチカ
[Arduino] Node.jsで光センサー(LLS05-A)/CdSセル(GL5528)の値を読み取る
[Arduino] ArduinoをNode.jsで操作する準備としてArduinoにFirmataプログラムを書き込む際にArduino IDEを使わずコマンドラインで実行する方法(GORT)
参考サイト
Arduino (Wikipedia)
Arduino技術情報 (Qiita)
Arduino関連情報 (Device Plus)
Arduino記事一覧 (Think IT)
Node.js技術情報 (Qiita)
Johnny-Five技術情報 (Qiita)
エレクトロニクス豆知識 (ROHM)