단일 LED 라이트 페인팅: DIY 모터 구동 시스템으로 동적 이미지 그리기
부품 및 소모품
| NEMA 17 스테퍼 모터 |
2개 |
| DRV8825 스테퍼 드라이버 (Theremino용) |
2개 |
| SD 카드 리더 모듈 |
1개 |
| 아두이노 메가 2560 |
1개 |
| 타이밍 벨트, V-휠 등 기계 부품 |
1세트 |
필요 도구 및 장비
앱 및 온라인 서비스
- 아두이노 IDE
- GIMP (이미지 편집)
- Autodesk Fusion 360 (설계)
프로젝트 소개
아이디어
장노출 사진 촬영 시 움직이는 빛 궤적이 선으로 남는 '라이트 페인팅' 원리를 이용해, 2축 CNC 머신에 단일 RGB LED를 장착해 비트맵 이미지를 픽셀 단위로 그려냅니다. 카메라의 긴 노출 시간(약 20~30초) 동안 LED가 움직이며 픽셀을 켜면 하나의 이미지가 완성됩니다.
계획
- 아두이노 메가가 SD 카드에서 비트맵(.bmp) 파일을 읽습니다.
- X축으로 이동하며 픽셀 색상에 맞춰 LED 색 변경, 한 줄 끝나면 Y축으로 한 칸 이동.
- 이미지 너비×높이 픽셀 수만큼 반복 후 다음 비트맵 탐색.
기구부 제작
알루미늄 익스트루전과 타이밍 벨트로 된 2축 갠트리 구조를 3D 프린팅 부품으로 조립했습니다. 모듈러 설계로 축 길이를 쉽게 변경할 수 있습니다. X축 엔드캡에 스테퍼 모터와 베어링을 장착하고, Y축은 평행한 익스트루전을 따라 이동합니다.
비트맵 읽기
BMP 포맷의 헤더 정보(너비 0x12, 높이 0x16, 색 깊이 0x1C, 픽셀 데이터 오프셋 0x0A/0x36)를 파싱해 픽셀 데이터를 행 단위로 읽습니다. 24비트 비압축 BMP만 지원합니다.
이미지 준비
카메라 최대 노출 시간(30초) 제약으로 약 288픽셀(18×16)까지만 표현 가능합니다. GIMP로 간단한 픽셀 아트(포켓볼, 하트, 점프하는 마리오 등)를 그려 SD 카드의 /bitmaps 폴더에 저장합니다.
페인팅 프로그램
- 스테퍼 모터 위치 추적: 소프트웨어 카운터로 그리드 좌표 관리.
- 시작 시 LED 5회 점멸로 촬영 타이밍 알림.
- 각 픽셀 위치로 이동 → 해당 색상(R/G/B PWM)으로 LED 점등 → 다음 픽셀.
결과 및 개선점
포켓볼, 하트, 마리오 이미지 촬영 성공. 다만 LED가 이동 중에도 켜져 있어 잔상(고스팅) 발생. 향후 LED를 이동 중에는 끄고 정지 시에만 켜는 방식으로 선명도 개선 예정.
코드
전체 코드는 프로젝트 페이지에 첨부되어 있습니다. 주요 라이브러리: SD.h, SPI.h, DRV8825.h. 비트맵 파싱, 스테퍼 제어, LED PWM 제어 루틴 포함.
회로도
프로젝트 페이지의 회로도 이미지 참고 (아두이노 메가, DRV8825×2, SD 카드, RGB LED 연결).