Windows 10 IoT Core、Raspberry Pi、Arduinoで家庭用コンセントを自動化
必要な部品と用品
| Raspberry Pi 2 Model B | ×1 |
| XBeeモジュール | ×2 |
| Arduino UNO | ×1 |
| FTDIケーブル | ×2 |
| 4チャネル リレーシールド(Arduino用) | ×1 |
| SparkFun XBeeシールド | ×1 |
使用するアプリとオンラインサービス
- XCTU(XBee設定ツール)
- Visual Studio 2015以降
- Arduino IDE
- Microsoft Azure
- Microsoft Windows 10 IoT Core
プロジェクト概要
はじめに
このプロジェクトでは、Windows 10 IoT Coreを搭載したRaspberry Pi、XBee、Arduinoを使用して、家庭用コンセントをローカルおよびクラウドから制御する方法を紹介します。すべてのコードサンプルはGitHubで公開しています。
なぜコンセントを自動化するのか?
クラウドから個別デバイスを制御する代わりに、コンセント自体を自動化すれば、あらゆる機器を接続して制御可能になります。本プロジェクトでは、扇風機と照明の制御を例としています。
XBeeのセットアップ(ATモード)
XBeeを使って無線信号を伝送します。1つのXBee(Coordinator:親機)をRaspberry Piに、もう1つ(Router:子機)をコンセント側に接続します。Coordinatorがユーザー入力に基づき信号を送信し、Routerがコンセントを制御します。
- XCTUをダウンロード・インストール
- XBeeファームウェアの更新:Adafruit FTDIアダプタを使用
- ATモードでXBeeを設定:設定チュートリアル動画を参照
2つのXBeeが互いに通信できることを確認してから次へ進んでください。
受信側(Router側)の構築
必要なもの:Zigbee Router、Arduino UNO R3、XBeeシールド、リレーシールド
Arduinoスケッチ
Coordinatorからのデータに応じてリレーを制御:
- 「ON1」→ リレー1 ON
- 「ON2」→ リレー2 ON
- 「OFF1」→ リレー1 OFF
- 「OFF2」→ リレー2 OFF
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.readString();
Serial.println(state);
}
if (state == "ON1\r\n") digitalWrite(RELAY1, HIGH);
else if (state == "ON2\r\n") digitalWrite(RELAY2, HIGH);
else if (state == "OFF1\r\n") digitalWrite(RELAY1, LOW);
else if (state == "OFF2\r\n") digitalWrite(RELAY2, LOW);
else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
コンセントへの接続(高電圧注意!)
リレーは電子スイッチとして動作し、Arduino等のマイコンでON/OFFを制御できます。入力側にはAC 100-240Vが流れます。
警告: 高電圧を扱います。感電・火災の危険があるため、十分な知識と注意を持って作業してください。自己責任でお願いします。
延長コードを使用し、片方の線をカットしてリレーのCOM(コモン)とNO(ノーマルオープン)に接続します。
Arduinoにリレーシールドを装着し、その上にXBeeシールドをスタック。Router設定済みのXBeeを挿入します。
外部電源でArduinoを駆動すれば受信側は完成です。
サーバー側(Coordinator側)の構築
必要なもの:Windows 10 IoT Core搭載Raspberry Pi 2、Coordinator設定済みXBee
- XBeeをFTDIアダプタ経由でRaspberry PiのUSBポートに接続
- UWPアプリとしてWebサーバーを構築
- ユーザー入力を受け取り、シリアルポート(FTDIケーブル)経由でXBeeにコマンド送信
- XBeeが無線でRouter側へ伝送
FTDIドライバの詳細はこちらを参照。
サーバー構築の詳細:Webサーバー構築動画
Azureクラウド連携
世界中から制御できるよう、Azureサービスを連携させます。
- Webサイトを作成しAzureにホスティング
- Azure SQL Databaseでユーザー認証/認可
- Azure Cloud Storage(Table)でコマンドをキューイング
- Raspberry Piアプリがコマンドを処理し、家電を制御
ストレージテーブル作成:公式ドキュメント
SQLテーブル作成:公式ドキュメント
デモ
2通りの制御方法を実演:
- ローカルネットワーク内のRaspberry Pi WebサーバーURLにアクセス
- AzureにホストしたASP.NET 5 Webアプリ経由で制御
結論
- 照度・人感センサーを追加すれば、省エネのための自動制御やデータ提供が可能
- 高齢者がリモコンでコンセント操作可能(RFIDデバイス追加で実現)
- スケジュール機能で照明の自動ON/OFF、省エネ
- 侵入検知時に全灯点灯
- 外出時はワンクリックで全機器遮断
- 必要な時だけ空調運転で省エネ
コード
リレー制御スケッチ (C/C++)
#define RELAY1 7
#define RELAY2 5
String state = "OFF";
void setup() {
Serial.begin(9600);
pinMode(RELAY1, OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.readString();
Serial.println(state);
}
if (state == "ON1\r\n") digitalWrite(RELAY1, HIGH);
else if (state == "ON2\r\n") digitalWrite(RELAY2, HIGH);
else if (state == "OFF1\r\n") digitalWrite(RELAY1, LOW);
else if (state == "OFF2\r\n") digitalWrite(RELAY2, LOW);
else {
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
}
}
サンプルコード
回路図
電源コードとリレーの接続図
製造プロセス
- 家庭用の低コストワイヤレスセンサーネットワークを構築
- Windows IoTとRaspberry Piで作るセキュアな顔認証ドアロック
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- Raspberry Pi 3 Model B+へのWindows 10 IoT Coreインストール:ステップバイステップガイド
- Windows 10 IoT Coreで音声制御ロボットを構築 - Raspberry Pi 2編
- GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- Arduinoプロジェクトのための最適化電源ソリューション
- Azure IoT対応スマートプール制御システム:水温・気温監視と遠隔ポンプ制御
- PLCnextクラウドデータからPower BIダッシュボードを作成
- IoTでデジタルトランスフォーメーションを加速:「今の力」をビジネス価値に変える