인터랙티브 퍼즐을 만들어 보자

by 하민정 | 2017-01-13 12:46
놀이 디지털아트 아두이노 인터랙티브 퍼즐

재료

  • 555 타이머 IC 칩 1개
  • 점퍼와이어 1개
  • 사진 1개
  • Easyvr 쉴드 2.0 1개
  • USB 케이블 1개
  • 퍼즐 윤곽사진 1개
  • 브래드 보드 1개
  • LED 3개
  • 카드보드지 1개
  • 아두이노 우노 1개

                                   


퍼즐 맞추기는 남녀 노소 누구나 즐길 수 있는 놀이입니다. 

이런 퍼즐이 디지털과 만난다면 어떤 모습일까요 ? 


퍼즐이 내가 하는 말을 인지하고, 그에 반응하여 어떤 Action 을 취한다면, 

단순 퍼즐 맞추기가 더 재밌는 놀이가 될 것 같다는 생각이 들었습니다. 


instructables 에서 내가 말하는 단어에 따라 LED 조명에 빛이 들어와 반응하는 퍼즐을 

만든 프로젝트를 접하게 되었고, 이를 소개하고자 합니다. 



Step 1. 준비물 


- 카드 보드지 

- 퍼즐로 만들고 싶은 사진

- 퍼즐 윤곽선 

- 아두이노 우노 

- Easyvr 쉴드 2.0 

- 브래드 보드 

- 555 타이머 IC 칩 

- USB 케이블

- LED ( 빨강, 주황, 초록 ) 

- 점퍼 와이어 


Step 2. 퍼즐 만들기 


 퍼즐 만들기 


- 퍼즐 윤곽선의 크기에 맞추어 퍼즐에 입힐 사진을 프린트 합니다. 

- 윤곽선을 따라 퍼즐 조각으로 자릅니다. 


* 사진과 윤곽선은 링크를 통해서 이용할 수 있습니다. 


- 사진을 윤곽선에 따라 퍼즐 조각으로 자릅니다. 

- 카드보드지도 마찬가지로 퍼즐 조각의 형태에 맞추어 자릅니다. 

- 카드보드지에 퍼즐 조각의 사진을 입힙니다. 


② 퍼즐 조각 맞추기 


- 퍼즐 조각을 맞춥니다. 

- 목소리에 반응하는 부분에 LED 를 넣기 위해 구멍을 내어 줍니다. 

  여기서는 코 부분에 LED 불빛이 들어오게 하기 위해 구멍을 내어 주었습니다. 


Step 3. 하드웨어 연결방법 




- 브래드 보드에 555 IC 타이머 칩을 연결합니다. 

- 각각의 LED 에 2개씩 점퍼 와이어를 연결합니다. 




- LED 를 브래드 보드에 연결합니다. 

- 하나의 LED + 단자를 브래드 보드의 F9 에 연결합니다. 

                          - 단자를 브래드 보드의 E3 에 연결합니다. 

- 두번째 LED + 단자를 브래드 보드의 F7 에 연결합니다. 

                          - 단자를 브래드 보드의 E7 에 연결합니다. 

- 세번째 LED + 단자를 브래드 보드의 F3 에 연결합니다. 

                          - 단자를 브래드 보드의 E9 에 연결합니다. 





- 쉴드와 아두이노를 연결합니다. 

   Easyvr 쉴드의 핀을 아두이노의 슬롯에 연결합니다. 


                      


- 4개의 점퍼와이어를 이용해 브래드 보드와 아두이노를 연결합니다. 

- 하나의 점퍼와이어를 아두이노 D2 와 브래드보드 G3 에 연결합니다. 

- 두번째 점퍼와이어를 아두이노 D3 와 브래드보드 H7 에 연결합니다. 

- 세번째 점퍼와이어를 아두이노 D4 와 브래드보드 H9 에 연결합니다. 

- 네번째 점퍼와이어를 아두이노 GND 와 브래드보드 A 열에 연결합니다 


Step 3. 소프트웨어 연결방법 


다운받기 

다음 링크를 통해 EasyVR 커맨더와 EasyVR 아두이노 라이브버리를 다운받습니다. 

EasyVR 라이브러리를 아두이노의 라이브러리에 추가해줍니다. 


 명령어 입력하기 


이번 프로젝트에서 우리가 사용하고자 하는 명령어는 

< Let's Count > < One > < Two > < Three > 입니다. 

이를 프로그램에 등록해 주어야 합니다. 


ⅰ. 다운받은 EasyVR 커맨더를 엽니다. 

이 프로그램에서 쉴드가 특정 단어를 알아듣도록 트레이닝 시켜줍니다. 


ⅱ. EasyVR 커맨더를 USB 드라이버에 연결합니다. 

다음과 같은 리스트들이 펼쳐질 것입니다. 


< GROUP 1, GROUP 2, GROUP 3 ....  > 

 < add new command > 를 누르고 

 < train command > 아이콘을 선택합니다. 


ⅲ. 브래드보드 J11 에 쉴드에서 함께 제공하는 마이크를 연결해 줍니다. 

마이크에 대고 우리가 원하는 명령어들을 등록해 줍니다. 


ⅳ. 이후 명령어 < One > < Two > < Three >GROUP 1 에 포함되어 있는지 확인합니다. 


 EasyVR 커맨더와 아두이노를 연결하기 


아두이노 소프트웨어에서 <파일> -> < 예제(Examples) > -> < EasyVR > 을 클릭합니다. 

( * 아두이노 라이브러리에 제대로 EasyVR 라이브러리를 추가하지 않았다면, 

이것이 나오지 않을 것이므로 다시 설정해 줍니다. ) 


EasyVR 브릿지 ( Bridge )를 누릅니다. 

EasyVR 쉴드의 점퍼가 현재 PC 상태임을 확인하고, 

EasyVR 브릿지 코드를 업로드 해 줍니다. 


 이때, EasyVR 커맨드 소프트웨어를 연결한 USB 포트를 연결 해지 할 것에 주의합니다. 


Step 4. 코드 


1
2
3
4
5
6
7
8
9
10
11
 
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
#else // Arduino 0022 - use modified NewSoftSerial
#include "WProgram.h"
#include "NewSoftSerial.h"
NewSoftSerial port(12,13);
#endif
#include "EasyVR.h"
 
cs


아두이노에 EasyVR 쉴드 라이브러리인 < EasyVR.h > 를 추가해 줍니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum Groups
{
GROUP_0 = 0,
GROUP_1 = 1,
};
enum Group0
{
LETS_COUNT = 0,
};
enum Group1
{
G1_ONE = 0,
G1_TWO = 1,
G1_THREE=2,
};
cs


enum 형 변수로서 Group 0 에는 < Let's count > 라는 단어를

Group 1 에는 < One, Two, Three > 를 갖도록 선언해 주었습니다. 


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
81
82
83
84
85
void loop()
{
easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)
Serial.print("Say a command in Group ");
Serial.println(group);
easyvr.recognizeCommand(group);
do
{
// can do some processing while waiting for a spoken command
}
while (!easyvr.hasFinished());
easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off
idx = easyvr.getWord();
if (idx >= 0)
{
// built-in trigger (ROBOT)
// group = GROUP_X; <-- jump to another group X
return;
}
idx = easyvr.getCommand();
if (idx >= 0)
{
// print debug message
uint8_t train = 0;
char name[32];
Serial.print("Command: ");
Serial.print(idx);
if (easyvr.dumpCommand(group, idx, name, train))
{
Serial.print(" = ");
Serial.println(name);
}
else
Serial.println();
easyvr.playSound(0, EasyVR::VOL_FULL);
// perform some action
action();
}
else // errors or timeout
{
if (easyvr.isTimeout())
Serial.println("Timed out, try again...");
int16_t err = easyvr.getError();
if (err >= 0)
{
Serial.print("Error ");
Serial.println(err, HEX);
}
group=GROUP_1;
}
}
void action()
{
switch (group)
{
case GROUP_0:
switch (idx)
{
case LETs_COUNT:
group=GROUP_1;
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
}
break;
case GROUP_1:
switch (idx)
{
case G1_ONE:
Serial.println("In Light");
digitalWrite (2, HIGH);
break;
case G1_TWO:
Serial.println("In Light");
digitalWrite (3, HIGH);
break;
case G1_THREE:
Serial.println("In Light");
digitalWrite (4, HIGH);
break;
}
// write your action code here
// group = GROUP_X; <-- or jump to another group X for composite commands
break;
}
cs


마이크를 통해 목소리가 인식되면, action ( ) 이라는 함수가 호출됩니다. 

action ( ) 에서는 switch ( ) 라는 함수가 자동으로 호출되는데, 

이 함수에서 인식된 목소리가 < Let's count > 인 경우 Group 1 을 자동으로 호출해 주고, 

Group 1 의 단어인 경우 ( <One> <Two> <Three>

One 인지 Two 인지 Three 인지를 확인합니다. 


One 인 경우 첫번째 LED 에 불빛이 들어오게 되고, 

Two 인 경우 두번째 LED 에 불빛이 들어오게 되고, 

Three 인 경우 세번재 LED 에 불빛이 들어오게 됩니다. 


Step 5. 수행결과 


                         


LED 를 사슴의 코 부분에 놓습니다. 

EasyVR 쉴드의 점퍼를 PC → SW 으로 바꿉니다. 

아두이노의 소프트웨어에서 < magnifying glass > 를 클릭하고, 

EasyVR 이 제대로 작동하고 있는지 확인합니다. 


만약 EasyVR 이 작동한다면, 

이전에 등록한  명령어 < Let's Count > < One, Two, Three > 를 마이크에 대고 말해 보면서, 

LED 와 함께 제대로 작동 하는지 확인합니다. 



댓글 4

MADE BY

캔버스에 터치 다음글 인터랙티브 퍼즐을 만들어 보자 현재글 그림에 조명을 켜보자 이전글