3주차 3D 액자 조명제어하기
3D 액자 조명을 만들어봅시다.
1. 네오픽셀 링 사용하기
먼저 아두이노 IDE 에서 네오픽셀 링을 사용하기 위해 라이브러리를 설치합니다.
[스케치] - [라이브러리 포함] - [라이브러리 관리] 에서 "NeoPixel"을 검색합니다. [Adafruit NeoPixel by Adafruit] 를 찾아 설치해주세요.
2. 네오픽셀 링 LED 제어
네오픽셀 링의 LED를 제어해봅시다.
네오픽셀 링의 GND, 5V, DI를 아두이노에 연결합니다.
GND, 5V는 아두이노에 바로 연결하고 DI를 디지털 핀 5번에 연결해 봅시다.
먼저 네오픽셀 링의 0번 LED를 "빨간색"으로 켜봅시다.
2-1) LED 0번 빨간색으로 나타내기
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
int index = 0;
void loop() {
// LED번호, R G B
strip.setPixelColor(0, 255, 0, 0);
strip.show();
}
setPixelColor() 함수를 이용해 LED에 원하는 색깔의 빛을 나타낼 수 있습니다.
함수를 이용해 LED 색깔을 지정했다면 show() 함수를 이용해서 LED에 세팅해둔 값을 확인할 수 있습니다.
show() 함수를 사용하지 않으면 LED가 켜지지 않을 수 있으니 주의하세요!
(LED번호, R, G, B)의 값을 변경하여 다른 LED에 원하는 색깔의 빛을 나타내 확인해보세요.
LED의 R, G, B 값은 0부터 255까지의 값으로 나타낼 수 있습니다.
너무 눈이 부시다면 값을 조금 줄여보세요!!
2-2) LED 0번의 빛 세기를 조절해보기
이번에는 LED 0번의 빛 세기를 조정하여 천천히 밝아지도록 만들어 봅시다.
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
int index = 0;
void loop() {
for(int i=0; i<255; i++) {
strip.setPixelColor(0, i, 0, 0);
strip.show();
delay(10);
}
}
2-3. 실습1 스스로 코딩해보기) LED에 R, G, B 색깔로 나타내기
반복문을 이용해 24개의 LED 모두에 빨강, 초록, 파랑으로 빛이 나타날 수 있도록 코딩해봅시다.
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
void loop() {
//code..
}
3. random() 함수 사용해보기
빛 색깔을 설정하기 위해 random() 함수를 이용해봅시다.
스스로 원하는 빛 색깔을 설정해도 좋지만 임의의 빛을 섞어 나타내봅시다.
random(시작, 끝)으로 설정한다면 random 함수가 시작~(끝-1) 까지의 값을 임의로 반환합니다.
만약 random(1, 10)로 설정한다면 1~9 사이 수가 반환됩니다.
3-1) 1초마다 0번 LED 색깔을 랜덤으로 나타내봅시다.
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
void loop() {
int r = random(0, 255);
int g = random(0, 255);
int b = random(0, 255);
strip.setPixelColor(0, r, g, b);
strip.show();
delay(1000);
}
3-2) 실습2 스스로 코딩해보기) 네오픽셀 링 전체에 랜덤 함수를 이용해 빛 나타내기
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
void loop() {
//code..
}
4. 버튼을 이용해 LED 색 변경하기
4-1) 버튼 사용하기
지난 시간 버튼을 사용하는 방법을 배웠습니다.
네오픽셀 링을 버튼을 이용해 버튼을 누를 때마다 색이 변경될 수 있도록 코딩해봅시다.
먼저 버튼을 아두이노에 연결하고 버튼을 누를 때마다 네오픽셀 링의 색이 랜덤으로 변경될 수 있도록 코딩해봅시다.
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
int BTN = 8;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
pinMode(BTN, INPUT_PULLUP);
}
int r, g, b;
void loop() {
if (digitalRead(BTN) == LOW) {
r = random(0, 255);
g = random(0, 255);
b = random(0, 255);
for (int i=0; i<NUM_LEDS; i++) {
strip.setPixelColor(i, r, g, b);
strip.show();
delay(50);
}
}
delay(100);
}
실습 코드 참고하기
실습1) LED에 R, G, B 색깔로 나타내기
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
int index = 0;
void loop() {
for(int i=0; i<24; i+=3) {
strip.setPixelColor(i, 255, 0, 0);
strip.setPixelColor(i+1, 0, 255, 0);
strip.setPixelColor(i+2, 0, 0, 255);
}
strip.show();
}
실습2) 네오픽셀 링 전체에 랜덤 함수를 이용해 빛 나타내기
#include <Adafruit_NeoPixel.h>
int PIN = 5;
int NUM_LEDS = 24;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
}
void loop() {
int r = random(0, 255);
int g = random(0, 255);
int b = random(0, 255);
for (int i=0; i<NUM_LEDS; i++) {
strip.setPixelColor(i, r, g, b);
strip.show();
delay(50);
}
delay(3000);
}