スマートフォンのWebブラウザからNode.jsを介しArduino(アルドゥイーノ)をコントロールすることを目標としている連載の第2回です。第1回「JavaScriptでArduinoをコントロール ― 第1回 Lチカ(LEDチカチカ)させてみよう!」では電子工作の第一歩であるLチカ(LEDをチカチカ光らせること)させました。今回はスイッチのON/OFFや赤外線センサーと物体との距離(入力値)をNode.jsで表示させたいと思います。

※ArduinoやNode.jsの設定は本連載の第1回でご紹介していますのでそちらをご覧ください。

Arduinoで扱える入力の種類

Arduinoで扱う入力は2種類あります。

  • デジタル入力
    0(LOW)・1(HIGH)の2段階の値を返します。最小限の回路構成になっているArduino UNOでは14個(0〜13番)のデジタルピンが搭載されています。
  • アナログ入力
    0〜1023の整数を返します。Arduino UNOでは6個(0〜5番)のアナログピンが搭載されています。

Arduino UNOでのアナログピン・デジタルピン

Arduinoでスイッチからの入力値を取得しよう

スイッチの場合ON/OFFの入力値を取得できるのでデジタル入力を使用しますスイッチを押すと「HIGH」離すと「LOW」一定時間押し続けると「HOLD」と表示されます。

回路の説明

スイッチにデジタル2番ピンとGND(電気的にマイナスとなるピン)を接続します。通常、スイッチを使用する回路にはプルアップ・プルダウン回路(正常な入力値を取得するための回路)を組むのですが、Arduinoには既にプルアップ回路が内蔵されているためそれを使用します。

スイッチを用いた回路図

JavaScriptの記述

var five = require("johnny-five");

var board = new five.Board();
var button;

board.on("ready", function() {
	// スイッチの設定
	button = new five.Button({
		// デジタル2番ピンにスイッチを接続
		pin: 2,
		// Arduinoに内蔵されているプルアップ回路を有効
		isPullup: true
	});

	// スイッチを追加(アクセス許可)
	board.repl.inject({
		button: button
	});

	// スイッチを押した
	button.on("down", function() {
		console.log("HIGH");
	});

	// スイッチを押し続けて一定時間(初期設定では500ms)経過した
	button.on("hold", function() {
		console.log("HOLD");
	});

	// スイッチを離した
	button.on("up", function() {
		console.log("LOW");
	});
});

Arduinoで赤外線センサーからの入力値を取得しよう

以下の動画で使用しているセンサーは、物体との距離を検出する赤外線センサーです。検出する距離によって値が変化するのでアナログ入力を使用します。赤外線センサーの上に手をかざすと値が大きくなり遠ざけると値が小さくなります。一定の距離に近づくと「近!」と表示されます。

回路の説明

センサーから出ている黒い線はGND、赤い線は5V(電気的にプラスとなるピン)、黄色い線はアナログ0番ピンへ接続します。黒・赤い線は電流を供給する線、黄色い線はセンサーが検出した値を取得する線です。

赤外線センサーを用いた回路図

JavaScriptの記述

var five = require("johnny-five");
var board;
var sensor;

board = new five.Board();

board.on("ready", function() {
	// Sensor
	sensor = new five.Sensor({
		// アナログ0番ピン
		pin: "A0",
		// 100ms間隔でセンサーにアクセスする 初期設定では25ms
		freq: 100
	});

	// センサーを追加(アクセス許可)
	board.repl.inject({
		pot: sensor
	});

	// センサーの入力値を0~100にスケーリングして取得
	sensor.scale(0, 100).on("data", function() {
		console.log(this.value);
	});

	// センサーの入力値が範囲内(40~100)になった
	sensor.within([40, 100], function() {
		console.log("近!");
	});
});

最後に

連載の第1回でLチカ(出力を制御)させましたが、取得した入力値と組み合わせることでユーザーの操作や周辺環境の変化でLEDを光らせることができるようになります。スイッチやセンサーには今回ご紹介したもの以外にも沢山の種類があります。特にセンサーは種類が変わっても電流を供給して値を取得するというルールはほぼ変わらないので、今回ご紹介した内容と同じ要領で触ったことのないセンサーも試すことができます。この入出力がハードウェアの基本となっており、これにインターネットをつなぐことで近年話題になっているIoT(モノのインターネット)となるのです。次回はいよいよスマートフォンのWebブラウザからNode.jsを介しArduinoをコントロールします!

連載目次

電子工作×インターネットの解説本を執筆しました

ICS MEDIAで紹介してきたIoT技術が1冊の本になりました。電子工作初心者がインターネットにつながるIoT装置を作れることを目標としています。本サイトで紹介しきれなかったネタや、新しい要素が盛りだくさんな内容になりました。本書をきっかけにあなたもIoTの世界に踏み込んでみてはいかがでしょうか? 詳しい内容は記事「『センサーでなんでもできる おもしろまじめ電子工作』を執筆しました」で紹介していますのでご覧ください。

センサーでなんでもできる おもしろまじめ電子工作の表紙

センサーでなんでもできる おもしろまじめ電子工作

  • ページ数:340ページ
  • 出版社:秀和システム
  • 発売日:2016年5月28日 (Amazon)
  • 執筆:蔵下 まさゆき

Amazonでチェックする