📌 프로젝트 개요
이 프로젝트는 DFRobot의 Gravity: GR10-30 제스처 센서와 Gravity: Offline Language Learning 음성 인식 센서를 활용하여 손짓과 음성으로 가전제품을 제어할 수 있는 스마트 홈 자동화 시스템을 구축하는 것입니다.
🔹 손짓만으로 기기 작동 (스위치 필요 없음!) 🔹 음성 명령을 통한 제어 🔹 Wi-Fi 없이 오프라인 동작 가능 🔹 가전제품을 직관적으로 관리
🛠️ 필수 구성 요소
Gesture Sensor (GR10-30) | 12가지 손동작 인식, 최대 30cm 거리 감지, I2C/UART 지원 |
Voice Recognition Module | 121개의 사전 정의 명령어, 사용자 지정 명령 학습 가능, 오프라인 동작 |
Arduino Mega 2560 | 다수의 센서 및 릴레이 모듈 처리 |
4채널 릴레이 모듈 | 조명, 선풍기 등 고전력 가전제품 제어 |
점퍼 와이어 | 각 부품을 연결하기 위한 필수 구성 요소 |
제스처 센서(DFRobot Gravity GR10-30):
- 12가지 다른 손 제스처를 인식합니다.
- 최대 30cm까지 조정 가능한 인식 거리
- I2C 및 UART 통신 지원
- 추가 정보에 대한 문서
음성 인식 모듈(DFRobot Gravity Offline Learning Sensor)
- 오프라인 작동(인터넷 필요 없음)
- 121개의 사전 프로그래밍된 명령과 함께 제공
- 사용자 지정 깨우기 단어 및 명령 교육 허용
- 추가 정보에 대한 문서
아두이노 메가 2560
- 여러 센서 및 실시간 작업 처리
- 원활한 통합을 위한 여러 입력/출력 핀 제공
- 추가 정보에 대한 문서
4채널 릴레이 모듈
- 조명, 팬 또는 스마트 장치와 같은 고출력 가전 제품 제어
- Arduino와 같은 저전력 마이크로 컨트롤러와 함께 작동
🔌 회로 연결 방법
🖐️ 제스처 센서(GR10-30) → Arduino Mega 2560
- SCL → SCL
- SDA → SDA
- GND → GND
- VCC → VCC
🗣️ 음성 인식 모듈 → Arduino Mega 2560
- TX → 19 (RX)
- RX → 18 (TX)
- GND → GND
- VCC → VCC
📟 회로 구성
🏗️ 릴레이를 제어하는 로직
- 오른쪽으로 손을 휘두르면: 릴레이 위치 변경 (1→2→3→4)
- 왼쪽으로 손을 휘두르면: 릴레이 위치 변경 (4→3→2→1)
- 손을 위로 올리면: 선택된 릴레이를 ON
- 손을 아래로 내리면: 선택된 릴레이를 OFF
- 음성 명령으로 "불 켜"라고 말하면: 특정 가전제품 ON
🗣️ 음성 명령 학습
🎙️ 사용자 맞춤형 명령어 설정
1️⃣ "학습 명령어"라고 말하기 2️⃣ 화면의 안내를 따라 명령어를 3번 반복 3️⃣ 고유한 명령 ID를 지정 4️⃣ 코드에서 해당 ID를 사용하여 가전제품을 제어
🔊 사용자 지정 웨이크 워드 학습
1️⃣ 기본 웨이크 워드로 설정을 시작 2️⃣ "웨이크 워드 학습"이라고 말한 후 안내를 따르기 3️⃣ 원하는 웨이크 워드 (예: "안녕 집")를 3번 반복 4️⃣ 학습 완료 후 모듈이 해당 웨이크 워드를 인식
💻 소스 프로그램
📌 필요한 라이브러리 설치 🔗 GR10-30 제스처 센서: GitHub 🔗 DF2301Q 음성 인식 모듈: GitHub 🔗 RTU 라이브러리:
- GR10-30 제스처 센서 라이브러리: https://github.com/DFRobot/DFRobot_GR10_30
- DFRobot_DF2301Q 음성 인식 라이브러리: https://github.com/DFRobot/DFRobot_DF2301Q
- RTU 라이브러리: https://github.com/DFRobot/DFRobot_RTU
#include "DFRobot_GR10_30.h"
#include "DFRobot_DF2301Q.h"
#include <SoftwareSerial.h>
const int relayPins[] = {2, 3, 4, 5};
int relayStates[] = {0, 0, 0, 0};
// 센서 객체 초기화
SoftwareSerial softSerialGesture(4, 5);
DFRobot_GR10_30 gr10_30(GR10_30_DEVICE_ADDR, &Wire);
SoftwareSerial softSerialVoice(6, 7);
DFRobot_DF2301Q_UART asr(&softSerialVoice);
void setup() {
Serial.begin(115200);
for (int i = 0; i < 4; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], HIGH);
}
// 제스처 센서 초기화
while (gr10_30.begin() != 0) {
Serial.println("제스처 센서 초기화 실패");
delay(1000);
}
// 음성 인식 모듈 초기화
while (!(asr.begin())) {
Serial.println("음성 모듈 초기화 실패");
delay(3000);
}
asr.settingCMD(DF2301Q_UART_MSG_CMD_SET_VOLUME, 7);
}
void loop() {
// 제스처 인식
if (gr10_30.getDataReady()) {
uint16_t gestures = gr10_30.getGesturesState();
if (gestures & GESTURE_RIGHT) Serial.println("오른쪽 스와이프 - 릴레이 변경");
if (gestures & GESTURE_LEFT) Serial.println("왼쪽 스와이프 - 릴레이 변경");
if (gestures & GESTURE_UP) Serial.println("위쪽 스와이프 - 릴레이 ON");
if (gestures & GESTURE_DOWN) Serial.println("아래쪽 스와이프 - 릴레이 OFF");
}
// 음성 명령 인식
uint8_t CMDID = asr.getCMDID();
switch (CMDID) {
case 5: relayStates[0] = 1; Serial.println("릴레이 1 ON"); break;
case 6: relayStates[0] = 0; Serial.println("릴레이 1 OFF"); break;
}
}
🔥 마무리 & 확장 가능성
이 프로젝트를 통해 우리는 미래형 스마트 홈 제어 시스템을 구축할 수 있었습니다. 이제 더 나아가 IoT와 AI를 접목하여 더 똑똑한 자동화 시스템으로 확장할 수도 있습니다.
🚀 어떤 추가 기능을 적용해보고 싶나요? 💡 아이디어를 공유해보세요!
'아두이노' 카테고리의 다른 글
🛠️ 초보자를 위한 최고의 Arduino 책 10권 (1) | 2025.05.12 |
---|---|
2025년에 Arduino와 함께 구축할 상위 10가지 멋진 프로젝트 (1) | 2025.05.12 |
Arduino UNO Ek Wi-Fi를 활용한 실시간 기상 관측소 구축 (0) | 2025.05.12 |
아두이노 메가를 활용한 퀴즈 대회용 빨리 누르기 시스템 제작하기 🎉 (0) | 2025.05.10 |
🔌 아두이노 인터럽트 기반 LED 타이머 프로젝트 (0) | 2025.05.08 |