工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

USBMIDIアダプター

コンポーネントと消耗品

>
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アダプターを構築する方法をネットで検索しましたが、残念ながら、それほど優れていないソリューション(MIDIソフトウェアまたはハードウェアの実装が不十分)しか見つかりませんでした。そこで、自分で作成して、その結果をhackster.ioに掲載することにしました。

ブレッドボードを備えたArduinoLeonardoを使用して、最初のプロトタイプを作成しました。すべてが機能したら、代わりにArduinoMicroを使用してはんだ付けバージョンを作成しました。どちらもATmega32u4に基づいており、ネイティブUSBを備えているため、接続先のPCへのUSBMIDIインターフェイスとして表示できます。

MIDIは、オプトカプラーといくつかの抵抗を使用して、完全に分離された電流ループを作成します。回路はかなり標準的です。高速で広く利用できるので、6n137を使用しました。回路図に示されているように、MIDI OUTコネクタのみがピン2をグランドに接続しています。これは、MIDIの標準です。

最終結果の写真:

<図> <図> <図> <図>

ソフトウェアの面では、優れたControlSurfaceライブラリを使用することにしました。他のライブラリや手動でコーディングされた実装とは異なり、ControlSurfaceはやや複雑なMIDIプロトコルのさまざまな側面をすべて正しく処理します。

Control Surfaceでは、あらゆる種類のエクストラを追加することもできます。たとえば、アナログ/デジタル入力に接続されたポテンショメータ、ペダル、またはボタンを追加して、MIDIコントロールを追加することができます。詳細については、Control SurfaceのWebサイトをご覧ください。これは、非常に簡単です。

コールバックを登録して、MIDIからUSBまたはその逆に渡す前にデータを処理できるようにすることもできます。私の場合、これを使用して、RolandD50シンセサイザーの壊れたMIDI実装を修正しました。 D50は、最後のキーが押されるたびに「すべてのノートをオフ」コマンドを送信します。私が使用しているほとんどのVSTインストゥルメントなどの最新の実装では、これを、実行中のすべてのノートサステインの即時のハードカットオフとして解釈します。 「すべての音符をオフにする」ことで、D50はマスターキーボードとして再び役立ちます。

Control Surfaceライブラリで遭遇した問題の1つは、大きなSysExパッケージを適切に処理できないことです。これにより、かなり大きなSysExパッケージが送信されたため、D50エディター/ライブラリアンを使用しようとするとエラーが発生しました。この問題を修正する方法について、ソースコードのコメント見出しに手順を追加しました。ライブラリを作成した人は、2.xバージョンがリリースされたらこの問題は修正されると述べました。

基本的なUSBからMIDIへのインターフェイスのソースコードと、「すべてのノートがオフ」のフィルタリングを備えたバージョンの両方を含めました。

もちろん、他のライブラリを使用したり、独自のMIDI実装を作成したりすることもできます。ハードウェアは、USBMIDIおよびシリアルMIDIをサポートする任意のMIDIライブラリで動作する必要があります。

トラブルシューティングのヒント:このインターフェイスで外部MIDIデバイスと通信できない場合は、ピン4と5を交換した可能性があります。コネクタのピン配置図が混乱する場合があります。 コネクタのどちら側を表示しているのかが常に明確に示されるとは限らないためです。

回路図面とソースコードがここにいる誰にとっても役立つことを願っています。このプロジェクトが気に入ったら、いいねを言ってください。質問があれば、下にコメントを残してください。

コード

  • 基本的なMIDIからUSBへのインターフェースのソースコード
  • 「すべての音符をオフにする」フィルターを備えたMIDI-USBアダプターのソースコード
基本的なMIDIからUSBへのインターフェースのソースコード Arduino
 / * * USBMIDIアダプター。 * * --- * *より大きなsysexパッケージを許可するには、ControlSurfaceライブラリを次のように変更します。** In:* src \ MIDI_Parsers \ MIDI_MessageTypes.hpp *変更:* uint8_t length; *から:* size_tの長さ; * *入力:* src / Settings / Settings.hpp *変更:* constexpr size_t SYSEX_BUFFER_SIZE =128; *から:* constexpr size_t SYSEX_BUFFER_SIZE =320; * *これは、Control Surface2.xがリリースされるときに修正する必要があります。 * * --- * *別のUSBデバイス名を使用するには、管理者権限を使用してArduinoIDEインストールのhardware / arduino / avr /boards.txtを編集します。 *変更:* leonardo.build.usb_product ="Arduino Leonardo" *から:* leonardo.build.usb_product ="..." *プロジェクトをArduinoデバイスにアップロードした後、元に戻します。 * /#include  //コントロールサーフェスライブラリをインクルードUSBMIDI_Interfacemidiusb; //代わりにこれを使用して、すべてのMIDIデータをシリアルモニターにダンプします// USBDebugMIDI_Interface midiusb; HardwareSerialMIDI_Interface midiser ={Serial1、MIDI_BAUD}; //作成MIDIインターフェイスを相互に接続し、ControlSurfaceに接続するためのMIDIパイプファクトリMIDI_PipeFactory <5>パイプ; //追加のコントローラーを追加する例:// CCPotentiometer pot ={A0、MIDI_CC ::Expression_Controller}; //電源が入るピンLEDが接続されていますconstint ledPin =10; // setup codevoid setup(){Serial.begin(115200); //電源LEDをオンにしますpinMode(ledPin、OUTPUT); digitalWrite(ledPin、HIGH); // MIDIUSBをMIDIシリアルmidiusbに転送>>パイプ>> midiser; // MIDIシリアルをMIDIUSBmidiserに転送>>パイプ>> midiusb; //コントロール表面メッセージをMIDIUSBにのみ送信しますControl_Surface>> pipes>> midiusb; // MIDIUSBとシリアルの両方をコントロールサーフェスミディザーに接続します>>パイプ>> Control_Surface; midiusb>>パイプ>> Control_Surface; //コントロールサーフェスを初期化します_after_インターフェイスを接続しますControl_Surface.begin();} //メイン処理loopvoidloop(){Control_Surface.loop();} 
「すべての音符をオフにする」フィルターを備えたMIDI-USBアダプターのソースコード Arduino
 / **「すべてのノートがオフ」フィルター付きのUSBMIDIアダプター。 * * --- * *より大きなsysexパッケージを許可するには、ControlSurfaceライブラリを次のように変更します。** In:* src \ MIDI_Parsers \ MIDI_MessageTypes.hpp *変更:* uint8_t length; *から:* size_tの長さ; * *入力:* src / Settings / Settings.hpp *変更:* constexpr size_t SYSEX_BUFFER_SIZE =128; *から:* constexpr size_t SYSEX_BUFFER_SIZE =320; * *これは、Control Surface2.xがリリースされるときに修正する必要があります。 * * --- * *別のUSBデバイス名を使用するには、管理者権限を使用してArduinoIDEインストールのhardware / arduino / avr /boards.txtを編集します。 *変更:* leonardo.build.usb_product ="Arduino Leonardo" *から:* leonardo.build.usb_product ="..." *プロジェクトをArduinoデバイスにアップロードした後、元に戻します。 * /#include  //コントロールサーフェスライブラリをインクルードUSBMIDI_Interfacemidiusb; //代わりにこれを使用して、すべてのMIDIデータをシリアルモニターにダンプします// USBDebugMIDI_Interface midiusb; HardwareSerialMIDI_Interface midiser ={Serial1、MIDI_BAUD}; //作成MIDIインターフェイスを相互に接続し、ControlSurfaceに接続するためのMIDIパイプファクトリMIDI_PipeFactory <4>パイプ; //追加のコントローラーを追加する例:// CCPotentiometer pot ={A0、MIDI_CC ::Expression_Controller}; //電源が入るピンLEDは接続されていますconstint ledPin =10; //着信メッセージを出力するカスタムMIDIコールバック.structMyMIDI_Callbacks:MIDI_Callbacks {//チャンネルメッセージのコールバック(ノート、コントロールの変更、ピッチベンドなど)。 void 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の「ノートオン」メッセージを「ノートオフ」メッセージに変換しますcm.header =0x80; } midiusb.send(cm); } //システム専用メッセージのコールバックvoidonSysExMessage(Parsing_MIDI_Interface&midi)override {SysExMessage se =midi.getSysExMessage(); //変更なしでシステム専用メッセージを転送しますmidiusb.send(se); } //リアルタイムメッセージのコールバックvoidonRealTimeMessage(Parsing_MIDI_Interface&midi)override {RealTimeMessage rt =midi.getRealTimeMessage(); //変更なしでリアルタイムメッセージを転送しますmidiusb.send(rt); }}コールバック; // setup codevoid setup(){Serial.begin(115200); //電源LEDをオンにしますpinMode(ledPin、OUTPUT); digitalWrite(ledPin、HIGH); // MIDIUSBをMIDIシリアルmidiusbに転送>>パイプ>> midiser; //コントロール表面メッセージをMIDIUSBにのみ送信しますControl_Surface>> pipes>> midiusb; // MIDIUSBとシリアルの両方をコントロールサーフェスミディザーに接続します>>パイプ>> Control_Surface; midiusb>>パイプ>> Control_Surface; //コントロールサーフェスを初期化します_after_インターフェイスを接続しますControl_Surface.begin(); //コールバックメソッドを設定しますmidiser.setCallbacks(callbacks);} //メイン処理loopvoidloop(){Control_Surface.loop();} 

回路図

回路図タブのみが入力されます usb_midi_interface_twiE32gvR3.fzz

製造プロセス

  1. 喉の渇き警報プラント警報
  2. イタリア語の単語時計
  3. 4x3キーパッドのピンは3つだけ
  4. 3Dプリンターを備えた最小限のMIDIドラムキット
  5. SigfoxkWhメーター
  6. Bluetooth温度モニター
  7. DIYシンプルオートレンジ静電容量計(10pF-10000microF)
  8. ジェスチャー制御ロック
  9. コンパニオンIC
  10. Arduino用の絶縁アナログ入力
  11. 反応時間を測定する