아침이 되면 노래와 빛이 나오는 무드등 만들기

by 강종구 | 2017-07-13 15:58
mp3 무드등 스마트폰 아두이노 알람 캐릭보드

자! 이번 시간에는 기존에 만들어본 mp3와 빛센서를 활용한 무드등을 만들어 보려고 합니다.

우선 준비물이 필요합니다!


1. 준비물

캐릭보드, 아두이노 나노, 아두이노 나노 케이블, 빛센서, 네오픽셀, MP3모듈, 스피커, 스탠드, 캐릭터 


2. 캐릭보드에 모듈 연결하기


저희에게 필요한 것은 mp3, 빛센서, 네오픽셀을 캐릭보드에 각각 연결하는 것입니다.

링크의 프로젝트에서 각각의 모듈을 연결하는 방법 및 라이브러리 설치방법을 찾아보시면 됩니다.


그래서 아래와 같이 연결하시면 됩니다.




3. 소스 코드

이제 제가 구현한 소스코드를 설명하겠습니다.


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
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.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);
 
int red = 0;
int green = 0;
int blue = 0;
 
int lightVal = 0;
int flag = 1;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (20);  
 
}
 
void loop() {
  lightVal = analogRead(lightSensorPin); //빛센서값 읽어오기
  delay(100);
  Serial.println(lightVal); //빛센서값 시리얼 창에서 확인하기
  
  if (lightVal > 300) { //주변의 불이 어두울 때 불 끄기
    red = 0;
    green = 0;
    blue = 0;
    flag = 1;
  } else { // 주변의 불이 밝아질 때 켜기
    if(flag == 1)
    {
      randcolor();
      lightChase(strip.Color(red, green, blue));
      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(1);  
        delay (10000); 
        mp3_stop();
        flag = 0;
      }
    }
    else
    {
      red = 0;
      green = 0;
      blue = 0;
    }
  }
  for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(red, green, blue));
    strip.show();
  }
}
void randcolor()
{
  red = random(256);
  green = random(256);
  blue = random(256);
}
void lightChase(uint32_t c) 
{
  for (int j=0; j<100; j++) {
    for (int q=0; q < 3; q++) {
      for (int i=0; i < 5; i=i+3) {
        strip.setPixelColor(i+q, c);   
      }
      
      strip.show();
      delay(10);
 
      for (int i=0; i < 5; i=i+3) {
        strip.setPixelColor(i+q, 0);   
      }
    }
  }
}
 
cs


아침에 LED와 mp3를 켜기 위해서는 flag라는 전역변수를 저는 사용했습니다.

flag를 처음에 1로 세팅해주시고요. (이건 자기 맘입니다. 0이나 1로 설정해주세요)


빛센서가 인식하는 lightVal라는 값은 주변이 어두우면 커지고, 밝으면 작은 값을 가집니다.


그래서 저는 lightVal > 300 이라는 조건을 통해서, 만약 주변이 어둡다면(lightVal >300) RGB를 각각 0으로 설정하여 LED를 출력하지 않았고, flag값을 1로 설정해주었습니다


만약 주변이 밝다면(lightVal<300)이라면 flag값을 검사해주어, 만약 flag가 1이라면(전에 한번도 밝아졌던 적이 없었다면,  lightchase함수를 통해 특유의 빛 형식을 LED에 출력하고 정해진 mp3를 10초간 플레이한 뒤, flag 값을 0으로 바꿔주었습니다.


반대로 주변이 밝지만(lightVal < 300) flag값이 0이라면(전에 한번 밝아진 적이 있음), RGB를 0으로 정하여 LED를 출력하지 않았습니다.


이를 업로드 하여 실행하면 아래와 같이 출력됩니다!


빛이 잘 들어오는 창가에 캐릭보드를 연결하여 놓으면, 해가 뜨는 아침에 잘 작동할 것입니다!


댓글 0

캐릭보드를 이용한 아두이노 활용

아침이 되면 노래와 빛이 나오는 무드등 만들기

by 강종구
아침이 되면 노래와 빛이 나오는 무드등 만들기현재글 앱으로 캐릭터 컨트롤하기 3 _ 대화하기 이전글