본문 바로가기
아두이노

🏠 손짓과 음성으로 제어하는 스마트 홈 자동화 시스템

by 모빌리티키즈 2025. 5. 12.
728x90
반응형

📌 프로젝트 개요

이 프로젝트는 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):

  1. 12가지 다른 손 제스처를 인식합니다.
  2. 최대 30cm까지 조정 가능한 인식 거리
  3. I2C 및 UART 통신 지원
  4. 추가 정보에 대한 문서

음성 인식 모듈(DFRobot Gravity Offline Learning Sensor)

  1. 오프라인 작동(인터넷 필요 없음)
  2. 121개의 사전 프로그래밍된 명령과 함께 제공
  3. 사용자 지정 깨우기 단어 및 명령 교육 허용
  4. 추가 정보에 대한 문서

아두이노 메가 2560

  1. 여러 센서 및 실시간 작업 처리
  2. 원활한 통합을 위한 여러 입력/출력 핀 제공
  3. 추가 정보에 대한 문서

4채널 릴레이 모듈

  1. 조명, 팬 또는 스마트 장치와 같은 고출력 가전 제품 제어
  2. 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 라이브러리:

  1. GR10-30 제스처 센서 라이브러리: https://github.com/DFRobot/DFRobot_GR10_30
  2. DFRobot_DF2301Q 음성 인식 라이브러리: https://github.com/DFRobot/DFRobot_DF2301Q
  3. 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를 접목하여 더 똑똑한 자동화 시스템으로 확장할 수도 있습니다.

🚀 어떤 추가 기능을 적용해보고 싶나요? 💡 아이디어를 공유해보세요!

 

 
728x90
반응형