제조공정
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
|
여기에서 작동하는 모습을 확인하세요.
평소처럼 YouTube를 검색하다가 플로피 드라이브 음악을 보았습니다. 플로피 드라이브가 스테퍼 모터에 의해 제어된다는 사실을 알게 된 나는 나만의 스테퍼 모터 사운드 제너레이터를 만들기로 결정했습니다.
사람들이 이전에 이 작업을 수행한 것을 보았지만 모든 인스턴스가 코드를 공유하지 않았거나 코드에 결함이 있거나 제한적이었습니다.
학교에서 C++를 배운 후, 나는 내 기술을 사용하기로 결정했습니다.
내가 정말 하고 싶었던 것은 간단하고 사용하기 쉽고 수정하기 쉬운 코드를 만드는 것이었습니다. 그리고 그것이 바로 제가 한 일입니다!
전체 프로세스
시작하려면 해야 할 일을 생각했습니다. 가장 기본적인 용어로 MIDI 데이터를 추출하여 스테퍼 모터가 해당 피치를 생성하도록 하는 속도로 변환해야 했습니다.
MIDI 데이터 추출
이 부분은 오히려 쉬웠습니다. MIDI 라이브러리를 활용하여 MIDI 데이터를 해석하고 다른 기능으로 전송하여 속도를 제어할 수 있었습니다.
스테퍼 제어
A4988 스테퍼 모터 드라이버에는 스테퍼 동작을 직접 제어하는 두 개의 핀이 있습니다. 단계 및 DIR. DIR은 모터가 상태에 따라 시계 방향 또는 반시계 방향으로 회전하는지 여부를 제어하고 STEP은 하이로 당겨질 때마다 스테퍼를 한 단계 이동합니다(얼마는 마이크로스테핑 분해능에 따라 다름). 소리는 방향에 영향을 받지 않기 때문에 그냥 낮게 설정(또는 그냥 접지에 연결)합니다. 이제 digitalWrite 명령을 사용하여 모터를 스텝핑할 수 있습니다.
도전
이 프로젝트를 처리할 때의 주요 과제는 한 번에 여러 스테퍼 모터를 구동하고 싶었기 때문에 delay() 명령을 사용하는 것이 문제가 되지 않는다는 것이었습니다(그렇지 않으면 모터가 동시에 실행되지 않음). 대신 micros() 명령을 사용하여 스테퍼를 펄스하는 시간을 계산했습니다. 각 스테퍼 모터에 대해 다른 속도 값이 있을 것이기 때문에 속도 변수를 모터 번호 및 MIDI 채널에 해당하는 인덱스와 함께 배열로 바꿨습니다. 원래는 millis() 명령을 사용했지만 다른 피치를 생성하기 위한 해상도가 부족하다는 것을 알았습니다.
스테퍼 모터의 속도를 제어하기 위해 어레이를 사용한다는 것은 모든 모터에 대해 단일 변수를 사용할 수 있다는 것을 의미했으며, 이는 어레이 크기를 변경하는 것만으로 arduino에서 원하는 수의 스테퍼를 제어할 수 있는 기능을 제공합니다!
속도 계산
테스트에서 440Hz 구형파(tone 명령 사용)를 스텝 핀에 보냈고 스테퍼 모터가 A440 피치를 생성한다는 것을 발견했습니다. 스테퍼 함수로 전송되는 속도 값은 마이크로초 단위의 주기였으므로 간단히 음표 주파수를 주기로 변환했습니다. 나는 이 값을 MIDI 음표 값에 해당하는 인덱스와 함께 pitchValues라는 다른 배열에 넣습니다. 어레이를 사용하여 스테퍼의 재생 가능한 범위도 제어할 수 있었습니다. 속도 값이 0인 경우 정지 상태로 간주되도록 만들었습니다.
계산 대신 배열을 사용하면 각 음의 속도를 완벽하게 제어할 수 있어 악기의 범위를 효과적으로 설정할 수 있습니다. 또한 스테퍼 모터가 공진 주파수에 가까워지면 매우 끔찍한 소음이 발생합니다(실속하는 것처럼 보임). 이것이 무엇인지 식별하고 피치 값을 옥타브 단위로 변경하여 이 문제를 해결할 수 있습니다. 제 경우 공진 주파수가 F3 정도였기 때문에 E3, F3, F#3을 한 옥타브씩 바꿔가며 고쳐야 했습니다. ("Tune Stepper.ino" 코드를 사용하여 확인할 수 있습니다)
USB MIDI 장치 만들기
나는 그 장치를 MIDI 장치로 보이게 하고 싶었고 조금 파고들었고 보드에서 AVR 칩의 펌웨어를 변경할 수 있다는 것을 발견했습니다. 펌웨어는 HIDUINO 또는 mocuLUFA일 수 있습니다. 저는 mocuLUFA를 선택했습니다. 듀얼 부팅 옵션이 있어서 AVR 칩을 다시 플래시하지 않고도 Arduino를 쉽게 다시 프로그래밍할 수 있기 때문입니다. ICSP 헤더에 점퍼를 연결하기만 하면 USB MIDI와 USB 직렬 사이를 전환할 수 있습니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">제조공정
구성품 및 소모품 Arduino UNO × 1 sparkfun 스테퍼 모터(케이블 포함) × 1 SparkFun Easydriver - 스테퍼 모터 드라이버 × 1 HC-05 블루투스 모듈 × 1 USB-A-B 케이블 × 1 브레드보드(일반) × 1 SparkFun 벽면 어댑터 전원 공급 장치 12VDC 600mA × 1 SparkFun 점퍼 와이어 - 연결 6(M/F, 20 팩) ×
구성품 및 소모품 Arduino Nano R3 × 1 회전 전위차계(일반) × 7 SparkFun 푸시버튼 스위치 12mm × 7 MIDI 포트 × 1 저항 221옴 × 4 LED(일반) × 2 이 프로젝트 정보 2019년 3월 11일 업데이트 안녕하세요, 저는 아르페지에이터를 위한 새 펌웨어를 만들었습니다. 소스 코드가 완전히 다시 작성되었습니다. 이제 모듈식 구조를 통해 Arduino뿐만