工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 産業技術

Arduinoスマートホーム自動化:Bluetooth制御の回路図・ソースコード・DIYガイド

Arduinoを用いたスマートホームオートメーションシステム

ホームオートメーションや産業オートメーションなど、自動化技術は現代社会で不可欠となり、少ない人的介入でスマートにタスクを完遂できるようになりました。従来のスイッチに代わりリモート制御スイッチが普及し、スマートフォンの普及により家電をワンクリックやメッセージ一つで操作可能になりました。コントローラと通信デバイスを活用すれば、家電の遠隔制御が実現します。本プロジェクトではArduino UNOとHC-05 Bluetoothモジュールを用い、スマートフォンから家電を制御するシステムを構築します。これは身体麻痺などで自力操作が困難な方々にとって大きな助けとなります。

必要部品

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コマンド:

HC-05ピンアウト
ピン名 説明
EN/Keyハイ:コマンドモード、ロー:データモード(デフォルト)
VCC3.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の主な用途

リレー

小電流で大電流回路をオン/オフする電磁スイッチ。電磁コイルに小電流を流して一時磁石化し、大きな電流を制御するスイッチを駆動します。初期は電信・電話交換機の信号増幅に用いられ、コンピュータ発明後はブール演算・論理演算にも利用されました。モータ制御、自動車、産業、ホームオートメーションなど用途は多岐にわたります。

本プロジェクトでは電磁リレーで、ArduinoからのDC信号(1/0)により蛍光灯・電球・扇風機などAC家電を制御します。リレーは6ピン:VCC/GND(電源)、データピン(マイコンからの制御信号)、NC(常時閉)、COM(コモン)、NO(常時開)の3端子でAC負荷を接続。動作モードは2種類:

リレーピンアウト
ピン名 説明
VCC5V
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電球に置換)も提供しています。

産業技術

  1. SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
  2. 1Sheeldで作るスマートホーム自動化&セキュリティシステム
  3. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ
  4. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム
  5. Octopod:家庭・産業向けスマートIoTオートメーションソリューション
  6. WARANホームオートメーションキット:Raspberry Pi、Arduino、センサー、コンポーネント
  7. Bluetooth接続で実現するスマートホームオートメーション
  8. スマートロックとセンサー設計:安全なスマートホームのための専門的な回路保護とセンシング戦略
  9. リモートチームの在宅勤務発送で直面する5つのハードルと克服法
  10. Silicon Labs、Embedded World 2019でスマートホーム&ビルオートメーション向け先進Wireless Geckoソリューションを発表
  11. スマートホームテクノロジーが日常生活をどう変えるか