Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Adaptateur MIDI USB

Composants et fournitures

Arduino Micro
Ou Arduino Leonardo
× 1
Optocoupleur 6n137
× 1
1N4148 – Commutation rapide à usage général
× 1
Condensateur 100 nF
× 1
Résistance 220 ohm
× 3
Résistance 10k ohm
× 1
Résistance à trou traversant, 470 ohm
× 1
LED (générique)
× 1
support led
quelque chose pour monter la LED dans le boîtier en plastique
× 1
Connecteur audio/vidéo DIN, 5 contacts
plus des boulons et des écrous pour monter les connecteurs
× 2
Cas
Un boîtier en plastique pour ranger tous les composants
× 1
PCB
Un morceau de PCB générique
× 1
Montages PCB
Quelque chose pour monter votre PCB sur le boîtier, comme des entretoises en nylon
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

J'ai cherché sur le net comment créer un adaptateur USB vers MIDI à l'aide d'un Arduino, mais malheureusement, je n'ai trouvé que des solutions qui n'étaient pas très bonnes (mauvaise implémentation logicielle ou matérielle MIDI). J'ai donc décidé de créer le mien et de mettre le résultat ici sur hackster.io.

J'ai utilisé un Arduino Leonardo avec une maquette pour construire le premier prototype. Une fois que tout fonctionnait, j'ai construit une version soudée en utilisant un Arduino Micro à la place. Les deux sont basés sur l'ATmega32u4, qui possède un port USB natif lui permettant de se présenter comme une interface USB MIDI au PC auquel vous le connectez.

Le MIDI utilise un opto-coupleur et des résistances pour créer une boucle de courant entièrement isolée. Le circuit est assez standard, j'ai utilisé un 6n137 car il est rapide et largement disponible. Comme indiqué par le schéma de circuit, seul le connecteur MIDI OUT a la broche 2 connectée à la terre, c'est la norme pour le MIDI.

Quelques photos du résultat final :

Côté logiciel, j'ai décidé d'utiliser l'excellente bibliothèque Control Surface. Contrairement à d'autres bibliothèques ou implémentations codées manuellement, Control Surface gère correctement tous les différents aspects du protocole MIDI quelque peu complexe.

La surface de contrôle vous permet également d'ajouter toutes sortes d'extras. Vous pouvez par exemple ajouter des potentiomètres, des pédales ou des boutons connectés aux entrées analogiques/numériques pour ajouter des commandes MIDI supplémentaires. Il suffit de jeter un œil sur le site Web de la surface de contrôle pour plus d'informations, c'est vraiment facile à faire !

Vous pouvez également enregistrer des rappels afin de pouvoir traiter les données avant de passer du MIDI à l'USB ou dans l'autre sens. Dans mon cas, j'ai utilisé cela pour réparer l'implémentation MIDI cassée de mon synthétiseur Roland D50. Le D50 envoie une commande « all notes off » à chaque fois que la dernière touche est enfoncée. Les implémentations modernes, telles que la plupart des instruments VST que j'utilise, interprètent cela comme une coupure brutale immédiate de tous les sustains de notes en cours. En filtrant les "toutes les notes off", le D50 redevient utile comme clavier maître.

Un problème que j'ai rencontré avec la bibliothèque Control Surface est qu'elle ne gère pas bien les gros packages SysEx. Cela entraînait des erreurs lors de la tentative d'utilisation d'un éditeur/bibliothécaire D50, car il envoyait des packages SysEx assez volumineux. J'ai ajouté des instructions dans l'en-tête de commentaire du code source sur la façon de résoudre ce problème. La personne qui a écrit la bibliothèque a indiqué que ce problème serait résolu une fois la version 2.x sortie.

J'ai inclus à la fois le code source de l'interface USB vers MIDI de base et une version avec filtrage "toutes les notes désactivées".

Vous pouvez également utiliser d'autres bibliothèques ou écrire votre propre implémentation MIDI bien sûr, le matériel doit fonctionner avec n'importe quelle bibliothèque MIDI avec prise en charge USB MIDI et Serial MIDI.

Astuce de dépannage :si vous n'arrivez pas à faire parler cette interface avec des périphériques MIDI externes, alors vous avez peut-être interverti les broches 4 et 5. Les schémas de brochage des connecteurs peuvent parfois être déroutants car ils n'indiquent pas toujours clairement de quel côté du connecteur vous regardez.

J'espère que les schémas et le code source seront utiles à quiconque ici. Merci de me donner un coup de pouce si vous aimez ce projet et n'hésitez pas à laisser un commentaire ci-dessous si vous avez des questions.

Code

  • Code source pour l'interface MIDI vers USB de base
  • Code source pour adaptateur MIDI vers USB avec filtre "toutes les notes désactivées"
Code source pour l'interface de base MIDI vers USBArduino
/* * Adaptateur USB MIDI. * * --- * * Pour autoriser des packages sysex plus volumineux, modifiez la bibliothèque de surface de contrôle comme suit :* * Dans :* src\MIDI_Parsers\MIDI_MessageTypes.hpp * changez :* uint8_t length; * à :* taille_t longueur ; * * Dans :* src/Settings/Settings.hpp * changement :* constexpr size_t SYSEX_BUFFER_SIZE =128 ; * à :* constexpr size_t SYSEX_BUFFER_SIZE =320 ; * * Cela devrait être corrigé lorsque Control Surface 2.x sera disponible. * * --- * * Pour utiliser un nom de périphérique USB différent, modifiez hardware/arduino/avr/boards.txt dans votre installation Arduino IDE en utilisant les privilèges d'administrateur. * Modifiez :* leonardo.build.usb_product="Arduino Leonardo" * en :* leonardo.build.usb_product="..." * modifiez-le après avoir téléchargé le projet sur votre appareil Arduino. */#include // Inclut la bibliothèque de surfaces de contrôleUSBMIDI_Interface midiusb;// utilisez celle-ci à la place pour vider toutes les données MIDI sur le moniteur série// USBDebugMIDI_Interface midiusb;HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD};// Create une fabrique de tuyaux MIDI pour connecter les interfaces MIDI entre elles et aux tuyaux de la surface de contrôleMIDI_PipeFactory<5> ;// Exemple d'ajout de contrôleurs supplémentaires:// CCPotentiometer pot ={ A0, MIDI_CC::Expression_Controller } ; // broche à laquelle l'alimentation La LED est connectéeconst int ledPin =10;// setup codevoid setup() { Serial.begin(115200); // allume la LED d'alimentation pinMode(ledPin, OUTPUT); digitalWrite (ledPin, HAUT); // transfère MIDI USB vers MIDI série MIDIb>> pipes>> midiser; // transfère la série MIDI vers le midiser USB MIDI>> pipes>> midiusb; // envoie des messages de surface de contrôle uniquement à MIDI USB Control_Surface>> pipes>> midiusb; // connecte à la fois le MIDI USB et le série au midiser de la surface de contrôle>> pipes>> Control_Surface; midiusb>> tuyaux>> Control_Surface; // initialiser la surface de contrôle _après_ la connexion des interfaces Control_Surface.begin();}// traitement principal loopvoid loop() { Control_Surface.loop();}
Code source pour adaptateur MIDI vers USB avec filtre "toutes les notes désactivées"Arduino
/* * Adaptateur USB MIDI avec filtre "all notes off". * * --- * * Pour autoriser des packages sysex plus volumineux, modifiez la bibliothèque de surface de contrôle comme suit :* * Dans :* src\MIDI_Parsers\MIDI_MessageTypes.hpp * changez :* uint8_t length; * à :* taille_t longueur ; * * Dans :* src/Settings/Settings.hpp * changement :* constexpr size_t SYSEX_BUFFER_SIZE =128 ; * à :* constexpr size_t SYSEX_BUFFER_SIZE =320 ; * * Cela devrait être corrigé lorsque Control Surface 2.x sera disponible. * * --- * * Pour utiliser un nom de périphérique USB différent, modifiez hardware/arduino/avr/boards.txt dans votre installation Arduino IDE en utilisant les privilèges d'administrateur. * Modifiez :* leonardo.build.usb_product="Arduino Leonardo" * en :* leonardo.build.usb_product="..." * modifiez-le après avoir téléchargé le projet sur votre appareil Arduino. */#include  // Inclut la bibliothèque de surfaces de contrôleUSBMIDI_Interface midiusb;// utilisez celle-ci à la place pour vider toutes les données MIDI sur le moniteur série// USBDebugMIDI_Interface midiusb;HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD};// Create une fabrique de tuyaux MIDI pour connecter les interfaces MIDI entre elles et aux tuyaux de la surface de contrôleMIDI_PipeFactory<4> ;// Exemple d'ajout de contrôleurs supplémentaires:// CCPotentiometer pot ={ A0, MIDI_CC::Expression_Controller } ; // broche à laquelle l'alimentation La LED est connectéeconst int ledPin =10;// Rappel MIDI personnalisé qui imprime les messages entrants.struct MyMIDI_Callbacks :MIDI_Callbacks { // Rappel pour les messages de canal (notes, changement de contrôle, pitch bend, etc.). void onChannelMessage(Parsing_MIDI_Interface &midi) override { ChannelMessage cm =midi.getChannelMessage(); if (cm.header ==0xb0 &&cm.data1 ==0x7b) { // ignorer les messages « toutes les notes désactivées » ; } else if (cm.header ==0x90 &&cm.data2 ==0x00) { // convertir les messages "note on" avec une vélocité de 0 en messages "note off" cm.header =0x80; } midiusb.send(cm); } // Rappel pour les messages exclusifs du système void onSysExMessage(Parsing_MIDI_Interface &midi) override { SysExMessage se =midi.getSysExMessage(); // transfère les messages exclusifs au système sans modifications midiusb.send(se); } // Rappel pour les messages en temps réel void onRealTimeMessage(Parsing_MIDI_Interface &midi) override { RealTimeMessage rt =midi.getRealTimeMessage(); // transfère les messages en temps réel sans modifications midiusb.send(rt); } } rappels ;// setup codevoid setup() { Serial.begin(115200); // allume la LED d'alimentation pinMode(ledPin, OUTPUT); digitalWrite (ledPin, HAUT); // transfère MIDI USB vers MIDI série MIDIb>> pipes>> midiser; // envoie des messages de surface de contrôle uniquement à MIDI USB Control_Surface>> pipes>> midiusb; // connecte à la fois le MIDI USB et le série au midiser de la surface de contrôle>> pipes>> Control_Surface; midiusb>> tuyaux>> Control_Surface; // initialise la surface de contrôle _après_ la connexion des interfaces Control_Surface.begin(); // définit les méthodes de rappel midiser.setCallbacks(callbacks);} // traitement principal loopvoid loop() { Control_Surface.loop();}

Schémas

Seul l'onglet schématique est renseigné usb_midi_interface_twiE32gvR3.fzz

Processus de fabrication

  1. Alarme de soif d'usine
  2. Horloge de mots italienne
  3. Seulement trois broches pour un clavier 4x3
  4. Kit de batterie MIDI minimal avec imprimante 3D
  5. Compteur kWh Sigfox
  6. Moniteur de température Bluetooth
  7. Capacimètre bricolage simple à plage automatique (10pF-10000microF)
  8. Une entrée analogique isolée pour Arduino
  9. Mesurez votre temps de réaction