Arduino Leonardo, superficie de control MIDI (DIY) Codigo Terminado ACTUALIZADO

Foviac

Bovino de la familia
#1
*CarlosG* Sé lo del multiplexor pero quiero mantenerlo simple por el momento ya que la idea es crear los tutoriales puesto que hay poca información acerca de algunos puntos sobretodo en español y la idea es complementar la información existente, mas adelante usare otras técnicas para aumentar las entradas tanto análogas como digitales aunque supongo que estarán en otra publicación.

De hecho ya había subido un par de vídeos pero como use lo primero que encontré en la librería youtube detecto música protegida por derechos de autor y los borre, hoy espero subir algunos ejemplos si tengo tiempo.

Gracias por los comentarios.


Video de una prueba sencilla del prototipo y el código funcionando.

Los updates están al final de esta publicación.

Hace quizá un par de años decidí construir mi propio controlador midi para personalizarlo completamente, puesto a investigar encontré las placas de desarrollo Teensy basadas en el micro controlador de Atmel mega32u4, este chip tiene la particularidad de soportar MIDI directamente por USB por lo cual era la opción obvia sin tener que hacer una conversión por hardware para conectarla a un PC, por cuestiones geográficas supongo me fue difícil encontrar dicha placa y el envío me resultaba mas caro que la misma placa ademas del tiempo de espera, así que investigando mas encontré la placa Arduino Leonardo basada en el mismo micro chip y en teoría con las mismas prestaciones según algunos blogs.




La placa la encontre en la ciudad de México de manera relativamente fácil y me puse a aprender programación para poder llevar acabo mi proyecto. Una vez empece a trabajar con ella me di cuenta que en las librerías de dicha placa no existía el soporte MIDI-USB por lo cual tenia que hacer la conexión por hardware y eso no era lo que quería así que deje el proyecto de lado buscando eventualmente si la situación había cambiado.

Después de haber dejado el proyecto unos meses realize una nueva búsqueda y encontré el trabajo de Rkistner quien había modificado el core de las librerías de hardware de la Leonardo para que pudiera ofrecer el soporte que yo necesitaba para realizar mi proyecto y aunque técnicamente el trabajo de Rkistner esta en desarrollo y no ofrece APIs de alto nivel por el momento es relativamente fácil entender el protocolo de los mensajes midi para crear el código necesario de entrada y salida, así que de nuevo me puse a trabajar en ello.

En internet existe bastante documentación de controladores MIDI basados en Arduino así que es relativamente fácil programar la placa para leer potenciometros y botones y enviar los mensajes correspondientes, lo que no encontré y era parte de mi proyecto eran buenas referencias para el uso de un encoder (si, mi perversión es hacer scratch como los dj famosos) de igual manera me puse a investigar y probar códigos que encontré en internet para leer el encoder. Quizá sea mi completa inexperiencia en programación pero ninguno de los códigos que encontré funciono y no quise tomarme la molestia de entender lo que los autores habían intentado o su método de lectura del rotativo.

Si usamos algo de logica es sencillo entender como funciona uno de estos encoders para detectar el movimiento hacia adelante o hacia atrás entonces cree un código muy sencillo que detectara dos cosas, una si el encoder se había movido desde su ultima lectura y dos, en que sentido se había movido, y así enviar el mensaje correspondiente a su movimiento.

Entre una cosa y otra también me puse a diseñar la forma física que tendría mi controlador y llegué mas o menos a esto:




--------------------------------------------------------------------------------------------------------------------------------------------------
Update1: Prototipo Terminado

Controlador MIDI con Arduino Leonardo (DIY)


En el proyecto se construye un controlador MIDI basado en Arduino Leonardo, la elección de esta placa en particular esta basada en el uso del micro AT Mega32u4 que es capaz identificarse como un dispositivo MIDI-USB sin la necesidad de hacer una conversión por hardware.

Otra razón es que es fácilmente posible encontrar la placa o incluso clones de la placa a muy bajo costo.

Para que la placa se identifique como un dispositivo MIDI es necesario instalar en el entorno Arduino las librerías “arcore” de Rkistner disponibles en el siguiente enlace. En el mismo enlace se encuentran en ingles las instrucciones para instalar.

Una vez instalado arcore debemos seleccionar en el menú herramientas/board la placa Arduino Leonardo (arcore)



Y el puerto:



El entorno de desarrollo necesario es Arduino 1.5.4

Arcore de momento trabaja con las placas Arduino Leonardo, Arduino Micro y Bare Conductive Touch Board. Algunos usuarios reportan que arcore funciona con otras placas basadas en el mismo micro que son compatibles con el entorno de programación Arduino.



¿Que es Arduino?

Arduinoes una plataforma de hardware libre, basada en una placa con un micro controlador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinarios.

El hardware consiste en una placa con un micro controlador Atmel AVR y puertos de entrada/salida. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque (bootloader) que es ejecutado en la placa. (Wikipedia)


¿Que necesitamos?

Conocer cuando menos básicamente el entorno de software de Arduino y los comandos básicos, para un usuario novato se recomienda leer y estudiar el documento en el siguiente enlace.

Descargar e instalar las librerias arcore de Rkistner disponibles en el siguiente enlace.

La placa, los botones, potenciometros o leds que deseemos utilizar ademas del gabinete donde se colocarán.


Este es el link al código completo:

https://mega.co.nz/#!dlsQmKiD!Oi7iXhkhchhCORFwFoO9SjsWlm47wwiMoUK8IIhQEN4

Correccion 1.1 del código 24/8/2014

https://mega.co.nz/#!pg12jBJT!f3lhlnIXB9b1GYMNTk5KXYUeHLcZ0XMCz17SX3ZWlks

- Los mensajes del encoder han sido cambiados de 0-127 a 1-127 para corregir el funcionamiento del encoder en el host, anteriormente funcionaba de manera limitada en algunos hosts.

- En la recepcion de los mensajes midi provenientes del host se ha cambiado el comando "while" por "if" para optimizar la respuesta.

"while" se ejecuta cíclicamente mientras cierta condicion ocurre por lo que ralentizaba la ejecución de los leds al recibir constantemente mensajes del host.

Con el cambio a if solamente comprueba el mensaje del host y ejecuta la función sin hacerlo en ciclo.


Correccion 1.2 del código 25/8/2014

https://mega.co.nz/#!dpMnjRwZ!o_HfVO-vRRzbdJOeCWDQJK1UFEatcP_nVOsqWGvxnmQ

- Ahora los leds medidores de señal funcionan de manera semi-análoga mediante PWM con una curva logarítmica ajustable en el código.


Y el diagrama de conexiones.



*Actualizo el diagrama ya que con el update 1.2 es necesario usar también una resistencia de 220 Homs en el led del pin 13, aunque este pin tiene una resistencia integrada y en teoría no es necesario usar un resistor externo, en la practica el PWM mete ruido en las lecturas análogas.

Todos los pots son de 10k y para los switchs funciona cualquier botón normalmente abierto.

Es una buena idea colocar un capacito de .1 micro faradio entre las entradas digitales y tierra para minimizar el rebote eléctrico.

El code esta bastante especificado con comentarios para modificar entradas y salidas.

Consideraciones.

Leonardo tiene 20 entradas/salidas digitales que pueden ser configuradas de distintos modos.

Por ejemplo en este proyecto se implementan 8 potenciometros, 8 botones, un codificador rotativo (que usa dos entradas digitales) y dos salidas led que responden a los mensajes enviados por el host con el cual se desea trabajar.



Sin embargo con las características de esta placa es posible configurar por ejemplo 12 potenciometros y 8 botones.



O simplemente 20 botones.



Notas: Las entradas análogas necesarias para los potenciometros se limitan a 12.
Cada codificador rotativo hace uso de 2 entradas digitales para funcionar.


Aun estoy trabajando con los vídeos donde explico paso a paso el funcionamiento del código.
 
Última edición por un moderador:

carlosog15

Bovino adicto
#2
Yo no se de MIDI pero se ve interesante, espero sigas avanzando en tu proyecto.
Felicidades y gracias por compartir el código.
 

Foviac

Bovino de la familia
#3
Gracias. De hecho ya esta casi terminado el prototipo (hoy voy por piezas que me faltan), el código completo esta terminado y estoy preparando videos explicados con manzanas de cada parte del código por que a mi me costo trabajo encontrar información útil, es demasiado dificil encontrar información actualizada para ser código abierto, y en realidad una vez que se empieza a entender es muy sencillo.

Hey aviso para los mods... no fue mi intención hacer bumping, conteste por reflejo y la neta me emocione de tener una respuesta, no lo vuelvo a hacer, pensé en eliminarlo pero no veo el botón para tirarlo a la basura.
 
#4
Orale se ve interesante, gracias por compartir Bro!

Siempre eh dicho que el conocimiento es para compartir y no para uno solo :)

Saludos y cuando este termiando si pudieras subir el funcionamiento final se agradeceria para verlo terminado.
 

Goala

Bovino Moderador Come-Eucalipto
#5
El tema se ha actualizado con el código completo, espero que sepan apreciarlo y lo disfruten. :vientos:
 
Arriba