본문으로 바로가기

아두보이스 음성인식 보드 음성으로 조명제어



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

오늘은 아두보이스 3편 음성으로 조명제어에 대한 포스팅을 하겠습니다.

실제 조명으로 테스트하면 좋겠지만 오늘 포스팅에서는 간이 조명으로 LED를 제어해 보겠습니다.


3편의 본격적인 내용을 보시기에 앞서 이전 포스팅을 참고하고 오시면 보다 쉽게 접근하실 수 있습니다.▼


기본적으로 아두보이스에 사용된 레오나르도 보드는 아두이노 우노의 핀맵과 동일하기 때문에 회로도를 그릴때

아두이노 우노를 대체하여 사용하였습니다. 회로도를 살펴보겠습니다.


아두보이스 음성인식 보드 음성으로 조명제어 회로도

각각 음성으로 제어할 LED 3개에 전류제어 저항으로 470hom을 연결해 주면 끝입니다.

LED를 제어할 디지털 포트는 어떤 것을 쓰셔도 상관 없지만 아두보이스 특성상 7,8번은 사용할 수 없습니다.



동작 목표는 회로에 표시된 바와 같이 스텐드, TV, 무드등을 제어한다는 전재를 설정하고


0채널 : 스텐드 온    -> BLUE LED ON

1채널 : 스텐드 오프 -> BLUE LED OFF


위와 같은 방식으로 음성명령을 통해 LED를 제어하는 것을 목표로 합니다.


제어하기 위한 프로그램을 바로 살펴보도록 하겠습니다. ▼

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
69
70
71
72
73
74
75
76
77
78
79
80
#include <SoftwareSerial.h> //기본 라이브러리 추가
SoftwareSerial voiceSerial(87);   // Rx, Tx 여기서 통신포트로 사용하고 있기때문에 D7,D8번 포트는 사용불가
int StandLED = 2; //디지털 D2핀에 blue led 연결
int TVLED = 3; //디지털 D3핀에 white led 연결
int MoodLED = 4; //디지털 D4핀에 red led 연결
void setup()
{  
  Serial.begin(9600);               //시리얼 통신속도 9600
  while (!Serial) {
    ;
  }
  voiceSerial.begin(9600);           //아두보이스와의 통신속도 9600 
  voiceSerial.listen();
  pinMode( StandLED, OUTPUT );  //각 LED를 켜줄 포트의 기능을 OUT으로 설정
  pinMode( TVLED, OUTPUT ); 
  pinMode( MoodLED, OUTPUT ); 
}
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) {                                //유사도를 제외하고 단순히 id값만 받아와서 판단 후 제어
      case '0':
        // 스텐드 온
        Serial.println("스텐드 조명을 켭니다.");
        digitalWrite(StandLED,HIGH); 
        break;
      case '1':
        // 스텐드 오프
        Serial.println("스텐드 조명을 끕니다.");
        digitalWrite(StandLED,LOW); 
        break;
      case '2':
        // TV 온
        Serial.println("티비를 켭니다.");
        digitalWrite(TVLED,HIGH); 
        break;
      case '3':
        // TV 오프
        Serial.println("티비를 끕니다.");
        digitalWrite(TVLED,LOW); 
        break;
      case '4':
        // 무드 온
        Serial.println("무드등을 켭니다.");
        digitalWrite(MoodLED,HIGH); 
        break;
      case '5':
        // 무드 오프
        Serial.println("무드등을 끕니다.");
        digitalWrite(MoodLED,LOW); 
        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':
        // statements
        Serial.println("Invalid command.");
        break;
    }
  }
  
}

cs

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


0~5번 채널에 프로그램과 같이 

스탠스 온/오프,

TV 온/오프,

무드 온/오프,

총 6가지의 음성명령을 저장하였습니다. 음성저장 방법은 이전포스팅을 참고해주세요.

시리얼 모니터로 확인 할 수 있는 음성인식 결과를 살펴보겠습니다.▼

아두보이스 음성인식 보드 음성으로 조명제어 시리얼모니터 결과

한번에 모든 명령을 인식했지만 보시는 바와 같이 유사도는 그렇게 좋은 편은 아니네요.

(이번에는 각 명령어당 마이크 거리를 다르게하여 4번씩 녹음하였습니다.)



거슬리는 저의 목소리가 첨부된 동영상으로 동작결과를 확인 하면서 이번 포스팅을 끝내겠습니다.

처음 연결했을 때는 괜찮았는데 연결해둔 상태로 시간이 좀 지났더니 반응속도가 매우 느려졌습니다.

이건 좀더 테스트해봐야겠습니다. 우선 동영상 확인 하시죠!!


지금까지 아두이노(Arduino) 고급  음성인식 모듈 아두보이스 3편 음성으로 조명제어에 대한 포스팅이였습니다.

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

by애드라이프