WARANホームオートメーションキット:Raspberry Pi、Arduino、センサー、コンポーネント
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Raspberry Pi 2 Model B | 1 |
| Arduino UNO | 1 |
| DHT11温湿度センサー(4ピン) | 2 |
| 土壌湿度計 | 1 |
| Arduino Pro Mini 5V | 2 |
| 9V電池(汎用) | 3 |
| 水ポンプ | 1(オプション) |
| nRF24L01+ | 3 |
| nRF24L01+ ソケット | 1(オプション) |
| NPNトランジスタ | 1(オプション) |
| 3.3V電圧レギュレーター | 2 |
| 10kΩ抵抗 | 2 |
| 10µFコンデンサ | 4 |
| 47µFコンデンサ | 2 |
| ユニバーサル基板 | 3 |
必要なツールと機械
- はんだ付け機
- ワイヤーストリッパー
- ニッパー
- ジャンパーワイヤー
使用するアプリとオンラインサービス
- Microsoft Windows 10 IoT Core
- Microsoft Azure
- PubNub Publish/Subscribe API
プロジェクト概要
安価なホームオートメーションシステムを構築しようと計画しました。センサーやデバイスを大きな変更なしで追加できるモジュラーシステムにしたいと考えました。WARAN(**W**indows IoT、**A**zure、**R**aspberry Pi、**A**rduino、**N**RF24L01+)は、単一のハブと複数のモジュールで構成されるモジュラーホームオートメーションシステムです。モジュールはマイクロコントローラーとセンサーの組み合わせで、家のさまざまな場所からデータを収集し、RF経由でハブに送信します。ハブとモジュール間のすべての通信はRFで行われます。ハブ用のコンパニオンWindows Phoneアプリもあります。シンプルなフロー図でセットアップを説明します。
なぜWindows IoT?
私はソフトウェア開発者で、現在IoTに挑戦中です。XAML/C#とVisual Studio(最高のIDEだと考えています)の経験があり、これらを非常に迅速に実装できました。
なぜNRF24L01+?
ワイヤレスオプションを探していたとき、NRF24L01+が安価で低消費電力のソリューションとして浮上しました。強力なライブラリが利用可能で、私にとって最適なソリューションでした。
なぜWindows Azure?
Windows Azureは学習と適応が非常に簡単です。サービスを立ち上げるために必要な設定が少なく、開発に集中できます。Azureの経験が素早い統合に役立ちました。

ハブ
ハブはWARANの中心制御装置です。RPI2、Arduino Uno、nRF24L01+で構成されます。RPI2はWindows IoT Coreを実行し、ユニバーサルアプリがコントロールセンターとして機能します。ハブは大型ディスプレイ(通常はTVやモニター)に接続され、モジュールからのデータ表示と制御が可能です。RPI2に接続したキーボードとマウスで、コントロールセンターからモジュールの追加・削除ができます。回路図はプロジェクトのWARAN.Hub.fzzファイルを参照してください。

動作原理
すべてのモジュールは一意のアドレスを持ち、ハブはこれを使用して通信します。このアドレスを使ってモジュールをコントロールセンターに追加し、名前を付けます。追加後、コントロールセンター(ユニバーサルアプリ)がArduino UnoにI2C経由でデータを送信。Arduino UnoがnRF24L01+経由でモジュールにデータを送信し、モジュールはセンサーからデータを読み取るか、受信データに基づいてデバイスを起動/停止し、データをArduino Unoに返送します。Arduino UnoはI2C経由でデータをコントロールセンターに送信し、TV/モニターに表示されるとともにクラウドにも送信されます。Arduino UnoはRPI2が他のモジュールからセンサーデータを取得するためのインターフェースとして機能します。このプロセスは以下の3つのシナリオで発生します:
- モジュールに応じた特定の間隔で
- ユーザーがコントロールセンターと対話したとき(マウス/キーボード経由)
- クラウドからトリガーが送信されたとき(PubNub経由)
典型的なフローは以下の通り:

ハブとモジュールのコンポーネント間の相互作用は以下の通り:

コントロールセンター
コントロールセンターはRPI2で実行されるユニバーサルアプリです。ユーザーが対話するインターフェースであり、モジュールおよびクラウドと通信します。WARANコントロールセンターはAzure Mobile ServicesとPubNubをクラウドバックエンドとして利用します。追加したすべてのモジュール情報はローカルのSQLite DBに保存され、Azure Mobile Serviceにも送信されます。これによりPubNubメッセージやプッシュ通知がモバイルアプリに送られます。コーディング部分の詳細は省略します。プロジェクトのソースコード、ドキュメント、デプロイメント詳細は https://bitbucket.org/arjunganesan/waran にあります(ドキュメントを完全に更新中で、近日中に完了予定)。
モバイルアプリ
モバイルアプリはWindows Phoneアプリ(将来的に他プラットフォームも開発予定)で、ハブのコンパニオンアプリとして機能します。世界中のどこからでもすべてのセンサーデータを確認できます。モジュールから重要な情報(ガス漏れアラートなど)を受信した場合、プッシュ通知も届きます。また、モバイルからモジュールのアクションをトリガーすることも可能(植物水やりモジュールでポンプを開始など)。すべてクラウド経由で行われるため、モバイルデバイスがハブの近くになくてもこれらのアクションが可能です。
モジュール
モジュールは、コンポーネントの組み合わせで、RF経由でハブとデータの送受信を行います。Arduino Pro Miniとセンサーの組み合わせや、RPI2とセンサーの組み合わせなどが可能です。ハブからRF経由でデータ/コマンドを受信し、適切に応答することさえできれば何でも構いません。これにより無限のモジュールの可能性が開けます。まずは2つのモジュールから始めます:
- 植物水やりモジュール
- 温度監視モジュール
植物水やりモジュール
植物の水位と周囲の温度を監視します。水が不足している場合、モバイルアプリにアラートを送信。どこからでもモバイルアプリでポンプを開始できます。水位が閾値を下回ったら自動的にポンプを開始する設定も可能です。Arduino Pro Mini、DHT11、土壌湿度計、nRF24L01+で構成されます。回路図はプロジェクトのPlantWaterer.fzzを参照。

9V電池の電力はArduino Pro MiniのRAWピンに供給されます。内蔵レギュレーターがVccで5Vを出力し、DHT11に電力供給。また、9V電力を3.3Vレギュレーターに入力してnRF24L01+に電力供給します。湿度計の水位はアナログピンA3で読み取り、DHT11の温度はデジタルピン6で読み取ります。デジタルピン5でトランジスタやリレーに信号を送り、ポンプを起動/停止します。デモ用にDCポンプとトランジスタをスイッチとして使用。動作フローは以下の通り:

ブレッドボードのままにしたくなかったので、ユニバーサル基板に移しました。コンパクトにしたかったのでこの形にしました。回路図を参照して独自のレイアウトを作成できます。












動作の様子は動画を参照してください。
温度監視モジュール
部屋(寝室など)の温度を監視し、温度と湿度レベルを通知します。また、ハブやモバイルからデバイス(サーモスタット、エアコンなど)のオン/オフや調整が可能です。デモ用にArduinoに接続したLEDのオン/オフでデバイス制御を示します。Arduino Pro Mini、DHT11、nRF24L01+で構成。回路図はプロジェクトのTemperatureMonitor.fzzを参照。

9V電池の電力はArduino Pro MiniのRAWピンに供給。内蔵レギュレーターで5Vを出力しDHT11に供給。9Vを3.3Vレギュレーターに入力してnRF24L01+に供給。DHT11の温湿度はデジタルピン5で読み取り。ピン6でトランジスタ/リレーに信号を送り、デバイス(サーモスタット、エアコン等)を起動/停止。デモ用にLEDでデバイス制御を表示。動作フローは以下の通り:

パーフボードへの実装例:





既知の問題
- 電源 - 両モジュールで電池が数時間で消耗。効率的で携帯可能な電源が必要。可能なモジュールではPro Miniの代わりにATTinyプロセッサーを使用予定。より電力効率が良い。ATTinyに関する過去記事はこちら。
- I2C競合 - RPI2が同時に2つのワイヤーリクエストをArduino Unoに送信すると、片方が失敗する。回避策とリトライメカニズムの実装を検討中。
- 片方向通信 - 現在はハブがリクエストを開始し、モジュールが応答する形式。多くのシナリオで機能するが、新しいモジュールではハブからのリクエストなしでデータを送信する必要がある場合がある。
- 通信距離 - 隣の部屋にモジュールを置いて正常にデータ受信できた。距離を延ばすには、ハブのnRF24L01を外部アンテナ付きのNRF24L01+PA+LNAに交換。
- セキュリティ - 開発者が所有する前提で開発したため認証機構は未実装。Azure Mobile ServiceのIdentityサービスを利用してMicrosoft、Facebook、Twitter、Google認証をモバイルアプリとハブに統合可能。
今後の計画
自分専用のホームオートメーションシステムを実装するためのオープンプラットフォームにしたいと考えています。ハブとモバイルアプリを安定化させ、さらに多くのモジュールを追加予定。音声コマンドと応答もロードマップにあります。現在取り組んでいるモジュール:
- ガス漏れセンサー
- 侵入検知器
- デバイスコントローラー(コーヒーメーカーコントローラー、照明コントローラーなど)
- ガレージドアオープナー
- ウェアラブルモジュール
- ハードウェア不要のインターネットサービス(天気、Azure Logic App、株価レポートなど)
- ハブの範囲外で動作し、インターネット経由でハブと通信するモジュール(車両トラッカー、ペットトラッカー、歩数計など)
これらすべてのモジュールがハブを通じて単一ユニットとして連携すれば、私が常に欲しかったホームオートメーションシステムが実現します。新しいモジュールをHacksterで個別プロジェクトとして追加し続けます。誰でも新しいモジュールを追加・拡張歓迎です。新しいモジュールの追加方法についてはWikiページを更新予定。
コード
Bitbucket
https://bitbucket.org/arjunganesan/waran
回路図
WARAN.Hub.fzz PlantWaterer.fzz TemperatureMonitor.fzz
製造プロセス
- Raspberry Piで構築するホームオートメーションシステム:リモート制御対応
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- DIY Arduino USBゲームコントローラー - 高性能ゲームパッドを自作
- ホームオートメーション制御のための堅牢な物理インターフェース
- Pixel Chaser: Arduino Nanoで作るワンタップLEDゲーム
- Arduino Nanoで構築するスマートホーム植物自動水やりシステム
- Arduinoで作る斥力式磁気浮上装置: シンプル回路とDIYガイド
- Alexa対応Arduinoホームコントローラー:音声でスマートホーム自動化
- Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
- DIY LEDルーレットゲーム – Arduino Nanoで作る1人用アーケードゲーム
- スマートホームテクノロジーが日常生活をどう変えるか