sábado, 3 de marzo de 2012

Estudio del sistema de iluminación


Sistema de iluminación
Hemos estado estudiando las opciones, y nos hemos decantado por una matriz de LED RGB de 8x8, hemos encargado una a través de eBay, datasheet aqui. Cuando nos llegue, empezaremos a montarla. Para alimentarla, podemos usar fuente normal con resistencias o un driver IC para LED de corriente constante.
Entre las opciones, las hemos reducido a dos posibles:
  • Driver PWM hardware: se ajusta un valor y se va cambiando la fila excitada y los valores PWM asociados. Un IC posible sería el TLC5940 de TI, cada uno tiene 15 canales, se necesitarían dos, conectados en cascada, para cubrir los 24 puntos necesarios.
  • Driver de corriente constante hardware, se utilizaria un IC que genere una corriente constante, y ajustando dicha corriente, realizar las mezclas, barriendo las filas con los valores de corriente asociados. 
La segunda opción es más sencilla en software, pero la primera permite mezclas mucho mas ricas (PWM de 12 bits, 4096 estados, miles de millones de colores), así como muchas más opciones como detección de LED fundido, correcciones cromáticas de 6 bits para cada canal...

Etapa de entrada y lectura de tramas

Etapa de entrada:
La especificación oficial MIDI contempla el siguiente esquema para el aislamiento, mediante un optoacoplador. De esta manera, tanto se aisla electricamente, como se evita el problema de la adaptación de niveles de tensión.

Lo hemos implementado con este circuito:
To Be Copied Here

Lectura de datos MIDI
Hemos implementado un pequeño programa para leer los bytes que le llegan por la UART1 (MIDI, a 31250 baudios), y replicarlos por la UART0 (SerialOverUSB, 57600 baudios), los replica como cadenas de caracteres, con 3 bytes por linea, que representan:
  • Byte 1: información de set de instrumentos, código de instrumento, etc.
  • Byte 2: código de nota pulsada.
  • Byte 3: intensidad de nota pulsada (0 corta el sonido de esa nota). 
Para pruebas, hemos probado a hacer sonar un altavoz mediante ondas cuadradas y la orden Tone() de Arduino, el resultado es el siguiente:





Como emisor de datos, hemos puesto a otro Arduino (Duemilanove) a mandar notas MIDI, haciendo una escala ascendente.

La entrada serie del PC:

Sketch

 
/*
  MIDI interface
  
  @author J. Martin, S. Lopez 
 */

int nbyte=0;
long int frequency;
int midi[3];

void setup() {
  // initialize both serial ports:
  Serial.begin(115200);
  Serial1.begin(31250);
}

void loop() {
  
}

void serialEvent1() {
  int inByte = Serial1.read();
  midi[nbyte] = inByte;
  Serial.print(inByte); 
  Serial.print(" ");
  nbyte++;
  
  if (nbyte==3) {
    nbyte=0;
    Serial.println();
    
    frequency = map(midi[1], 0x1E, 0x5A, 55,1760);
    tone(8,frequency);
  }
}


Análisis inicial

Hemos estado analizando el análisis de la práctica con Juan Manuel Montero y Roberto Barra, los días 22 y 29 de Febrero.
De ahí hemos concretado algunos puntos:
  • Los módulos a realizar serán la interfaz USB, la placa de control, el procesado en PC y el sistema de iluminación. Además, se implementará un Wiimote como interfaz de control más adelante.
  • La plataforma Arduino Dueminalove/UNO sólo dispone de un módulo USART, usado por la comunicación USB, y la comunicación con MIDI requiere otro, debido a limitaciones de la libreria para crear un puerto serie virtual, por lo que pasamos a realizar la práctica con una placa Arduino Mega 2560 R3.

También se ha acordado la planificación temporal de la práctica, de la que se derivan los siguientes hitos: 
  • Hito 1: 
    • Reenvio de comandos desde la entrada MIDI al PC a través del arduino.
    • Poder escuchar las notas en el PC, de forma simple (comprobación de recepción sólo).
    • Recepcion de datos adicionales del Arduino.
    • Clasificación de tramas en PureData según sean notas o datos de control.
    • Visualización simple de forma autónoma por el Arduino.
  • Hito 2: 
    • Visualización basica comandada por PC, no dependiente del ritmo o acordes.
    • Reproducción de las notas tocadas con fidelidad.
    • Recepción de datos en bruto con Wiimote.
  • Hito 3: 
    • Visualización dependiente del ritmo o acordes
    • Interfaz de entrada completa
    • Control con Wiimote completo (mejora).

Descripción de la práctica

Sintetizador digital MIDI implementado en PureData
con feedback visual configurable


Nuestro proyecto pretende construir un sintetizador digital MIDI que utilize la señal de un piano, un secuenciador o, en general, de cualquier controlador MIDI para generar señales de audio y efectos luminosos modulados por hardware a través de un programa desarrollado en PureData, un lenguaje de programación orientado a tiempo real.

Este sistema está pensado para aplicaciones como el diseño y puesta a punto de performances basadas en audio e iluminación como actuaciones musicales en directo, permitiendo ajustar parámetros de forma fácil en función de las necesidades del usuario gracías a la modularidad del software de control.

Especificaciones HW y SW tentativas:
-Arduino Mega 2560 Revision 3
-PureData 0.42.5

Módulos del sistema
Consta principalmente de los módulos señalados en la figura superior, que son:
  • Controlador MIDI. Es el elemento que genera las instrucciones a decodificar por el ordenador. Puede ser un teclado, una guitarra MIDI, un secuenciador, o cualquier dispositivo capaz de transmitir dichas instrucciones. En la práctica, utilizaríamos un teclado MIDI conectado a nuestro periférico de entrada para realizar las pruebas de sonido e iluminación.
  • Interfaz de control. A través de este elemento controlaríamos los parámetros del software de procesamiento, tanto musicales como adición de efectos, elección de patches, modelado de sonidos, etc., como de iluminación, así como conmutación entre modos de funcionamiento del sistema. Este módulo iría conectado al periférico de entrada que se encargaría de transmitir esta información al ordenador.
  • Periférico de entrada MIDI-USB. Es el dispositivo que actúa de pasarela entre el controlador y el ordenador en el que reside el programa. Además, envía los datos de la interfaz de control al ordenador y controla el módulo de visualización. En principio implementaríamos este módulo con un microcontrolador Arduino.
  • Unidad de iluminación. Se quiere incluir un módulo de visualización, que generara una respuesta visual a los datos enviados por el controlador. Este sistema tendría varios canales de iluminación independientes, cada uno de ellos con tres canales RGB, de forma que el software de procesamiento pudiera generar el color deseado en cada uno de ellos. Este módulo podría conectarse a diversos sistemas de iluminación como focos RGB o matrices de LEDs.
  • Procesado de datos y generación de audio. El proceso de generación de audio se realiza con la ayuda de un ordenador personal en el que se ejecuta un programa desarrollado en PureData, un lenguaje orientado a tiempo real basado en flujos de información.
Estimación de recursos necesarios
Como primera aproximación, creemos que necesitaríamos:
  • Controlador MIDI: intentaríamos traer al laboratorio un teclado MIDI pequeño, por lo que simplemente necesitaríamos un lugar para guardarlo. En caso de no encontrarlo, disponemos de un secuenciador MIIDI Yamaha QY22.
  • Plataforma Arduino para implementar el periférico de entrada.
    Sliders, potenciómetros, conectores, y puede que algún PIC de bajo rendimiento y una pantalla LCD para la interfaz de control.
  • Alguna matriz de LEDs, tiras de LEDs, etc., o similar para el módulo de iluminación.
  • Altavoces o auriculares para reproducir el sonido final.
Contacto, referencias y más información

Partlist

Esta entrada irá almacenando la partlist de todo, siendo actualizada periodicamente. UA 3/3/12

Placa de desarrollo:



Etapa de entrada:

  • 6N138
  • 1N4148
  • Varias resistencias.
  • Conector DIN-5 180 grados (MIDI HW specs).


Sistema de iluminación:

  • Matriz LED RGB 8x8, ref. GTM2088ARGB-21. Datasheet.
  • 2x TLC5940
  • 1x 74HC138
  • 8  MPSA63
  • 2x 10nF
  • 1x 100nF
  • 1x 100 uF
  • 3x 100pF
  • 11x 10Kohm
  • 2x 2K7ohm
  • 1x 220 ohm
  • 1x 6N138
  • 1x Tira pines macho .1"
Plataforma
  • 1x PCB