検索
連載

電子回路を作る基礎を学びNode.jsでボードを操ろうArduinoで始めるWeb技術者のためのIoT入門(2)(2/2 ページ)

今注目のInternet of Thingsを実現するセンサーデバイスのインターフェースとしてArduinoを使い、電子工作の基礎から実装までを紹介する連載。今回は、LEDを点滅させる「Lチカ」を実現する電子回路を作成し、Arduino IDEでJavaScriptの制御プログラムを作り動かします。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

回路作成の鉄則「パーツの許容電流を守る」

 抵抗を使う理由。それは、LEDやセンサーなどのパーツに流しても良い電流の上限値が決まっているからです。もし、この抵抗を挟んでいないと、LEDに大きな電流が流れ猛烈に発熱してしまいます。

 これはちょうど、ドラゴンボールで戦闘能力を測る際、容量オーバーしてスカウターが爆発してしまう現象と同じです。

 これをやってしまうと、焦げ臭いにおいとともにLEDが焼き切れたり、センサーが動かなくなったりします。最悪の場合、Arduino本体まで壊してしまう場合もありますので、絶対に忘れてはなりません。

 とはいっても、抵抗には500Ωや1kΩなど、幅広い抵抗値があります。その中の何Ωの抵抗を使えばいいのでしょうか。それは、次の式に当てはめれば機械的に算出できます。

 「電源の電圧」はArduinoでかける電圧なので、5Vです。

 「印加電圧」と「定格電流」はパーツの説明書に書いてありますので、その値をそのまま入れれば大丈夫です。

 筆者の手元にある赤色LEDの場合だと、印加電圧が2V、定格電流は5mAです。この式に当てはめると、「600Ω」という答えが出ます。流してもよい最大電流を使って計算したので、実際に使う抵抗は600Ωより大きいものを選べばよいのです。LEDはわずかな電流でも光を発してくれます。

 以上が回路を組む上で知っておかなければいけない知識です。これで、Arduinoボードと電子回路作成に必要な情報が出そろいました。次は、いよいよ最終ステップです。JavaScriptで連携する方法を解説します。

JavaScript/Node.jsで制御するには

 通常のやり方では、C言語でプログラムを書き、コンパイルしたデータをArduinoのフラッシュメモリに書き込みます。しかし、その方法だとちょっとした設定変更や処理追加のたびにArduinoを停止させ、プログラムをアップロードし直すことになり、不便です。

 そこで、次のような方針を取ります。

  • ArduinoはUSBのシリアル通信から命令を受け取る
  • Arduinoは受け取った命令通りに電圧を読み書きする

 このためのプログラムは「Arduino IDE」に最初から用意されています。以下からArduino IDEをダウンロードしてインストールしておいてください。


Arduino IDEのダウンロード

 PC上のプログラムからArduinoを制御できるようにするには、Arduino IDEで「StandardFirmata」という「スケッチ」(プログラムのこと)を選択し、Arduinoボードに書き込むだけです。手順は次の通りです。

  1. メニューバーの「ファイル」をクリック
  2. 「スケッチの例」→「Frimata」→「StandardFirmata」を選択
  3. スケッチウィンドウで「検証」→「マイコンボードに書き込む」

 これで、Firmataプロトコルを使ってPC上のプログラムからArduinoを制御できるようになりました。実はFirmata通信さえできれば、JavaScriptでもRubyでもPythonでも、Arduinoを制御できます。

 今回は、Web技術者にはおなじみの「イベントループ」を簡単に扱えるJavaScriptを使うことにします。ただし、WebブラウザーにはFirmata通信を行うためのAPIがないため、「Node.js」を使います。

Node.jsモジュール「johnny-five」でJavaScriptコーディング

 すでに、Arduinoの操作に特化した「johnny-five」というNode.jsモジュールがありますので、それを利用しましょう。

 回路は先ほど紹介したものと同じです。DIGITAL 13 PINから1kΩの抵抗を挟んでLEDをつなげます。この回路でLEDを光らせるわけですが、ただ光りっぱなしだと面白くないので、0.2秒ごとにオンオフを繰り返すようにします。

 では、コードを見てみましょう。

var j5      = require('johnny-five'),
    arduino = new j5.Board();
 
arduino.on('ready', function(){
    var led = new j5.Led({
        pin: 13
    });
    led.strobe(200);
});

 10行もありません! 実にシンプルですね。

 最初の2行でjohnny-fiveモジュールをインポートして、操作対象であるArduinoボードのインスタンスを作っています(注:Windowsの場合、ArduinoとつながっているCOMポート番号を指定する必要があります。「new j5.Board({port: ‘COM3’});」のように指定します)。

 残りの6行で、'ready'イベントにコールバックを渡しています。このreadyイベントは、PCとArduino間で通信の準備が完了し、命令を受け取れるようになったタイミングに発火します。

 Ledというクラスには、デジタル電圧の制御に必要なメソッドがそろっています。インスタンス化するときに、電圧の出力先であるDIGITAL 13番PINを指定します。

 最後に、strobeメソッドで200ミリ秒ごとに電圧のHIGH/LOWを切り替える命令を送ります。このstrobeメソッドの中身は、単にsetIntervalを使ってon/offメソッドを交互にcallしているだけです。

JavaScriptで「Lチカ」できた!

 それでは、このコードを実行しましょう。

 いかがでしょうか。LEDは点滅しましたでしょうか。LEDは電流を一定の方向にしか通さない性質を持っています。LEDの端子の長い方から短い方に電流を通します。逆に挿した場合は光りませんので、ご注意ください。

 以上で回路作成からJavaScriptでLチカまでできました(LEDをチカチカ光らせることを「Lチカ」と呼びます)。

次回は、IoTの面白さを実感しよう

 今回はArduinoを自由に使いこなすための基礎をお伝えしました。次回は応用編。いよいよインターネット越しのサービスと連携させ、IoTの世界に踏み込みます。

 観葉植物に水やりが必要になると自動でメール通知してくれるシステムを作ります。その際、状態管理やセンサー値の揺らぎに起因する問題と対策を示し、実用的なレベルにするためのポイントも解説します。

著者プロフィール

岩永 義弘(いわなが よしひろ)

株式会社インターネットイニシアティブ

データ分析とワインが好物。通信アノマリ検知システムや地震速報配信システムの開発と運用を経た後、Webアプリのフロントエンドに手を伸ばし、図らずもフルスタックな道を突き進んでいる。最近は趣味でHTTP/2の実装を楽しんでいる。

Twitter:@y_iwanaga_

Bot:@quake_alert @WeatherAlertJP


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る