Arduino Uno と IBM IoT Foundation を利用してクラウド対応の温度センサーを作成する

第 1 回 回路を組み立てて環境を構築する

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: Arduino Uno と IBM IoT Foundation を利用してクラウド対応の温度センサーを作成する

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:Arduino Uno と IBM IoT Foundation を利用してクラウド対応の温度センサーを作成する

このシリーズの続きに乞うご期待。

皆さんの多くは、私と同じようにテクノロジーが浸透した住宅に暮らしていることでしょう。私の自宅のさまざまな機器が織り成す Web の中心となっているのは、ケーブル・モデムでインターネットに接続された WiFi ルーターです。そのため、WiFi ルーターの機能が停止すると、ノート PC、タブレット、ゲーム機、DVR (デジタル・ビデオ・レコーダー)、その他あらゆる機器がインターネットに接続できなくなって、突然、家中のあちこちから叫び声が上がるため、何かに問題が起きていることがわかります。

この状況を改善しようと、これまでにいくつかの方法を試してみました。ルーターを新しいモデルに交換する、ファームウェアを更新する、ケーブル・モデムを交換する、さらに、ケーブル会社に同軸ケーブルで信号をチェックしてもらうなどの方法です。しかし、いずれも効果はありませんでした。同じような問題を抱える者たちによるインターネット・コミュニティーでは、ルーターまたはモデム (あるいはこの両方) が熱くなりすぎていることが原因だろうという意見で一致していますが、自分のケースには当てはまりそうに思えません。それは、ルーターなどのマシンを設置してある配線用ボックスは熱くなっている感じがしないからですが、科学的な方法で温度のサンプル・データを取得して評価しているわけではありません。そこで私に必要になったのが、温度と障害の相関関係を調べられるように、障害が発生した時点、あるいはその直前に配線用ボックスの温度を調べる手段です。こうしたニーズから、私は実験を行うこととなりました。

他の多くのエンジニアと同じく、私も何年もの間、Arduino というオープンソースのエレクトロニクス・プラットフォームの機能に夢中になっています。Arduino は、2005年に発表されたシングルボードのマイクロコントローラーです (Arduino の作成者は、北イタリアのイブレアという街にあるバーにちなんで、この名前を付けました)。Arduino をプログラミングするには、Java 言語をベースとした言語 (Processing と呼ばれます) を使用します。Arduino コミュニティーは非常に規模が大きく、このボードを使用して各種センサーから測定値を取得する例や、あらゆる類のアクチュエーターを制御する例が Web 上に公開されています。このことから、問題を検討する中で私が目を向けたのは、デスクの脇に置いてある、まだ使ったことのない Arduino Uno ボードと、引き出しにしまってある Arduino イーサネット・シールドです。しかも、1 週間前に届いたばかりの新品の温度センサーも、プロジェクトの始まりを待ち構えていました。さらに、IBM IoT (Internet of Things) Foundation、そして IBM Bluemix に組み込まれている IoT 開発用の機能を検討するうちに、プロジェクトの概念が形になってきました。図 1 に、私が作成しようとしたプロジェクトの全体像を示します。

図 1. プロジェクトの概念設計図
プロジェクトの概念設計図
プロジェクトの概念設計図

この設計では、温度センサーに接続された Arduino ボードから温度 (華氏および摂氏) と湿度の情報が定期的に MQTT プロトコルで IoT Foundation に送信されます。そのデータは、Bluemix の機能によってグラフ化され、IoT Foundation によってグラフへのリアルタイムでのプロットが可能になります。このプロジェクト全体は、全 4 回からなるこのチュートリアルのシリーズで完成させます。

IBM IoT (Internet of Things) Foundation、そして IBM Bluemix に組み込まれている IoT 開発用の機能を検討するうちに、プロジェクトの概念が形になってきました。

Arduino を導入する

チュートリアルに従って、私が作成したのと同じセンサーを作成したい場合、まずは、世の中に出回っているさまざまな Arduino ボードや Arduino のクローンのうち、いずれかを入手する必要があります (ただし注意する点として、Intel Galileo など、「Arduino 互換」と称されているボードは数多くありますが、ライブラリーが異なっていたり、搭載されている電子部品の公差に違いがあったりするため、「互換」ボードを使用すると面倒なことになる場合があります)。私が気に入っているのは、ATMega128 チップセットを搭載し、昔ながらの Arduino を改良した最新の Arduino Uno R3 です。このボードは、RadioShack のような実在する店舗に行くか、Amazon などのネット通販業者のサイトにアクセスすれば、30 US ドル以下の価格で簡単に見つけることができます。図 2 は、Uno R3 を上から撮った写真です。

図 2. Arduino Uno
Arduino Uno R3 を上から撮った写真
Arduino Uno R3 を上から撮った写真

ボードを入手したら、Arduino Web サイトにアクセスしてください。Arduino コミュニティーの本拠となっているこのサイトには、各ボードとその機能、そしてこれらのボードを利用するように作成されたソフトウェアについての豊富な情報とドキュメントが揃っています。駆け足で概要を紹介するこのセクションでは、単純にボードの写真で上側に位置する部分からボードの外縁に沿って、このチュートリアルの観点からとりわけ重要な部分を概説していきます。

最も上側に並んでいるピンの穴は、デジタル機器から値を読み取ったり、デジタル機器を制御したりするために使用することができます。最も下側に目を向けると、ここにもピンの穴が並んでいます。そのうちの半分は、アナログ値の読み取り/書き込み用のピンに使用します。残りの半分は、異なる電圧の電源やグラウンドを接続するために使用します。ボードの左下には、5 V の電源用ジャックがあります。このジャックは、ボードがコンピューターに接続されていないときに、ボードに電源を供給するために使用します。その上側にあるボード左側のジャックは、USB ケーブルのコネクターです。このコネクターは、USB ケーブルを接続したときに、ボードのプログラミングをするためのコンピューターと通信するためにも、ボードに電源を供給するためにも使用されます。そして最後となりますが、ボードの左上にはリセット・ボタンがあります。これは、ソフトウェアの動作がおかしいときに使用するためのものです。

Arduino コミュニティーの強みの 1 つは、基本ボードの仕様がオープンソース・コミュニティーにリリースされて、そのさまざまなバージョンが作成されているだけでなく、ボードに対応する多種多様なシールドも作成されていることです。このプロジェクトで使用するイーサネット・シールドの R3 バージョンは、標準 RJ45 コネクターを介して 10 MB または 100 MB でイーサネット接続を提供します。また、このシールドは Arduino Uno を購入したのと同じ小売業者の多くから、約 30 US ドルで入手することができます。図 3 に、イーサネット・シールドを示します。

図 3. Arduino イーサネット・シールド
Arduino イーサネット・シールドを上から撮った写真
Arduino イーサネット・シールドを上から撮った写真

これらのボードの素晴らしい点は、ボード同士を接続できることにあります。したがってプロジェクトでは、最下部に Arduino を配置し、その上にイーサネット・シールドまたは WiFi シールドを配置し、場合によっては最上部にモーター・シールド (ロボット制御用) や特殊なセンサー用の別の拡張シールドを配置して構成することもできます。図 4 の写真から、複数のボードを重ねて接続すると、どのようになるかがわかるはずです。

図 4. Arduino Uno とイーサネット・シールドが接続された状態
Arduino Uno とイーサネット・シールドが接続された状態の写真
Arduino Uno とイーサネット・シールドが接続された状態の写真

複数のボードを接続したら、早速使用したいと思うかもしれませんが、待ってください。その前に、Arduino IDE をダウンロードしてインストールする必要があります。Arduino の Web サイトにあるダウンロード・リンクから、Mac、Windows、または Linux 用の Arduino IDE を入手することができます。お望みであれば、新しいベータ版のいずれかを試してみることもできますが、このチュートリアルでは最新リリースのバージョンである Arduino 1.0.5 を使用します。

IDE をダウンロードした後 (コンピューターの OS に応じて、通常は ZIP ファイルまたは TAR ファイルとしてダウンロードされます)、指示に従って IDE と USB ドライバーをコンピューターにインストールします。インストールが完了したら、ボードに USB ケーブルを接続して電源を供給し (通常は、これによってドライバーのインストールが完了します)、イーサネット・ケーブルを接続し、IDE を開きます。これで、IDE に付属のライブラリーのサンプルを試すことができますが、サンプルを試すのはもう少し先になります。

回路を組み立てる

このプロジェクトには、他にも入手しなければならないハードウェアがいくつかあります。その 1 つは、標準プロトタイピング用のブレッドボードです。電気技術者やエレクトロニクスの愛好家であれば、間違いなくブレッドボードを使い慣れていることでしょうが、電気技術者でもエレクトロニクスの愛好家でもない読者の方は、図 5 に示すようなブレッドボードを購入する必要があります。

図 5. プロトタイピング・ブレッドボード
プロトタイピング用のブレッドボードの写真
プロトタイピング用のブレッドボードの写真

前述の小売業者では、ブレッドボードの単品を約 5 US ドルで扱っています。ジャンパー・ワイヤー一式 (これも、必要なハードウェアに含まれます) が付いてくる場合は、10 US ドルから 15 US ドルほどでしょう。初心者のためにブレッドボードの仕組みを説明しておくと、ブレッドボードの左右にある番号が付けられた列のソケット (穴) は、それぞれのサイドの列内で互いに電気的に接続されています。つまり、それぞれのサイドの列 1 のソケット a からソケット e まではすべてが互いに電気的に接続されています。電気部品 (例えば、抵抗など) のリード線を列 1 のソケット e に差し込んだ場合、別の電気部品を列 1 のソケット d と別の列を接続するように差し込むことで、これらの電気部品が電気的に接続されます。ブレッドボードを使用すると、短時間で電子回路のプロトタイプをテンポラリーの回路として作成することができます。さまざまな部品同士を接続して試すには、これが早くて簡単な方法です。

それではこのブレッドボード使って何を接続してみましょう? Arduino とイーサネット・シールドは、先ほどの写真の最も上側に並んでいるデジタル・ピンのどれからでも、デジタル測定値 (1 または 0) を読み取ることができます。読み取った測定値 (または測定値の解釈) を別のコンピューターに送信するプログラムは、Processing で作成することができます。ここでの具体的な対象は温度の読み取り値なので、そのための温度センサーが必要です。

Arduino 対応の温度センサーはいくつかありますが、私のプロジェクトに使用したのは、Virtuabotix DHT11 温度・湿度センサーです。このセンサーは、Virtuabotix Web サイトからでも、Amazon からでも 10 US ドル未満で入手することができます。図 6 に、この優れものの小型 4 ピン式センサーを示します。

図 6. DHT11 温度・湿度センサー
Virtuabotix DHT11 温度・湿度センサーの写真
Virtuabotix DHT11 温度・湿度センサーの写真

DHT11 センサーは、ピン配列が記載された資料一式と一緒に届くはずです。この資料に、センサー上のすべてのピンの役割が記載されています。資料が付属していない場合は、Virtuabotix Web サイトにアクセスすれば、その情報は見つかります。

Virtuabotix Web サイトにアクセスするついでに、Virtuabotix DHT11 用の Arduino ライブラリー (ZIP ファイルとしてパッケージ化されています) をダウンロードしてください。これらのライブラリーは、同じページのダウンロード・リンクから入手することができます。ダウンロードした ZIP ファイルは、Arduino IDE ディレクトリー構造の Libraries サブディレクトリーに解凍します。その後、Arduino IDE を再起動すると、イーサネット・シールドやその他の機器の組み込みサンプルと同様に、DHT11 サンプルが使用可能になります。

物理コンポーネントはすべて揃ったので、次はこのプロジェクトの配線を行います。図 7 の配線図に、必要なすべての配線を示します。

図 7. プロジェクトの配線図
プロジェクトの配線図
プロジェクトの配線図

これらのパーツの配線について見て行きましょう。Arduino は下部に配置され、その上にイーサネット・シールドが配置されています (この配置の様子を示す例については、図 4 を参照)。DHT11 は、単にブレッドボード上の未使用ソケット列に接続しました。図 7 での配線図では、ワッフル状の格子になっている DHT11 の前面 (ラベルの付いた側ではありません) が正面から見えていることに注意してください。DHT11 のグラウンド (GND) ピン (ワッフル状の格子が正面に見えている状態で、右端にあるピン) は、黒の線で Arduino 上のグラウンド (GND) ピンに接続されています。DHT11 の電源 (VDD) ピン (左端にあるピン) は、赤の線で Arduino 上の 5 V 電源供給 (5V) ピンに接続されています。そして DHT11 のデータ (DTA) ピン (左から 2 番目のピン) は、Arduino 上の デジタル・ピン 3 (~3) に接続されています。このピン番号 (ピン 3) を覚えておいてください。DHT11 を参照するソフトウェアを作成する際には、このピンが重要になります。

最終的な構成は図 8 のようになります。

図 8. プロトタイプ用に完成した配線
プロトタイプ用に配線した写真
プロトタイプ用に配線した写真

この時点で、コンポーネントを個別にテストしておくのが賢明です。まず始めに実施することをお勧めするのは、使用するコンピューターに USB ドライバーが適切にインストールされていて、Arduino と正常に通信できるかどうかを確認するためのテストです。それには、Arduino IDE を開き、「File (ファイル)」 > 「Examples (サンプル)」 > 「01.Basics」 > 「Blink」の順にクリックします (図 9 を参照)。

図 9. 「Blink」メニュー・オプション
「Blink」メニュー・オプションのスクリーン・キャプチャー
「Blink」メニュー・オプションのスクリーン・キャプチャー

Blink スケッチは (Arduino ではプログラムは「スケッチ」と呼ばれます)、Arduino との通信をテストできる単純なプログラムです。このプログラムは、Arduino ボードに実装されている LED のうちの 1 つを 1 秒間点滅させるだけのものです。USB のデバイス・ドライバーが正しくインストールされていれば、「Tools (ツール)」 > 「Board (ボード)」の順にクリックしてボードのタイプを選択するとともに (例えば Uno を使用している場合は「Uno」をクリックします)、「Board (ボード)」の並びにある「SerialPort」メニューからシリアル・ポートを選択することができます (使用しているシリアル・ポートの名前や番号を調べるには、Windows デバイス マネージャーなどの OS ツールを参照してください)。ボードのタイプやシリアル・ポートを選択できない場合は、Arduino Web サイトでヘルプを参照してください。ボードとシリアル・ポートを選択した後、「Upload (アップロード)」ボタン (ツールバーの左から 2 番目にある右向き矢印ボタン) をクリックすると、スケッチがボードにアップロードされます (図 10 を参照)。

図 10. Blink スケッチとアップロード・ボタン
Arduino IDE における Blink スケッチとアップロード・ボタンのスクリーン・キャプチャー
Arduino IDE における Blink スケッチとアップロード・ボタンのスクリーン・キャプチャー

Done uploading (アップロード完了)」というメッセージが表示されて、LED が点滅を開始した場合は、Arduino と正常に通信していることになります。そうならない場合は、同じく Arduino の Web サイトでヘルプを参照してください。Arduino に接続できることが明らかになったら、今度は「Examples (サンプル)」 > 「Ethernet (イーサネット)」 > 「Web Server (Web サーバー)」の順にクリックして、イーサネット・シールドの 1 つ以上のサンプルを試してみることをお勧めします。

Web サーバーのサンプルを機能させるためのコツは、2 つのパラメーターを必要に応じて変更することです。サンプル・スケッチの先頭のほうに、以下のコード行があります。

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

比較的新しいイーサネット・シールドの場合、MAC アドレスは、シールドに貼付けられたステッカーに記載されています (古いボードでは、MAC アドレスを調べる必要があります)。上記のコードに含まれる mac[] 変数を、ステッカーに記載されている MAC アドレスと一致するように変更してください。同様に、IP アドレスもローカル・ネットワーク上で空いているアドレスに変更する必要があります。これらの変更を行った後、新しい名前を付けてスケッチを保存し、アップロードします。これで、スケッチが機能するようになるはずです。DHT11 ライブラリーをダウンロードして正しいディレクトリーに解凍してあれば、「Examples (サンプル)」 > 「DHT11」 > 「dht11_functions」の順にクリックして、このスケッチをロードすることができるはずです。サンプル・スケッチの先頭近くには、以下のコードが見つかるはずです。

void setup()
{
  DHT11.attach(2);
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
}

DHT11 の DTA ピンを Arduino 上のピン 3 (~3) に接続したことを覚えていますか?ピン 3 を使用したのは、ピン 2 (2) はイーサネット・シールドで使用されていて使えないからです。したがって、行 DHT11.attach(2)23 に変更して、別の名前でスケッチを保存してから、アップロードしてください。その後、シリアル・モニターを開き (「Tools (ツール)」 > 「Serial Monitor (シリアル・モニター)」の順にクリック)、プログラムからの出力を表示します。この画面をスクロール・ダウンすると、温度および湿度のデータが示されているはずです。

今回のまとめと次のステップ

すべてのパーツが機能することが証明された今、このシリーズの次の回に進む準備は万端です。第 2 回では、MQTT という IoT の通信プロトコルについて説明し、MQTT 用の Arduino クライアント・ライブラリーを取り上げるとともに、MQTT プログラムをローカルでテストするためのヒントと手法を紹介します。さらに、IBM IoT Foundation の機能についても取り上げ、Arduino 上で実行されるプログラムを IoT Foundation に接続する方法を紹介し、どのようにしてセンサーのデータが取り込まれ、IoT 用にフォーマット設定されてからクラウドに送信されるのかを明らかにするために、すべての要素を 1 つにまとめます。


ダウンロード可能なリソース


関連トピック

  • IBM IoT Foundation: IBM IoT Foundation を試して、ベータ版プログラムにサインアップしてください。
  • Arduino: Arduino Web サイトにアクセスしてください。
  • Bluemix and the Internet of Things」(Ryan Baxter 著、developerWorks、2014年7月): IBM Bluemix と IBM IoT Foundation を連携させる方法を調べてください。
  • DHT11: Virtuabotix Web サイトで、DHT11 センサーの詳細を調べてください。
  • Arduino IDE: Arduino Web サイトから IDE をダウンロードしてください。
  • DHT11 温度センサー用のライブラリー: DHT11 ライブラリーをダウンロードしてください。

コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Open source
ArticleID=990410
ArticleTitle=Arduino Uno と IBM IoT Foundation を利用してクラウド対応の温度センサーを作成する: 第 1 回 回路を組み立てて環境を構築する
publish-date=11272014