Phyllotaxis: An audio-reactive LED display
필로택시스: 소리에 반응하는 LED 디스플레이
황금비를 이용해 해바라기 씨앗 배열과 비슷한 필로택시스 패턴을 만들고, 각 세포에 LED를 넣어 소리에 반응하는 조명으로 구현한 제작기입니다. 3D 프린팅과 PCB 설계, STM32·ESP32 펌웨어까지 직접 다루며, 두 번째 버전에서는 Rust와 WebAssembly 기반 업로드 기능도 추가했습니다.
- 주제
AI 요약
자연에서 나타나는 규칙을 코드로 구현해 온 글쓴이는 해바라기와 다육식물에서 볼 수 있는 필로택시스(phyllotaxis)를 LED 디스플레이로 만들었습니다. 반지름 방향으로 점을 늘어놓고 각 점을 황금비의 배수만큼 회전하면 이중 나선 형태의 점 구름이 만들어집니다. 여기에 보로노이 분할(Voronoi tessellation)을 적용해 씨앗 꼬투리 같은 세포 구조를 얻었습니다.
점 구름에서 실물 구조물로
Processing 스케치에서 세포 경계 데이터를 내보낸 뒤 CadQuery로 불러와 물리 구조를 설계했습니다. 전체 구조에서 각 세포 공간을 빼내 벽을 만들고, 가운데에는 LED를 넣을 구멍을 뚫었습니다. 출력 크기에 맞춰 구조물을 네 조각으로 나누고, FreeCAD에서 나사 구멍과 종이를 받치는 얇은 전면판을 추가했습니다. 3D 프린터로 출력한 뒤 빛을 부드럽게 퍼뜨리는 뽕나무 종이를 붙였습니다.
89개의 LED를 납땜해 STM32 Blackpill 보드에 연결했습니다. SPI로 NeoPixel을 구동하는 드라이버를 작성하고, 각 LED의 위치를 단위원 위 좌표로 저장한 조회 테이블을 만들었습니다. 이 좌표를 극좌표로 바꾸면 반지름과 각도를 이용해 방사형 나선 같은 패턴을 계산할 수 있습니다. 글쓴이가 특히 마음에 들어 한 효과는 중심에서 바깥쪽으로 퍼지는 사인파가 밝기를 조절하는 형태였습니다.
주변 소리를 분석해 빛으로 표현
소리에 반응시키기 위해 INMP441 디지털 I2S 마이크를 연결했습니다. STM32의 부동소수점 연산과 ARM DSP 명령어를 활용하고, CMSIS 라이브러리로 오디오 신호를 처리했습니다. 자동 게인 조절과 여러 주파수 대역의 에너지 분석을 더해 입력 소리에 따라 LED 패턴이 바뀌도록 했습니다. 여러 타이머와 상태값을 조정해 프로그램을 완성했으며, Jon Hopkins의 ‘Neon Pattern Drum’을 재생하며 반응을 확인했습니다.
초기 전자회로는 만능기판에 구성했지만, 상자를 움직일 때 잡음이 들어와 LED가 깜빡였습니다. 글쓴이는 PCB 설계를 익혀 STM32 보드와 마이크, 버튼, 로직 레벨 시프터를 올린 기판을 만들었습니다. 이를 통해 마이크로컨트롤러의 신호를 LED에 필요한 5V 신호로 맞췄습니다.
PCB를 활용한 두 번째 버전
두 번째 버전은 LED를 고정하는 판을 3D 프린트 부품 대신 PCB로 바꾸는 방향으로 설계했습니다. PCB를 다섯 장 단위로 주문하는 조건에 맞춰 형태에 5중 대칭을 적용하고, 같은 기판 다섯 장을 조립해 고리 모양을 만들 계획이었습니다. 하지만 NeoPixel 패키지 아래쪽에 납땜 패드가 있어 인두로 하나씩 작업하기 어려웠습니다. 이후 Recurse Center에서 친구의 열풍 납땜 장비를 빌려 조립을 마쳤고, PCB에 끼워 나사로 고정하는 세포 벽도 새로 출력했습니다.
완성한 설치물은 Recurse Center에 두기 위해 ESP32로 바꾸고 펌웨어를 Rust로 다시 작성했습니다. ESP32는 센터의 Wi-Fi에 연결되고, 로컬 웹사이트를 제공합니다. 참석자는 작은 WebAssembly 백엔드와 간단한 API를 거쳐 스케치와 게임을 올릴 수 있습니다.
남은 제작 과제
글쓴이는 더 많은 사람에게 나눠 주거나 판매할 수 있도록 조립 과정을 개선하고 싶다고 말합니다. 두 차례 제작에서 LED 납땜이 모두 번거로웠고, 종이를 붙이는 과정도 까다로웠습니다. 종이가 찢어지면 수리하기 어렵다는 문제도 남았습니다. 손납땜하기 쉬운 LED, PCB 조립, 종이를 보호할 투명 아크릴층, 자석으로 고정하는 전면판 등을 시험할 계획입니다.
Hacker News 반응
- @throwaway219450 — 정말 멋집니다. PCB 주문 수량을 활용하려고 5중 대칭을 적용한 점이 특히 기발하네요. 취미 제작자들은 SMT 부품 패드를 필요한 크기보다 조금 크게 만들어 납땜을 보탤 자리를 마련하는 요령을 일찍 익힙니다. NeoPixel(5050 LED)은 패키지 옆면까지 패드가 이어져 있어 손납땜하기 괜찮습니다. 연습하면 QFN도 납땜할 수 있고, 아래쪽 중앙 패드까지 연결되는 큰 비아를 둘 수도 있습니다.
- @lukeify — 멋지네요! Voria Labs에서 Lumanoi라는 제품을 만드는 방식과 놀랄 만큼 비슷합니다. 수렴 진화의 사례일까요? https://voria.com/
- @miles_io — 이런 걸 늘 만들어 보고 싶었습니다. 소리가 필로택시스 패턴을 움직이는 방식이 정말 매혹적이네요.
- @aanet — 훌륭합니다.
- @turbine401 — 좋네요. 저도 LED 256개를 넣은 비슷한 조명 기구를 만듭니다. https://lazaruslightworks.com/shop
- @hugoj0s3 — 정말 멋져요!
- @Vakaiser — 시연 음악을 아주 잘 골랐네요. https://music.apple.com/us/album/neon-pattern-drum/134973653...
- @r0b05 — 멋진 작업입니다. HN의 옛 콘텐츠를 보니 반갑네요.
원문: Jagi Studio / 번역·요약: Trawling