빛센서 무드등 만들기

by 강종구 | 2017-07-06 13:56
LED 네오픽셀 무드등 빛센서 아두이노

이번 시간에는 빛 센서를 가지고 주변 조명 밝기에 따라 켜지고 꺼지는 무드등을 만들어 볼 시간입니다.


우선. 캐릭보드를 1개 준비해주시고요.

그외에 다른 준비물들을 살펴봅시다. 



- 준비물

캐릭보드, 아두이노 나노, 아두이노 나노 케이블, 빛센서, 네오픽셀, 캐릭터


- 캐릭보드에 모듈 연결하기 

1) 빛센서 연결하기


보시다 시피 빛센서는 A0핀을 사용하기에 빛센서의 A0는 보드판의 A0에 꽂아주세요.


2) 네오픽셀 연결하기


네오픽셀 연결하는 방법은 아래와 같습니다. 만약 더 궁금하신다면  LED컬러 변경하기 프로젝트를 확인해주세요.

네오픽셀과 빛센서 GND부분은 보드의 GND 부분에 연결해야하는 것 주의하시구요!


실제로 연결한 사진입니다.



- 기본 소스코드


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 <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
 
#define PIN 6
#define lightSensorPin A0 
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red = 0;
int green = 0;
int blue = 0;
 
int lightVal = 0;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
}
 
void loop() {
  lightVal = analogRead(lightSensorPin); //빛센서값 읽어오기
  delay(100);
  Serial.println(lightVal); //빛센서값 시리얼 창에서 확인하기
  
  if (lightVal < 400) { //밝을 때 불 끄기
    red = 0;
    green = 0;
    blue = 0;
  } else { // 밝지 않을 때 불 켜기
    red = 255;
    green = 255;
    blue = 255;
  }
  for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(red, green, blue));
    strip.show();
  }
 
}



위의 경우는 밝을 때 불이 꺼지고, 밝지 않을 때 불이 켜지는 일반적인 코드입니다.

만약 밝은 때 불이 켜지고, 밝지 않을 때 꺼지는 코드를 구성하기 원하신다면, if문의 내용을 반대로 하시면 되고, lightVal의 범위값을 조정하시면, 빛센서가 감지하는 밝기에 따라 네오픽셀의 반응을 조절하실 수 있습니다.


- 실제 구성 소스코드

아래의 코드는 제가 구성한 코드입니다.


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
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
 
#define PIN 6
#define lightSensorPin A0 
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red = 0;
int green = 0;
int blue = 0;
 
int lightVal = 0;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
}
 
void loop() {
  lightVal = analogRead(lightSensorPin); //빛센서값 읽어오기
  delay(100);
  Serial.println(lightVal); //빛센서값 시리얼 창에서 확인하기
  
  if (lightVal < 400) { //밝을 때 불 끄기
    red = 0;
    green = 0;
    blue = 0;
  } else { // 밝지 않을 때 불 켜기
    randcolor();
    lightChase(strip.Color(red, green, blue));
  }
  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 변경하기(2)의 코드를 응용한 것입니다.

빛센서가 400이상의 빛을 감지하면 red, green, blue를 전부 0으로 설정해주어, 네오픽셀을 꺼주고

400이하의 빛일 경우, 제가 설정한 네오픽셀 함수를 구현하도록 되어있습니다.


아래는 실제로 구현한 영상입니다.


댓글 0