DIY 핫글루 LED 매트릭스 램프 - 나만의 컬러풀 디스플레이 만들기
부품 및 소모품
| 부품 | 수량 | 비고 |
| WS2812B 어드레서블 LED 스트립 (IP60, 60LED/m, 128개) | 128개 | 16줄 × 8개씩 절단 사용 |
| 아두이노 나노 R3 | 1 | |
| 3A 미니 DC-DC 스텝다운 컨버터 | 1 | 출력 5V로 사전 설정 필수 |
| 저항 10k옴 | 1 | |
| 저항 330옴 | 1 | 데이터 라인 보호용 |
| 커패시터 470µF 10V | 1 | 전원 안정화용 |
| 10K 리니어 슬라이드 포텐셔미터 (45mm) | 1 | 애니메이션 속도 조절 |
| 소형 푸시 버튼 | 1 | 모드 변경 |
| 소형 로커 스위치 | 1 | 전원 ON/OFF |
| DC 파워 소켓 (패널 타입) | 1 | |
| 7mm × 100mm 글루 스틱 | 64개 | 빛 확산용 |
필요한 도구 및 장비
앱 및 온라인 서비스
프로젝트 개요
jbumstead의 '광섬유 LED 매트릭스' 램프를 참고해, 비싼 12mm 디퓨즈드 RGB LED 대신 저렴한 WS2812B 스트립을 사용하고, 7mm 글루 스틱을 빛 확산봉으로 활용할 수 있도록 3D 프린팅 케이스를 설계했습니다. OpenSCAD로 모델링하여 상하판과 홀더를 출력하고, LED 스트립을 지그재그로 배선해 8×8×2 = 128개 픽셀 매트릭스를 구성합니다.
제작 과정
1. 케이스 3D 프린팅
바닥판(Hot Glue Matrix - Bottom.stl)만 서포트가 필요합니다. 0.2mm 레이어, 15% 인필로 출력 후 19/64인치 드릴로 구멍을 살짝 넓혀 글루 스틱 삽입을 용이하게 합니다.
2. 램프 섹션 조립
- LED 스트립을 8개 LED씩 16조각으로 자릅니다.
- 평평한 표면에 8개씩 붙여 DIN이 좌상단에 오도록 배치, 번갈아 방향을 뒤집어 지그재그 배선합니다.
- 상판 홀더에 뒤집어 장착하고 블루 페인터 테이프로 고정.
- 하판도 동일하게 배선 (DOUT가 우상단).
3. 글루 스틱 장착
64개의 글루 스틱을 한 줄씩 끼워 넣고 네 모서리 높이를 정확히 맞춥니다. 모서리만 소량의 순간접착제로 고정해 구조를 견고하게 만듭니다.
4. 상하 스트립 연결
하판 근처에서 세 선(+5V, DIN↔DOUT, GND)을 잘라 납땜 연결합니다.
5. PCB 제작
이글(Eagle) 파일 제공. 토너 전사법이나 만능기판으로 제작 가능. DC 레귤레이터 출력을 5V로 맞춘 후 기판에 장착하세요.
6. 최종 배선
슬라이드 포텐셔미터, 푸시 버튼, 로커 스위치, DC 소켓을 회로도대로 배선하고 LED 스트립 선을 PCB에 연결합니다.
7. 소프트웨어
버튼으로 8가지 애니메이션 모드 전환, 포텐셔미터로 속도 조절. 기본 테스트 애니메이션 코드 포함.
코드 (주요 파일)
GlueMatrixTest.ino
#include
#include "Button.h"
#define PIN_LED 2
#define PIN_SWITCH 3
#define PIN_POT A0
#define LEDS 128
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, PIN_LED, NEO_GRB + NEO_KHZ800);
Button mode = Button(PIN_SWITCH);
bool modePressed = false;
// 상하판 LED 매핑 배열 (PROGMEM)
const uint8_t botLED[] PROGMEM = { ... };
const uint8_t topLED[] PROGMEM = { ... };
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_SWITCH, INPUT);
pinMode(PIN_POT, INPUT);
strip.begin();
strip.show();
Button::PinChangeSetup(PIN_SWITCH);
}
void loop() {
if (modePressed) {
pattern = (pattern % 8) + 1;
strip.clear();
}
modePressed = false;
// pattern 1~9: colorWipe, rainbow, theaterChase 등 실행
// 포텐셔미터 값으로 delay 조절
if (!modePressed) modePressed = mode.Pressed();
}
// 인터럽트 서비스 루틴 등 생략...
Button.h / Button.cpp
디바운스, 반복 입력, 핀 체인지 인터럽트를 처리하는 버튼 라이브러리입니다.
3D 프린팅 파일 & 회로도
- STL 파일:
stl_files_vSNeOCJWDn.zip - 이글 파일:
eagle_files_D8oAM5ngf5.zip