구글 어시스턴트와 블루투스로 음성 제어하는 홈 IoT: 아두이노 우노와 4채널 릴레이
부품 및 준비물
| 부품 | 수량 |
| 아두이노 우노 | 1 |
| 4채널 릴레이 모듈 | 1 |
| HC-05 블루투스 모듈 | 1 |
| 점퍼 와이어 | 1세트 |
필요 도구
사용 앱
- 자체 제작 안드로이드 앱 (MIT App Inventor 기반)
프로젝트 개요
대부분의 음성 제어 홈 오토메이션 프로젝트는 와이파이 기반이지만, 이 프로젝트는 블루투스 + 구글 어시스턴트('OK Google') 조합으로 버튼 없는 완전 음성 제어를 구현합니다.
기존 블루투스 앱들은 명령어를 말할 때마다 버튼을 눌러야 했지만, 구글 어시스턴트를 트리거로 사용하여 앱을 자동 활성화하고 음성 인식을 시작하도록 했습니다. 구글 홈이 블루투스 스피커 연결은 지원하지만 블루투스 가전 제어는 지원하지 않는 한계를 극복한 방식입니다.
블록 다이어그램
구글 어시스턴트 → 안드로이드 앱 (음성 인식) → 블루투스 → 아두이노 → 릴레이 → 가전제품
회로도
- 릴레이 모듈 IN1~IN4 → 아두이노 D8~D11 (코드상 D8, D9, D10 사용)
- HC-05 TX → 아두이노 RX (D0), RX → TX (D1) - 하드웨어 시리얼 사용
- 릴레이: 액티브 로우(LOW 시 켜짐) 가정
소스 코드
String voice;
#define FAN 10
#define TUBELIGHT 9
#define BULB 8
void setup() {
Serial.begin(9600);
pinMode(FAN, OUTPUT);
pinMode(TUBELIGHT, OUTPUT);
pinMode(BULB, OUTPUT);
// 초기 상태: 모두 끔 (릴레이 액티브 로우 기준)
analogWrite(TUBELIGHT, 255);
analogWrite(FAN, 255);
digitalWrite(BULB, HIGH);
}
void loop() {
while (Serial.available()) {
delay(10);
char c = Serial.read();
if (c == '#') break; // 명령어 종료 문자
voice += c;
}
if (voice.length() > 0) {
Serial.println(voice);
if (voice == "tubelight") {
analogWrite(TUBELIGHT, 0); // 켜기
analogWrite(FAN, 255);
digitalWrite(BULB, HIGH);
}
else if (voice == "green") { // 튜브라이트 끄기
analogWrite(TUBELIGHT, 255);
analogWrite(FAN, 255);
digitalWrite(BULB, HIGH);
}
else if (voice == "fan") {
analogWrite(TUBELIGHT, 255);
analogWrite(FAN, 0); // 켜기
digitalWrite(BULB, HIGH);
}
else if (voice == "bulb") {
analogWrite(TUBELIGHT, 0);
analogWrite(FAN, 255);
digitalWrite(BULB, LOW); // 켜기
}
else if (voice == "go") {
digitalWrite(BULB, HIGH); // 끄기
}
else if (voice == "lights") { // 전체 켜기
analogWrite(TUBELIGHT, 0);
analogWrite(FAN, 0);
digitalWrite(BULB, LOW);
}
else if (voice == "good night") { // 전체 끄기
analogWrite(TUBELIGHT, 255);
analogWrite(FAN, 255);
digitalWrite(BULB, HIGH);
}
voice = ""; // 버퍼 초기화
}
}
회로도
구현 포인트
- 안드로이드 앱에서 'OK Google' 핫워드 감지 → 음성 인식 자동 시작
- 인식된 텍스트를 블루투스로 아두이노 전송 ('#' 종료 문자 포함)
- 아두이노에서 문자열 파싱 후 해당 릴레이 제어
- 릴레이 모듈 액티브 로우/하이 확인 후 코드 수정 필요