코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-11-25 10:55:22
출처 : https://www.kickstarter.com/projects/607691307/ubi-the-ubiquitous-computer-voice-activated-and-al-0
SF 영화를 보시면 위에 동영상과 같이 어떤 기계나 로봇과 목소리로 명령하거나 대화하는 장면을 쉽게 보실 수 있습니다.
이미 위에 동영상과 같이 목소리로 명령을 내리면 어떤 정보를 알려주거나 전화를 걸어주는 제품도 있고
TV 같은 경우 이미 몇 년 전부터 음성 제어 기능이 나왔습니다.
아마 십년정도 후면 모두 손 하나 움직이지 않고 사물들을 제어할 수 있는 날들이 올 것입니다.
본문에서는 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 |
아래의 스케치를 업로드 하세요.
만일의 오류를 방지하기 위해서 스케치를 업로드 할 때 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; } } }
먼저 목소리를 녹음해야 합니다.
저희는 순서대로 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을 누릅니다.
명령어 | 뜻 |
0x36 | command mode로 설정 |
0x37 | compact mode로 설정 |
0x11 | group 1 녹음 준비 |
0x01 | group 1 녹음 삭제 |
0x21 | group 1 사용 준비 |
본문에서 사용되는 명령어를 위의 표에 나온 정도입니다.
사용법은 밑에서 자세히 설명하겠습니다.
더 많은 사용법이 궁금하시면 데이터시트를 참고하세요.
다시 녹음하기에 대해서 이야기 하겠습니다.
먼저 녹음을 하기 전에 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 연결을 해제 하고 스케치가 업로드 된 보드와 연결해서 사용해보세요.
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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!