산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

USB MIDI 어댑터

구성품 및 소모품

Arduino Micro
또는 Arduino Leonardo
× 1
6n137 광 커플러
× 1
1N4148 – 범용 고속 전환
× 1
커패시터 100nF
× 1
저항 220옴
× 3
저항 10k 옴
× 1
스루 홀 저항기, 470옴
× 1
LED(일반)
× 1
LED 홀더
플라스틱 케이스에 LED를 장착하기 위한 것
× 1
DIN 오디오/비디오 커넥터, 5개 연락처
커넥터를 장착하기 위한 추가 볼트와 너트
× 2
케이스
모든 구성 요소를 넣을 수 있는 플라스틱 케이스
× 1
PCB
일반 PCB 조각
× 1
PCB 마운트
나일론 스탠드오프와 같이 PCB를 케이스에 장착하기 위한 것
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

Arduino를 사용하여 USB-MIDI 어댑터를 구축하는 방법을 인터넷에서 검색했지만 불행히도 그렇게 좋지 않은 솔루션(미디 소프트웨어 또는 하드웨어 구현이 좋지 않음)만 찾았습니다. 그래서 나는 내 자신을 만들고 결과를 여기 hackster.io에 올리기로 결정했습니다.

첫 번째 프로토타입을 만들기 위해 브레드보드와 함께 Arduino Leonardo를 사용했습니다. 모든 것이 작동하면 대신 Arduino Micro를 사용하여 납땜 버전을 만들었습니다. 둘 다 ATmega32u4를 기반으로 하며, 기본 USB를 통해 연결한 PC에 USB MIDI 인터페이스로 표시할 수 있습니다.

MIDI는 옵토 커플러와 일부 저항을 사용하여 완전히 절연된 전류 루프를 생성합니다. 회로는 꽤 표준적이며 빠르고 널리 사용 가능한 6n137을 사용했습니다. 회로도에 표시된 대로 MIDI OUT 커넥터에만 2번 핀이 접지에 연결되어 있으며 이는 MIDI의 표준입니다.

최종 결과 사진:

소프트웨어 측면에서 저는 뛰어난 Control Surface 라이브러리를 사용하기로 결정했습니다. 다른 라이브러리나 수동으로 코딩된 구현과 달리 Control Surface는 다소 복잡한 MIDI 프로토콜의 모든 다양한 측면을 올바르게 처리합니다.

Control Surface를 사용하면 모든 종류의 추가 기능을 추가할 수도 있습니다. 예를 들어 추가 MIDI 컨트롤을 추가하기 위해 아날로그/디지털 입력에 연결된 일부 전위차계, 페달 또는 버튼을 추가할 수 있습니다. 자세한 내용은 Control Surface 웹사이트를 참조하세요. 정말 쉽습니다!

MIDI에서 USB 또는 다른 방향으로 전달하기 전에 데이터를 처리할 수 있도록 콜백을 등록할 수도 있습니다. 제 경우에는 Roland D50 신디사이저의 손상된 MIDI 구현을 수정하기 위해 이것을 사용했습니다. D50은 마지막 건반을 누를 때마다 "모든 음표 끄기" 명령을 보냅니다. 내가 사용하는 대부분의 VST 악기와 같은 현대적인 구현은 이것을 모든 러닝 노트 서스테인의 즉각적인 하드 컷오프로 해석합니다. "모든 음표 끄기"를 필터링하면 D50이 다시 마스터 키보드로 유용해집니다.

내가 Control Surface 라이브러리에서 만난 한 가지 문제는 큰 SysEx 패키지를 잘 처리하지 못한다는 것입니다. 이로 인해 D50 편집기/사서를 사용하려고 할 때 다소 큰 SysEx 패키지를 보내므로 오류가 발생했습니다. 이 문제를 해결하는 방법에 대한 소스 코드의 주석 제목에 지침을 추가했습니다. 라이브러리를 작성한 사람은 이 문제가 2.x 버전이 나오면 수정될 것이라고 말했습니다.

기본 USB-MIDI 인터페이스 소스 코드와 "모든 음표 끄기" 필터링 버전을 모두 포함했습니다.

물론 다른 라이브러리를 사용하거나 고유한 MIDI 구현을 작성할 수도 있습니다. 하드웨어는 USB MIDI 및 직렬 MIDI를 지원하는 모든 MIDI 라이브러리와 함께 작동해야 합니다.

문제 해결 팁:이 인터페이스가 외부 MIDI 장치와 통신할 수 없는 것 같으면 핀 4와 5를 교체했을 수 있습니다. 커넥터 핀아웃 다이어그램은 때때로 혼란스러울 수 있습니다. 커넥터의 어느 쪽을 보고 있는지 항상 명확하게 나타내지는 않기 때문입니다.

회로도와 소스 코드가 여기 있는 누구에게나 유용하기를 바랍니다. 이 프로젝트가 마음에 든다면 엄지손가락을 치켜세우고 질문이 있는 경우 아래에 댓글을 남겨주세요.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 기본 MIDI-USB 인터페이스용 소스 코드
  • "모든 음표 끄기" 필터가 있는 MIDI-USB 어댑터용 소스 코드
  • 기본 MIDI-USB 인터페이스용 소스 코드Arduino
    /* * USB MIDI 어댑터. * * --- * * 더 큰 sysex 패키지를 허용하려면 제어 표면 라이브러리를 다음과 같이 수정하십시오. * * In:* src\MIDI_Parsers\MIDI_MessageTypes.hpp * change:* uint8_t length; * to:* size_t 길이; * * In:* src/Settings/Settings.hpp * 변경:* constexpr size_t SYSEX_BUFFER_SIZE =128; * to:* constexpr size_t SYSEX_BUFFER_SIZE =320; * * 이것은 Control Surface 2.x가 출시될 때 수정되어야 합니다. * * --- * * 다른 USB 장치 이름을 사용하려면 관리자 권한을 사용하여 Arduino IDE 설치에서 hardware/arduino/avr/boards.txt를 편집하십시오. * 변경:* leonardo.build.usb_product="Arduino Leonardo" * to:* leonardo.build.usb_product="..." * 프로젝트를 Arduino 장치에 업로드한 후 다시 변경하십시오. */#include  // 컨트롤 서피스 라이브러리 포함USBMIDI_Interface midiusb;// 모든 MIDI 데이터를 직렬 모니터로 덤프하려면 이 라이브러리를 대신 사용합니다.// USBDebugMIDI_Interface midiusb;HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD};// 생성 MIDI 인터페이스를 서로 연결하고 Control SurfaceMIDI_PipeFactory<5> 파이프에 연결하는 MIDI 파이프 팩토리;// 추가 컨트롤러를 추가하는 예:// CCPotentiometer pot ={ A0, MIDI_CC::Expression_Controller };// 전원이 연결된 핀 LED가 연결됨const int ledPin =10; // setup codevoid setup() { Serial.begin(115200); // 전원 LED 켜기 pinMode(ledPin, OUTPUT); 디지털 쓰기(LED 핀, 높음); // MIDI USB를 MIDI 직렬 midiusb로 전달합니다.>> 파이프>> midiser; // MIDI 시리얼을 MIDI USB midiser로 전달>> 파이프>> midiusb; // MIDI USB에만 제어 표면 메시지를 보냅니다. Control_Surface>> 파이프>> midiusb; // MIDI USB와 직렬을 모두 연결하여 표면 미디저>> 파이프>> Control_Surface; midiusb>> 파이프>> Control_Surface; // Control_Surface.begin();}// 메인 처리 loopvoid loop() { Control_Surface.loop();}
    인터페이스를 연결하는 Control Surface _after_ 초기화
    "모든 음표 끄기" 필터가 있는 MIDI-USB 어댑터용 소스 코드Arduino
    /* * "모든 음표 끄기" 필터가 있는 USB MIDI 어댑터. * * --- * * 더 큰 sysex 패키지를 허용하려면 제어 표면 라이브러리를 다음과 같이 수정하십시오. * * In:* src\MIDI_Parsers\MIDI_MessageTypes.hpp * change:* uint8_t length; * to:* size_t 길이; * * In:* src/Settings/Settings.hpp * 변경:* constexpr size_t SYSEX_BUFFER_SIZE =128; * to:* constexpr size_t SYSEX_BUFFER_SIZE =320; * * 이것은 Control Surface 2.x가 출시될 때 수정되어야 합니다. * * --- * * 다른 USB 장치 이름을 사용하려면 관리자 권한을 사용하여 Arduino IDE 설치에서 hardware/arduino/avr/boards.txt를 편집하십시오. * 변경:* leonardo.build.usb_product="Arduino Leonardo" * to:* leonardo.build.usb_product="..." * 프로젝트를 Arduino 장치에 업로드한 후 다시 변경하십시오. */#include  // 컨트롤 서피스 라이브러리 포함USBMIDI_Interface midiusb;// 모든 MIDI 데이터를 직렬 모니터로 덤프하려면 이 라이브러리를 대신 사용합니다.// USBDebugMIDI_Interface midiusb;HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD};// 생성 MIDI 인터페이스를 서로 연결하고 Control SurfaceMIDI_PipeFactory<4> 파이프에 연결하는 MIDI 파이프 팩토리;// 추가 컨트롤러를 추가하는 예:// CCPotentiometer pot ={ A0, MIDI_CC::Expression_Controller };// 전원이 연결된 핀 LED is connectedconst int ledPin =10;// 들어오는 메시지를 인쇄하는 사용자 지정 MIDI 콜백.struct MyMIDI_Callbacks :MIDI_Callbacks { // 채널 메시지(음표, 컨트롤 변경, 피치 벤드 등)에 대한 콜백. 무효 onChannelMessage(Parsing_MIDI_Interface &midi) override { ChannelMessage cm =midi.getChannelMessage(); if (cm.header ==0xb0 &&cm.data1 ==0x7b) { // "모든 메모 꺼짐" 메시지 무시 return; } else if (cm.header ==0x90 &&cm.data2 ==0x00) { // 속도가 0인 "note on" 메시지를 "note off" 메시지로 변환 cm.header =0x80; } midiusb.send(cm); } // 시스템 독점 메시지에 대한 콜백 void onSysExMessage(Parsing_MIDI_Interface &midi) override { SysExMessage se =midi.getSysExMessage(); // 변경 없이 시스템 전용 메시지 전달 midiusb.send(se); } // 실시간 메시지 콜백 void onRealTimeMessage(Parsing_MIDI_Interface &midi) override { RealTimeMessage rt =midi.getRealTimeMessage(); // 변경 없이 실시간 메시지 전달 midiusb.send(rt); } } 콜백;// 설정 codevoid setup() { Serial.begin(115200); // 전원 LED 켜기 pinMode(ledPin, OUTPUT); 디지털 쓰기(LED 핀, 높음); // MIDI USB를 MIDI 직렬 midiusb로 전달합니다.>> 파이프>> midiser; // MIDI USB에만 제어 표면 메시지를 보냅니다. Control_Surface>> 파이프>> midiusb; // MIDI USB와 직렬을 모두 연결하여 표면 미디저>> 파이프>> Control_Surface; midiusb>> 파이프>> Control_Surface; // 인터페이스를 연결한 _after_ 컨트롤 표면 초기화 Control_Surface.begin(); // 콜백 메소드 설정 midiser.setCallbacks(callbacks);}// 주요 처리 loopvoid loop() { Control_Surface.loop();}

    회로도

    도식 탭만 채워집니다 usb_midi_interface_twiE32gvR3.fzz

    제조공정

    1. 갈증 경보 식물 알람
    2. 이탈리아어 단어 시계
    3. 4x3 키패드용 핀 3개
    4. 3D 프린터가 포함된 최소 MIDI 드럼 키트
    5. Sigfox kWh 미터
    6. 블루투스 온도 모니터
    7. DIY 단순 자동 범위 정전 용량 측정기(10pF-10000microF)
    8. 제스처 제어 잠금
    9. Arduino용 절연 아날로그 입력
    10. 반응 시간 측정