음성 명령으로 홈 조명 시스템 제어하기 - 1Sheeld와 아두이노 활용
필요한 부품 및 소모품
- 아두이노 우노 (Arduino UNO) × 1
- 1Sheeld 보드 × 1
- LED (다양한 색상) × 3개
프로젝트 개요
이 프로젝트는 음성 명령만으로 홈 조명 시스템을 제어할 수 있음을 증명하기 위해 제작되었습니다. 3개의 LED는 각각 가정 내 서로 다른 조명 시스템(예: 거실, 침실, 주방)을 상징합니다.
회로 구성
아래 회로도와 같이 연결하세요. 1Sheeld를 아두이노 우노 위에 장착하고 LED 3개를 디지털 핀 11, 12, 13에 각각 연결합니다.
1Sheeld 앱 설정 및 사용법
- 스마트폰에 1Sheeld 앱 설치 후 1Sheeld 보드와 블루투스로 연결.
- 앱 내 Voice Recognition(음성 인식) 실드를 엽니다.
- "Tap to Speak" 버튼을 누르고 명령어를 말합니다.
지원 음성 명령어
| 명령어 | 동작 |
| "play" | 3개 LED 모두 켜기 |
| "stop" | 3개 LED 모두 끄기 |
| "blue" | 파란색 LED만 켜기 |
| "yellow" | 노란색 LED만 켜기 |
| "green" | 초록색 LED만 켜기 |
아두이노 코드
#define CUSTOM_SETTINGS
#define INCLUDE_VOICE_RECOGNIZER_SHIELD
#define INCLUDE_MUSIC_PLAYER_SHIELD
#define INCLUDE_TERMINAL_SHIELD
#include <OneSheeld.h>
int Bledpin = 13; // 파란색 LED
int Yledpin = 12; // 노란색 LED
int Gledpin = 11; // 초록색 LED
// 사용자 정의 음성 명령어
const char playCommand[] = "play";
const char pauseCommand[] = "stop";
const char stopCommand[] = "yellow"; // 노란색만 켜기
const char nextCommand[] = "green"; // 초록색만 켜기
const char BlueCommand[] = "blue"; // 파란색만 켜기
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
OneSheeld.begin();
// 에러 핸들러 등록
VoiceRecognition.setOnError(error);
VoiceRecognition.start();
}
void loop() {
if (VoiceRecognition.isNewCommandReceived()) {
// "play" - 모두 켜기
if (!strcmp(playCommand, VoiceRecognition.getLastCommand())) {
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
// "stop" - 모두 끄기
else if (!strcmp(pauseCommand, VoiceRecognition.getLastCommand())) {
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
// "yellow" - 노란색만
else if (!strcmp(stopCommand, VoiceRecognition.getLastCommand())) {
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
}
// "green" - 초록색만
else if (!strcmp(nextCommand, VoiceRecognition.getLastCommand())) {
digitalWrite(13, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
// "blue" - 파란색만
else if (!strcmp(BlueCommand, VoiceRecognition.getLastCommand())) {
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
digitalWrite(11, LOW);
}
}
}
// 에러 처리 함수
void error(byte errorData) {
switch (errorData) {
case NETWORK_TIMEOUT_ERROR: Terminal.println("Network timeout"); break;
case NETWORK_ERROR: Terminal.println("Network Error"); break;
case AUDIO_ERROR: Terminal.println("Audio error"); break;
case SERVER_ERROR: Terminal.println("No Server"); break;
case SPEECH_TIMEOUT_ERROR: Terminal.println("Speech timeout"); break;
case NO_MATCH_ERROR: Terminal.println("No match"); break;
case RECOGNIZER_BUSY_ERROR: Terminal.println("Busy"); break;
}
}
확장 아이디어
- LED 대신 릴레이 모듈을 연결하면 실제 전등, 선풍기, 가전제품 제어 가능.
- 1Sheeld의 다른 실드(GPS, 자이로스코프, LCD 등)와 결합해 더 복잡한 홈 오토메이션 구현 가능.
- 한국어 음성 인식을 원한다면 1Sheeld 설정에서 언어 변경 또는 별도 STT 서비스 연동 필요.