Introduction: MIDI Step Interface (versión En Español)

About: Kinetic Light Object

Versión en inglés aquí.

En este instructable te mostraremos cómo hacer una plataforma interactiva de luz y sonido, que puede ser usada para jugar el famoso “Simon Says” al igual que como un controlador MIDI. Ambos modos operados con los pies!

Antecedentes

El proyecto nació por la idea de hacer una pieza interactiva con la que el público pudiera divertirse sin importar su edad, tanto para niños como para adultos. Y se hizo para un centro comercial, como parte de las atracciones que ofrece en sus instalaciones.

La primer referencia que recibimos por parte del cliente es una versión del Simon Says para tocar con los píes, básicamente teníamos que replicar algo así.

Nos dimos a la tarea de buscar otros tipos de plataforma, entre las que abundaban las pistas de baile, que en su mayoría trabajan con la luz, pero no con el sonido. En esta búsqueda también nos topamos con los pianos de gran formato para píes, y nos pareció buena idea hacer una plataforma que no solo fuera para jugar Simon Says, sino también para usarlo como instrumento musical. Por el gusto a la música!

Otro aspecto que consideramos fue la forma de la plataforma. Todas las pistas de baile que vimos son rectangulares, con pads cuadrados, a excepción de una que tenía pads circulares. Queríamos desde un inicio trabajar con una forma diferente, que fuera llamativa visualmente y modular al mismo tiempo. Los hexágonos fueron la respuesta.

Al buscar formas hexagonales, lo más cercano que encontramos fue este proyecto. La idea de hacer hexágonos nos emocionaba cada vez más… No teníamos idea de lo que vendría después.

Teníamos ya un objetivo cada vez más claro: Una plataforma interactiva de luz y sonido que:

  • Se pudiera jugar Simon Says
  • Funcionara como instrumento musical
  • Tuviera pads hexagonales

Step 1: Materiales

Generales:

  • 1) LattePanda
  • 1) Gabinete para LattePanda
  • 1) Eliminador 5 VDC a 2.5A micro usb
  • 1) Perma-proto
  • 1) Multiplexor de 16 canales
  • 10) Resistores de 10k ohms
  • 1) Fuente de voltaje 5 VDC a 50 A
  • 5) Regletas de conectores de tornillo
  • Cinchos
  • Sujeta cinchos
  • Velcro
  • Cinta doble cara
  • 1) Altavoz activo de alta potencia
  • 1) Cable auxiliar de 3.5 mm
  • 1) Gabinete industrial

Por pad:

  • 1.5) Metro de tira Neopixel de 96 LEDs
  • 1) Interruptor de límite industrial
  • 1) Hexágono de acrílico opalino de 1 cm
  • 1) Hexágono de trovicel de 6 mm
  • 1) Estructura de PTR
  • Velcro
  • Silicón
  • Cable 5 vías
  • Cable 3 vías
  • Cable 2 vías
  • Termofil

Step 2: Elegir La Tarjeta Que Controle Todo El Sistema

Arduino es, por antonomasia, la tarjeta de desarrollo que hemos ocupado desde hace varios años. Nunca nos ha fallado, sin embargo, es necesario detenerse un poco a pensar qué aspectos técnicos debemos cubrir para nuestro proyecto:

  • Luz: Requerimos iluminar los pads con alto brillo y con patrones complejos, para ello pensamos usar Neopixeles.
  • Pads: Los pads deben responder a la pisada del usuario, lo más fácil para esto son interruptores.
  • Juego: Esto se refiere a la dinámica del juego, que debe ser programada y procesada por algún microcontrolador.
  • Sonido: En un inicio, teniamos pensado diseñar nuestros propios sonidos en Pure Data, por lo tanto requeríamos una computadora que corriera dicho programa.

Más adelante se profundiza en estos aspectos, mientras tanto, la parte que nos mantenía en duda, era la del sonido.

Consideramos usar Pure Data, porque si bien con Arduino se pueden generar algunos sonidos, es limitado y complejo, mientras que con PD se puede hacer síntesis o bien un patch para activar sonidos vía MIDI. Se requería entonces, una computadora para correr Pure Data, y Arduino para controlar lo demás.

Comenzamos a sondear qué computadora usar, y nos gustó lo que ofrecía LattePanda: una computadora con Windows 10 con una tarjeta Arduino incorporada. Bingo!

LattePanda tiene un puerto GPIO en el que se encuentran mapeados los pines de un Arduino, a través de los cuales podriamos manejar los interruptores de los pads y los neopixeles.

La programación del juego sería en el mismo Arduino que trae incorporado, que por cierto, es un Arduino Leonardo.

Para el sonido, LattePanda tiene un jack 3.5 que más adelante conectariamos a un altavoz.

Hay un montón de otras computadoras que pudimos haber usado, seguro te preguntas por qué no usamos Raspberry Pi. Y las razones son las siguientes:

  • Adafruit sugiere no controlar Neopixeles con Raspberry, por cuestiones del reloj. Cosa que Arduino sí puede.
  • Para controlar los pines GPIO de la Raspy, se tiene que hacer con Python, lenguaje que no dominamos.
  • Si bien se puede conectar un Arduino a la Raspy, queríamos una solución de una sola tarjeta.
  • Raspberry corre Windows 10 IoT Core.

Ciertamente LattePanda es costosa y no hay mucha comunidad que la utilice. Si esto lo ves como una adversidad, te invitamos a utilizar otra plataforma. Estaremos encantados de saber que hiciste este proyecto con Raspy, UDOO, BeagleBone, etc…

Step 3: Diseñar Y Fabricar La Estructura

La idea de hacer la plataforma con hexágonos nadie no la iba a quitar. Como estábamos seguros de ello, comenzamos a diseñar la estructura.

Hay muchas cosas a considerar para esta etapa, y nuestra estructura debía cubrir lo siguiente:

  • Soportar el peso de personas
  • Exposición a la intemperie
  • Resguardar la electrónica

Consideramos enseguida utilizar PTR por su dureza, bajo costo y fácil acceso.

Dado que los hexágonos irían acomodados juntos el uno con el otro, se tenía que pensar de qué manera pasarían los cables entre ellos, y por esa razón se diseñó cada módulo como una especie de sandwich, donde por enmedio pasarían los cables de la electrónica.

Teníamos entonces que fabricar una estructura de doble hexágono, con unos postes que los separaran.

Al tratarse de una plataforma para pies, se nos hizo fácil considerar un diámetro externo para el hexágono de unos 70 cm, para que fuera de buen tamaño. Hicimos el ejercicio de cortar en papel varios hexágonos con ese diámetro antes de hacer la estructura.

Con todo esto definido, comenzamos la fabricación de nuestro primer prototipo.

Lo primero que hicimos fue cortar en MDF con láser un hexágono con las dimensiones que tendría la estructura, usaríamos esta pieza para guiarnos en cuanto a los ángulos y longitud que deberían tener los tramos de PTR.

Cortar de manera precisa los tramos de PTR es una tarea bastante difícil, y más cuando no tienes la herramienta adecuada. Nosotros a falta de una sierra ingletadora, usamos una esmeriladora, lo cual complicó mucho este proceso. Debes ser cuidadoso usando esta herramienta, ya que es muy fácil cortar de más y no seguir cortes rectos.

Cortamos 12 tramos (6 por cada hexágono) y 6 postes (los que separan a los hexágonos). Una vez que probamos que coincidian con el hexágono de MDF, continuamos con la soldadura.

Soldamos primero los hexágonos por separado, y luego los soldamos a los postes de separación. Todo un reto!

Somos unos principiantes en soldadura y pronto nos dimos cuenta que nos ibamos a limitar a soldar sólo ese prototipo, y el resto encomendarlo a un herrero experimentado. Si tu eres un buen soldador, anímate a fabricar todos los hexágonos tú mismo!

Ya con la estructura finalizada, la pintamos de blanco con aerosol. Te recomendamos hacer esto en un lugar ventilado y donde se pueda colgar la estructura para que puedas pintarla por todos los ángulos.

Step 4: Colocar Las Superficies En La Estructura

Ya con la estructura metálica, ahora seguía pensar en dos cosas:

  • La superficie que resguardaría la electrónica.
  • La superficie que el usuario pisaría.

La electrónica que iría en cada hexágono consistía únicamente en la tira de neopixeles. Necesitábamos algo que fuera resistente al agua, en caso de que lloviera y se acumulara el agua debajo de cada hexágono.

Elegimos trovicel, es barato, fácil de cortar, accesible, y resistente al agua.

Por su parte, para la superficie que pisaría el usuario, queríamos que fuera con acrílico, la duda era qué tan grueso había que ponerlo. El único color posible era blanco opalino, para que ocultara la tira de neopixeles y para difuminar la luz. Desafortunadamente no hay mucha variedad en cuanto a grosores, el más grueso disponible era de 1 cm.

En este primer prototipo, diseñamos una especie de tapa para evitar que el agua se filtrara por alguna orilla. Para lograrlo el hexágono tenía la orilla dentada para que se pudiera armar en conjunto con las paredes de la tapa, y posteriormente fijar las partes con pegacril.

Cortamos en láser ambos hexágonos: el de trovicel y el de acrílico.

Nota: Con anticipación, sabíamos que es peligroso cortar trovicel con láser, puesto que está hecho de PVC. Con ayuda y consentimiento del operador de la cortadora láser, lo cortamos rápido, con ventilación, y con mascarillas. Lo hicimos porque no disponíamos de un router CNC, y cortarlo con sierra era impreciso y tardado. Asumimos este riesgo solo para el prototipo, el resto de hexágonos de trovicel los cortamos con router. Tú no ocupes cortadora láser!

Con las piezas ya cortadas, montamos todo junto y comenzamos a probarlo.

Durante algunos días nos subimos al hexágono para probar su resistencia, pero no pasó una semana para que las paredes de la tapa de acrílico empezaran a despegarse. Además el acrílico se pandeaba mucho con el peso de una persona promedio.

Como ya no había acrílico opalino más grueso, optamos por reducir el perímetro del hexágono a 50 cm, haciendo la superficie más pequeña ésta sería más resistente. Si bien pudimos colocar algunos soportes de refuerzo en la parte de abajo del acrílico, se vería la sombra de estos cuando se iluminara el hexágono.

Ya no teníamos tiempo para fabricar nosotros otro hexágono, así que lo mandamos a hacer con un herrero.

Esta última estructura sería la definitiva para nuestro proyecto, en el modelo 3D que acá te compartimos vienen especificadas sus dimensiones.

También descartamos la idea tener una tapa compuesta de varias caras pegadas con pegacril. En su lugar decidimos uasr solo una superficie de acrilico que atornillamos por arriba a la estructura. Tanto el acrílico como el trovicel se tuvieron que ajustar al nuevo tamaño. Cortamos en láser 10 hexágonos de acrílico, y con router CNC 10 hexágonos de trovicel.

Step 5: Instalar La Tira De Neopixeles

Para la iluminación, probamos de qué manera se podía iluminar mejor el acrílico. En definitiva fue colocando la tira por la orilla. Checa las fotos para que veas la diferencia.

Las tiras que usamos tienen 96 neopixeles por metro y las venden por metros separados, es decir, no venden rollos de 5 metros continuos. Esto se volvería pronto un problema, porque un solo metro no alcanza para cubrir toda la orilla de nuestro hexágono, por lo que tuvimos que unir pedazos.

Adafruit tiene una guía bastante completa sobre estas tiras, te recomendamos leerla antes de usarlas.

Con las tiras hicimos lo siguiente:

  • Al inicio de cada tira, soldamos un resistor de 470 ohms. Se recomienda que este resistor vaya lo más cercano posible a la tira, en lugar del pin de Arduino.
  • En el otro extremo, unimos la tira de un metro, con un tramo de unos 20 cm para completar el perímetro del hexágono.
  • Como la plataforma iba a estar expuesta a lluvia e intemperie, compramos tiras a prueba de agua, que traen un recubrimiento. Al unir tiras, tuvimos que abrir este recubrimiento para que los LEDs estuvieran lo mas juntos posible, y luego sellarlo con ayuda de unas tapitas impresas en 3D y silicón. En las fotos puedes ver más a detalle esto.
  • Fijamos las tiras a la estructura con velcro.
  • Finalmente, a la tira le soldamos una extensión (de unos 20 cm) de cable de 3 vías, que baja por una perforación en el trovicel.

Step 6: Instalar El Interruptor

Hay varias alternativas para sensar las pisadas del usuario: sensor capacitivo, sensor de distancia, sensor de fuerza, velostat, etc. Nosotros optamos por usar interruptores mecánicos, y esto fue posible gracias a que el acrílico se pandeaba ligeramente cuando alguien pisaba sobre él. Por otra parte, sólo necesitabamos detectar una señal de encendido/apagado y un interruptor hace justamente eso.

Sobre qué interruptor elegir, fuimos a la tienda de electrónica para ver las opciones. Buscábamos algo robusto-industrial, y nos encontramos con un gran surtido. La elección se basó de acuerdo al tamaño de nuestra estructura y a la forma de montaje.En las fotos podrás apreciar que el switch que usamos tiene una especie de cuello con cuerda que permite poder atornillarlo a una superficie horizontal. Justo lo que necesitábamos!

Usar este tipo de switches es muy fácil,en la parte de abajo trae unos tornillos como terminales a los que se le puede enrolllar el cable, no es necesario usar soldadura, además estos switches son para intemperie ya que traen una carcasa que los aisla del agua.Les conectamos una extensión de cable de dos polos de 20 cm aprox.

La forma de calibrar la sensibilidad de los switches va en función de qué tan cerca estén del acrílico. Para calibrarlos nosotros nos apoyamos de unas rondanas que imprimios en 3D con el grosor necesario para que el switch quedara ajustado al nivel que requeríamos. No usamos rondanas comerciales porque eran muy gruesas.

Step 7: Soldar La Extensión De Cable De Cada Hexágono

En cada hexágono se tenía el interruptor y la tira de neopixeles, dando un total de 5 cables. Estos cables tenían que llegar a un circuito de control desde donde se mandarían y recibirían las señales. Empleamos entonces un cable de control de 5 vías. Usamos termofil para proteger los puntos de unión con soldadura.

En el otro extremo de esta extensión, necesitabamos un conector de 5 pines. Hay unos DIN 5 industriales de propósito general pero son muy caros y elevarían mucho el costo del proyecto, era incluso más barato usar dos conectores XLR de audio que uno industrial. Soldamos entonces dos conectores XLR: uno para los neopixeles (3 cables) y otro para el switch (2 cables).

Usar dos conectores por hexágono es algo aparatoso, si tienes suficiente presupuesto, te recomendamos ampliamente que uses un conector industrial, te ahorrará trabajo y se verá mejor.

También calculamos el largo de cada cable tomando en cuenta las dimensiones de una estructura que iría por alrededor de los hexágonos. Es de gran utilidad, por su parte, planear por dónde pasarán los cables entre hexágonos y diseñar un diagrama de referencia.

Step 8: Preparar El Gabinete Que Resguarda El Circuito De Control

A partir de que usamos conectores XLR macho, requeríamos usar conectores XLR hembra y estos debían ser montados en un gabinete. El número de conectores junto con el tamaño de la fuente de voltaje y el LattePanda eran las referencias de las dimensiones que teníamos que considerar para el gabinete.

Compramos un gabinete industrial, y para perforarlo utilizamos un taladro de columna y una sierra broca para los agujeros de los conectores XLR, los cables de alimentación AC y audio. Este proceso fue muy tardado debido al amplio grosor de este tipo de cajas, aunado a que el taladro necesita operar a su máxima fuerza y para ello requiere cierto tiempo de reposo por cada tiempo de trabajo (es importante que busques esta información con el fabricante de tu taladro, pues si no respetas estos tiempos, tu taladro se sobre-calentará con riesgo a dañarse).

Antes de perforar la caja, planifica la ubicación de los circuitos, el flujo de señal dentro y fuera del gabinete, la orientación de ésta, y si va a estar dentro de un mueble o a la intemperie. No olvides considerar la facilidad de conexión para el usuario.

Step 9: Soldar Circuito De Control Y Conexiones Para La LattePanda

El circuito de control es bastante simple. Como nuestra plataforma se compone de 10 pads, cuenta con 10 interruptores (entradas) y 10 tiras de neopixeles (salidas). Estos 20 dispositivos van a interactuar con el Arduino que trae integrado la LattePanda, a través de sus pines digitales. Pese a que esta tarjeta cuenta con 20 pines digitales, dos de ellos están dedicados la comunicación serial (Rx y Tx) y lo recomendable es no usarlos. Entonces tuvimos que recurrir al uso de un multiplexor (MUX).

Los interruptores los conectamos a un multiplexor de 16 entradas para que en lugar de usar 10 pines del Arduino para la lectura, sólo usemos 5.

Por su parte, los neopixeles decidimos sí conectarlos directo a los pines de Arduino, dado que en diferentes pruebas que hicimos, pueden llegar a tener problemas cuando se manejan a través de un MUX y hacen más complejo el código. Sin embargo, si tienes un buen nivel de programación, no tendrás problemas para usar un MUX dedicado a las tiras.

Para proteger y darle ventilación a la LattePanda usamos un gabinete dedicado que incluye ventilador. Con el gabinete puesto, sería difícil montar sobre los pines un shield a donde irían soldadas las conexiones de los cables y el MUX, motivo por el cual diseñamos un circuito aparte muy sencillo al cual le soldamos conectores, algunos resistores y el MUX.

Como el circuito es tan básico, lo soldamos directamente sobre una Perma-proto, igual lo puedes soldar sobre una placa perforada, o bien, fabricar tú mismo el PCB. Aquí te compartimos el diseño en Fritzing.

Attachments

Step 10: Conectar Los Pads Al Circuito De Control Y a La Alimentación

Teniendo el circuito de control ya soldado a los pines de la LattePanda y con el gabinete perforado, hicimos lo siguiente:

  • Atornillar los conectores XLR hembra al gabinete
  • Etiquetar los conectores con sus repectivos nombres
  • Soldar el cableado de los conectores XLR a unos conectores de tornillo
  • Probar continuidad en todo el cableado
  • Fijar la fuente, el circuito de control, y la LattePanda al gabinete
  • Organizar los cables con cinchos y sujeta cinchos
  • Conectar los cables de los pads al gabinete

En las fotos se puede ver muy aparatoso el interior del gabinete, dejando poco claro lo que hicimos, pero acá te compartimos también un diagrama detallado de las conexiones.

Step 11: Programación

En este tipo de proyectos, es mucho más cómodo dedicarte a la programación, una vez que tienes el hardware bien ensamblado: sin falsos; buenas conexiones; listo para uso rudo, etc.

Para la programación comenzamos con la parte musical, quisimos diseñar nuestros propios sonidos pero ya no nos dio tiempo de profundizar con eso, así que optamos por hacer un controlador MIDI, donde cada pad hexagonal dispararía un sample.

  • Para el controlador MIDI, nos ayudó mucho esta información.
  • Utilizamos esta librería para Arduino.
  • Para el patch en Pure Data usamos este.
  • Y para los samples hay varias opciones gratuitas que puedes encontrar en internet.

Respecto al manejo de los neopixeles, usamos la librería FastLED.

Y finalmente, para el juego "Simon Says" fue de bastante ayuda este instructable.

Attachments

Step 12: Fabricación De Estructura De Protección Para La Plataforma

No había algo que fijara a los hexágonos y no se movieran cuando uno estaba sacando sus mejores pasos de baile, por lo que fue necesario considerar una segunda estructura que cumpliera con dos funciones:

  • Mantener unidos a los hexágonos y que no se movieran
  • Proteger la orilla de la plataforma contra intemperie

Fabricar una estructura con estas características no sería tarea fácil, así que decidimos encomendarlo a herreros expertos. En las fotos puedes ver la obra de arte que hicieron estos artesanos.

El gabinete de control y el altavoz se montaron dentro de un mueble de madera.