제조공정
| 부품 | 수량 | 비고 |
|---|---|---|
| Arduino UNO (또는 호환 보드) | 1 | I/O 확장을 위해 Mega 등 사용 가능 |
| A4988 스테퍼 드라이버 | 4 | |
| Arduino CNC Shield V3 | 1 | 선택 사항, 없으면 브레드보드에 직접 배선 |
| 12V 6A 파워 서플라이 | 1 | 스테퍼 모터 구동용 |
| NEMA 17 스테퍼 모터 (OpenBuilds) | 4 |
플로피 드라이브 음악 영상을 보고 스테퍼 모터로 소리를 내는 악기를 직접 만들기로 했습니다. 기존 프로젝트들은 코드 미공개 또는 버그가 많아, C++ 학습 경험을 살려 간단하고 수정하기 쉬운 코드를 목표로 개발했습니다.
핵심은 MIDI 데이터를 추출해 각 음에 해당하는 스테퍼 모터 스텝 속도(주파수)로 변환하는 것입니다.
MIDI 라이브러리를 이용해 들어오는 MIDI 메시지(Note On/Off, 채널 등)를 파싱하고, 음높이(노트 번호)와 채널 정보를 스테퍼 제어 함수로 전달합니다.
A4988 드라이버의 STEP, DIR 핀으로 제어합니다. DIR은 소리에는 영향 없으므로 LOW 고정(또는 GND 연결). STEP 핀에 펄스를 주면 모터가 한 스텝 회전하며 소리가 납니다. digitalWrite로 펄스 생성.
여러 모터를 동시에 돌리려면 delay()를 쓸 수 없습니다. 대신 micros()로 마이크로초 단위 타이밍을 계산해 각 모터별 다음 펄스 시점을 관리합니다. 속도 변수를 배열로 만들어 인덱스 = 모터 번호 = MIDI 채널로 매핑, 모터 수를 배열 크기만 바꾸면 쉽게 확장 가능.
초기엔 millis()를 썼으나 해상도 부족으로 음정 구현 불가 → micros()로 해결.
테스트 결과 440Hz 사각파를 STEP 핀에 주면 A4(440Hz) 음이 나옴. 즉, 스텝 펄스 주기(µs) = 1,000,000 / 주파수. MIDI 노트 번호(0~127)별 주기를 미리 계산한 pitchValues 배열에 저장. 속도 0 = 정지.
Tune Stepper.ino 제공.아두이노의 ATmega16U2(또는 8U2) 펌웨어를 mocuLUFA로 교체하면 USB MIDI 장치로 인식됨. 듀얼 부트 지원으로 ICSP 헤더에 점퍼만 꽂으면 USB 시리얼(업로드용) ↔ USB MIDI 전환 가능. HIDUINO도 대안.
전체 소스코드, 설정 가이드, 튜닝 스케치는 GitHub 저장소에 있습니다.
https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument
제조공정
부품 및 소모품 부품수량비고 아두이노 우노 (Arduino UNO)1메인 컨트롤러 스파크펀 스테퍼 모터 (케이블 포함)1윈치 구동용 스파크펀 이지드라이버 (EasyDriver) - 스테퍼 드라이버1A3967 기반, 마이크로스테핑 지원 HC-05 블루투스 모듈1스마트폰 연동용 USB A-B 케이블1프로그래밍용 브레드보드1프로토타이핑용 12V 600mA 월 어댑터 (스파크펀)1스테퍼 모터 전원용 점퍼 와이어 (M/F, 6인치, 20팩)1배선용 소프트웨어 및 앱 아두이노 IDE circuito.io (자동 배선/코드 생성
부품 및 소모품 부품 수량 비고 아두이노 나노 R3 1 로터리 포텐셔미터 (가변저항) 7 파라미터 제어용 스파크펀 12mm 푸시버튼 7 코드 진행 트리거용 MIDI 포트 (DIN 5핀) 1 신디사이저 연결 저항 220Ω 4 MIDI 출력/LED용 LED 2 상태 표시 프로젝트 개요 업데이트 이력 2019-03-11: 펌웨어 완전 재작성. 모듈러 구조로 아두이노 외 플랫폼 이식 가능. 유클리디안 리듬(Euclidean Rhythms) 기능 추가. 하드웨어는 동일. GitHub 새 저장소 201