캐릭보드 - 센서등을 만들어보자 (+mp3)

by 심형주 | 2017-07-13 17:52

재료

  • 캐릭보드 싱글박스 1개

오늘은 캐릭보드에 mp3기능 + 센서등 기능을 추가해보도록 하겠습니다~


이번 시간에는 빛 센서를 사용해야 하기 때문에, 빛 센서도 연결해주셔야 합니다!

(빛 센서 연결 회로도)


다음에는 캐릭보드에 넣고 싶은 음악 mp3파일을 sd카드에 이동시키셔야 합니다.

아래 사진의 빨간 박스로 표시된 곳에 sd카드가 꽂혀있는데요, 


이것을 분리해주시고! 


싱글박스 안에 들어있는 sd카드 리더기에 꽂으신 후에 컴퓨터와 연결해 주세요.


잘 연결이 되었다면 아래 사진과 같은 폴더가 화면에 뜨게 됩니다. 

mp3라는 폴더에 들어가면 이미 몇 곡이 수록되어 있는 것을 확인하실 수 있습니다. 

원하는 곡이 있으시다면 이 폴더에 넣으신 뒤에, 곡이름의 맨 앞을 숫자 네자리로 수정해주시면 됩니다. 

(ex, 9번 트랙일 경우 곡의 맨앞에 0009를 붙여주시면 됩니다! -> 0009RumbleFish)



다음 코드는 저장한 mp3 재생 및 센서등 기능을 구현한 코드입니다.

조혜인님의 캐릭터 빛센서 조명 만들기를 참고하시면 센서등에 대한 기본 코드를 얻으실 수 있습니다.

기본 센서등 코드에서는 단순히 조명 센서의 저항값이 어떤 기준 값보다 크게 되면 빛이 꺼지게 되고, 기준 값보다 작아지게 되면 빛이 켜지는 식으로 구현이 되어 있습니다.

저는 이 빛센서를 이용하여 밝기에 따라 서서히 밝아지고 / 어두워지는 기능과 mp3기능을 추가해보도록 하겠습니다!


아침이 되어 방안에 빛이 들어오게 되면, mp3가 재생되게 하여 RTC를 연결하지 않아도 약간은 엉성한(?) 알람 기능을 만들어 볼 수도 있겠네요 ^^;;;


lightVal의 값의 범위를 대략 0~1000로 잡고, 이것을 토대로 빛의 밝기를 설정하였습니다.

주변이 어두워지면 네오픽셀 빛도 서서히 어두워지고, 주변이 밝아지면 네오픽셀 빛도 서서히 밝아지도록 설정했습니다. 

어두울 때는 lightVal (저항값)이 커지고, 밝은 때는 그 값이 작아지므로 실제 주변의 빛의 세기와 lightVal의 관계는 반비례합니다. 하지만 제가 의도한 것은 주변이 밝을 때 rgb값도 크게 하여 네오픽셀 빛 또한 밝게하는 것이므로, red/green/blue 값들을 255 - 255*(lightVal*0.001); 로 설정하였습니다!

(lightVal값이 1000이 넘어가게 되면 rgb 값이 -가 될 수 있으므로 0보다 작을 때는 예외처리 하였습니다.)


그리고 lightVal 값이 130보다 작아지게 되면 (주변이 어느 정도 밝아지면) mp3를 재생하도록 하여 일종의 모닝콜(!?) 기능을 설정해 두었습니다~

하지만...... But...........


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
#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
#define lightSensorPin A0
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
float red = 0;
float green = 0;
float blue = 0;
int lightVal = 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 = 255;
}
 
void loop() {
 
int i;
 
   lightVal = analogRead(lightSensorPin);
   delay(100);
 
   red = 255 - 255*(lightVal*0.001);
   green = 255 - 255*(lightVal*0.001);
   blue = 255 - 255*(lightVal*0.001);
   Serial.print("lightVal : ");
   Serial.println(lightVal);
   if(red < 0){
    red = 0;
    green = 0;
    blue = 0;
   }
 
   for(i=0; i<5; i++){
    strip.setPixelColor(i, strip.Color(red, green, blue));
    strip.show();
   }
 
   mp3Serial.listen();  
   if(lightVal < 130){
      if (mp3Serial.isListening()) {
        Serial.println("Good Morning~ Play the music!");
        mp3_play(7);
        delay (70000);
        mp3_stop();
      }
   }
 
}
 
 
cs




일단 동영상을 보시면 손으로 빛센서를 움켜쥐거나 주변 빛이 차단되면 lightVal값이 커져 네오픽셀 빛이 어두워지고, 주변 빛에 점점 노출되면 lightVal값이 작아지면서 네오픽셀 빛이 밝아지는 것을 확인할 수 있습니다.

하지만..........

마지막에서 보신 것처럼 기분 좋은 기상을 도와주는 모닝콜은 들을 수 없었습니다.... 노래가 제대로 재생이 되다가도 다시 시도하면 자꾸 지지직(?) 거리는 현상이 발생하고 있습니다 ㅜㅜ

원인을 아직 제대로 파악하지 못하여 수정하지 못했지만 일단 lightVal값이 어느 기준 이하가 되면 스피커가 작동하는 것까지 구현해보았습니다.


댓글 0

MADE BY