재료

  • 캐릭보드 싱글박스 1개

이제 서로 대화하는 캐릭터를 만들어보겠습니다.

이번 스토리를 완성하기 위해서는 캐릭보드가 두개 필요합니다.

Master와 Slave의 역할을 하는 각각의 캐릭터들은 적외선 신호를 주고 받으며 서로에게 반응합니다.

Master의 시리얼 창에 명령(1 과 2)를 입력하면 적외선 신호를 발사하고,

Slave는 Master의 신호에 반응한 후 응답합니다.


단계별로 따라가보겠습니다.

1.  캐릭보드에 적외선센서 수신부와 발신부 연결하기

1) Master

다음 회로도를 참고하여 Master에게는 적외선 센서 발신부를 연결합니다.


저의 Master입니다!

적외선 센서를 연결하고 캐릭박스의 구멍으로 살짝 빼내어주세요!



투명박스라 잘 보이지 않지만 어쨋든 이렇게 되어있습니다. 조금 귀엽네요:)



2) Slave

회로도를 참고하여 적외선 수신부 를 연결해줍니다.


저의 Slave! 미니언입니다. 사실 이번에도 나노보드가 여분이 없는 바람에 도현양의 캐릭보드를 빌려 사용하였습니다. (캐릭보드 만들기의 개척자 도현!)



마찬가지로 박스의 네모난 구멍으로 적외선 수신부를 살짝 빼내었습니다.



그리고 자신이 사용할 모듈들을 자유롭게 연결하면 됩니다! 저는 네오픽셀과 mp3&스피커 모듈을 사용했습니다.


2. 아듀이노IDE에서 업로드하기

1) IRremote 라이브러리 확인

Arduion-IRremote-master 라이브러리가 없다면 링크에서 내려받아서 자신의 libraries 폴더에 가져다 놓습니다.


 

잘 모르시는 분들은 매뉴얼을 참고하여 주세요.  1. 아두이노 환경설정 부분에 있습니다.

이제 캐릭보드 두개를 모두 컴퓨터에 연결하고 코드를 업로드해볼까요?


2) 다음 Master 코드를 업로드합니다.

매뉴얼의 코드를 그대로 사용하셔도 좋습니다.

저는 명령에 따라 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#define BLYNK_PRINT Serial
#define PIN 6
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <IRremote.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
 
SoftwareSerial mp3Serial(1213);
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
//IR Send
IRsend irsend;
 
//IR
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean checkIR = false;
 
int red;
int green;
int blue;
 
void setup()
{
  Serial.begin(9600);
  strip.begin();
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (20);
  Serial.println("Setting...");
}
 
void loop()
{
   for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(0,255,0));
    strip.show();
  }
  
  if (Serial.available() > 0) {
    char str = Serial.read();
    if (str == '1') { //1을 입력 받으면
      for (int i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(0,0,255));
        strip.show();
      }
      mp3Serial.listen();
      if (mp3Serial.isListening()) {
        Serial.println("Play1_Master");
        mp3_play(1);
        delay (15000);
        mp3_stop();
      }
      sendIR(0xa); //적외선 신호를 발사
      for (int i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(0,255,0));
        strip.show();
      }
    } else if (str == '2') {
      for (int i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(255,0,0));
        strip.show();
      }
      mp3Serial.listen();
      if (mp3Serial.isListening()) {
        Serial.println("Play2_Master");
        mp3_play(2);
        delay (15000);
        mp3_stop();
      }
      sendIR(0xb); //적외선 신호를 발사
      for (int i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(0,255,0));
        strip.show();
      }
    }    
  } 
}
 
void sendIR(int hex) {
  for (int i = 0 ; i < 3; i++) {
    irsend.sendSony(hex, 20);
    delay(100);
  }
  delay(500);
  Serial.println("IR has been sent");
  Serial.println(hex, HEX);
  irrecv.enableIRIn();
}
cs



3) Slave 코드 업로드하기

Slave는 Master와 적외선 신호가 들어오면 Master와 똑같은 색으로 바뀌고 노래를 따라 부릅니다.

Slave 코드를 업로드할때는 Port 를 Slave에 맞는 것으로 바꾸고 업로드하셔야합니다!

저는 Master는 COM9 포트, Slave는 COM7 포트여서 업로드시에 바꿨습니다.


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
86
87
88
89
#define PIN 6
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <IRremote.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red;
int green;
int blue;
 
//IR
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean checkIR = false;
 
void setup() {
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (20);
  irrecv.enableIRIn();
  strip.begin();
  for (int i = 0; i < 5; i++) { // 흰색 불을 켠다
    strip.setPixelColor(i, strip.Color(255255255));
    strip.show();
  }
  Serial.println("Setting...");
}
 
void loop() {
  if (receiveIR(0xa== true) { //0xa 신호를 받으면
    for (int i = 0; i < 5; i++) { // 파란 불을 켠다
      strip.setPixelColor(i, strip.Color(00255));
      strip.show();
    }
      mp3Serial.listen();
      if (mp3Serial.isListening()) {
        Serial.println("Play1_Slave");
        mp3_play(1);
        delay (10000);
        mp3_stop();
      }
     for (int i = 0; i < 5; i++) { // 흰색 불을 켠다
      strip.setPixelColor(i, strip.Color(255255255));
      strip.show();
    }
  } else if (receiveIR(0xb== true) { //0xb 신호를 받으면
    for (int i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(255,0,0));
        strip.show();
      }
      mp3Serial.listen();
      if (mp3Serial.isListening()) {
        Serial.println("Play2_Slave");
        mp3_play(2);
        delay (10000);
        mp3_stop();
      }
      for (int i = 0; i < 5; i++) { // 흰색 불을 켠다
        strip.setPixelColor(i, strip.Color(255255255));
        strip.show();
      }
  }
}
 
boolean receiveIR(int hex) {
  checkIR = false;
  if (irrecv.decode(&results)) {
    Serial.print("Result.value = ");
    Serial.println(results.value);
    Serial.print("HEX = ");
    Serial.println(HEX);
    if (results.value == hex) {
      Serial.println("Hello");
      checkIR = true;
    }
    irrecv.resume();
  }
  delay(30);
  return checkIR;
}
cs


3. 실행해보기

먼저 Master 코드를 업로드합니다.

다음과 같이 시리얼 창에 Set up.. 이라고 나타나면 명령(1이나 2)를 입력해줍니다.

IR sent는 적외선 신호가 보내졌다는 의미입니다.




하지만 잘 되지는 않는 것 같습니다. Master의 스피커가 지지직 소리를 내며 꺼진 뒤로는 실행을 멈추는데요.

이번엔 또 왜이런 걸까요?



반복적으로 실행을 하다가 센서가 가까이 마주보도록 해보았습니다. 이번엔 다행히 제대로 되는군요!

순서가 헷갈리는 분들은 Slave 코드를 업로드해 놓은 상태로, 다시 Master 코드를 업로드하여 시리얼 창에 명령을 입력하는 순서라고 보시면 될 것 같습니다.

Port 를 Master와 Slave에 맞게 변경해서 업로드하시는 것도 잊으면 안됩니다!




영상으로 확인해볼까요?




영상이 중간부터 시작했긴한데, Slave가 하얀 빛을 내고 있다가 Master가 노래를 부르고 빛을 내면 그대로 따라서 하는 것을 확인할 수 있습니다.

이제 남은 것은 앱으로 대화하는 캐릭터를 컨트롤 하는 것 뿐입니다.




댓글 0

MADE BY