중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

voice recogition v2-음성으로 LED 제어하기

2014-11-25 10:55:22

개요

출처 : https://www.kickstarter.com/projects/607691307/ubi-the-ubiquitous-computer-voice-activated-and-al-0

SF 영화를 보시면 위에 동영상과 같이 어떤 기계나 로봇과 목소리로 명령하거나 대화하는 장면을 쉽게 보실 수 있습니다.
이미 위에 동영상과 같이 목소리로 명령을 내리면 어떤 정보를 알려주거나 전화를 걸어주는 제품도 있고
TV 같은 경우 이미 몇 년 전부터 음성 제어 기능이 나왔습니다.
아마 십년정도 후면 모두 손 하나 움직이지 않고 사물들을 제어할 수 있는 날들이 올 것입니다.

 

 

 


위 사진에 나온 모듈은 voice recognition v2입니다. 
원하는 명령어를 녹음해 놓고 녹음 한 명령어 마다 아두이노와 다른 센서들을 연결하여
원하는 동작을 수행 시킬 수 있습니다.
voice recognition v2와 tutorial, project에 나온 여러 프로젝트를 응용한다면
음성으로 조절하는 쓰레기통, 자동차 등 매우 다양한 프로젝트를 하실 수 있을 것입니다.
 

본문에서는 red, green, blue, on, off 소리를 녹음하고
red라고 말하면 빨간색이 켜지도록 해 보겠습니다.
 

미리보기 동영상


 

부품목록

NO 부품명 수량
1 오렌지 보드 1
2 브레드 보드 1
3 voice recogition v2 1
4 RGB LED 1
5 점퍼 케이블 10
6 330 ohm 저항 3
7 FTDI 1

 

부품명 오렌지 보드 브레드 보드 점퍼 케이블 RGB LED 330 ohm 저항
사진 X1 X1 X10 X1 X3

 

 

 

부품명 voice recogition v2 FTDI
사진 x1 X1

 

 

하드웨어 Making

회로도
브레드 보드 레이아웃

소프트웨어 Coding

아래의 스케치를 업로드 하세요.
만일의 오류를 방지하기 위해서 스케치를 업로드 할 때 RX, TX 연결은 해지하고 업로드 하세요.
 

/*
  본 스케치는 instructables의 planetleak님의 스케치를 응용한 것입니다.
  http://www.instructables.com/id/Arduino-voice-control/?ALLSTEPS
*/

int redPin = 9;     //RGB red 핀 선언
int greenPin = 10;  //RGB green 핀 선언
int bluePin = 11;   //RGB blue 핀 선언

byte com = 0; //voice recognition 부터 응답 받을 변수 선언

void setup() 
{ 
  Serial.begin(9600);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  delay(2000);

  Serial.write(0xAA);      //compact 모드 전환
  Serial.write(0x37);
  delay(1000);
 
  Serial.write(0xAA);      //group 1번 사용 준비
  Serial.write(0x21);
}

void loop()
{

  while(Serial.available())
  {
    com = Serial.read();
    switch(com)
    {
      case 0x11:                    //음성 : red 
        digitalWrite(redPin, HIGH);
        digitalWrite(greenPin, LOW);
        digitalWrite(bluePin, LOW);
        Serial.println("red");
        break;

      case 0x12:                    //음성 : green
        digitalWrite(greenPin, HIGH);
        digitalWrite(redPin, LOW);
        digitalWrite(bluePin, LOW);
        Serial.println("green");
        break;

      case 0x13:                    //음성 : blue
        digitalWrite(bluePin, HIGH);
        digitalWrite(greenPin, LOW);
        digitalWrite(redPin, LOW);
        Serial.println("blue");
        break;

      case 0x14:                    //음성 : on
        digitalWrite(redPin, HIGH);
        digitalWrite(greenPin, HIGH);
        digitalWrite(bluePin, HIGH);
        Serial.println("on");
        break;

      case 0x15:                    //음성  : off
        digitalWrite(redPin, LOW);
        digitalWrite(greenPin, LOW);
        digitalWrite(bluePin, LOW);
        Serial.println("off");
        break;
     }
   }
}

하드웨어 및 소프트웨어 설명

1. 녹음하기

먼저 목소리를 녹음해야 합니다.
저희는 순서대로 red, green, blue, on, off라고 녹음 할 것입니다.

녹음을 하기 위해서는 FTDI 같은 USB Serial to TTL 모듈이 필요합니다.
본문에서는 FTDI Basic을 사용했습니다.
먼저 FTDI 와 voice recognition v2를 연결하시고 FTDI 와 컴퓨터를 연결하세요.
 

FIDI voice recognition v2
GND GND
5V 5V
RX TX
TX RX


녹음을 하기 위해서는 AccessPort라는 프로그램이 필요합니다.
링크를 통해서 각 os에 맞게 다운로드 하세요.

 

 


프로그램을 열면 위와 같은 화면이 보입니다. 
FTDI를 연결한 상태로 Tools < Configuration을 누릅니다.

 

 

 


port 번호를 제외한 나머지는 위의 세팅값과 동일하게 맞춰주세요.
send display는 Hex Format입니다.
포트 번호에 FTDI와 연결된 포트가 나오지 않는 다면 연결상태를 다시확인 해주세요.
설정을 세팅하고 OK버튼을 누릅니다.
 

 

 

그 다음 과정을 하기 전에 Serial command에 대해서 알아보겠습니다.
voice recognition v2에 시리얼로 특정 명령어를 전달할 수 있습니다.
예를 들어 녹음을 시작하려면 시리얼로 특정 값을 전달해야 합니다.
 
명령어
0x36 command mode로 설정
0x37 compact mode로 설정
0x11 group 1 녹음 준비
0x01 group 1 녹음 삭제
0x21 group 1 사용 준비


본문에서 사용되는 명령어를 위의 표에 나온 정도입니다.
사용법은 밑에서 자세히 설명하겠습니다.
더 많은 사용법이 궁금하시면 데이터시트를 참고하세요.

 

 

출처 : http://www.instructables.com/file/F9LNFP3HV85MYVN


다시 녹음하기에 대해서 이야기 하겠습니다.
먼저 녹음을 하기 전에 command mode로 세팅을 해야 합니다.
밑에 00000000: 옆에 AA 36이라고 치고 send를 클릭하세요.
그럼 위에 창에 command mode 혹은 아무 커서가 깜박일 것입니다.

 

 

 

 

출처 : http://www.instructables.com/file/F9LNFP3HV85MYVN

다음 AA 11이라고 치고 send를 클릭하세요.
START라고 나올 것입니다.
START라고 나올 때마다 하나씩 녹음 해주세요.
voice recognition v2와 연결된 마이크로 녹음하시면 됩니다.
finish one이라고 나오기 전까지 start가 나올 때마다 같은 단어를 녹음하세요.
finish one이 나와야 하나가 녹음 된 것입니다.

이렇게 순차적으로 red, green, blue, on, off를 녹음 하신 후에
Group1 finished!라고 나오면 group 한 개가 다 녹음 된 것입니다.
녹음은 이처럼 group 별로 할 수 있습니다.
group은 총 3가지 까지 등록할 수 있습니다.
AA 11이 첫번째 group을 녹음하겠다는 명령어 입니다.
물론 삭제도 가능합니다. 다시 녹음할 경우 삭제하시고 다시 녹음해 보세요.
이제 FTDI 연결을 해제 하고 스케치가 업로드 된 보드와 연결해서 사용해보세요.

 

 

 

2. 스케치 설명

 

  Serial.write(0xAA);      //compact 모드 전환
  Serial.write(0x37);
  delay(1000);
 
  Serial.write(0xAA);      //group 1번 사용 준비
  Serial.write(0x21);


스케치에서도 voice recognition을 사용하기 위해서 명령어를 사용합니다.
방법은 위의 코드 처럼 Serial.write를 사용하여 원하는 명령어를 출력하면 됩니다.
먼저 녹음 할 때와 달리 compact 모드로 전환해야 합니다.
다음과 같이 0xAA 0x37 명령어를 출력합니다.

녹음을 group 1에 했기 때문에 group 1을 사용하겠다는 명령어를 출력해야 합니다.
0xAA 0x21 명령어를 출력하세요.

 

 

    com = Serial.read();
    switch(com)
    {
      case 0x11:                    //음성 : red 
        digitalWrite(redPin, HIGH);
        Serial.println("red");
        break;


voice recognition은 명령어가 들릴 때 마다 시리얼로 각 명령어 마다 고유의 값을 보냅니다.
스케치에서는 그 값을 읽어서 switch 구문을 사용해 어떤 값이지 확인하고
각 값이 확인 될 때마다 명령어와 일치되는 동작을 실행하도록 하면 됩니다.

예를 들어 맨 처음으로 red라는 명령어를 녹음했습니다.
red 라고 말할 때마다 시리얼에서 0x11이라는 값을 읽을 것입니다.
이 값이 확인되면 빨간 불이 켜지도록 digitalWrite 함수를 사용합니다.

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

voice recognition v2, 아두이노, 오렌지보드