실린더와 평면이 교차해 생기는 다양한 곡선에서 영감을 받아 제작한 LED 타워입니다. 기존 LED 큐브를 여러 개 만들었기에 하드웨어/소프트웨어 모두 차별화된 것을 원했고, 큐브만큼 잠재력이 크면서도 분명히 다른 형태를 탐구하고 싶었습니다.
APA106 8mm LED를 선택한 이유: 일반 RGB LED보다 비싸지만 하드웨어/소프트웨어 모두 훨씬 다루기 쉽습니다. 시프트 레지스터 불필요(데이터 라인 2개로 제어), ISR(인터럽트 서비스 루틴)과 레이어 멀티플렉싱 불필요(LED가 항상 켜짐).
구조 설계
지름 8인치 금속 링 12개를 수직으로 쌓아 타워 형성
링당 24개 LED, 약 1인치(π×8/24 ≈ 1.05인치) 간격 배치
링 간격도 1인치로 동일 → LED가 수평/수직 모두 1인치 격자 배열
아크릴 봉으로 링들을 고정해 타워 형태 유지
APA106 최대 밝기(백색) 시 60mA 소모 → 이론상 최대 17A(288×60mA)지만, 실제로는 밝기 10% 이하로 사용하고 전체 백색 점등도 하지 않아 USB 전원(5V)으로도 문제없음. 별도 전원 사용 시 2A 어댑터면 충분.
제작 과정
1. 금속 링 준비 및 납땜
아마존에서 구한 8인치 금속 링은 납땜이 잘 됩니다. 다만 무겁고 열전도율이 높아 40W 인두를 최대로 올려 5~10초 대기해야 납이 녹습니다. 링에 먼저 납을 묻힌 뒤 LED를 붙이고, 클립형 방열판으로 LED 리드를 보호하세요.
2. LED 리드 성형 (링당 24개)
GND 리드 끝에 작은 구부림을 만들어 식별 및 링 부착 용이하게 합니다.
3. 링에 LED 위치 마킹 및 고정
24등분 위치를 마킹하고, 링을 수직으로 고정할 지그(위 사진 참조)를 만드세요.
4. 데이터 라인 연결 (DIN → DOUT)
링당 하나의 데이터 입력(DIN)과 하나의 데이터 출력(DOUT)이 생기도록 체인 연결. 항상 방열판 사용.
5. 전원 레일 연결 (+5V)
26인치(약 66cm) 주석 도금 구리선을 바이스와 플라이어로 펴서 직선화한 뒤, 모든 LED의 +5V 리드에 납땜.
6. 링 테스트
완성된 링의 DIN을 아두이노 핀 6에 연결해 테스트 스케치로 검증. 이 단계에서 불량 LED나 냉납을 잡는 것이 훨씬 쉽습니다.
7. 11개 링 추가 제작
연습하면 링 하나당 2~3시간 소요. 모든 링의 LED 위치가 정렬되도록 첫 링을 템플릿으로 삼아 DIN 위치를 동일하게 맞춰 제작하세요. (제 타워의 첫 두 링은 정렬이 안 맞지만 이후 템플릿 방식으로 개선됨)
8. 타워 조립 (하부 4링부터)
링 간 1인치(22mm) 간격 유지를 위해 스페이서 사용(3D 프린트 흑색 플라스틱 또는 1/4인치 나무막대). 블루택으로 임시 고정.
9. 아크릴 봉으로 영구 고정
6개 아크릴 봉을 링 사이(LED 4개 간격)에 핫글루로 고정. 봉 부착 후에는 수정이 거의 불가능하므로 위치 확인 필수. 3개 먼저 붙이고 나머지 3개 추가.
10. 12링 완성 후 링 간 배선
22 AWG 구리선으로 GND, +5V를 12링 전체 병렬 연결. 데이터 라인은 2개로 분할(상단 6링 → UNO 핀 6, 하단 6링 → UNO 핀 7). 8번째 링부터 원치 않는 플리커링 발생해 분할로 해결.
11. 아두이노 장착 및 마무리
남은 아크릴 봉 4개로 아두이노 우노를 타워 하단에 매달아 고정. UNO 연결: GND, +5V(전체 링 공통), 데이터 핀 6, 데이터 핀 7.
소프트웨어
APA106 같은 프로그래머블 LED는 타이밍을 처리해주는 라이브러리로 쉽게 제어 가능. 이전 프로젝트에서는 Adafruit NeoPixel 라이브러리를 썼지만, 이번엔 FastLED 라이브러리를 선택했습니다. 풍부한 기능, 빠른 수학 함수, 256단계 레인보우 팔레트, 손쉬운 페이드 효과 등이 장점입니다.
핵심 함수들
setColor(row, column, color): 링 번호(row)와 위치(column)로 LED 지정, 데이터 라인/체인 인덱스 자동 변환
웹 명명 색상 지원: CRGB::HotPink 등. #define으로 자주 쓰는 색상 별명 정의
setHue(row, column, hue): 0~255 레인보우 색조 지정
rotate(ring, direction): 링 내용물 한 칸 회전. 전체/부분 역방향 회전 등 다양한 효과 가능
기하학적 효과 구현
'실린더와 평면의 교차' 효과를 실시간 수학 연산 대신 룩업 테이블로 구현. 18개 각도별 교차 패턴과 높이를 테이블화해 프로그램 메모리(PROGMEM)에 저장. '실린더와 구의 교차' 테이블도 만들었으나 평면 교차만큼 효과적이진 않음. 쇼 중 한 효과에만 사용.
제공 스케치 3종
단일 링 빠른 테스트 (핀 6)
45초 미리보기 쇼
16개 효과/애니메이션으로 구성된 8분 본 쇼 (반복 재생)
모든 스케치는 본 문서의 동영상으로 확인 가능.
소프트웨어 리셋
메인 루프 끝에 소프트웨어 리셋 추가. 수많은 애니메이션 패스 후 프로그램이 멈추는 버그(RAM 스택 정리 안 되는 듯)가 있어 리셋으로 우회. FastLED 라이브러리 문제일 수도 있으나 원인 미발견. 우아하진 않지만 안정적 동작 보장.
코드
Arduino Code for LED Tower Art: 3개 스케치 포함 ZIP (링 테스트, 45초 프리뷰, 8분 본 쇼)