아두이노 나노와 네오픽셀로 만드는 다이나믹 마키 LED 조명
부품 및 소모품
| 아두이노 나노 R3 |
×1 |
| 네오픽셀 스트립 |
×1 |
앱 및 온라인 서비스
프로젝트 소개
간단한 DIY 애니메이션 마키 조명
아케이드 캐비닛이나 기타 프로젝트에 애니메이션 조명을 추가하는 간단한 튜토리얼입니다. 마키 백라이트 등 다양한 용도로 활용할 수 있습니다.
준비물: 아두이노 나노(또는 호환 보드), 네오픽셀 스트립, 전선 3가닥.
제작 과정
아래 영상을 참고하여 제작하세요.
간단 설정
하드웨어 연결
아두이노 나노에서 네오픽셀 스트립으로 3가닥 전선을 납땜합니다: 5V, 디지털 신호(아두이노 2번 핀 사용), 그라운드.
팁: 열수축 튜브로 케이블을 묶어주세요. 특히 LED 스트립 연결부는 반드시 커버하여 납땜 부위가 떨어지지 않게 하세요.
코드 업로드
스케치에서 연결된 스트립의 LED 개수를 설정한 후 아두이노에 업로드하고 테스트하세요. 예제 코드는 '워킹', '깜빡임', '펄싱' 애니메이션을 흰색으로 구현합니다. 코드를 수정하면 다양한 애니메이션과 색상 연출이 가능하며, 단순 백라이트로도 사용 가능합니다.
설치
캐비닛에 딱 맞게 골판지 2개를 잘랐습니다. 하나는 네오픽셀 스트립을 붙이는 배경용, 다른 하나는 마키 하단 뒤에 평평하게 놓아 빛이 아래로 직접 비치지 않게 차단합니다. 캐비닛에 맞게 모서리를 다듬었습니다.
골판지에 가퍼 테이프를 붙여 검정색으로 만들고, 네오픽셀 스트립을 접착제로 고정한 뒤 전선과 나노를 골판지 뒷면에 테이프로 고정했습니다.
두 부품을 캐비닛에 넣고 나노의 USB 케이블을 5V 전원(라즈베리파이 USB 포트)에 연결합니다.
기존 마키를 다시 장착하거나 직접 제작한 마키로 교체하세요. 저는 포토용지에 출력해 마키 크기에 맞게 잘라 사용했습니다.
팁: 전문 인쇄업체에 필름 인쇄를 의뢰하면 결과물이 훨씬 더 훌륭해집니다.
필요 라이브러리
라이선스
스케치 일부는 인터넷에서 발췌했으며 원저작자에게 저작권이 있습니다. 개인적 용도로만 자유롭게 사용 가능하며 상업적 이용은 금지됩니다. 문의: ericBcreator@gmail.com
코드
애니메이션 마키 조명 코드 Arduino
/* **********************************************************************
* Marquee lighting with Neopixels by ericBcreator
* simple script for lighting an (arcade) marquee
**********************************************************************
* last update 20181021 by ericBcreator
*
* Inspired by an article by sandyjmacdonald
* https://sandyjmacdonald.github.io/2015/12/02/picade-errata/
*
* components:
* - Neopixel strip
* - Arduino Nano
*
* This code is free for personal use, not for commercial purposes.
* Please leave this header intact.
*
* contact: ericBcreator@gmail.com
********************************************************************** */
#include
#define PIN 2
int numOfLeds = 11;
int minBrightness = 80;
int maxBrightness = 255;
int walkingLedsDelay = 250;
int flashDelay = 250;
int numOfFlashLoops = 3;
int numOfPulseLoops = 10;
int pulseDelay = 20;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(numOfLeds, PIN);
void setup() {
strip.begin();
}
void loop() {
walkingLeds();
flashLeds();
for (int i = 0; i < numOfPulseLoops; i++)
pulseBrightness();
}
void walkingLeds() {
setLedColorsToZero();
strip.setBrightness(maxBrightness);
strip.show();
for (int x = numOfLeds; x > 0; x--) {
strip.setPixelColor(x, strip.Color(255, 255, 255));
strip.show();
delay(walkingLedsDelay);
strip.setPixelColor(x, 0);
strip.show();
}
}
void flashLeds() {
setLedColors();
for (int i = 0; i < numOfFlashLoops; i++) {
strip.setBrightness(maxBrightness);
strip.show();
delay(flashDelay);
strip.setBrightness(minBrightness);
strip.show();
delay(flashDelay);
}
}
void pulseBrightness() {
setLedColors();
for (int i = minBrightness; i < maxBrightness; i++) {
strip.setBrightness(i);
strip.show();
delay(pulseDelay);
}
for (int i = maxBrightness; i > minBrightness; i--) {
strip.setBrightness(i);
strip.show();
delay(pulseDelay);
}
}
void setLedColors() {
for (int x = 0; x < numOfLeds; x++)
strip.setPixelColor(x, strip.Color(255, 255, 255));
}
void setLedColorsToZero() {
for (int x = 0; x < numOfLeds; x++)
strip.setPixelColor(x, strip.Color(0, 0, 0));
}
회로도