node.js
環境で、手軽にArduinoを扱えるjonny-five
を試してみる。Lチカに終わらず、アナログセンサからの入力までを紹介する。
準備
筆者の環境はmacOS、nodeはv6.6.0
である。
他のOSもしくは環境は使っていたら、適宜読み替えてほしい。
brew cask
を使ってArduinoをインストール
$ brew cask install arduino
純正Arduinoを買うのは値段的に馬鹿らしいので、中華Arduino(400円)を使った。
macの場合は別にドライバのインストールが必要がある。
CH341
あたりでググって自己責任でドライバをインストールする。
Lチカ
まずは、jonny-five
をインストールする。
rwaldron/johnny-five: JavaScript Robotics and IoT programming framework, developed at Bocoup.
$ mkdir arduino-sample
$ cd arduino-sample
$ npm init -y
$ npm install --save johnny-five
Arduino側にStandardFirmata
を書き込んでおく。
ファイル>スケッチの例>Firmata>StandardFirmata
で見つかるはずだ。
さて、Firmata(フェルマータ)とはなんだろう。
Firmataとは、シリアル通信用の汎用的なプロトコルである。
これを使うことでnode.js
に限らず、様々なプログラミング言語でArduinoを操作できる。
準備ができたら、電子工作のhelloworldことLチカを試してみる。
'use strict';
const five = require('johnny-five');
const board = new five.Board();
board.on('ready', () => {
const led = new five.Led(13);
led.blink(500);
});
5行程度で完成だ。
実行
$ node index.js
光センサからセンサ情報を取得
次は、センサから入力を試してみる。
簡単なアナログセンサとして、光センサがある。
CdSセルやフォトレジスタと呼ばれるあれだ。
たぶん40円ぐらいで買える。
jonny-five
は様々なセンサやハードウェアに対応しているが、今回は単純にアナログインプットを使う。
'use strict';
const five = require('johnny-five');
const board = new five.Board();
board.on('ready', () => {
const s = new five.Sensor('A0');
s.on('change', v => {
console.log(v);
});
})
抵抗をはさみA0
と5V
とGND
を繋げばいい。
ググれば同じような構成なサンプルが数多く出てくるからわからければ参考にしてほしい。
$ node index.js
1474702700109 Device(s) /dev/cu.wchusbserial1410
1474702700117 Connected /dev/cu.wchusbserial1410
1474702704011 Repl Initialized
>> 0
335
338
340
342
330
82.5
28
17
16
14
9.5
7
6
5
71
332
341.5
CdSセルを手で覆ったり放したりすると、値が変化するのがわかる。
本来は正規化した方がよさそうだが、今回は簡単のためここまでとする。
おわりに
jonny-fiveを使うと簡単にArduinoを扱えることがわかったと思う。いちいちArduinoに書き込む手間がないので、プロトタイプ作成にはもってこいだ。
参考
rwaldron/johnny-five: JavaScript Robotics and IoT programming framework, developed at Bocoup.