아두이노 나노로 JARVIS v1 홈 오토메이션 구축하기 - 단계별 튜토리얼
부품 및 소모품
| 부품 | 수량 | 비고 |
| 아두이노 나노 R3 | 1 | |
| 릴레이 모듈 (범용) | 4 | 4채널 릴레이 보드 권장 |
| 블루투스 저에너지(BLE) 모듈 (범용) | 1 | HC-05 등 |
| 브레드보드 (범용) | 1 | |
| 점퍼 와이어 (범용) | 10 | |
필요 도구 및 기계
앱 및 온라인 서비스
프로젝트 소개
왜 이 프로젝트를 만들었나?
아이언맨 팬으로서 자비스(JARVIS)라는 음성 제어 개인 비서에 큰 영감을 받아 나만의 홈 오토메이션 시스템을 직접 만들고 싶었습니다. 기존 시스템들도 많지만 아두이노를 이용해 직접 구축해 보기로 했습니다.
작동 원리
이 프로젝트는 조명, 선풍기, TV 등 전기·전자 기기를 제어하는 것을 목표로 합니다. 각 방에 설치된 릴레이 회로와 아두이노를 사용하며, 데이터는 블루투스 모듈을 통해 모바일에서 아두이노로 전송됩니다. 향후 추가 확장도 가능합니다.
주요 과제는 모바일에서 데이터를 수집해 아두이노에 전달하고, 이를 바탕으로 기기 온/오프를 제어하는 것입니다.
하드웨어 제작
회로는 매우 간단합니다. 전체 비용은 20달러 미만입니다.
1단계: 부품 및 재료
- 아두이노
- 릴레이 브레이크아웃 보드
- 블루투스 모듈 - HC-05
- 점퍼 케이블
2단계: 연결
점퍼 케이블로 다음과 같이 연결합니다. 데모용으로 4채널 릴레이를 사용하여 4개 기기 제어 가능.
아두이노 → 블루투스 모듈
- TX → RX
- RX → TX
- VCC → 3.3V
- GND → GND
아두이노 → 릴레이 보드
- IN1 → D2
- IN2 → D3
- IN3 → D4
- IN4 → D5
- VCC → VCC
- GND → GND
3단계: 코드
아래 샘플 코드를 참조하세요.
String voice;
int led1 = 2, led2 = 3, led3 = 4, led4 = 5, led5 = 6;
void allon() {
digitalWrite(led1, HIGH); digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH); digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
void alloff() {
digitalWrite(led1, LOW); digitalWrite(led2, LOW);
digitalWrite(led3, LOW); digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT); pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT); pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
}
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 == "*all on") allon();
else if (voice == "*all off") alloff();
// 개별 제어
else if (voice == "*TV on") digitalWrite(led1, HIGH);
else if (voice == "*fan on") digitalWrite(led2, HIGH);
else if (voice == "*computer on") digitalWrite(led3, HIGH);
else if (voice == "*bedroom lights on") digitalWrite(led4, HIGH);
else if (voice == "*bathroom lights on") digitalWrite(led5, HIGH);
else if (voice == "*TV off") digitalWrite(led1, LOW);
else if (voice == "*fan off") digitalWrite(led2, LOW);
else if (voice == "*computer off") digitalWrite(led3, LOW);
else if (voice == "*bedroom lights off") digitalWrite(led4, LOW);
else if (voice == "*bathroom lights off") digitalWrite(led5, LOW);
voice = "";
}
}
4단계: 애플리케이션
현재는 기성 앱을 사용합니다. 추후 인증서 처리 후 직접 만든 앱을 공개할 예정입니다.
BT Voice Control for Arduino (SimpleLabsIN 제작):
https://apkpure.com/bt-voice-control-for-arduino/robotspace.simplelabs.amr_voice/download?from=details
5단계: 작동 영상
현재는 기기 온/오프 기능만 제공하지만 기본적인 자연어 처리가 가능해 다른 프로젝트에도 응용할 수 있습니다.
Hackster.io 플랫폼에 감사드립니다.
젊은이들과 청소년들이 창작하고 발명하도록 장려하는 이런 활동에 감사드립니다.
도움이 되었다면 엄지척 부탁드리고, 채널 구독으로 더 재미있는 프로젝트 만나보세요 :)
영상 공유도 환영합니다.
구독하기: https://www.youtube.com/c/rahulkhanna24june?sub_confirmation=1
읽어주셔서 감사합니다!
코드
샘플 코드 (아두이노)
// Coded By: Angelo Casimiro (4/27/14)
// Voice Activated Arduino (Bluetooth + Android)
// 수정 자유이나 크레딧 표기 바랍니다
String voice;
int led1 = 2, led2 = 3, led3 = 4, led4 = 5, led5 = 6;
void allon() {
digitalWrite(led1, HIGH); digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH); digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
void alloff() {
digitalWrite(led1, LOW); digitalWrite(led2, LOW);
digitalWrite(led3, LOW); digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT); pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT); pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
}
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 == "*all on") allon();
else if (voice == "*all off") alloff();
else if (voice == "*TV on") digitalWrite(led1, HIGH);
else if (voice == "*fan on") digitalWrite(led2, HIGH);
else if (voice == "*computer on") digitalWrite(led3, HIGH);
else if (voice == "*bedroom lights on") digitalWrite(led4, HIGH);
else if (voice == "*bathroom lights on") digitalWrite(led5, HIGH);
else if (voice == "*TV off") digitalWrite(led1, LOW);
else if (voice == "*fan off") digitalWrite(led2, LOW);
else if (voice == "*computer off") digitalWrite(led3, LOW);
else if (voice == "*bedroom lights off") digitalWrite(led4, LOW);
else if (voice == "*bathroom lights off") digitalWrite(led5, LOW);
voice = "";
}
}
프로젝트 저장소
https://github.com/Rahul24-06/Arduino-Tutorial-JARVIS-v1-How-to-make-a-Home-Automation
회로도