Arduinoスマートホーム自動化:Bluetooth制御の回路図・ソースコード・DIYガイド
Arduinoを用いたスマートホームオートメーションシステム
ホームオートメーションや産業オートメーションなど、自動化技術は現代社会で不可欠となり、少ない人的介入でスマートにタスクを完遂できるようになりました。従来のスイッチに代わりリモート制御スイッチが普及し、スマートフォンの普及により家電をワンクリックやメッセージ一つで操作可能になりました。コントローラと通信デバイスを活用すれば、家電の遠隔制御が実現します。本プロジェクトではArduino UNOとHC-05 Bluetoothモジュールを用い、スマートフォンから家電を制御するシステムを構築します。これは身体麻痺などで自力操作が困難な方々にとって大きな助けとなります。
必要部品
- Arduino UNO
- HC-05 Bluetoothモジュール
- リレー(複数)
- ジャンパワイヤ
- 電球(負荷)
- Bluetooth Terminal HC-05アプリ(Google Playからダウンロード)
Arduino UNO
オープンソースの電子工作プラットフォームで、容易にプログラミング・書き換えが可能です。UNO、Nano、Mega、LilyPadなど多様なボードがあり、用途に応じた仕様違いがあります。本プロジェクトではArduino UNO(ATmega328搭載、16MHzクロック)を使用します。USART、I2C、SPI通信プロトコルに対応し、Arduino IDEでマイクロUSB経由でプログラミング可能。オンボードブートローダにより外部ハードウェアなしで書き込み可能です。C/C++言語でプログラミングし、IDEがsetup()とloop()にコードを分離するため初心者にも扱いやすい構造です。
アナログ入力6ch(A0〜A5、10ビット分解能)、デジタルGPIO 14本(うち6本はPWM出力対応)。電源はUSB(5V)またはDCジャック(7〜20V)から供給可能で、オンボードレギュレータで3.3Vも生成します。通信ピン:USART用Rx(0)/Tx(1)、I2C用SDA(A4)/SCL(A5)、SPI用SS(10)/MOSI(11)/MISO(12)/SCK(13)。これらの仕様がホームオートメーションに最適です。
HC-05 Bluetoothモジュール
マイコン、スマートフォン、PC、センサ間でシリアル双方向無線通信を確立するモジュール。通信距離は100m未満(環境依存)。USARTプロトコルで通信し、マスタ/スレーブ両モード対応。ボーレート:9600、19200、38400、57600、115200、230400、460800bps。デフォルトはスレーブモードで、ATコマンドでマスタ設定可能。コマンドモード(設定変更)とデータモード(データ通信)の2モードがあり、EN/Keyピンをハイにするとコマンドモードになります。主なATコマンド:
- AT:通信確認
- AT+NAME=hc-05:デバイス名変更
- AT+PSWD=1234:パスワード変更
- AT+UART=9600,1,0:ボーレート9600、ストップビット1、パリティなし設定
HC-05ピンアウト
| ピン名 | 説明 |
|---|---|
| EN/Key | ハイ:コマンドモード、ロー:データモード(デフォルト) |
| VCC | 3.3V〜5V電源 |
| GND | グランド |
| TXD | シリアルデータ送信 |
| RXD | シリアルデータ受信 |
| State | 接続状態表示 |
本プロジェクトではHC-05でArduino UNOとスマートフォン間のシリアル無線通信を確立します。回路図通りにHC-05をArduinoに接続(HC-05のTXD→ArduinoのRX(0)、HC-05のRXD→ArduinoのTX(1)、EN/Keyはロー固定)し、スマホでBluetoothをオンにして「HC-05」を検索・ペアリング(初期パスワード:0000または1234)。HC-05内蔵の赤色LEDは未接続時に周期点滅、接続後は点滅間隔が長くなります。
HC-05の主な用途
- PC・周辺機器
- GPS受信機
- 産業制御
- マイコンプロジェクト
リレー
小電流で大電流回路をオン/オフする電磁スイッチ。電磁コイルに小電流を流して一時磁石化し、大きな電流を制御するスイッチを駆動します。初期は電信・電話交換機の信号増幅に用いられ、コンピュータ発明後はブール演算・論理演算にも利用されました。モータ制御、自動車、産業、ホームオートメーションなど用途は多岐にわたります。
本プロジェクトでは電磁リレーで、ArduinoからのDC信号(1/0)により蛍光灯・電球・扇風機などAC家電を制御します。リレーは6ピン:VCC/GND(電源)、データピン(マイコンからの制御信号)、NC(常時閉)、COM(コモン)、NO(常時開)の3端子でAC負荷を接続。動作モードは2種類:
- 常時開(NO):リレー動作で回路閉、非動作で回路開
- 常時閉(NC):リレー動作で回路開、非動作で回路閉
リレーピンアウト
| ピン名 | 説明 |
|---|---|
| VCC | 5V |
| GND | グランド |
| データピン | マイコンから「1」または「0」 |
| NC | 常時閉回路用 |
| COM | コモン |
| NO | 常時開回路用 |
リレーの主な用途:
- 安全クリティカルなロジック提供
- 小電圧信号で高電圧回路を制御
- 保護目的
- 変電所・送電網での電力供給制御
回路図
Arduino、Bluetooth、リレー、LEDで構成。BluetoothをArduinoとシリアル接続し、リレーで家電を制御。4台のリレーで4機器を制御(リレー数は変更可能)。実装時はLEDを電球に置換。スマートフォンの「Bluetooth Terminal HC-05アプリ」からコマンドを送信し、Bluetooth経由でArduinoが受信、コマンドに応じて動作します。
Arduinoホームオートメーションの動作
回路図通りに配線。電球をAC電源とリレーで接続し、リレーにArduinoからDC電源を供給。リレーのデータピンをArduinoのピン8、9、10、11(出力ピン)に接続。HC-05モジュールを図示通りにArduinoと接続し、Arduinoに電源投入。Arduino IDEでコードを書き込み。スマホのBluetoothをオンにしてHC-05とペアリング(パスワード:0000/1234)。「Bluetooth Terminal HC-05アプリ」を開き、「Bulb1 on」「Bulb2 off」等のコマンドを送信して各電球を制御。
プロジェクトコード
#include <SoftwareSerial.h>
int bulb1 = 8;
int bulb2 = 9;
int bulb3 = 10;
int bulb4 = 11;
SoftwareSerial bt(0,1); // (Rx,Tx)
String str;
void setup() {
bt.begin(9600);
Serial.begin(9600);
pinMode(bulb1, OUTPUT);
pinMode(bulb2, OUTPUT);
pinMode(bulb3, OUTPUT);
pinMode(bulb4, OUTPUT);
}
void loop() {
if (bt.available()) {
str = bt.readString(); // 文字列読み取り修正
Serial.println(str);
// bulb1
if (str == "bulb1 on") {
digitalWrite(bulb1, HIGH);
Serial.println("BULB 1 is ON");
} else if (str == "bulb1 off") {
digitalWrite(bulb1, LOW);
Serial.println("BULB 1 is OFF");
} else {
digitalWrite(bulb1, LOW);
}
// bulb2
if (str == "bulb2 on") {
digitalWrite(bulb2, HIGH);
Serial.println("BULB 2 is ON");
} else if (str == "bulb2 off") {
digitalWrite(bulb2, LOW);
Serial.println("BULB 2 is OFF");
} else {
digitalWrite(bulb2, LOW);
}
// bulb3
if (str == "bulb3 on") {
digitalWrite(bulb3, HIGH);
Serial.println("BULB 3 is ON");
} else if (str == "bulb3 off") {
digitalWrite(bulb3, LOW);
Serial.println("BULB 3 is OFF");
} else {
digitalWrite(bulb3, LOW);
}
// bulb4
if (str == "bulb4 on") {
digitalWrite(bulb4, HIGH);
Serial.println("BULB 4 is ON");
} else if (str == "bulb4 off") {
digitalWrite(bulb4, LOW);
Serial.println("BULB 4 is OFF");
} else {
digitalWrite(bulb4, LOW);
}
}
}
プログラミングコード解説
BluetoothモジュールHC-05とのシリアル通信のためSoftwareSerial.hライブラリをインクルード。
#include <SoftwareSerial.h>
Arduino出力ピン8、9、10、11を各リレーのデータピンに割り当て。スマホから受信したデータを格納する文字列変数strを宣言。
int bulb1 = 8;
int bulb2 = 9;
int bulb3 = 10;
int bulb4 = 11;
String str;
各ピンを出力モードに設定。
pinMode(bulb1, OUTPUT);
pinMode(bulb2, OUTPUT);
pinMode(bulb3, OUTPUT);
pinMode(bulb4, OUTPUT);
Bluetoothシリアル通信とシリアルモニタを9600bpsで開始。
bt.begin(9600);
Serial.begin(9600);
スマホから受信したデータが"bulb1 on"ならリレーデータピンをHIGHにして電球点灯、"bulb1 off"ならLOWで消灯。データ未受信時もLOW(安全側)。同様にbulb2〜bulb4を制御。
if (str == "bulb1 on") {
digitalWrite(bulb1, HIGH);
Serial.println("BULB 1 is ON");
} else if (str == "bulb1 off") {
digitalWrite(bulb1, LOW);
Serial.println("BULB 1 is OFF");
} else {
digitalWrite(bulb1, LOW);
}
// bulb2〜bulb4も同様
以上で、Arduino UNO、Bluetooth、リレーを用いて家電を遠隔制御できます。必要部品の技術情報、回路図(実装時はLEDをAC電球に置換)も提供しています。
産業技術
- SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
- 1Sheeldで作るスマートホーム自動化&セキュリティシステム
- Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
- ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
- Octopod:家庭・産業向けスマートIoTオートメーションソリューション
- WARANホームオートメーションキット:Raspberry Pi、Arduino、センサー、コンポーネント
- Bluetooth接続で実現するスマートホームオートメーション
- スマートロックとセンサー設計:安全なスマートホームのための専門的な回路保護とセンシング戦略
- リモートチームの在宅勤務発送で直面する5つのハードルと克服法
- Silicon Labs、Embedded World 2019でスマートホーム&ビルオートメーション向け先進Wireless Geckoソリューションを発表
- スマートホームテクノロジーが日常生活をどう変えるか