45개의 APA-106 RGB LED를 정삼각형 형태로 배열해 아두이노 우노 한 개의 핀으로 제어하는 아트 디스플레이를 만듭니다. 아다프루트 네오픽셀(NeoPixel) 라이브러리를 사용하며, 단일 데이터 라인으로 모든 LED를 체인 연결해 제어합니다. 밝기는 최대 255 중 30으로 낮춰 USB 전원만으로도 구동 가능합니다.
하드웨어 제작
1. 합판에 홀 가공
한 변 12인치 정삼각형 합판에 LED 간격 1인치로 8mm 홀 45개를 뚫습니다. LED가 꽉 끼게 들어가 움직이지 않습니다.
2. LED 리드 벤딩 및 극성 확인
APA-106 LED 핀 배열 (왼쪽부터): Data In, +5V, GND, Data Out. 긴 다리가 GND입니다. 사진과 같이 벤딩해 보드에 장착합니다. GND 다리에만 추가 벤딩을 해 식별하기 쉽게 했습니다.
3. 배선 전략: 지그재그 체인 연결
데이터 라인(파란색)은 지그재그로 왕복합니다: 홀수 행은 좌→우, 짝수 행은 우→좌로 흐릅니다. 이에 따라 전원 레일도 홀수/짝수 행마다 위아래가 바뀝니다.
배선 팁: GND 레일을 오른쪽, +5V 레일을 왼쪽에 모으면 데이터 라인이 전원 레일을 건너뛰지 않아도 되어 배선이 훨씬 깔끔해집니다. (제작 사진은 반대로 되어 있어 데이터 라인이 전원 레일 위를 건너갑니다.)
4. 아두이노 장착 및 케이스
아두이노는 작은 플라스틱 스탠드오프와 글루건으로 보드에 고정했습니다. 3D 프린팅 케이스(STL 파일 제공)나 합판으로 별도 케이스를 만들 수 있습니다.
소프트웨어 설계
네오픽셀 라이브러리 활용
setPixelColor(index, color)와 show() 함수로 제어합니다. 색상은 32비트 값(RGB 각 8비트)으로 표현합니다.
독자적인 색상 팔레트 (0~43)
0: 검정 (Off)
1~42: 레인보우 색상 팔레트
43: 흰색 (Full On)
LED 번호 매핑
데이터 체인 순서(지그재그)와 무관하게, 삼각형 꼭짓점(0번)부터 행별로 좌→우로 0~44번을 부여했습니다. 이를 위해 커스텀 setPixelColor 함수를 만들어 논리적 번호로 LED를 제어합니다.
테이블 기반 애니메이션 엔진
거의 모든 애니메이션은 룩업 테이블(Lookup Table)로 구현했습니다:
꼭짓점에서 쓸기(Sweep) 패턴 테이블
다른 두 꼭짓점으로 변환하는 테이블
외곽 삼각형(24개), 중간 삼각형(15개), 내부 삼각형(6개) LED 인덱스 테이블
모든 테이블은 프로그램 메모리(PROGMEM)에 저장해 램(RAM)을 아꼈습니다. 예상보다 프로그램 공간을 적게 차지해 효율적이었습니다.
코드 구조 (4개 탭)
Declarations: 상수, 테이블, setup()
Main Loop: 애니메이션 시퀀스 호출
Animations: 개별 애니메이션 함수들
Utilities: 공통 서브루틴 (rotation() 등)
회전(Rotation) 알고리즘 핵심
외곽(24), 중간(15), 내부(6) 삼각형의 공약수는 120입니다. 120스텝으로 전체 삼각형 내용을 360도 회전시킵니다. 시작 패턴, 회전 방향, 속도를 바꿔 26가지 다양한 애니메이션을 구현했습니다. 전체 쇼는 약 5분 후 반복됩니다.
코드 및 자료
아두이노 코드 (ZIP): 테스트 루틴, 26개 애니메이션 쇼, 네오픽셀 라이브러리 사용법 포함