(DIY) Controlador Midi con Arduino Leonardo prototipo terminado. Actualización.

El proyecto consta del desarrollo de 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 recomendado 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?

Arduino es 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

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

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.

Código 1.0 esta disponible aqui.

Correccion 1.1 del código 24/8/2014 aquí.

*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 el encendido 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 aquí.

*Ahora los leds medidores de señal funcionan de manera semi-analoga mediante PWM con una curva logarítmica.

Correccion 1.3    31/10/2014 aquí.

*Se ha elevado la resolucion del encoder al doble.

Y este es 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.

Para el debounce es buena idea conectar un capacitor de .1 uf entre las entradas digitales y tierra.