PAC 2. Prototip de sistema electrònic interactiu amb Arduino: Neuromín.

El projecte que vaig presentar consisteix en un prototip d’instrument musical accionat per mitjà de les oscil·lacions neurals. Aquestes oscil·lacions són activitats neurals periòdiques del sistema nerviós central induïdes per l’activitat d’una població de neurones que generen un camp oscil·latori observable en un electroencefalograma.
Per detectar les oscil·lacions neurals es fa servir un econòmic sensor neural que pertany a la joguina Mindflex de Mattel i les lectures de valors del sensor es converteixen en paràmetres d’un sintetizador de so que genera un so similar al del Theremin.

Sensors:
– Mindflex de Mattel modificat per obtenir directament el senyal FFT sense passar pel circuit wireless del joc
– Potenciómetre 10K lineal per controlar el suavitzat de la lectura dels valors proporcionats pel sensor
Actuadors:
– LED verd per indicar la lectura correcta del sensor
– Equip de so (mesclador + amplificador + altaveu) per escoltar el senyal sonor generat per la placa Arduino
Llibreries:
– Arduino Brain Library (https://github.com/kitschpatrol/Arduino-Brain-Library): Posa a disposició de l’entorn Arduino els valors del sensor EEG proporcionant vuit bandes de potència corresponents a ones Delta, Theta, LowAlpha, HighAlpha, LowBeta, HighBeta, LowGamma i MidGamma.
– Mozzi (http://sensorium.github.io/Mozzi/): Llibreria de síntesi sonora per Arduino que permet accedir a classes com ADSR, AudioDelay, DCFilter, Line, Oscil, Phasor, ReverbTank, WaveShaper, etc…

Funcionament del prototip
El sensor Mindflex proporciona la lectura dels valors EEG en un format que la placa Arduino rep pel port sèrie RX al pin Digital 0.
La llibreria Arduino Brain Library s’encarrega de posar a disposició els valors rebuts al port sèrie. En aquest prototip es fa servir la lectura d’ones Theta que són un patró d’oscil·lació que en els humans fa referència a components de freqüència entre els 4 Hz i els 7 Hz. En els adults, aquests patrons apareixen durant estats meditatius o propers al son, però no durant les fases profundes d’aquest.
La llibreria també proporciona un valor de qualitat del senyal, que presenta el valor 200 quan la lectura dels valors EEG no és correcte. En el nostre cas, quan ens posem el sensor neural i es detecten patrons d’activitat cerebral, s’encén un LED de color verd.
El sensor envia lectures a la placa aproximadament cada segon, motiu pel qual es fa necessari crear un suavitzat dels valors llegits abans de treballar amb ells amb la finalitat de eliminar el renou de fons i els errors de lectura del sensor. Un potenciómetre connectat al port Analògic d’entrada A2 ens proporciona un valor entre 0 i 1023 que, convenientment escalat, es fa servir per suavitzar els valors del senyal fent servir un senzill mètode d’interpolació lineal.
Cal destacar que la llibreria Mozzi requereix fer servir funcions de lectura especials com mozziAnalogRead() ja que les estàndard fan ús de les interrupcions necessàries per la creació de sons i farien apareixer clics i distorsions.
Per crear sons amb la llibreria Mozzi i la placa Arduino cal tenir en compte les següents consideracions:
a) Dins setup() cal inicialitzar el motor d’àudio amb startMozzi(CONTROL_RATE) indicant la taxa de control amb un valor que sigui potència de 2 que ajusta un temporitzador que cridarà la funció updateControl() a la taxa escollida i, addicionalment, un altre temporitzador que manda el valor de les mostres al pin de sortida a la freqüència de mostreig de 16384 Hz.
b) Dins updateControl() es realitzaran les lectures dels sensors i s’actualitzaran els valors que controlaran el so a la taxa de control indicada
c) Dins updateAudio() es realitzaran les actualitzacions dels valors de les mostres d’àudio
d) És preferible no situar a loop() més codi que audioHook() per evitar que es buidi la memòria de treball.

Procés de treball
Vaig conéixer les possibilitats dels sensors EEG al Symposium KISS2013 a Brusel·les organitzat per LARAS ISIB i Symbolic Sound. En aquesta trobada, John Mantegna va interpretar una sonificació d’una sessió de meditació on amb el sensor d’activitat cerebral Emotiv controlava el sistema Kyma en temps real.
Arrel de la proposta d’investigació de l’asignatura en les primeres setmanes del curs he cercat sensors alternatius per la placa Arduino i he descobert les possibilitats que ofereixen els bio-sensors. Com el preu d’un kit de bio-sensors de qualitat és una mica massa elevat per una primera aproximació a la matèria, he optat per adquirir un sensor de joguina i modificar-lo seguint les instruccions detallades a Hackaday,
en l’entrada “Hacking the Mindflex, more!” per Jakob Griffith i al vídeo Brain Hack de kitschpatrol.
Una vegada provat el correcte funcionament de la joguina, he procedit a obrir el sensor i a connectar directament a la placa Arduino els pins on els valors raw es transmeten a la base del joc. Per realitzar aquesta tasca he hagut d’obrir el sensor, soldar uns fils directament a la placa i realitzar un forat per on surten els fils.
Investigant les possibilitats de la llibreria Arduino Brain Library he descobert que es poden rebre molts valors, entre d’ells el de qualitat del senyal. Fent algunes proves he determinat el valor que indica una recepció bona i l’he fet servir per controlar el LED verd de la placa.
La part més dificil del procés, ja que requereix fer servir mètodes i funcions poc habituals, ha estat el control i la generació de sons amb la llibreria Mozzi. Les primeres vegades, fent servir els mètodes habituals com setup() i loop() el so presentava molts clics i distorsions cada vegada que es realitzava qualsevol activitat com enviar dades al port sèrie o llegir el valor d’un sensor. Investigant una mica, no ha estat difícil descobrir com Mozzi requereix estructurar el codi per optimitzar-lo i aconseguir bons resultats.
Els sons confeccionats amb la placa Arduino recorden als de un Theremin, amb una sinusoïdal modificada per un característic
vibrato.

Millores previstes en el prototip
Una de les tasques més difícils en la posta en funcionament del prototip ha estat donar sentit a les dades llegides pel sensor. No és fàcil entrar en els estats mentals que donen pas a les diferentes ones EEG i el renou de fons del sistema altera les lectures de forma aparentment aleatòria de forma constant.
Per tant, una de les millores previstes seria l’adquisició d’un sensor de més qualitat i fer-lo funcionar de forma conjunta amb altres sensors biomètrics com pressió sanguínea, resposta galvànica, velocitat dels bategs del cor, etc… Així, el component performatiu es veuria sensiblement millorat i augmentat.
També seria interessant incorporar un major nombre de paràmetres en la generació del so i controlar-los en temps real fent servir un controlador MIDI amb múltiples potenciómetres, interruptors i faders assignats a CC’s.
De cara a la pràctica final, estic considerant la possilibitat de millorar el prototip fent servir Arduino per controlar una Raspberry PI executant PURE DATA o una placa AXOLOTI. Això obriria moltes possibilitats respecte de la creació de senyals sonors de dos canals amb els que intentar també una visualització sonora mitjançant figures de Lissajous.

pac2_amengual_pere

Leave a Reply