본문으로 바로가기

아두이노 고급 음성인식 보드 아두보이스



안녕하세요. 애드라이프 입니다.

저번 포스팅에 이어서 음성인식보드 아두보이스에 대한 포스팅을 하려합니다.

지난 포스팅에서는 기본적인 사용법에 대해서 알아 봤는데요. 궁금하신분은 아래 링크를 참고해 주세요.




이번에는 간단한 프로그램을 짜서 미리녹음한 음성에 대한 결과를 받아서 확인해 보도록 하겠습니다.

저는 두가지 음성을 0번 채널과 9번 채널에 각각 10번정도 녹음했습니다.

(마이크와의 거리를 바꿔가며 녹음했습니다.)


0번 채널 : "불꺼" 음성녹음

9번 채널 : "불켜" 음성녹음


일부러 발음이 비슷한 음성을 녹음 해봤습니다. 얼마나 구별이 잘되나 테스트 하기위해서 입니다.


그럼 어떻게 프로그램을 작성해서 결과를 확인 할 수 있는지 살펴보도록 하겠습니다.▼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <SoftwareSerial.h>
SoftwareSerial voiceSerial(87);   // Rx, Tx 여기서 통신포트로 사용하고 있기때문에 D7,D8번 포트는 사용불가
void setup()
{  
  Serial.begin(9600);               //시리얼 통신속도 9600
  while (!Serial) {
    ;
  }
  voiceSerial.begin(9600);           //아두보이스와의 통신속도 9600 
  voiceSerial.listen();
}
char id, accuracy;    //id : 0~9까지의 번호 , accuracy : 일치도,유사도
void loop()
{  
  if (voiceSerial.available() > 1) {
    id       = voiceSerial.read();
    accuracy = voiceSerial.read();
 
    Serial.print("해당채널 : ");             //출력  채널, 유사도
    Serial.print((char)id);             
    Serial.print(", ");
    Serial.print("유사도 : ");             
    Serial.println(accuracy, DEC);
      switch (id) {                                    //0,9채널에 음성을 녹음하고 활용예제 나머지는 동일하게 활용가능
      case '0':
        // 불켜
        Serial.println("Turn on");
        break;
      case '1':
        // statements
        Serial.println("Invalid command.");
        break;
      case '2':
        // statements
        Serial.println("Invalid command.");
        break;
      case '3':
        // statements
        Serial.println("Invalid command.");
        break;
      case '4':
        // statements
        Serial.println("Invalid command.");
        break;
      case '5':
        // statements
        Serial.println("Invalid command.");
        break;
      case '6':
        // statements
        Serial.println("Invalid command.");
        break;
      case '7':
        // statements
        Serial.println("Invalid command.");
        break;
      case '8':
        // statements
        Serial.println("Invalid command.");
        break;
      case '9':
        // 불꺼
        Serial.println("Turn off");
        break;
    }
  }
  
}
cs

프로그램의 전체적인 흐름은 주석을 확인해 주세요.



예상과 달리 별도의 라이브러리 없이 기본 라이브러리인 SoftwareSerial.h만 사용합니다.

인식된 음성이 몇번째 채널의 것인지, 그 채널에 미리 녹음된 음성과 얼마나 유사한지에 대한 값을 반환해주는 프로그램입니다.

그 프로그램에 채널별 문구를 다르게 출력해주는 소스를 추가한것 뿐입니다.


이번에는 0번채널과 9번채널에만 음성을 녹음해서 혹시나하는 마음에 다른채널 값이 출력되면 

Invalid command를 출력해주는 문구를 만들었지만 결과적으로 이 문구가 출력되는 경우는 없었습니다.


여러분들도 원하는 명령어를 원하는 채널에 등록해서 사용해보도록하세요.

저는 문구를 출력했지만 이 부분에 LED를 달아도 되고 모터를 달아도 되고 응용은 무궁무진합니다.

그럼 결과를 확인해 볼까요? ▼


아두이노 고급 음성인식 보드 아두보이스


번갈아 가며 음성을 이야기 하니 인식이 매우 잘되는 것을 확인하였습니다.

다만, 위 결과는 주변이 매우 조용한 상태에서 측정한 결과입니다.

주변에서 일정이상의 음성이 포함되면 유사도에 대한 부분이 매우 떨어집니다.

하지만 그때도 채널 구별은 매우 잘되더군요.

그래서 위 프로그램을 보면 아시겠지만 유사도를 제외하고 채널값으로만 Case문을 구성하였습니다.


결과적으로 봤을 때 어떻게 사용하느냐에 따라 편차가 좀 생길것으로 예상됩니다.

이번 포스팅에서는 시리얼 모니터를 통한 결과를 확인하였습니다.

다음포스팅부터는 주변기기를 이용한 응용 예제를 다뤄보겠습니다.


지금까지 아두이노(Arduino) 고급  음성인식 모듈 아두보이스 2편 프로그램 TEST 포스팅입니다.

계속해서 도움되는 포스팅으로 찾아뵙겠습니다.

by 애드라이프