Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Adaptador MIDI USB

Componentes y suministros

Arduino Micro
O Arduino Leonardo
× 1
6n137 Optoacoplador
× 1
1N4148 - Cambio rápido de propósito general
× 1
Condensador 100 nF
× 1
Resistencia 220 ohmios
× 3
Resistencia de 10k ohmios
× 1
Resistencia de orificio pasante, 470 ohmios
× 1
LED (genérico)
× 1
soporte de led
algo para montar el LED en la caja de plástico
× 1
Conector de audio / video DIN, 5 contactos
más pernos y tuercas para montar los conectores
× 2
Caso
Una caja de plástico para colocar todos los componentes
× 1
PCB
Un trozo de PCB genérico
× 1
soportes de PCB
Algo para montar su PCB en la carcasa, como separadores de nailon
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Busqué en la red cómo construir un adaptador USB a MIDI usando un Arduino, pero desafortunadamente solo encontré soluciones que no eran tan buenas (implementaciones de hardware o software MIDI deficientes). Así que decidí crear el mío propio y poner el resultado aquí en hackster.io.

Usé un Arduino Leonardo con una placa de pruebas para construir el primer prototipo. Una vez que todo funcionó, construí una versión soldada usando un Arduino Micro en su lugar. Ambos se basan en el ATmega32u4, que tiene un USB nativo que le permite presentarse como una interfaz USB MIDI a la PC a la que lo conecta.

MIDI usa un optoacoplador y algunas resistencias para crear un bucle de corriente completamente aislado. El circuito es bastante estándar, utilicé un 6n137 ya que es rápido y está ampliamente disponible. Como se indica en el diagrama del circuito, solo el conector MIDI OUT tiene el pin 2 conectado a tierra, esto es estándar para MIDI.

Algunas fotos del resultado final:

En el lado del software, decidí usar la excelente biblioteca Control Surface. A diferencia de otras bibliotecas o implementaciones codificadas manualmente, Control Surface maneja correctamente todos los diferentes aspectos del protocolo MIDI algo complejo.

Control Surface también te permite agregar todo tipo de extras. Por ejemplo, podría agregar algunos potenciómetros, pedales o botones conectados a las entradas analógicas / digitales para agregar controles MIDI adicionales. Solo eche un vistazo al sitio web de Control Surface para obtener más información, ¡es realmente fácil de hacer!

También puede registrar devoluciones de llamada para que pueda procesar los datos antes de pasar de MIDI a USB o en la otra dirección. En mi caso, utilicé esto para arreglar la implementación MIDI rota de mi sintetizador Roland D50. El D50 envía un comando de "todas las notas apagadas" cada vez que se presiona la última tecla. Las implementaciones modernas, como la mayoría de los instrumentos VST que utilizo, interpretan esto como un corte brusco inmediato de todos los sostenidos de notas en ejecución. Al filtrar "todas las notas desactivadas", el D50 vuelve a ser útil como teclado maestro.

Un problema que encontré con la biblioteca Control Surface es que no maneja bien los paquetes SysEx grandes. Esto resultó en errores al intentar usar un editor / bibliotecario D50, ya que envió paquetes SysEx bastante grandes. Agregué instrucciones en el encabezado del comentario del código fuente sobre cómo solucionar este problema. La persona que escribió la biblioteca indicó que este problema se solucionaría una vez que salga la versión 2.x.

Incluí el código fuente básico de la interfaz USB a MIDI y una versión con el filtrado de "todas las notas desactivadas".

También puede utilizar otras bibliotecas o escribir su propia implementación MIDI, por supuesto, el hardware debería funcionar con cualquier biblioteca MIDI con soporte USB MIDI y Serial MIDI.

Sugerencia para la resolución de problemas:si parece que no puede lograr que esta interfaz se comunique con dispositivos MIDI externos, entonces quizás haya cambiado los pines 4 y 5. Los diagramas de pines del conector pueden ser confusos a veces ya que no siempre indican claramente qué lado del conector está viendo.

Espero que los esquemas y el código fuente sean útiles para cualquiera que esté aquí. Por favor, dame un pulgar hacia arriba si te gusta este proyecto y no dudes en dejar un comentario a continuación si tienes alguna pregunta.

Código

  • Código fuente para interfaz MIDI a USB básica
  • Código fuente para el adaptador MIDI a USB con filtro "todas las notas desactivadas"
Código fuente para interfaz MIDI básica a USB Arduino
 / * * Adaptador MIDI USB. * * --- * * Para permitir paquetes sysex más grandes, modifique la biblioteca de Control Surface de la siguiente manera:* * In:* src \ MIDI_Parsers \ MIDI_MessageTypes.hpp * change:* uint8_t length; * a:* tamaño_t longitud; * * En:* src / Settings / Settings.hpp * cambiar:* constexpr size_t SYSEX_BUFFER_SIZE =128; * a:* constexpr tamaño_t SYSEX_BUFFER_SIZE =320; * * Esto debería corregirse cuando se lance Control Surface 2.x. * * --- * * Para usar un nombre de dispositivo USB diferente, edite hardware / arduino / avr / boards.txt en su instalación de Arduino IDE usando privilegios de administrador. * Cambiar:* leonardo.build.usb_product ="Arduino Leonardo" * a:* leonardo.build.usb_product ="..." * volver a cambiarlo después de cargar el proyecto en su dispositivo Arduino. * / # include  // Incluir la biblioteca Control SurfaceUSBMIDI_Interface midiusb; // usar este en su lugar para volcar todos los datos MIDI al monitor serial // USBDebugMIDI_Interface midiusb; HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD}; // Crear una fábrica de tuberías MIDI para conectar las interfaces MIDI entre sí y a las tuberías de la superficie de controlMIDI_PipeFactory <5>; // Ejemplo para agregar controladores adicionales:// CCPotentiometer pot ={A0, MIDI_CC ::Expression_Controller}; // pin al que se El LED está conectadoconst int ledPin =10; // código de configuraciónvoid setup () {Serial.begin (115200); // enciende el LED de encendido pinMode (ledPin, OUTPUT); digitalWrite (ledPin, ALTO); // reenviar MIDI USB a MIDI serial midiusb>> tubos>> midiser; // reenvía MIDI serial a MIDI USB midiser>> tubos>> midiusb; // envía mensajes de superficie de control solo a MIDI USB Control_Surface>> tuberías>> midiusb; // conecte MIDI USB y serial para controlar midiser de superficie>> tuberías>> Control_Surface; midiusb>> tuberías>> Control_Surface; // inicializar Control Surface _después_ de conectar las interfaces Control_Surface.begin ();} // bucle de procesamiento principalvoid loop () {Control_Surface.loop ();} 
Código fuente para adaptador MIDI a USB con filtro "todas las notas desactivadas" Arduino
 / * * Adaptador MIDI USB con filtro "todas las notas desactivadas". * * --- * * Para permitir paquetes sysex más grandes, modifique la biblioteca de Control Surface de la siguiente manera:* * In:* src \ MIDI_Parsers \ MIDI_MessageTypes.hpp * change:* uint8_t length; * a:* tamaño_t longitud; * * En:* src / Settings / Settings.hpp * cambiar:* constexpr size_t SYSEX_BUFFER_SIZE =128; * a:* constexpr tamaño_t SYSEX_BUFFER_SIZE =320; * * Esto debería corregirse cuando se lance Control Surface 2.x. * * --- * * Para usar un nombre de dispositivo USB diferente, edite hardware / arduino / avr / boards.txt en su instalación de Arduino IDE usando privilegios de administrador. * Cambiar:* leonardo.build.usb_product ="Arduino Leonardo" * a:* leonardo.build.usb_product ="..." * volver a cambiarlo después de cargar el proyecto en su dispositivo Arduino. * / # include  // Incluir la biblioteca Control SurfaceUSBMIDI_Interface midiusb; // usar este en su lugar para volcar todos los datos MIDI al monitor serial // USBDebugMIDI_Interface midiusb; HardwareSerialMIDI_Interface midiser ={Serial1, MIDI_BAUD}; // Crear una fábrica de tuberías MIDI para conectar las interfaces MIDI entre sí y a las tuberías de la superficie de controlMIDI_PipeFactory <4>; // Ejemplo para agregar controladores adicionales:// CCPotentiometer pot ={A0, MIDI_CC ::Expression_Controller}; // pin al que se LED is connectedconst int ledPin =10; // Devolución de llamada MIDI personalizada que imprime los mensajes entrantes.struct MyMIDI_Callbacks:MIDI_Callbacks {// Devolución de llamada para mensajes de canal (notas, cambio de control, inflexión de tono, etc.). anular onChannelMessage (Parsing_MIDI_Interface &midi) anular {ChannelMessage cm =midi.getChannelMessage (); if (cm.header ==0xb0 &&cm.data1 ==0x7b) {// ignora los mensajes "todas las notas desactivadas" return; } else if (cm.header ==0x90 &&cm.data2 ==0x00) {// convertir los mensajes "note on" con velocidad de 0 a mensajes "note off" cm.header =0x80; } midiusb.send (cm); } // Devolución de llamada para mensajes exclusivos del sistema void onSysExMessage (Parsing_MIDI_Interface &midi) override {SysExMessage se =midi.getSysExMessage (); // reenvía mensajes exclusivos del sistema sin cambios midiusb.send (se); } // Devolución de llamada para mensajes en tiempo real void onRealTimeMessage (Parsing_MIDI_Interface &midi) override {RealTimeMessage rt =midi.getRealTimeMessage (); // reenvía mensajes en tiempo real sin cambios midiusb.send (rt); }} devoluciones de llamada; // configuración codevoid setup () {Serial.begin (115200); // enciende el LED de encendido pinMode (ledPin, OUTPUT); digitalWrite (ledPin, ALTO); // reenviar MIDI USB a MIDI serial midiusb>> tubos>> midiser; // envía mensajes de superficie de control solo a MIDI USB Control_Surface>> tuberías>> midiusb; // conecte MIDI USB y serial para controlar midiser de superficie>> tuberías>> Control_Surface; midiusb>> tuberías>> Control_Surface; // inicializar Control Surface _después_ de conectar las interfaces Control_Surface.begin (); // establece los métodos de devolución de llamada midiser.setCallbacks (callbacks);} // procesamiento principal loopvoid loop () {Control_Surface.loop ();} 

Esquemas

Solo la pestaña del esquema se completa en usb_midi_interface_twiE32gvR3.fzz

Proceso de manufactura

  1. Alerta de sed Alarma de planta
  2. Reloj Word en italiano
  3. Solo tres pines para un teclado de 4x3
  4. Batería MIDI mínima con impresora 3D
  5. Medidor de kWh Sigfox
  6. Monitor de temperatura Bluetooth
  7. Medidor de capacitancia de rango automático simple para bricolaje (10pF-10000microF)
  8. Bloqueo controlado por gestos
  9. El IC complementario
  10. Una entrada analógica aislada para Arduino
  11. Mide tu tiempo de reacción