Pràctica. Disseny d’un sistema interactiu: Quadralight – Consola làser

El projecte que vaig presentar consisteix en una emulació digital d’una consola làser similar als dispositius analògics dels anys 70 que es feien servir per controlar els projectors de llum làser en espectacles permetent la creació de figures geomètriques conegudes com “abstracts”. La particularitat del sistema presentat consisteix en el control en temps real sobre múltiples paràmetres alhora, que s’aconsegueix amb l’utilització de dos comandaments de jocs.

Sensors
– 2 Nunchucks (comandaments de jocs de Nintendo Wii), connectats a una placa Arduino mitjançant el VideoGameShield, proveïts dels següents elements:
a) joystick: recolleix dades sobre la posició x i la posició y d’un botó que es mou amb el dit polze.
b) accelerómetres: mesuren l’acceleració i ens proporcionen una indicació sobre la inclinació del nunchuck respecte dels eixos x, y i z.
c) botons: proporcionen un senyal que ens indica quan es premen.
– Potenciómetres: resistències de valor variable entre zero i 10KOhm que es fan servir per mesurar un voltatge que canvia segons la posició del botó giratori.
– Teclat: el teclat de l’ordinador indica al programa quan es premen determinades tecles
– Ratolí: dispositiu apuntador que serveix per interactuar amb els elements del GUI que es mostren en pantalla (interruptor i botons giratoris virtuals)

Actuadors:
– Pantalla: mostra els elements del GUI, la forma d’ona del so generat i la figura de Lissajous corresponent.
– Projector de llum làser: converteix els voltatges que rep mitjançant la seva interfíce ILDA en figures que es projecten sobre objectes o murs.
– Equip de so: (mesclador + amplificador + altaveu) converteix en so el voltatge elèctric generat per la tarjeta de so de l’ordinador. Les funcions d’enrutament del mesclador ens permeten enviar alhora el senyal cap als altaveus i cap al projector làser.

Altres elements intermitjos:
– Sintetitzador modular euro-rack: sistema de generació de so i voltatges de control que adapta el tipus de connector provinent del mesclador, crea els offsets per controlar el color de la imatge a projectar i adapta els voltatges provinents de la tarjeta de so seguint les especificacions ILDA per finalment crear un senyal de control del projector fiable que es transmet pel connector DB-25.
– VideoGameShield: placa d’ampliació d’Arduino que permet la connexió de dos nunchucks, així com sortida d’àudio i vídeo amb connectors RCA.

Llibreries Arduino:
– i2cmaster: la llibreria i2cmaster es fa servir per comunicar amb els dispositius i2c com el nunchuck
– nunchuck: aquesta llibreria incorpora funcionalitat específica per llegir les dades provinents dels comandaments de jocs, permetent adreçar-se a qualsevol dels dos dispositius que es poden connectar

Llibreries Processing:
– Minim: incorpora funcionalitat d’àudio més avançada que la suportada per la llibreria d’àudio incorporada en Processing. En concret, ha estat imprescindible la possibilitat d’especificar la fase dels oscil·ladors.
– ControlP5: permet la creació d’un GUI (Interfícia Gràfica d’Usuari) de forma senzilla i ràpida. S’han fet servir botons per modificar i/o visualitzar els valors dels paràmetres del sintetitzador i un interruptor per alternar l’activació del mode “nunchuck”.
– Serial: incorpora els elements necessaris per establir una connexió amb la placa Arduino mitjançant l’interfície sèrie.

Funcionament del prototip
La característica més important del sintetitzador és el seu ús d’oscil·ladors de quadratura (que presenten un desfasament de 90º en les seves sortides) per aconseguir representar una gran varietat de patrons de figures Lissajous. Quen es combinen dos oscil·ladors d’aquest tipus amb diferents valors d’amplitud i freqüència es fa possible la creació d’una gran varietat de corbes de Lissajous. El senyal resultant es pot escoltar i també fer servir per controlar, amb les modificacions oportunes, un projector làser.
L’estructura de blocs del sintetitzador implementat és la seguent: els LFOs (oscil·ladors de baixa freqüència) modulen la freqüencia dels oscil·ladors, els senyals dels quals es combinen per parelles segons el seu desfasament.
Els paràmetres del sintetitzador són:
– ampAB, ampCD: amplitud de cada oscil·lador prèvia al processar de waveshaping
– freqAB, freqCD: freqüència base dels oscil·ladors quan no hi ha modulacio per part dels LFOs
– waveformAB, waveformCD: forma d’ona dels oscil·ladors; s’ha implementat un control semblant al disponible en els oscil·ladors del Sistema Hordijk, on és possible passar de forma contínua d’una ona en dent de serra a una ona triangular, amb la sinusoïdal en posició central
– shapeAB, shapeCD: s’ha implementat un processat de tipus waveshaping, que funciona mapejant un senyal d’entrada (en aquest cas el provinent de l’oscil·lador) aplicant una funció matemàtica de transferència, en aquest cas una funció periòdica complexa definida pels cinc primers harmònics d’una ona de dent de serra
– lfo1toAB, lfo2toAB, lfo2toAB, lfo2toCD: índexs de modulació dels LFOs cap als oscil·ladors respectius

Els paràmetres del sintetitzador es poden definir mitjançant quatre mecanismes d’entrada de dades:
– En primer lloc, es pot fer servir el teclat per ajustos precisos però bàsics.
– En segon lloc, es poden fer servir els botons i interruptors virtuals proporcionats per la GUI i implementats amb la llibreria de Processing controlP5. En concret s’han fet servir les classes Knob i Toggle. El valor dels knobs (botons giratoris) es canvia arrossegant el ratolí sobre el botó mentre s’efectua un moviment vertical. El valor del toggle canvia quan es clica sobre l’objecte. La pantalla ens mostra en tot moment el nom del paràmetre a que correspon cada botó, així com el seu valor numèric i de forma gràfica.
– a tercera manera de modificar els paràmetres del sintetitzador és mitjançant l’ús de quatre potenciómetres als que s’envia un voltatge fixe que aquests redueixen segons la seva posició i que finalment es llegeix en les entrades analògiques de la placa Arduino.
– Per implementar la quarta possibilitat de introduir dades en el sistema ha estat necessari fer servir Arduino i una placa accessòria (també coneguda com shield). La placa videogameshield ens permet realitzar també altres funcions, però en aquest cas només s’ha fet servir per connectar-hi dos comandaments de jocs de tipus Nunchuck, originalment incorporants en la consola de jocs Nintendo Wii. La següent taula ens indica l’assignació de paràmetres dels controladors de jocs.

Descripció del procés de treball
La primera etapa en la realització del projecte va consistir en la implementació d’un oscil·lador bàsic de quadratura fent servir les possibilitats que ofereix la llibreria Minim de Processing. Per comprovar el seu correcte funcionament, la següent passa va ser la visualització per pantalla de la forma d’ona resultant i de la correlació de fase. Per visualitzar la correlació de fase habitualment es fa servir un oscil·loscopi en mode XY. En aquest mode els oscil·loscopis assignen el senyal d’un canal a l’eix X de la representació i el del segon canal a l’eix Y. D’aquesta manera, si s’alimenten les entrades de l’oscil·loscopi amb un senyal de sinus/cosinus en els canals X/Y, el que s’observa en pantalla és un cercle perfecte.
Les corbes de Lissajous presenten formes molt variades i, en ocasions, de sorprenent bellesa. Per aconseguir aquesta varietat de formes geomètriques cal modificar la forma d’ona de l’oscil·lador, modular la seva freqüència, afegir un segon oscil·lador de quadratura, etc… Algunes decissions en l’implantació poden resultar poc convencionals (doblar el nombre de LFOs però amb els paràmetres sincronitzats, assignar l’offset del LFO com el valor de la freqüència central de l’oscil·lador, etc…) però han estat resultat de treballar amb les limitacions de la llibreria Minim que, encara que resulta sorprenentment potent i flexible, no ho és tant com entorns de disseny sonor especialitzats com PD, SuperCollider o Chuck.
Respecte de la realització de la GUI, també ha estat necessari investigar les possibilitats que ofereix la llibreria. S’ha ssignat un identificador únic a cada element del GUI i la detecció dels events s’ha realitzat amb void controlEvent(ControlEvent theEvent). Segons el tipus d’event es modifiquen els valors corresponents dels objectes de Minim: oscil·ladors, LFOs, shapers, gain, etc…
Tant amb Minim com amb controlP5, moltes vegades la solució ha passat per analitzar el codi font de les llibreries, disponible a GitHub, ja que ni els exemples ni la documentació són suficients per aclarir el funcionament de totes les classes i els mètodes que suporten.
Amb el sintetitzador ja funcionant i la GUI acabada, la següent fase del procés ha estat implementar la interfície de teclat. Com controlP5 ja actua directament sobre els valors de les variables només ha estat necessari fer servir void keyPressed() per controlar amb un switch el codi a executar segons la tecla premuda. Després de modificar el valor de la variable es refresca el valor de l’element del GUI corresponent. Cal vigilar que els paràmetres no sobrepassin els límites establerts en la definició dels botons del GUI.
La part del projecte més interessant ha estat la referent a la utilització d’Arduino per realitzar el control dels paràmetres del sintetitzador. Per implementar la lectura dels potenciómetres només cal llegir el voltatge resultant després de que la resistència variable del potenciómetre n’hagi modificat el seu valor.
Per realitzar la lectura dels valors dels sensors incorporats en el comandament de jocs nunchuck cal fer servir el shield videogameshield (que vaig ensamblar soldant els seus components) i una llibreria específica. El procés no presenta gaire dificultats, encara que cal tenir pràctica amb el soldador i també investigar la configuració amb dos comandaments ja que aquesta no figura als exemples i s’ha d’entendre el funcionament de la llibreria per implementar correctament el seu ús.
Finalment, la connexió amb el projector làser passa per analitzar quins senyals passen pels distints pins del connector ILDA. Aquesta interfícia defineix uns rangs de voltatge que serveixen per controlar el nivell de R, G i B (vermell, verd i blau) i la posició del raig làser sobre els eixos X i Y. El senyal d’àudio estereofònic creat per l’ordinador s’envia als canals X i Y. Per crear els nivells de cada color he fet servir un mòdul de Doepfer A-138m 4×4 Matrix Mixer que permet crear voltatges d’offset entre 0 i 5 volts. senyals presents als connectors de l’interfície ILDA.

Leave a Reply