캐릭보드 - 빛을 설정해보자 (+ RTC)

by 심형주 | 2017-07-11 16:24

재료

  • 캐릭보드 싱글박스 1개 (59000원)

아두이노 코딩을 하기 이전에, 일단 기본적인 준비과정이 필요합니다!


1. 소프트웨어 설치

https://www.arduino.cc/en/Main/Software

이곳으로 들어가시면 아래와 같은 페이지가 나옵니다.

컴퓨터의 OS에 맞춰 사진 우측에서 선택하여 설치하시면 됩니다~ 



설치 후에 실행해 보시면 아래와 같은 창이 뜨게 됩니다. 

함수 내에서 아두이노 코딩을 통하여 나만의 무드등을 원하는대로 구현해볼 수 있습니다~





2. 라이브러리 설치

코딩할 때 기본적으로 필요한 라이브러리들의 설치가 필요합니다!

- Blynk https://github.com/blynkkk/blynk-library

네오픽셀 https://github.com/adafruit/Adafruit_NeoPixel

- DFplayer https://github.com/DFRobot/DFPlayer-Mini-mp3

적외선 https://github.com/z3t0/Arduino-IRremote

- RTC https://github.com/PaulStoffregen/DS1307RTC


위 5개의 링크에 모두 들어가셔서 각각 다운받으셔야 합니다. 

주황색 박스로 표시된 Clone or download를 클릭하시면 라이브러리가 ZIP파일로 다운 받아지게 됩니다. 

압축된 파일을 풀 때, 경로를 미리 "C:\Program Files (x86)\Arduino\libraries"로 설정하여 풀어주셔도 되고,  후에 위 경로로 옮겨주셔도 됩니다. 

OS에 따라 경로가 달라질 수 있는데, Arduino라는 이름의 폴더를 찾으신 후에 그 폴더 내의 libraries 폴더에 압축이 해제된 라이브러리 파일들을 저장해주시면 됩니다.   



위와 같이 완료하셨다면 성공! 

한 가지 주의하실 점이 있는데요,  DFPlayer-Mini-mp3-master라는 폴더로 들어가시면

DFPlayer_Mini_Mp3라는 또 다른 폴더가 있습니다.

이 DFPlayer_Mini_Mp3폴더 내의 모든 파일들을 밖으로 빼주셔야 합니다!

그렇지 않으면 컴파일시 오류가 발생하게 되므로 꼭! 위치를 변경해주세요.

(아래 사진의 빨간 박스 내의 파일들이 원래는 DFPlayer_Mini_Mp3 폴더내에 있던 파일입니다.)




3. 부품 조립

이제 하드웨어로 넘어와서, 부품의 조립 및 연결이 필요합니다!

① 네오픽셀 연결

② mp3 모듈 및 스피커 연결

③ RTC모듈 연결

부품들을 연결하신 뒤에, 케이블 선으로 컴퓨터와 연결하시면 준비 완료!!

(저는 도현씨의 아두이노를 물려 받아? 사용하였습니다^^;)


이제 네오픽셀을 이용하여 mp3기능을 갖춘 무드등을 만들어 보도록 합시다~!


아두이노와 컴퓨터 연결 후 코드를 작성하기 이전에,

툴 메뉴에서 보드는 Arduino Nano로, 프로세서는 ATmega328로, 포트는 COM#으로 설정해주셔야 합니다.

(COM뒤의 번호는 다를 수 있습니다~)



아래의 코드는 조혜인님의 캐릭터 무드등&mp3 만들기에서 가져온 코드입니다. 

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
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red = 0;
int green = 0;
int blue = 0;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (13);
  red = 255;
  green = 255;
  blue = 0;
}
 
void loop() {
  for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(red, green, blue));
    strip.show();
  }
  mp3Serial.listen();
  if (mp3Serial.isListening()) {
    Serial.println("Play");
    mp3_play(7);
    delay (7000);
    mp3_stop();
  }
  delay(1000);
}


setup함수 내에서 기본적인 변수 및 환경을 설정해주고, loop함수 내에서 만들고자 하는 기능을 구현하시면 됩니다.

네오픽셀은 rgb의 3원색을 사용합니다. r은 red, g는 green, b는 blue를 의미합니다.

 red, green, blue 이 세 변수를 통하여 원하는 색상을 설정하실 수 있습니다. (범위는 0~255까지 가능합니다) 

위의 코드에서는 setup함수에서 red = 255; green=255; blue = 0; 으로 설정되어 있습니다.

빨간빛과 초록빛을 합하게 되면!? 노란빛이 나오게 되겠죠? 아래 사진과 같이 확인하실 수 있습니다~



setup 함수에서 스피커의 볼륨은 13,

loop함수의 mp3_play(7); 이라는 코드를 통해 7번 곡으로 설정이 되어있습니다.

곡이라고 하기엔 조금 묘한 새소리를 들으실 수 있습니다 ^^; (mp3 설정은 다음 시간에 자세히 다루도록 하겠습니다) 

이렇게 설정된 네오픽셀을 캐릭터 안에 넣어보니 누런빛?의 빅히어로를 볼 수 있었습니다....




이 코드를 바탕으로 제가 원하는 방향으로 코드를 수정해 보았는데요~


RTC를 활용하여 현재 시간이 몇 초를 지나고 있는지 확인할 수 있습니다.

tmElements_t라는 자료형을 사용하여 변수를 선언하면, 시간 정보를 얻을 수 있습니다. (코드에서는 tm으로 선언하였습니다) 

초에 대한 정보는 tm.Second에 저장되어 있기 때문에 이를 활용할 수 있습니다.

(tm.Year / tm.Month / tm.Day / tm.Hour / tm.Minute / tm.Second에 년/월/일/시간/분/초의 정보가 담겨 있습니다.)


저는 프로그램이 시작된 후 5초 동안만 빛이 켜지고, 후에는 꺼지도록 설정을 해보았습니다!

loop함수의 가장 아랫줄에 delay() 함수를 통해 시간 간격을 설정한 것을 보실 수 있는데요.

저는 delay(1000);으로 설정하여 loop함수 전체가 1초 간격으로 호출되도록 하였습니다.

(delay함수를 쓰지 않으면 1초에 여러 번 함수가 호출됩니다!) 


이를 확인하기 위하여 시리얼 창에 시작된 시간이 몇 초인지, 현재가 몇 초를 지나고 있는지 출력해 보았습니다.

(시리얼 창은 툴> 시리얼 모니터 를 선택하시면 확인하실 수 있습니다)


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
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
String inputString = "";       
 
int red = 0;
int green = 0;
int blue = 0;
int cnt = 0;
 
tmElements_t tm;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (2);
  red = 255;
  green = 255;
  blue = 255;
 
 
void loop() {
 
int i;
 
  if(RTC.read(tm)){
    Serial.print("Start: ");
    Serial.print(sec_int);
    Serial.print(" / Now: ");
    Serial.print(tm.Second);
    Serial.println();
 
    if(cnt < 5){
      cnt++;
      Serial.println(cnt);
      for (i = 0; i < 5; i++) {
        strip.setPixelColor(i, strip.Color(red, green, blue));
        strip.show();
      }
    }
    else{
      for (i = 0; i < 5; i++) {
       strip.setPixelColor(i, strip.Color(000));
       strip.show();
      }
    }
 /*   mp3Serial.listen();
    if (mp3Serial.isListening()) {
      Serial.println("Play");
      mp3_play(7);
      delay (7000);
      mp3_stop();
    }*/
  }
  delay(1000);
}
cs


자, 이제 동영상으로 확인해 보시죠~!


원래의 캐릭터대로 하얀빛의 빅히어로 무드등이 완성되었습니다~



댓글 0

MADE BY

캐릭보드 - 센서등을 만들어보자 (+mp3) 다음글 캐릭보드 - 빛을 설정해보자 (+ RTC)현재글