UNIVERSITA’ DEGLI STUDI DI MODENA E REGGIO EMILIA FACOLTA’ DI INGEGNERIA Corso di laurea in Ingegneria Informatica Sistema per l’interazione tra il movimento oculare di un soggetto e un personal computer Relatore: Chiar.mo professor Claudio Canali Tesi di laurea di: Matteo Corradini Correlatori: Chiar.mo professor Sergio Fonda Ing. Giovanni Verzellesi Controrelatore: Chiar.mo professor Roberto Zanasi Anno accademico 1999/2000 INDICE RINGRAZIAMENTI...................................................................................................1 INTRODUZIONE........................................................................................................2 CAPITOLO 1 ELEMENTI DI FISIOLOGIA DELLA VISIONE 1.1 CENNI DI ANATOMIA E FISIOLOGIA OCULARE..........................................6 1.2 ELETTRO-OCULOGRAMMA............................................................................10 CAPITOLO 2 SOLUZIONI SINO AD ORA REALIZZATE A LIVELLO INTERNAZIONALE 2.1 CLASSIFICAZIONE DEI DISPOSITIVI...........................................................12 2.2 SISTEMI DI TIPO NON ELETTRICO...............................................................12 2.3 SISTEMI DI TIPO ELETTRICO.........................................................................13 2.4 DESCRIZIONE DEI DISPOSITIVI REALIZZATI............................................14 CAPITOLO 3 IL SISTEMA BASATO SU EOG 3.1 SCELTA DEL SEGNALE EOG..........................................................................17 3.2 DESCRIZIONE DEL SISTEMA REALIZZAT..................................................20 3.3 CARATTERISTICHE ELETTRICHE DEL SISTEMA......................................22 1 CAPITOLO 4 LE CARATTERISTICHE DELL’HARDWARE REALIZZATO 4.1 SEMPLIFICAZIONE DELLO SCHEMA ELETTRICO....................................24 4.2 CARATTERISTICHE COMPLESSIVE DEL CIRCUITO.................................25 4.3 STUDIO DELLA FUNZIONE DI TRASFERIMENTO DEL CIRCUITO.........29 CAPITOLO 5 CARATTERISTICHE DEL SOFTWARE SVILUPPATO 5.1 CARATTERISTICHE HARDWARE DELLA PORTA USB.............................32 5.2 SOFTWARE PER LA LETTURA DELLA PORTA USB-JOYSTICK..............34 5.3 INTERFACCIA GRAFICA DEL SOFTWARE..................................................58 CAPITOLO 6 RISULTATI DELLA SPERIMENTAZIONE 6.1 VALUTAZIONE DEI DATI REGISTRATI................................................ ..64 CAPITOLO 7 DISCUSSIONE 7.1 PROBLEMI APERTI....................................................................................69 BIBLIOGRAFIA................................................................................................72 APPENDICE A RETI NEURALI....................................................................................... ..........73 2 RINGRAZIAMENTI Desidero ringraziare in questa parte tutte le perone che hanno reso possibile la realizzazione di questa tesi e soprattutto di questo sistema. In particolare modo e’ mio desiderio ringraziare le seguenti persone: Il Sig. Brighenti della Coop Bilanciai, per i preziosi consigli e per l’aiuto datomi nella realizzazione dello schema elettrico del circuito; Il Sig. Fausto Vaccari del Dip. di Scienze Biomediche per i preziosi consigli in fase di realizzazione del circuito elettrico; Il Sig. Roberto Formentini del Dip. di Scienze dell’Ingegneria per avermi dato preziosi consigli sui componenti integrati del circuito; La Sig.ra Deanna Vecchi del Dip. di Scienze Biomediche per avermi dato la disponibilità del suo laboratorio e delle sue attrezzature. 3 Introduzione Il problema dell’integrazione dei disabili e dei portatori di handicap in generale oggi di grande attualità, anche se rispetto ad alcuni decenni fa’, sono stati compiuti notevoli passi avanti: si ricordi ad esempio negli anni ’60 la nascita delle “scuole speciali” per disabili, in cui di fatto queste persone erano relegate per buona parte della loro vita. Tra le funzioni che più spesso sono precluse a una persona disabile è senz’altro quella della comunicazione: chi non può parlare o utilizzare le mani per esprimersi ben difficilmente potrà scambiare le proprie idee con il mondo esterno. Il sistema sviluppato nell’ambito di questa tesi, permette di impartire comandi ad un calcolatore tramite lo sguardo, e offre la possibilità di estendere il suo uso anche a sistemi diversi da un calcolatore. La scelta dello sguardo come canale di comunicazione non è casuale: in passato e anche tuttora il sistema più usato per comunicare con i disabili è l’écran, un sistema che si basa sull’utilizzo di una lastra di plexiglas trasparente su cui sono disegnate le lettere dell’alfabeto. Tale lastra viene posta tra il disabile e l’interlocutore. Quest’ultimo deve capire su quale lettera si posa lo sguardo dell’altro. Con l’esperienza si raggiunge una buona velocità di composizione delle parole: sfruttando la rapidità dell’occhio si possono scambiare notevoli quantità di informazioni. Tale sistema ha molti limiti, fra cui il poter comunicare soltanto con interlocutori esperti ed “allenati” e l’impossibilità di parlare a più di una persona per volta. Il limite più evidente è comunque quello di richiedere la presenza costante di un’altra persona, precludendo di fatto la possibilità di produrre in modo indipendente documenti scritti. Per ovviare a questo limite si possono utilizzare i cosiddetti sistemi a scansione. Tali sistemi si basano sulla capacità del disabile di riuscire a coordinare almeno un arto del proprio corpo. Quasi sempre tale capacità è abbastanza limitata, richiede un certo tempo per il training e non permette una grande velocità di scambio di informazioni. I sistemi che utilizzano tale sistema sono basati sull’uso del calcolatore: il disabile sceglie la lettera che desidera scrivere e la conferma con un impulso sul sensore. Per scrivere una parola sono necessari diversi minuti, per scrivere una pagina occorre una giornata intera, non considerando gli errori di battitura. 4 A seguito di questi tentativi sono nati pochi anni fa’ negli Stati Uniti i primi sistemi basati sull’uso congiunto del calcolatore e dello sguardo come “fonte di decisione”. Ora possiamo suddividere tali sistemi in due categorie: sistemi ottici: i quali tipicamente utilizzano la riflessione infrarossa sistemi elettrici: che sfruttano la registrazione elettrooculografica EOG Per quanto riguarda i sistemi del primo tipo, questi hanno normalmente costi molto elevati (il più economico ha un prezzo di circa 5 milioni di lire) anche se presentano il grande vantaggio di essere “portabili”, essendo basati sull’utilizzo di un casco (fig i.1). Il prezzo è essenzialmente legato al costo elevato della componentistica optoelettronica, e come tale non può essere molto abbassato. I secondi si basano sull’utilizzo di un segnale elettrico proveniente dal corpo (fig.i.2), il segnale elettrooculografico (EOG); Un sistema di questo tipo e’ stato utilizzato per la prima volta in una scuola per disabili presso il Boston College. Ciò che manca e’ avere portabilità sufficiente a renderli sistemi commerciali a portata di tutti. A riguardo della portabilità si noti nella figura i.2 la presenza di cavi elettrici che provocano fastidio nell’utilizzatore e quindi ne rappresentano un limite. 5 Fig i.1 Sistema ION: tale sistema si basa su due piccole telecamere che “scrutano” lo spostamento degli occhi. Foto tratta da depliant ION Fig i.2 sistema EyeEagle messo a punto presso il Boston College. Cinque elettrodi posti attorno all’occhio “scrutano” la sua posizione. Foto tratta da sito internet: www.cs.bc.edu/~eagleeye/ Lo scopo di questa tesi è quello di sviluppare un sistema che si avvale dell’utilizzo di elettronica “convenzionale”, e quindi a basso costo, per registrare il segnale EOG associato al movimento oculare di una persona e utilizzarlo per pilotare le funzioni di un calcolatore, cercando di ottenere un sistema ad alta portabilità. Il segnale EOG è basato sull'esistenza di un potenziale elettrico tra la retina carica negativamente e la cornea carica positivamente: tale fenomeno consente di assimilare il globo oculare ad un dipolo elettrico. Tale dipolo ruota nello spazio dell'orbita seguendo esattamente la rotazione dell'occhio e quindi lo sguardo del soggetto. Per acquisire i movimenti oculari secondo la tecnica EOG possono utilizzarsi due coppie di elettrodi metallici a placchetta per registrare rispettivamente la componente orizzontale e quella verticale dell'effetto del dipolo. Per registrare la componente verticale due elettrodi vengono posizionati rispettivamente sotto la palpebra e sulla fronte al limite del sopracciglio; quella orizzontale è ricavata da due elettrodi appoggiati ai due canti esterni, destro e sinistro, dell’occhio. Da tali placchette si registra un potenziale proporzionale all'angolo di rotazione dell'occhio con una dinamica di ampiezza che va da –1mV a +1mV. 6 Ora collegando le placchette ad un amplificatore differenziale, con un adeguato guadagno (circa 7.000) ed apposito filtro a banda passante (0,16Hz 40Hz)si riesce ad avere un segnale variabile nel tempo che rileva la posizione esatta dell’occhio (figure i.3 e i.4) con una precisione di ¼ di grado sessagesimale. La precisione appena descritta non è del tutto sufficiente per le applicazioni di interesse: basti pensare che con tale precisione si è in grado, ad una distanza di 50cm, di distinguere su un monitor da 14’ ben 140 zone diverse. FIG. i.3. Rappresentazione schematica della precisione della rilevazione, in cui si può denotare la proiezione angolare della sensibilità del sistema su un monitor da 14’. movimenti occhio orizzontali gradi di spostamento ogni ° corrisponde a 12 uV La dinamica del segnale va da -0,23 mV a 0,16 mV considerando uno spostamento angolare da -19° a 13,5° 60 40 20 0 -20 -40 -60 tempo occhio orizz bersaglio occhio vert Fig. i.4 Diagramma di un segnale EOG di un occhio che sta seguendo un bersaglio che si sta spostando orizzontalmente su posizioni casuali. 7 CAPITOLO 1 ELEMENTI DI FISIOLOGIA DELLA VISIONE 1.1 CENNI DI ANATOMIA E FISIOLOGIA OCULARE Il globo dell’occhio consiste essenzialmente di tre rivestimenti che racchiudono il corpo vitreo, mezzo gelatinoso, rifrangente trasparente (fig. 1.1). Il più esterno, la tunica protettiva, è formata dalla sclera nella parte posteriore dell’occhio e dalla cornea in quella anteriore. Quest’ultima, la cornea, a differenza della sclera è completamente trasparente. La parte intermedia è formata dalla coroide, dal corpo ciliare e dall’iride. La parte più interna è la retina che contiene gli elementi nervosi essenziali responsabili della trasformazione della luce in attività elettrica codificata, ovvero i coni e i bastoncelli. L’apparato diottrico è formato dalla cornea, che occupa all'incirca un sesto della superficie dell’occhio e dal cristallino che è sorretto dalle zonule, attraverso le quali si collega al corpo ciliare per poter svolgere la sua funzione di messa a fuoco attraverso la variazione di curvatura delle sue superfici. Lo spazio interno dell’occhio è riempito da humor, denominato acqueo, nella parte anteriore tra la cornea e il cristallino e da una sostanza gelatinosa, il vitreo, nella parte centrale. Entrambi i fluidi sono molto trasparenti e consentono una buona propagazione della luce. L’iride si comporta come un diaframma che, chiudendosi e aprendosi, regola la quantità di luce che entra nell’occhio. L’immagine di un oggetto esterno si forma, attraverso l’apparato diottrico, sulla retina; l'asse visivo del nostro sguardo, che orientiamo attraverso i movimenti oculari, passa per la fovea, la regione retinica più specializzata e densamente popolata di coni. Fig. 1.1 . Sezione orizzontale del bulbo oculare. PP=Polo posteriore, AP=polo anteriore, VA=asse visuale. (Wolf F, Anatomy of the Eye and Orbit) 8 La densità di recettori sulla retina decresce in funzione della loro distanza dalla fovea; la percezione di immagini periferiche è pertanto "servita" da una risoluzione spaziale molto inferiore a quella centrale; per mezzo dei movimenti oculari si riesce a mantenere sempre sulla fovea la parte di immagine che interessa osservare dettagliatamente. I muscoli che muovono l’occhio sono sei: il mediale ed il laterale che determinano i movimenti obliqui, il superiore e l’inferiore che determinano i movimenti verticali, infine abbiamo il superiore e l’inferiore obliquo che, agendo da soli, determinano i movimenti di pura rotazione attorno all’asse antero-posteriore (fig. 1.2, 1.3). Fig. 1.2. Inserimento dei muscoli retti, il retto mediale è alla destra.(Duke-Elder, Text-Book of Ophthalmology) 9 Fig. 1.3 vista laterale dei muscoli si notino: 1 retto superiore; 3 retto mediale; 4 retto laterale; 5 obliquo superiore.(Duke-Elder, Text-Book of Ophthalmology) In definitiva si possono classificare i movimenti in tre tipi fondamentali: il movimento obliquo provocato dai muscoli mediali e laterali; il movimento verticale provocato dai muscoli superiore e inferiore; il movimento di rotazione dell’occhio dovuto ai muscoli superiori e inferiori obliqui. La funzione della rotazione dell’occhio è abbastanza fondamentale in quanto attraverso essa si riesce a mantenere sempre piana l’immagine che si viene a formare sulla retina. Esiste infatti un piano perpendicolare all’asse di simmetria della figura umana che permette di capire al cervello quando ciò che noi vediamo è inclinato rispetto all’orizzonte(fig. 1.4). Se infatti abbiamo una inclinazione del corpo l’occhio ruoterà in senso opposto fino a riportare l’immagine nuovamente orizzontale sul piano della retina. In questo caso la percezione dell’inclinazione è legata alle informazioni elaborate dal cervello riguardanti l’attivazione dei due muscoli obliqui e dalle informazioni provenienti dall’apparato vestibolare (principale responsabile dell’equilibrio). Fig. 1.4. Orizzonte retinale. L’immagine della freccia cade sul meridiano orizzontale. (Davson, The Physiology of the Eye) 10 Fig. 1.5. Asse di fissazione. (Davson, The Physiology of the Eye) Descrivendo l’azione dei muscoli, noi stiamo considerando che i cambiamenti di direzione nei quali l’occhio sta puntando sono dovuti all’orientazione dell’asse di fissazione, un asse che partendo dall’oggetto attraversa l’occhio nel suo centro di fissazione (fig.1.5). I movimenti dell’occhio si possono, con buona approssimazione, considerare di pura rotazione attorno ad un punto fisso chiamato centro di rotazione; tale punto si trova a 13,4 mm all’interno della superficie anteriore della cornea. L’azione dei due muscoli mediale e laterale provoca una pura rotazione attorno ad un asse verticale passante per il centro di rotazione dell’occhio. L’azione dei muscoli superiore ed inferiore è invece più complesso, infatti l’attacco di tali muscoli al bulbo oculare è inclinato di circa 23° rispetto all’asse verticale dell’occhio; questo provoca quindi una componente di rotazione ed una di spostamento orizzontale al semplice movimento verticale dell’occhio (fig.1.6). Il piano muscolare dei superiore e inferiore obliqui si può considerare verticale, ma è attaccato a circa 50° rispetto all’asse antero-posteriore. Tale inclinazione provoca nel movimento di pura rotazione una componente di movimento verticale ed una di movimento orizzontale (fig. 1.7). Fig. 1.6. Azione dei muscoli: superiore ed inferiore retti (occhio destro). Il piano muscolare interseca la sezione orizzontale dell’occhio in MM’. AA’ è l’asse di rotazione. mm’ è l’intersezione del piano mediale con il piano della carta. (Davson, The Physiology of the Eye) Fig. 1.7. Azione dei muscoli Obliqui (occhio destro). AA’ è l’asse della rotazione. (Davson, The Physiology of theEye) 11 In definitiva, quindi, ogni volta che agisce un singolo muscolo oculare si hanno dei movimenti "non voluti", dovuti a quanto detto sopra; in tabella sotto riportata possiamo vedere tali effetti indesiderati. Muscoli Azione principale Azione secondaria Retto Laterale Abduzione Nessuno Retto Mediale Adduzione Nessuno Retto Superiore Elevazione Rotazione antioraria e Adduzione Retto Inferiore Depressione Rotazione oraria e Adduzione Inferiore Obliquo Rotazione oraria Elevazione e Abduzione Superiore Obliquo Rotazione antioraria Depressione e Abduzione 12 1.2 ELETTRO-OCULOGRAMMA Quando un elettrodo è posto sulla cornea e un altro nel polo posteriore dell’occhio o sulla testa, si può rilevare un potenziale elettrico fisso di circa 1 mV e la cornea è il polo positivo. L’illuminazione dell’occhio provoca una alterazione di tale potenziale e viene chiamata elettroretinogramma (ERG). Poichè tale potenziale è simile a un dipolo orientato lungo l’asse antero-posteriore, se si pongono due elettrodi all’angolo destro e sinistro dell’occhio, nei due canti, il movimento dell’occhio provoca cambiamenti di potenziale tra gli elettrodi. Questo in definitiva è il principio dell’elettro-oculografia (EOG), un modo indiretto di misurare e registrare i movimenti oculari. Tale metodo è particolarmente utilizzato per misurare piccoli movimenti involontari che hanno luogo quando lo sguardo resta fisso a lungo in una determinata posizione. Due movimenti che hanno luogo durante il cambio di fissazione sono: le saccadi e i movimenti convergenti. Saccadi è il nome dato da Dodge a rapidi movimenti tra pause di fissazione che occorrono durante la lettura, ora invece applicato a tutti gli spostamenti coniugati dello sguardo da un punto di fissazione ad un altro. Le saccadi sono state studiate da Westheimer (1954), i soggetti studiati dovevano fissare una luce mentre questa improvvisamente appariva nella zona periferica della vista. E’ stato rilevato un tempo di reazione di circa 120-180 msec, dopo di che i due occhi si muovono simultaneamente. E’ stato rilevato un determinato overshoot, e tutte le operazioni sono entro circa 90 msec per una escursione di 20°. La massima velocità cresce con l’estensione del movimento, infatti per angoli di 30° arriva a 500°/sec e per angoli di 10° è di 300°/sec. L'accelerazione angolare raggiunge un valore massimo di circa 20.000 gradi/sec2. Durante la fissazione di un punto l’occhio in realtà compie dei balzi. Tali balzi sono di tre tipi: Movimenti irregolari ad alta frequenza per periodi fissazione di circa 20 sec; Saccadi che intervengono in tempi di alcuni minuti; Derive irregolari lente, che si verificano oltre i 60 minuti. 13 Nella figura sotto riportata (fig. 1.8) si può vedere un probabile movimento dell’occhio durante un periodo di fissazione intervallato di 30 sec. Fig. 1.8. Indicazione del probabile range di movimenti dell’occhio durante un periodi di fissazione. (After Nachmias, F. opt.Soc. Amer.) Se una luce improvvisamente appare nel campo visivo, e la sua frequenza di movimento è minore di circa 30°/sec, la risposta dell’occhio è molto efficiente. La saccade porta gli occhi sul bersaglio e questi seguono il movimento alla stessa velocità angolare di quest’ultimo. Eventuali inaccuratezze nell’inseguimento inducono saccadi correttive. 14 CAPITOLO 2 SOLUZIONI SIANO AD ORA REALIZZATE A LIVELLO INTERNAZIONALE 2.1 CLASSIFICAZIONE DEI DISPOSITIVI Molti tipi di sistemi sono stati sviluppati negli anni scorsi per permettere il controllo da parte dell’utente del PC attraverso lo sguardo. Tali sistemi si differenziano essenzialmente per la metodologia dell’estrazione dell’informazione sul movimento oculare, possiamo quindi catalogarli in: Siatemi Ottici Sistemi video Sistemi Elettrici Molteplici sistemi sono stati fino ad ora realizzati per interagire con il calcolatore, tali sistemi fanno uso delle più diverse tecnologie per ottenere il risultato che si voleva raggiungere, ma tutti questi sistemi si possono tuttavia raggruppare in due classi di dispositivi: I segnali di tipo elettrico (e quindi a contatto con il corpo) segnali di tipo non elettrico (e quindi non a contatto con il corpo) I più interessanti sono probabilmente i secondi sistemi, ovvero quelli che non hanno bisogno di un contatto fisico tra il corpo dell’utilizzatore e l’apparecchiatura, essi sfruttano soprattutto il movimento oculare. Tramite proprio il movimento oculare si può poi contrallare molteplici funzioni del calcolatore. Vediamo ora quali sono i principali metodi non a contato e quindi di tipo non elettrico. 2.2 SISTEMI DI TIPO NON ELETTRICO sistema video: tale sistema utilizza una telecamera puntata verso il soggetto e tramite un software di elaborazione dell’immagine e’ possibile percepire movimenti di parti del corpo come ad esempio gli occhi e quindi tramutarli in azioni per il computer. Sistema ad infrarossi, composto da un sistema di trasmissione ad infrarossi e da un sistema ricevente del fascio riflesso dall’occhio. Muovendo l’occhio cambia la quantita’ di luce incidente sui vari ricevitori e quindi di conseguenza si riesce ad associare ad ogni livello di riflessione una diversa posizione dello sguardo. 15 E’ ora interessante capire quali sono i pregi e gli svantaggi di queste tipologie di apparecchi, per prima cosa questi dispositivi hanno il grosso pregio di non dover essere messi a contatto con il corpo e quindi non hanno tutti i problemi tipici delle apparecchiature biomediche. I vantaggi si possono quindi riassumere nei seguenti: Eliminazione dei problemi di isolamento elettrico dell’apparecchiatura (non essendoci contatto elettrico non si richiede nessun particolare accorgimento). Elevata precisione, i sistemi ottici solitamente garantiscono una elevatissima precisione (a volte a scapito della facilità di utilizzo e soprattutto di applicazione). Possibilità di avere informazioni sulle posizioni oculari fisse. Gli svantaggi invece risultano essere i seguenti: Elevato costo dovuto alla tecnologia ottica oggi ancora molto costosa. Elevata circuiteria necessaria per estrarre l’informazione necessaria da una immagine. Grande ingombro e bassa spostabilità dovuti alle dimensioni dell’apparecchiatura e alla elevata stabilità che deve il supporto di tali dispositivi. 2.3 SISTEMI DI TIPO ELETTRICO Possimo ora analizzare l’altra categoria di apparecchiature, quelle che sono da mettere a contatto con il corpo e che quindi prelevano da quest’ultimo segnali elettrici di tipo fisiologico. Tali dispositivi si caratterizzano per il tipo di segnale fisiologico che sono in gradi di prelevare. elettroencefalogramma (EEG), ovvero un segnale dell’attività elettrica del cervello ottenuto attraverso l’applicazione di elettrodi sullo scalpo. Tramite l’elaborazione di questi tracciati elettrici si riesce a capire, in alcuni casi, quale e’ l’azione che il soggetto ha intenzione di compiere. Quest’ultima e’ legata alla decodifica del complesso insieme di segnali elettrici che il sistema centrale (il cervello ) impartisce ai suoi attuatori (i muscoli). Non sempre questa tecnica offre buoni risultati e quindi e’ tuttora poco diffusa. Potenziali corticali lenti SCP, ovvero la lettura della variazione del livello medio dell’attivita’ cerebrale dovuta alla volonta’ di un soggetto di portare tale valore verso valori positivi o negativi. Tale tecnica è condizionata da un periodo di circa 2 secondi e quindi la velocita’ massima di comunicazione di un bit risulta essere di 0,5 Hz. 16 Skin Response detto anche risposta simpatica della pelle, tale sistema sfrutta l’estrazione del segnale di volonta’ di movimento che il cervello impartisce ai muscoli e che si riflette sulla cute. Tale sistema essendo basato sull’attività del sistema nervoso autonomo, ha il grosso svantaggio di essere molto lento, infatti sono necessari quasi due secondi perche’ l’informazione di movimento partita dal cervello arrivi fino alla cute ad esempio di un dito (posto classico di estrazione del segnale ) . elettrooculogramma (EOG), ovvero l’estrazione dell’informazione sul movimento oculare dalla cute peri-orbitale. Tale sistema, che noi abbiamo deciso di utilizzare per raggiungere il nostro scopo, verra’ in seguito esaminato in dettaglio; esso utilizza 4 elettrodi posti attorno all’occhio e 1 di riferimento di massa; che producono un seganle elettrico proporzionale a quello generato dalla differenza di potenziale corneo-retinica espressa da ogni globo oculare. elettromiogramma (EMG), ovvero l’estrazione del segnale elettrico proveniente dall’attivita’ neuro-muscolare. Tale tecnica utilizza elettrodi cutanei che registrano l’attivazione di un muscolo. E’ chiaro che per lo scopo da noi cercato tale metodo e’ assolutamente inappropiato, essendo la capacita’ motoria del muscolo inizialmente inibita. (Si puo’ usare soltanto per zone muscolari controllate volontariamente). elettrocardiogramma (ECG), e’ possibile tramite l’informazione della frequenza cardiaca comandare dispositivi. Per regolare tale frequenza e’ infatti sufficiente variare la profondita’ del respiro, ma tale sistema come si può ben capire ha la possibilita’ di poter usufruire di un campo molto limitato di “scelte”. Tutti questi diversi tipi di dispositivi sono stati studiati ed utilizzati in passato ed hanno portato alla realizzazione di innumerevoli apparecchiature, alcune delle quali sono sotto riportate in forma di brevetti con una breve descrizione . 2.4 DESCRIZIONE DEI DISPOSITIVI REALIZZATI Il brevetto U.S. Pat. No. 4,109,145 presentato da Graf il 22 agosto 1978 rivela un apparato per la determinazione dell’orientazione dell’occhio chiamato “line of sight”. Usando un oculometro o altri strumenti per determinare la posizione oculare che se mantenuta per un certo periodo produce un output di controllo per altre apparecchiature. 17 Il brevetto U.S. Pat No. 3,986,030 presentato da Teltscher il 12 ottobre 1976 rivela un apparato che comanda una tastiera attraverso il movimento dell’occhio, pensato per paraplegici o altre persone con diverse incapacità. L’apparato include un emettitore di luce da inviare nell’occhio dell’operatore ed un certo numero di rilevatori della luce riflessa dall’occhio. I rilevatori sono collegati ad uno strumento di azionamento tastiera controllato dal movimento dell’occhio. Il brevetto U.S.Pat. No. 4,081,623 presentato da Vogeley il 28 Marzo 1978 discute l’uso di una sorgente luminosa, un sensore di radiazioni, un separatore di comandi ed una unità display dove l’operatore ammicca I suoi occhi con particolari sequenze. Gli ammiccamenti sono codificati e usati per comporre numeri telefonici o controllare parti di macchinari. Il brevetto U.S. Pat. No. 3,507,988 presentato da Holmes il 21 Aprile 1970 discute un sistema televisivo a banda stretta che ha una caratteristica di risoluzione simile a quella dell’occhio umano e che è in grado di percepire una porzione del campo trasmesso, la locazione del quale è variabile a seconda della linea dello sguardo dell’osservatore. La posizione dello sguardo è determinata utilizzando la luce riflessa. Il brevetto U.S. Pat. No. 3,724,932 presentato da Cornsweet il 3 Aprile 1973 discute un apparato dove l’occhio è inondato da luce in modo tale che si formino più immagini di Purkinje sulla superficie riflettente dell’occhio. Due delle immagini di Purkinje sono monitorate da sistema di imaging in un disco rotante che ha diverse fessure ortogonali attraverso le quali le immagini di Purkinje sono successivamente processate da fotorivelatori. L’orientamento degli assi ottici dell’occhio è determinato monitorando la separazione delle immagini di Purkinje. Il brevetto U.S. Pat. No. 4,866,229 presentato da Scharfenberg il 12 settembre 1989 discute un apparato per proiettare informazioni ottiche da un caschetto con il quale l’indossatore può vedere le immagini da cui sono separate o sovrapposte allo sfondo visivo. Il brevetto WO Pat. No. 0015100 pubblicato da Davis il 23 marzo 2000 presenta un sistema basato sull’osservazione dell’occhio da parte di una telecamera a CCD e attraverso l’emissione di un punto luminoso e la sua riflessione da parte dell’apice della cornea si riesce a rilevare con la telecamera CCD la variazione del punto di fissazione. 18 Il brevetto U.S. Pat. No. 4,651,145 presentato da Sutter il 17 Marzo 1987 discute un sistema di comunicazione oculoencefalografico nel quale gli stimoli visivi con un segnale in codice univoco è presentato all’operatore e il segnale elettro-encefalografico (EEG) dell’operatore è monitorato. Il codice può essere identificato dal segnale EEG dell’operatore e quindi un carattere in un display può essere selezionato semplicemente guardandolo. Il brevetto U.S. Pat. No. 5,491,492 pubblicato da Knapp il 13 febbraio 1996 presenta un sistema che utilizza sensori posizionati nella testa dell’utente per prelevare il segnale elettrooculografico (EOG) che rappresenta lo spostamento orizzontale e verticale dell’occhio e la convergenza o divergenza di quest’ultimo.Il segnale EOG viene amplificato e processato per estrarre caratteristiche utilizzabili per selezionare comandi esterni, come il posizionamento di un cursore nello schermo di un computer oppure determinare la posizione di ogni singolo occhio in relazione ad un punto di fissazione per misure di strabismo. Un DSP (digital signal processor) garantisce flessibilità al sistema permettendo di poter separare diversi tipi di comandi per dispositivi esterni. Il brevetto U.S. Pat. No. 5,726,916 pubblicato da Smyth il 3 ottobre 1998 presenta un sistema per determinare il punto di fissazione e la sua durata utilizzando misure elettrooculografiche (EOG) e i dati relativi allo spostamento della testa. Il segnale EOG viene amplificato, filtrato e quindi digitalizzato, il sistema di sensori è montato su un supporto in neoprene. L’invenzione incorpora numerosi vantaggi nell’acquisizione del segnale EOG quali l’automatico cambiamento del guadagno in funzione della variazione di potenziale corneoretinico dovuta a variazioni luminose ambientali, e la deriva nell’offset degli elettrodi. 19 CAPITOLO 3 SISTEMA BASATO SUL SEGNALE EOG 3.1 SCELTA DEL SEGNALE EOG Le ragioni per cui abbiamo scelto di utilizzare il segnale EOG per raggiungere il nostro scopo, cioè comandare il puntatore mouse attraverso lo sguardo, sono le seguenti: facilità di estrazione del segnale (sono infatti sufficienti normali elettrodi e acqua gel, per avere il passaggio ionico ); qualità del segnale elettrico (il segnale EOG è infatti molto alto variando tra –1 mV a +1mV ed è immune dai disturbi prodotti dai cavi non avendo nessuna origine capacitiva); ridottissimo costo dell’apparecchiatura necessaria per l’estrazione del segnale. Passiamo ora a descrivere meglio il segnale EOG per capire innanzitutto da dove esso prenda origine. L’occhio si comporta come un dipolo elettrico: infatti esiste una differenza di potenziale elettrico tra la retina, che si trova nella parte posteriore dell’occhio, e la cornea, che si trova nella parte anteriore. Il campo elettrico prodotto da tale dipolo viene raccolto dagli elettrodi posti nelle vicinanze dell’orbita dell’occhio, e tale tensione, essendo proporzionale alla rotazione angolare dell’occhio, consente di registrare un segnale, tra i due elettrodi, proporzionale allo spostamento dell’occhio. Ovviamente, essendo il segnale di tipo differenziale, sono necessari 4 elettrodi, disposti su due assi ortogonali per registrare lo spostamento XY dell’occhio, mentre un quinto elettrodo funge da riferimento di massa comune, vedi figura 3.1. A causa della sua origine, il segnale EOG permette anche la registrazione in continua del segnale e quindi è possibile tramutare la posizione dell’occhio in una posizione fissa del puntatore mouse nello schermo. E’ peraltro molto complicato realizzare tale tipo di registrazione: infatti, per avere una registrazione in continua si dovrebbe continuamente variare l’offset del segnale, essendo il segnale biologico un segnale con una componente continua variabile nel tempo in maniera aleatoria. 20 E’ per questa ragione che spesso ci si accontenta di effettuare registrazioni in alternata eliminando la componente continua del segnale e riservandosi di ricostruirla successivamente. Questo si può fare facendo una analisi a posteriori dei movimenti effettuati e andando a escludere tutti i “finti movimenti” dovuti alla deriva elettrica del segnale determinata dalla frequenza di taglio finita del filtro passa alto. Segnale orizzontale X 2 SCHERMO VIDEO 1 3 1 2 tempo OCCHIO Segnale verticale Y 3 1 2 3 L’aumento della tensione nel segnale orizzontale provoca uno spostamento verso destra del punto sullo schermo ( spostamento dalla posizione 1 alla posizione 2) La diminuzione della tensione nel segnale orizzontale provoca uno spostamento verso sinistra del punto sullo schermo Simultaneamente una diminuzione di tensione nel seganle verticale provoca uno spostamento verso il basso dello stesso punto.( spostamento dalla posizione 2 alla posizione 3) Figura 3.1. Schematizzazione della registrazione del segnale EOG. Figura 3.2. Tracciato di una registrazione del segnale EOG 21 Vediamo in figura 3.2 un classico tracciato EOG, in cui possiamo evidenziare aspetti caratteristici di tale segnale. Il compito assegnato all’utilizzatore del sistema durante la registrazione dei movimenti oculari era quello di seguire lo spostamento di un led luminoso in una barra orizzontale davanti al soggetto; la traccia blu rappresenta il movimento orizzontale dell’occhio, la traccia gialla quello verticale e la traccia viola rappresenta gli istanti di inizio dello spostamento del LED a sinistra (traccia verso il basso) o a destra (traccia verso l’alto), con ampiezze di spostamento rappresentate dal valore dei picchi della traccia viola. Come possiamo vedere dal grafico, il segnale ha una ottima dinamica e i segnali di altra origine quali ad esempio i battiti di cilia (blink) sono facilmente riconoscibili ed eliminabili. Il segnale di movimento dell’occhio, come possiamo vedere dal particolare, ha una deriva provocata dalla registrazione effettuata in alternata ovvero applicando un filtraggio della componente continua (filtro passa alto con frequenza di taglio a 0,16 Hz). Questo, come detto prima, è reso necessario solo nell’esigenza di evitare l’effetto delle continue fluttuazioni della tensione registrata dagli elettrodi e dovuta al continuo cambiamento di potenziale della cute. 22 3.2 DESCRIZIONE DEL SISTEMA REALIZZATO Il sistema si basa sull’estrapolazione del segnale elettro-oculografico (EOG) attraverso cinque elettrodi posti nei canti esterni dei due occhi, nella zona periorbitale superiore ed inferiore di uno dei due occhi e il quinto elettrodo viene utilizzato come riferimento e può essere posto in fronte o nel lobo dell’orecchio. Il sistema quindi dopo aver amplificato e filtrato il segnale utilizza un nuovo sistema per digitalizzare il segnale analogico, per l’appunto la porta USB configurata come ingresso JOYSTICK. L’innovazione di tale sistema risiede proprio nell’utilizzo di questo tipo particolare di porta di ingresso al calcolatore, in quanto attraverso l’utilizzo di tale porta si riesce ad avere un apparato finale di costo assai ridotto ed una discreta precisione nella conversione del segnale, garantita dalla rapida espansione e dallo sviluppo di microcontrollori con protocollo USB. Il sistema quindi rende possibile a chiunque di poter utilizzare il segnale EOG, e quindi l’informazione relativa al movimento oculare. Questo si traduce nella possibilità per chiunque di poter sviluppare software facendo uso della semplice lettura della porta JOYSTICK. Il vantaggio dell’utilizzo della porta di comunicazione USB per interfacciarsi al calcolatore è quello di avere una interfaccia che viene montata come standard su tutti i nuovi calcolatori e di conseguenza si avrà la possibilità futura di un notevole sviluppo di tale intefaccia. Ecco quindi in rassegna I vantaggi e le innovazioni di questo sistema: L’introduzione della porta di comunicazione USB rende particolarmente agevole l’accoppiamento di un segnale analogico al convertitore A/D già in dotazione hardware che gestisce il joystick. Piena compatibilità con i software già esistenti e quelli futuri. Costi abbattuti per uso di una soluzione standard duratura. Il nostro sistema e’ formato da un sistema di supporto per gli elettrodi, una sorta di mascherina (che possiamo vedere in foto 3.1), un amplificatore per strumentazione tipo INA111, INA155, seguito da uno stadio di isolamento ottico quale ad esmpio l’ISO122, un filtro passa alto che toglie l’accoppiamento in continua, in quanto la registrazione del movimento oculare viene fatta in alternata, un filtro NOTCH a capacita’ commutata (tipo 23 LMF90) e per finire uno stadio di filtraggio del II ordine passa basso unito al secondo stadio di amplificazione.(foto 3.2) A questo punto il segnale, ancora bipolare, viene trasformato in un segnale unipolare 0-5 V per poter essere acquisito dal microchip che si occupa della decodifica A/D e della conversione nel protocollo USB.(foto 3.3) Foto 3.1: possiamo vedere il sistema adottato per fissare gli elettrodi stabilmente attorno all’occhio. Elettrodo di riferimento Optoisolatore ISO122 Filtro NOTCH Foto 3.2: possiamo vedere qui il circuito realizzato come prototipo. Amplificatore per strumentazione ad ingressi J-FET INA 111 Stadio finale di amplificazione Foto 3.3: Circuito che si occupa della codifica in protocollo USBJOYSTICK, si possono notare i due ingressi (X,Y) l’uscita con connettore USB e l’alimentazione esterna tramite batteria. 24 3.3 SPECIFICHE ELETTRICHE DEL SISTEMA Le specifiche elettriche del sistema sono quindi le seguenti: frequenza di taglio del filtro passa alto = 0,1 Hz frequenza di taglio del filtro basso = 10 Hz filtro elimina banda tipo NOTCH del IV ordine con banda centrata su 50 Hz Una schematizzazione del dispositivo si può vedere in figura 3.3. Il sistema non è dedicato a misure precise di movimenti oculari. Per posizionare lo sguardo su una interfaccia grafica su monitor è sufficiente una velocità di spostamento dell’occhio compatibile con una banda passante del segnale estesa tra 0 e 10 Hz. Lo standard USB soddisfa le specifiche imposte dalle condizioni HID (Human Interface Device) e pertanto esso costituisce un riferimento sicuro, relativamente alle prestazioni richieste per un interfaccia uomo-calcolatore. Pertanto il segnale EOG, filtrato tra 0,1 e 10 Hz può sfruttare le prestazioni di dispositivi di conversione “porta joystick-USB” che assicurano una dinamica e una frequenza di campionamento compatibile con le esigenze del sistema. Il costo di questi dispositivi, anche per le loro prestazioni non molto spinte, è molto inferiore a quello di tradizionali sistemi di acquisizione e conversine A/D normalmente usati nelle invenzioni attualmente brevettate. figura 3.3 Schema a blocchi dell’apparecchiatura. Ing. X1 Ing. X2 Amplificatore + optoisolatore con guadagno di 20 Disaccoppiatore dalla continua (filtro P.A. Con ft. 0,1 Hz) Filtro NOTCH a 50 Hz Filtro passa basso del secondo ordine con ft. 10 Hz Amplificatore finale di 350 Shifter Microcontrollore con protocollo di uscita USB Ing. y1 Ing. y2 Amplificatore optoisolatore con guadagno di 20 Disaccoppiatore dalla continua (filtro P.A. Con ft. 0,16 Hz) Filtro NOTCH a 50 Hz Filtro passa basso del secondo ordine con ft. 10 Hz Amplificatore finale di 700 USB port Shifter primo stadio di stadio di filtraggio del secondo stadio di amplificazione segnale utile amplificazione ed interfacciamento con il calcolatore adattamento alle caratteristiche del microcontrollore 25 Il circuito completo risulta quindi essere quello mostrato in figura 3.4 In tale circuito si puo’ notare la presenza di componenti abbastanza usuali quali il TL072CN un comune amplificatore operazionale a basso rumore e con alimentazione duale, e componenti specifici del settore biomedico quali l’INA111, un amplificatore ad ingressi JFET e l’optoisolatore ISO122 necessario per avere un isolamento degli elettrodi da applicare sulla cute. Il filtro a capacita’ commutata LMF90 infine, realizza un NOTCH del IV ordine per la 50Hz e garantisce quindi l’eliminazione delle componenti indesiderate del segnale biologico. +12 V -5 V 2F 8.2 K 0.1F + 12 3 + 1 Vin 1 11 8 Vin 2 4 8 2 +12 6 7 ISO 122 16 82 - 9 15 5 - 2 2 1 7 INA 111 2 K 13 10 TL072CN 1F LMF 90 12 9 8 10 1.6M - 12 8 14 5 + 7 4 - 12 5 7 1 3 4 +5 V 0.1F +5 V 3.579545MHz -12 V Figura 3.4 Schema elettrico completo. 26 CAPITOLO 4 LE CARATTERISTICHE DELL’HARDWARE REALIZZATO 4.1 SEMPLIFICAZIONI DELLO SCHEMA ELETTRICO Una semplificazione del circuito utilizzato risulta essere quella riportata in Fig. 4.1, in tale schema infatti sono stati eliminati due componenti, l’ISO122 che si occup a solamente di realizzare un isolamento tra i circuiti che sono a contatto con la cute e il restante circuito. Il secondo componente eliminato e’ il filtro a capacita’ commutate che, essendo utilizzato come elimina banda del IV ordine, toglie la componente alla frequenza di rete a 50Hz che il restante circuito non riuscirebbe ad eliminare. Il circuito di ingresso (fig. 4.1) si compone di due circuiti integrati di tipo operazionale. Il primo con FET di ingresso, caratterizzati da una elevata impedenza di ingresso che si accoppia bene con quella del segnale biologico provenente dalla cute e da buona velocità, bassa tensione di offset, e una reiezione di modo comune almeno superiore a 100dB. I tipici utilizzi di questo integrato sono proprio per strumentazione medica e per acquisizione dati, essendo la sua configurazione circuitale quella tipica dell’amplificatore per strumentazione (fig. 4.2) Il secondo operazionale si occupa di effettuare l’ultima amplificazione con guadagno 100. Tale operazionale e’ collegato nella tipica configurazione da amplificatori in frequenza con costante di tempo progettata in modo da ottenere una banda passante di 0,1 – 10 Hz. L’amplificazione totale complessiva a centro banda risulta essere di circa 2.500 (con la tolleranza dovuta ai componenti discreti). 27 4.2 CARATTERISTICHE COMPLESSIVE DEL CIRCUITO Le caratteristiche complessive del circuito sono quindi le seguenti: Impedenza differenziale di 10 12 Tensione di offset 500V Reiezione di modo comune 106 dB Deriva della tensione di offset 5V/°C Consumo di corrente complessivo massimo 16mA Tensione di alimentazione 12 Volt (con coppia di batterie MN21) 8,2 V con batterie di tipo ricaricabile (NiCd ) Capacità della batteria MN21 38mA/h , batteria NiCd: 8,2 V100 mA/h Guadagno a centro banda 2.500 Frequenza di taglio inferiore 0,1 Hz Frequenza di taglio superiore 10Hz Tempo di assestamento per ottenere una riduzione della componente a 50 Hz circa 5min. Tempo di assestamento per ottenere una riduzione della componente a 50 Hz (con buona pulizia della cute) circa 2 min. Dinamica del segnale differenziale in ingresso 1,5 mV Dinamica del segnale di uscita (Vu) 3,9 V Dimensioni fisiche dell’apparecchiatura: 160x70x55 mm 2F 8.2 K + 12 82 +12 - 3 + 1 ELETT. 1 6 7 8 ELETT. 2 5 5 - 2 LF 359 1F 6 INA 111 2 K 4 8 + 7 Vu Fig. 4.1 Schema semplificato del sistema di acquisizione 4 - 12 1640 k - 12 28 Fig. 4.2 Amplificatore INA 111 AP. La resistenza Rg regola il guadagno di questo stadio. L’amplificazione del primo stadio è regolata a 26 in modo da effettuare un primo guadagno non troppo alto. In questo modo l’uscita dell’amplificatore non satura a causa della componente continua differenziale presente sulla cute pari a circa 300mV. Tale componente viene filtrata dal filtro passa alto all’uscita del primo stadio, il valore della frequenza di taglio è appositamente regolato su un valore molto basso (0,1Hz) in modo tale da non togliere troppo segnale ma al contempo eliminare quella componente continua che amplificata dal secondo stadio lo manderebbe inevitabilmente in saturazione. Ricordiamo infatti che il guadagno di tale stadio è di circa 100 e quindi un segnale di appena 100mV produrrebbe la saturazione dell’uscita dell’operazionale. La dinamica del segnale in ingresso al primo stadio, il segnale EOG, varia da +1,5mV a –1,5mV (in casi estremi, cioè di un dipolo molto forte). Tale segnale amplificato di 26 esce dal primo stadio con una dinamica di 39mV (e quindi abbastanza lontano dalla zona di saturazione). Il secondo filtro, il passa basso, ha una frequenza di taglio di 20 Hz in modo tale da attenuare fortemente la componente a 50Hz. Si ricorda infatti che il corpo umano si può 29 assimilare ad una grande antenna sulla quale vengono indotti tutti i campi elettromagnetici presenti in un ambiente e quindi anche il disturbo di rete. Il segnale si presenta abbastanza esente da disturbi dopo un tempo che varia dai 2 min. ai 10 min. a seconda della pulizia della cute che si è effettuata prima dell’applicazione degli elettrodi. Infatti se la cute non è stata sufficientemente sgrassata, l’acqua gel impiega più tempo per formare la cella elettrolitica (pelle, acqua gel, elettrodo) necessaria al corretto funzionamento del contatto elettrodo-cute. Il gel, infatti, con il passare del tempo aumenta la superficie di contatto tra la pelle e l’elettrodo e quindi migliora il passaggio di corrente e quindi dei segnali biologici. Questo si traduce nella eliminazione, grazie al terzo elettrodo che funge da riferimento comune, della tensione indotta di rete (figura 4.3). Fig. 4.3 In questa figura è possibile vedere la cella elettrolitica e la sua rappresentazione equivalente elettrica. L’effetto di miglioramento del contatto elettrico è possibile valutarlo attraverso il grafico di fig. 4.4, nel quale si possono vedere gli andamenti dell’impedenza in diversi mesi dell’anno e in diverse condizioni. 30 Fig. 4.4 Andamento dell’impedenza in diversi mesi dell’anno, A B C nel mese di Marzo, A’ B’ C’ nel mese di Maggio e A’’ B’’ C’’ nel mese di Agosto. Tutto il circuito infine deve essere schermato per limitare l’effetto delle interferenze elettromagnetiche. 31 4.3 STUDIO DELLA FUNZIONE DI TRASFERIMENTO DEL CIRCUITO Analizziamo ora in dettaglio i filtri per capire i calcoli che hanno portato alla definizione dei valori riportati in figura 4.1. C4 R4 R3 - V- Vu LF 359 C1 Vi + V+ R2 Semplificando Z4 Z3 - VLF 359 Vi Vu + V+ Z1 Z2 A questo punto si possono scrivere le relazioni ingresso uscita dell’amplificatore nell’ipotesi di polarizzazione nel punto di riposo a grande guadagno. V Vi Z2 Z1 Z 2 V Vu V Z3 Z4 V-=V+ 32 Risolvendo il sistema si ottiene la seguente espressione per la funzione di trasferimento: Vu Z 4 Z 2 1 Vi Z 3 Z1 Z 2 Vu R sC R R3 sR3 R4 C 4 2 1 4 Vi R3 1 sR2 C1 1 sR4 C 4 Come si può vedere sono presenti due poli e due zeri. Il primo zero nell’origine genera una rampa con pendenza 20dB, il primo polo riporta il diagramma della risposta d’ampiezza in corrispondenza della frequenza F 01=0,1 Hz. In seguito agisce il secondo polo che genera una rampa con pendenza –20dB e che determina la frequenza di taglio superiore del filtro. Il guadagno a centro banda e’ dato da: Vu R4 1 Vi R3 33 dB s (1+s3) Fp1=0,1Hz Fp2=10Hz Fz2 =1kHz (1+s1) (1+s2) Ricordiamo che 1 = R2C1, 2 = R4C4, 3 = R4R3C4/(R3+R4) 34 CAPITOLO 5 CARATTERISTICHE DEL SOFTWARE SVILUPPATO 5.1 Caratteristiche Hardware della porta USB Per leggere la porta joystick e’ necessario per prima cosa capire come questa porta della scheda audio, solitamente fornita assieme al calcolatore, funzioni. Innanzitutto la porta joystick non e’ un convertitore A/D convenzionale, si basa infatti sul principio di proporzionalità esistente tra il tempo di scarica di un circuito RC e uno dei suoi componenti, appunto la resistenza. Guardando il circuito elettrico di fig 5.1 possiamo meglio capire come funziona tale conversione, possiamo infatti notare come il circuito RC all’ingresso (1) del quadruplo monostabile Ne 558 sia formato da tra soli componenti, due dei quali fissi, in quanto interni alla scheda audio e quindi facenti parte della porta joystick, mentre il terzo componente, ovvero il potenziometro P1 risulta invece essere di valore variabile. Quindi il funzionamento si può cosi’ riassumere, il valore della resistenza esterna , e quindi incognita, determina un tempo di scarica del circuito RC che e’ proporzionale al valore della resistenza incognita. Tale tempo viene letto dal monostabile che azzera il bit b0 o b1 di uscita, corrispondente al canale di ingresso I1 oppure I2. Per fare ciò dal punto di vista del software e’ quindi necessario iniziare un ciclo in cui si eseguono le seguenti operazioni: 1. si disabilitano le interruzioni 2. si azzera il monostabile (attraverso la linea di write) 3. si fa partire un contatore, il cui valore finale rappresenta il tempo trascorso 4. si incrementa il contatore in un ciclo che ha come condizione di uscita la verifica della presenza di un dato sul relativo bit bel Byte della porta. Il valore del contatore, grazie alla proporzionalità esistente tra valore resistivo e tempo trascorso nella scarica RC, ci indica quindi in modo univoco il valore della resistenza esterna che stiamo misurando. 35 E’ quindi evidente che la cosiddetta frequenza di campionamento qui assume un significato differente, essa dipende in ogni caso nel suo valore minimo dal massimo tempo di scarica RC che si può misurare e per quello massimo dalla velocità del calcolatore, risultato che per altro abbiamo potuto verificare provando il software su due PC con velocità diverse. Nei nostri esperimenti abbiamo verificato che la frequenza di campionamento su un pentium II 233 MHz si avvicina ai 25Hz (valore che ci permette di filtrare a 10 Hz il segnale di ingresso senza violare le condizioni di non distorsione di Shannon), provando invece lo stesso software su un pentium II 400 MHz tale frequenza si raddoppia. 5V buffer Data bus b0 b1 b2 I1 2.2 K Ne 558 quadruplo monostabile I2 Potenziometro asse y 2.2 K Potenziometro asse x b3 Read 10 nF 10 nF Write figura 5.1. schema di funzionamento della porta joystick. Per testare il funzionamento del software abbiamo utilizzato un circuito di prova che sostituisce il potenziometro con la possibilità di inviare segnali in tensione alla porta joystick, il circuito raffigurato in figura 5.2 e’ un semplice convertitore tensione-corrente con valori di corrente di uscita massimi e minimi che non danneggino l’ingresso joystick. Ci dilunghiamo nella spiegazione di questo circuito in quanto questo e’ stato il primo tentativo prima di utilizzare la porta USB. Utilizzando noi la porta USB configurata come porta joystick non abbiamo dovuto cambiare nulla all’interno del software per leggere il segnale. In questo secondo caso infatti e’ direttamente il sistema operativo che si occupa di sostituire nel buffer della porta, che ha indirizzi fisico 0x201, il bit corrispondente all’avvenuto azzeramento del monostabile. 36 Vcc C1 R7 R5 R3 6 _ 3 Vi + 4 LM324 R1 R4 LM324 7 Q2 + 1 Q1 5 _ 12 2 R8 R2 R6 CORRENTE DI USCITA AD UNO DEGLI INGRESSI DELLA PORTA JOYSTICK Figura 5.2. circuito per accoppiare un segnale esterno in tensione (Vi) all’ingresso in corrente della porta JOYSTICK. 5.2 Software per la lettura della porta USB-joystick Il software e’ stato sviluppato su piattaforma Labwindows CVI e quindi abbiamo potuto utilizzare tutte le classi di oggetti tipici di questo ambiente di programmazione basato sul C ANSI e compatibile con compilatori C++ , quali ad esempio pannello grafico. 37 Software per la lettura del segnale EOG #include <rs232.h> #include "eog.h" #include <userint.h> #include <ansi_c.h> #include <utility.h> #include <lowlvlio.h> #include <string.h> /************************************************************ *****/ /*** MACROS & Typedefs: ***/ /************************************************************ *****/ #define JPORT 0x201 #define CMAX 9999 /************************************************************ *****/ /*** Function Prototypes ***/ /************************************************************ *****/ void joystick(int *, char *); void PlotChannels(void); /************************************************************ *****/ /*** Variables: ***/ 38 /************************************************************ *****/ int comport,RS232Error,pannelloprincipale,pannelloconfig, guadagno,guadagno_x=1,guadagno_y=1,f=0,offsetx1=0,offsety1=0; int max_x=50,max_y=50,min_x=200,min_y=200; char read_data[2000],devicename[2],tbox_read_data[2000]; float amplix1=1, ampliy1=1,x,y,x_old,y_old; int intervallo_x,intervallo_y,rif_max=250,rif_min=0; int alto=0,destra=0,conta=0,massimo_raggiunto_x, massimo_raggiunto_y,flagx,flagy; double x_tarata1,y_tarata1; int latenzanew=40,datix[100],datiy[100],k,taraCentro, x_tarata,y_tarata; int bufferx,buffery; int k,x_tarata_media,y_tarata_media,maxmedia=5,contmedia=0; int bersaglio_x,bersaglio_y,nuova_x,nuova_y; unsigned int t_camp[2]; /************************************************************ *****/ /***/Functions ***/ /************************************************************ *****/ int main (int argc, char *argv[]) { int i; if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */ return -1; /* out of memory */ 39 pannelloprincipale = LoadPanel (0, "eog.uir", principale); DisplayPanel(pannelloprincipale); RunUserInterface(); return 0; } void joystick(int v[4], char b[4]) { int i, j; int mask = 15; DisableInterrupts(); /* in cvi DisableInterrupts */ outp(JPORT, 0); /* in cvi outp */ for (i=1; mask && i<CMAX; i++) { j = inp(JPORT) ^ mask; /* in cvi inp */ if (j & 1) { v[0] = i; mask ^= 1; } if (j & 2) { v[1] = i; mask ^= 2; } if (j & 4) { v[2] = i; mask ^= 4; } if (j & 8) { v[3] = i; mask ^= 8; } } EnableInterrupts(); /* in cvi EnableInterrupts */ j = inp(JPORT); b[0] = !(j & 0x10); b[1] = !(j & 0x20); b[2] = !(j & 0x40); b[3] = !(j & 0x80); } 40 /************************************************************ *****/ int CVICALLBACK TimerCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { if (event == EVENT_TIMER_TICK ) { int plottingOff; GetCtrlVal(pannelloprincipale, principale_onoff, &plottingOff); if (plottingOff) PlotChannels(); return 0; } /************************************************************ *****/ /* this function does all the updating of the "scope" display */ void PlotChannels(void) { int v[4]; char b[4]; int j,i,read_cnt=16; int plot_h_2,contadati,bytes_read; 41 f=f+1; /* start with zeros, indicating nothing there */ memset(v, 0, sizeof(v)); /* includere string.h*/ joystick(v, b); if(v[0]>max_x & v[0]<rif_max) max_x=v[0]; if(v[0]<min_x & v[0]>rif_min) min_x=v[0]; if(v[1]>max_y & v[1]<rif_max) max_y=v[1]; if(v[1]<min_y & v[1]>rif_min) min_y=v[1]; x_old=x; y_old=y; x=(v[0]-(max_x-(max_x-min_x)/2)+offsetx1); y=(v[1]-(max_y-(max_y-min_y)/2)+offsety1); if ((x-x_old)<intervallo_x & (x_old-x)<intervallo_x) x=x_old; if ((y-y_old)<intervallo_y & (y_old-y)<intervallo_y) y=y_old; DeleteGraphPlot (pannelloprincipale, principale_punto, -1, 0); if ((flagx==1) & (flagy==1)) { x=v[0]-x_tarata; y=v[1]-y_tarata; y_tarata1=(y/(massimo_raggiunto_yy_tarata))*(500/guadagno_y)/2; x_tarata1=(x/(massimo_raggiunto_xx_tarata))*(500/guadagno_x)/2; contmedia++; 42 bufferx=bufferx+x_tarata1; buffery=buffery+y_tarata1; if (contmedia > 100) contmedia=0; if(contmedia==maxmedia) { x_old=x_tarata_media; y_old=y_tarata_media; x_tarata_media=bufferx/maxmedia; y_tarata_media=buffery/maxmedia; contmedia=0; bufferx=0; buffery=0; if ((x_tarata_media-x_old)<intervallo_x & (x_oldx_tarata_media)<intervallo_x)x_tarata_media=x_old; if ((y_tarata_media-y_old)<intervallo_y & (y_oldy_tarata_media)<intervallo_y) y_tarata_media=y_old; nuova_x=x_tarata_media+((500/guadagno_x)/2); nuova_y=y_tarata_media+((500/guadagno_y)/2); if (nuova_x < ((500/guadagno_x)/5)) bersaglio_x=1; else if ((nuova_x > ((500/guadagno_x)/5))&(nuova_x < ((500/guadagno_x)/5)*2)) bersaglio_x=2; else if ((nuova_x > ((500/guadagno_x)/5)*2)&(nuova_x < ((500/guadagno_x)/5)*3))bersaglio_x=3; else 43 if ((nuova_x > ((500/guadagno_x)/5)*3)&(nuova_x < ((500/guadagno_x)/5)*4))bersaglio_x=4; else if ((nuova_x > ((500/guadagno_x)/5)*4))bersaglio_x=5; if (nuova_y < ((500/guadagno_y)/5)) bersaglio_y=5; else if ((nuova_y > ((500/guadagno_y)/5))&(nuova_y < ((500/guadagno_y)/5)*2)) bersaglio_y=4; else if ((nuova_y > ((500/guadagno_y)/5)*2)&(nuova_y < ((500/guadagno_y)/5)*3))bersaglio_y=3; else if ((nuova_y > ((500/guadagno_y)/5)*3)&(nuova_y < ((500/guadagno_y)/5)*4))bersaglio_y=2; else if ((nuova_y > ((500/guadagno_y)/5)*4))bersaglio_y= 1; switch (bersaglio_x) { case 1: switch (bersaglio_y) { case 1: 44 SetCtrlVal(pannelloprincipale,principale_LED_A,1); break; case 2: SetCtrlVal(pannelloprincipale,principale_ LED_F,1); break; case 3: SetCtrlVal(pannelloprincipale,principale_ LED_M,1); break; case 4: SetCtrlVal(pannelloprincipale,principale_ LED_Q,1); break; case 5: SetCtrlVal(pannelloprincipale,principale_ LED_V,1); break; } break; case 2: switch (bersaglio_y) { case 1: SetCtrlVal(pannelloprincipale,principale_ LED_B,1); break; case 2: SetCtrlVal(pannelloprincipale,principale_ LED_G,1); break; case 3: 45 SetCtrlVal(pannelloprincipale,principale_ LED_N,1); break; case 4: SetCtrlVal(pannelloprincipale,principale_ LED_R,1); break; case 5: SetCtrlVal(pannelloprincipale,principale_ LED_W,1); break; } break; case 3: switch (bersaglio_y) { case 1: SetCtrlVal(pannelloprincipale,principale_ LED_C,1); break; case 2: SetCtrlVal(pannelloprincipale,principale_ LED_H,1); break; case 3: break; case 4: SetCtrlVal(pannelloprincipale,principale_ LED_S,1); break; case 5: SetCtrlVal(pannelloprincipale,principale_ LED_X,1); 46 break; } break; case 4: switch (bersaglio_y) { case 1: SetCtrlVal(pannelloprincipale,princi pale_LED_D,1); break; case 2: SetCtrlVal(pannelloprincipale,princi pale_LED_I,1); break; case 3: SetCtrlVal(pannelloprincipale,princi pale_LED_O,1); break; case 4: SetCtrlVal(pannelloprincipale,princi pale_LED_T,1); break; case 5: SetCtrlVal(pannelloprincipale,princi pale_LED_Y,1); break; } break; case 5: switch (bersaglio_y) { case 1: SetCtrlVal(pannelloprincipale,princi pale_LED_E,1); 47 break; case 2: SetCtrlVal(pannelloprincipale,princi pale_LED_L,1); break; case 3: SetCtrlVal(pannelloprincipale,princi pale_LED_P,1); break; case 4: SetCtrlVal(pannelloprincipale,princi pale_LED_U,1); break; case 5: SetCtrlVal(pannelloprincipale,princi pale_LED_Z,1); break; } break; } PlotPoint (pannelloprincipale, principale_punto, x_tarata_media+(500/guadagno_x)/2,y_tarata_media+(500/guadagn o_y)/2, VAL_EMPTY_SQUARE_WITH_X, 4); } } else 48 PlotPoint (pannelloprincipale, principale_punto, x+(500/guadagno_x)/2, y+(500/guadagno_y)/2, VAL_DOTTED_SOLID_CIRCLE, 4); PlotWaveform (pannelloprincipale, principale_GRAPH, &v, 1, VAL_UNSIGNED_INTEGER, 1.0, 5.0, f, 1.0, VAL_CONNECTED_POINTS, VAL_SOLID_CIRCLE, VAL_SOLID, 1, VAL_RED); PlotWaveform (pannelloprincipale, principale_GRAPH, &v[1], 1, VAL_UNSIGNED_INTEGER, 1.0, 15.0, f, 1.0, VAL_CONNECTED_POINTS, VAL_SOLID_CIRCLE, VAL_SOLID, 1, VAL_GREEN); if (f==200) { f=0; DeleteGraphPlot (pannelloprincipale, principale_GRAPH, 1, VAL_IMMEDIATE_DRAW); } if (alto==1) { conta++; if (v[1]>massimo_raggiunto_y) massimo_raggiunto_y=v[1]; if (conta>Latenzanew) { flagy=1; alto=0; conta=0; 49 SetCtrlVal(pannelloprincipale,principale_LED_ALTO,0); if (flagx==1) SetCtrlVal(pannelloprincipale,principale_TEXTMSG,"taratu ra \neffettuata"); } } if (destra==1) { conta++; if (v[0]>massimo_raggiunto_x) massimo_raggiunto_x=v[0]; if (conta>Latenzanew) { flagx=1; destra=0; conta=0; SetCtrlVal(pannelloprincipale,principale_LED_DESTRA,0); if (flagy==1) SetCtrlVal(pannelloprincipale,principale_TEXTMSG,"taratu ra \neffettuata"); } } if (taraCentro==1) { x_tarata=v[0]; y_tarata=v[1]; taraCentro=0; } 50 } /**********************************************/ int CVICALLBACK setcomport (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: devicename[0]=0; GetCtrlVal (pannelloconfig, config_com_com, &comport); RS232Error = OpenComConfig (comport, devicename, 9600, 2, 8, 1, 512, 512); DiscardPanel (pannelloconfig); DeleteGraphPlot (pannelloprincipale, principale_GRAPH, -1, VAL_IMMEDIATE_DRAW); guadagno=1; f=0; break; } return 0; } int CVICALLBACK apriconfig (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: pannelloconfig = LoadPanel (pannelloprincipale, "eog.uir", 51 config_com); InstallPopup (pannelloconfig); break; } return 0; } int CVICALLBACK esci (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: QuitUserInterface(0); break; } return 0; } int CVICALLBACK cambiaguadagno (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_guadagno, &guadagno); SetAxisRange (pannelloprincipale, principale_GRAPH, VAL_NO_CHANGE, 0.0, 500, VAL_MANUAL, 0, 500/guadagno); break; } 52 return 0; } int CVICALLBACK assey (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_assey, &guadagno_y); SetAxisRange (pannelloprincipale, principale_punto, VAL_NO_CHANGE, 0, 0, VAL_MANUAL, 0, 500/guadagno_y); break; } return 0; } int CVICALLBACK assex (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_assex, &guadagno_x); SetAxisRange (pannelloprincipale, principale_punto, VAL_MANUAL, 0, 500/guadagno_x, VAL_NO_CHANGE, 0, 0); break; } return 0; } 53 int CVICALLBACK offsetx (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_offsetx, &offsetx1); break; } return 0; } int CVICALLBACK offsety (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_offsety, &offsety1); break; } return 0; } int CVICALLBACK amplificazionex (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_amplix, &amplix1); break; } 54 return 0; } int CVICALLBACK amplificazioney (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_ampliy, &ampliy1); break; } return 0; } int CVICALLBACK riferimentomax (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_riferimento_max, &rif_max); break; } return 0; } int CVICALLBACK riferimentomin (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: 55 GetCtrlVal(pannelloprincipale,principale_riferimento_min, &rif_min); break; } return 0; } int CVICALLBACK intervallox (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_intervallo_X, &intervallo_x); break; } return 0; } int CVICALLBACK intervalloy (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_intervallo_Y, &intervallo_y); break; } return 0; } 56 int CVICALLBACK accendi_alto (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: SetCtrlVal(pannelloprincipale,principale_LED_ALTO,1); alto=1; break; } return 0; } int CVICALLBACK accendi_destra (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: SetCtrlVal(pannelloprincipale,principale_LED_DESTRA,1); destra=1; break; } return 0; } int CVICALLBACK reset (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: alto=0; destra=0; flagx=0; 57 flagy=0; massimo_raggiunto_x=0; massimo_raggiunto_y=0; SetCtrlVal(pannelloprincipale,principale_TEXTMSG,"taratura \n da \neffettuare"); break; } return 0; } int CVICALLBACK cambia_latenza (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(pannelloprincipale,principale_Latenza, &Latenzanew); break; } return 0; } int CVICALLBACK tara_centro (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: taraCentro=1; break; } 58 return 0; } int CVICALLBACK cancella_led (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_TIMER_TICK: SetCtrlVal(pannelloprincipale,principale_LED_A,0); SetCtrlVal(pannelloprincipale,principale_LED_B,0); SetCtrlVal(pannelloprincipale,principale_LED_C,0); SetCtrlVal(pannelloprincipale,principale_LED_D,0); SetCtrlVal(pannelloprincipale,principale_LED_E,0); SetCtrlVal(pannelloprincipale,principale_LED_F,0); SetCtrlVal(pannelloprincipale,principale_LED_G,0); SetCtrlVal(pannelloprincipale,principale_LED_H,0); SetCtrlVal(pannelloprincipale,principale_LED_I,0); SetCtrlVal(pannelloprincipale,principale_LED_L,0); SetCtrlVal(pannelloprincipale,principale_LED_M,0); SetCtrlVal(pannelloprincipale,principale_LED_N,0); SetCtrlVal(pannelloprincipale,principale_LED_O,0); 59 SetCtrlVal(pannelloprincipale,principale_LED_P,0); SetCtrlVal(pannelloprincipale,principale_LED_Q,0); SetCtrlVal(pannelloprincipale,principale_LED_R,0); SetCtrlVal(pannelloprincipale,principale_LED_S,0); SetCtrlVal(pannelloprincipale,principale_LED_T,0); SetCtrlVal(pannelloprincipale,principale_LED_U,0); SetCtrlVal(pannelloprincipale,principale_LED_V,0); SetCtrlVal(pannelloprincipale,principale_LED_W,0); SetCtrlVal(pannelloprincipale,principale_LED_X,0); SetCtrlVal(pannelloprincipale,principale_LED_Y,0); SetCtrlVal(pannelloprincipale,principale_LED_Z,0); break; } return 0; } int CVICALLBACK media (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: 60 GetCtrlVal(pannelloprincipale,principale_valori_media, &maxmedia); break; } return 0; } 5.3 INTERFACCIA GRAFICA DEL SOFTWARE Vediamo ora come si presenta l’interfaccia grafica realizzata e le sue diverse funzionalità, di seguito sono riportate le videate del software con indicate le diverse funzioni a disposizione dell’utente. Le funzioni a disposizione dell’utente si suddividono in due categorie: le funzioni di controllo del segnale acquisito le funzioni di elaborazione del segnale acquisito 61 Vediamo ora le funzioni di controllo del segnale EOG 1) funzione di monitoraggio in diretta dei segnali acquisiti dalla porta USB In questo piccolo oscilloscopio e’ possibile vedere le forme d’onda dei due segnali (X,Y). Monitor del segnale EOG 2) controlli delle amplificazioni e degli offset dei due canali (X,Y) 62 Controlli del guadagno e degli offset dei due canali (X, Y) Passiamo ora alla seconda classe di funzioni, quelle riguardanti l’elaborazione del segnale EOG. 1) controllo dell’intervallo di accettabilità dei valori acquisiti, cioè si tolgono I valori esterni a tale intervallo Intervallo di accettabilita’ dei valori acquisiti. 63 2) Intervalli di discretizzazione dei movimenti, ovvero suddivisione della dinamica del movimento in step di un numero variabile di punti (quelli appunto specificati dai valori scelti) Intervalli di discretizzazione dei movimenti. 3) Valori di campioni utilizzati per il filtro di media dei valori acquisiti Finestra dei valori utilizzati per il filtro mediano. 64 4) sezione di comandi dedicata alla taratura del campo visivo. 4.1) tempo di latenza del segnale visivo da guardare. Tempo che permangono visibili i segnali luminosi per la taratura 4.2) Pulsante per avviare la taratura dell’asse verticale Pulsante di start per la taratura verticale 65 4.3) Pulsante per avviare la taratura dell’asse orizzontale . Pulsante di start per la taratura orizzontale 4.4) Pulsante per avviare la taratura della posizione cantale dell’occhio. Pulsante di start per la taratura della posizione centrale dell’occhio 66 CAPITOLO 6 RISULTATI DELLA SPERIMENTAZIONE 6.1 VALUTAZIONE DEI DATI REGISTRATI Con il dispositivo da noi realizzato siamo riusciti ad ottenere risultati molto buoni, come dimostrano i grafici a seguito riportati. Dalle figure 6.1 e 6.2 possiamo subito notare come il tracciato dell’occhio (in verde) segua quasi perfettamente l’andamento del bersaglio (in blu); questo è molto significativo per determinare la bontà dell’amplificatore costruito, infatti dai risultati abbiamo ottenuto un rapporto S/N di circa 40 dB. (equivalente ad un rumore con una dinamica pari all’1,5% della dinamica del segnale utile). Questo valore ci fa subito intuire come tale apparecchiatura possa essere utilizzata per controllare il puntatore del mouse, che richiede una notevole precisione (per poter “controllare“ 100 zone diverse dello schermo è infatti necessario poter dividere la dinamica del segnale in almeno 10 parti, o meglio avere al massimo un errore del 10% sulla dinamica). Un problema riscontrato dalla nostra apparecchiatura e la sensibilità al rumore di rete, che ha una unica componente a 50Hz. Tale componente viene comunque quasi totalemte eliminata dal filtro NOTCH descritto in precedenza, ma che in queste pagine di risultati non era stato utilizzato. E’ possibile vedere l’effetto di tale disturbo nella figura 6.3 in cui attraverso lo spettro del segnale si può notare come la componente di rumore sia perfettamente separata dallo spettro del segnale utile che ha componenti significative soltanto entro 15 Hz (ecco la ragione per la quale nella nostra apparecchiatura abbiamo posto un filtro passa basso a 20Hz). Attraverso un filtraggio digitale è possibile togliere la componente a 50Hz ed i risultati sono rappresentati in Figura 6.4 nella quale possiamo vedere in verde il segnale filtrato, in rosso il segnale non elaborato e in blu lo spostamento dei bersagli. Il filtro digitale utilizzato è un semplice passa basso del II ordine la cui caratteristica è mostrata in figura 6.4. 67 Figura 6.1 In verde il segnale Eog, in blu gli spostamenti dei bersagli Figura 6.2. Particolare del segnale di fig. 6.1 in cui e’ visibile il disturbo di rete, e il risultato del filtro correttivo. 68 Figura 6.3. Spettro del segnale registrato, in cui si nota il disturbo a 50 Hz. Figura 6.4. Risposta del filtro passa basso digitale utilizzato per eliminare la componente a 50 Hz Dai seguenti grafici e’ possibile avere un risultato qualitativo dei risultati ottenuti dall’amplificatore da noi progettato e costruito. 69 In figura 6.5 possiamo vedere il tracciato del movimento oculare del soggetto il cui compito era di seguire lo spostamento di un led luminoso in una barra posta prima orizzontalmente poi verticalmente davanti al soggetto ad una distanza di circa 1 mt. Figura 6.5. Tracciato XY della registrazione effettuata con movimento del bersaglio solo orizzontale e poi soltanto verticale. Come possiamo vedere dai due grafici entrambe le tracce sono sufficientemente ristrette e nel caso dello spostamento puramente orizzontale il piano di movimento e’ effettivamente orizzontale, nel caso dello spostamento verticale tale piano risulta invece leggermente inclinato, difetto dovuto con buona probabilità ad un movimento della testa del soggetto durante l’esperimento che ha provocato una rotazione del riferimento cartesiano adottato in fase di taratura. 70 Nei seguenti grafici (figura 6.6) possiamo invece osservare la composizione del moto orizzontale e verticale dell’occhio nell’inseguimento di un bersaglio in movimento in una direzione inclinata di 45 rispetto all’asse orizzontale. Figura 6.6, tracciato XY della registrazione del segnale con stimolo soltanto obliquo a 45. 71 CAPITOLO 7 DISCUSSIONE: I problemi da affrontare in questa discussione sulla tesi sono essenzialmente due: per prima cosa dobbiamo risolvere il problema della registrazione in continua del segnale EOG, che quindi ci permetterà di avere a disposizione una informazione sulle posizioni oculari fisse e non soltanto, come abbiamo ora, dei movimenti. Il secondo problema da affrontare riguarda il movimento della testa, e di conseguenza la correzione del segnale EOG registrato in base all’angolo di rotazione del capo. Soluzione al problema della registrazione in continua: le soluzioni si possono suddividere in due categorie: - soluzioni di tipo software - soluzioni di tipo hardware (DSP, FPGA, etc.) Le soluzioni di tipo software sono essenzialmente di due tipi: - calcolo della derivata del segnale della deriva elettrica e sua neutralizzazione - reti neurali, si caratterizza la componente biologica del segnale rispetto al decadimento elettronico dovuto ai filtri, questa soluzione ha il vantaggio rispetto alla precedente di poter discriminare anche I cosiddetti movimento di inseguimento lento, e ha lo svantaggio di dover avere un periodo di apprendimento personalizzato della rete neurale. Applicazione del metodo della derivata Applicando il metodo della derivata si riesce ad ottenere il risultato mostrato in figura 7.1, nella quale si puo’ vedere in giallo la traccia della derivata del segnale (in blu). Come si puo’ notare la derivata riesce molto bene ad estrapolare il momento in cui prendere la decisione sul movimento, ma purtroppo per piccoli movimenti la derivata si puo’ confondere con altri segnali. Tale fenomeno lo si puo’ vedere da un ingrandimento di una zona del grafico precedente (figura 7.2) in cui e’ possibile vedere in cyano la derivata del segnale della registrazione del movimento oculare (in rosso) e in giallo gli spostamenti dei bersagli. 72 Figura 7.1 In tale figura possiamo vedere l’effetto del filtro derivativo (traccia in colore giallo) applicato al segnale EOG (traccia blu) in verde sono rappresentati gli spostamenti del bersaglio. picco dovuto a disturbi. Figura 7.2 In cyano possiamo vedere il filtro derivativo applicato al segnale EOG in rosso. 73 Il problema del movimento della testa, può avere almeno due possibili soluzioni, la prima di tipo prettamente software e la seconda di tipo elettronico. Nella prima soluzione di tipo software possiamo ipotizzare che i movimenti della testa diano origine a un segnale EOG di tipo “lento” ovvero si abbia una lenta variazione del potenziale dovuta alla lenta rotazione della testa, che assumiamo essere dell’ordine di 10-20 gradi al secondo, quindi molto più lenta della velocità di rotazione dell’occhio che si aggira intorno a 300-500 gradi al secondo. In questo modo quindi si suppone che la persona compia soltanto un tipo di movimento alla volta, o si muove il capo tenendo gli occhi fissi in un punto, oppure si muovono gli occhi tenendo fisso il capo. Questo tipo di approccio ci permette di suddividere il segnale registrato in due parti, il segnale che ha soltanto informazioni relative al movimento della testa che viene utilizzato per ricalibrare lo 0 dell’apparecchiatura e il segnale che contiene l’informazione utile sul reale movimento dell’occhio. La combinazione di queste due informazioni ci permette di avere una informazione effettiva sulla direzione dello sguardo. La seconda soluzione al problema della rotazione del capo può invece essere di tipo elettronica, ponendo due giroscopi di tipo piezoelettrico miniaturizzato sul capo dell’individuo, i segnali con uscita in tensione che danno questi dispositivi si possono acquisire con lo stesso sistema che viene utilizzato per il segnale EOG poiché la porta JOYSTICK ha la possibilità di gestire fino a quattro assi, due vengono utilizzati per il segnale EOG, due rimangono liberi e si possono utilizzare quindi per acquisire le informazioni provenienti dai due giroscopi. 74 BIBLIOGRAFIA: 1. J. Milmann, “Circuiti e sistemi micro elettronici”, Bollati Boringhieri, 1994 2. H. Davson, “The physiology of the eye”, 2nd ed., J.& A. Churchill LTD, 1963 3. D.K. Swanson and J.G. Webster, “A model for skin-electrode impedance”. In H.A. Miller and D.C. Harrison (Eds), Biomedical Elecrode Technology: Theory and Practice, New York: Accademic Press, 1974 4. J.G. Webster(Ed.), Medical Instrumentation: Application and Design. Boston, MA: Houghton Mifflin, 1978. 5. W.H. Olson, “Electrial safety.” In J.G. Webster (Ed>), Medical Instrumentation: Application and design, Boston, MA:Houghton Mifflin, 1978. 6. J.G. Webster, “Reducing motion artifacts and interference in biopotential recording.” IEEE Trans. Biomed. Eng., BME-31:823-826, 1984. 7. J.C. Huhta and J.B. Webster, “60 Hz interference in electrocardiography.” IEEE Trans Biomed. Eng., BME-20:91-101, 1973. 8. R.Morrison, Grounding and Shielding Techniques in Instrumentation, 2nd ed., New York: Wiley (Interscience); 1977. 9. B.B. Winter and J.G. Webster, “Driven right-leg circuit design.” IEEE Trans. Biomed. Eng., BME-30:62-66, 1983. 10. L.A. Geddes, Electrodes and the measurement of Bioelectric Events, New York: John Wiley & Sons, 1972. 11. L.A. Geddes, L. E. Baker, and A.G. Moore, “Optimum electrolytic chloriding of silver elecrodes. “ Med. Biol. Eng., 7:49-56, 1969. 12. L.A. Geddes and L.E. Baker, Principles of Applied Biomedical Instrumentation, 2nd ed., New York: John Wiley & Sons, 1975. 75 APPENDICE A INTRODUZIONE ALLE RETI NEURALI Un neurone artificiale e’ un oggetto basato su una macchina che mima i funzionamenti esterni ed interni del neurone animale; esso puo’ avere un numero variabile di ingressi e di uscite (che corrispondono ai dendriti e agli assoni del neurone motore). Il neurone artificiale ha alcuni processi attraverso i quali combina tutti gli ingressi e quindi decide attraverso una soglia il valore del risultato che sara’ portato in uscita. Nello schema di figura A.1 e’ possibile vedere il funzionamento del neurone artificiale. SOGLIA INGRESSI USCITA INTEGRATORE Figura A.1. Schematizzazione di neurone artificiale Come si può facilmente capire un singolo neurone cosi’ fatto non e’ molto utile, perche’ questo diventi effettivamente una macchina di un certo interesse si devono aggiungere dei pesi agli ingressi e questi pesi devono dipendere dai valori delle uscite precedenti. Ora immaginiamo di chiamare Wi i pesi da attribuire ai singoli ingressi, il nuovo schema del neurone e’ quindi quello rappresentato in figura A.2. (x) I=(Wi *Ingressi) risposta dell’uscita ingressi Wnew = Wold + EX / ¦X¦ Figura A.2 Struttura di una rete Backpropagation. 76 La struttura appena vista in figura A.2 e’ la struttura classica di una rete backpropagation ovvero una rete con una propagazione dell’errore verso gli ingressi. Proprio tale caratteristica permette di arrivare ad una progressiva diminuzione dell’errore. Il valore iniziale dei coefficienti Wi e’ casuale, poi attraverso la funzione si arriva a definire i valori futuri di tali coefficienti. Questo tipo di rete come detto precedentemente permette di minimizzare l’errore nella decisione del valore dell’uscita, tale minimo dipende dal tipo di funzione che si utilizza per ricalcolare i coefficienti Wi e dalla regolarita’ del problema di ingresso, infatti questo tipo di rete consente di ottenere ottimi risultati con funzioni( problemi) che hanno una buona regolarita’. Se la natura dello spazio dell’errore non e’ noto a priori l’analisi delle rete neurale spesso richiede un grande numero di singoli tentativi per determinare la soluzione ottima. La velocita’ di apprendimento e’ attualmente il rapporto di convergenza tra la soluzione corrente e il minimo globale. Quando la rete neurale e’ allenata a sufficienza essa puo’ essere utilizzata come uno strumento analitico classico, con una certo numero di ingressi e un certo numero di uscite. per fare cio’ e’ sufficiente scollegare il ramo di retroazione facendo lavorare la rete soltanto in propagazione diretta. Come e’ facile intuire l’utilizzo delle reti neurali e’ molto utile in qui casi in cui i segnali di ingresso non seguono sempre le stesse “regole”. Nel nostro caso ad esempio si ha il problema di avere segnali EOG differenti in ogni persona e quindi nasce l’esigenza di avere uno strumento che sia in grado di adattarsi al segnale sempre leggermente diverso. In figura A.3 e’ possibile vedere alcuni esempi di funzioni non lineari utilizzate come soglia nelle reti neurali più diffuse, ovviamente il tipo di funzione di soglia da utilizzare caso per caso deve essere scelta in base al tipo di rete neurale utilizzata e in base al problema che si vuole affrontare. 77 1 x x x -1 soglia di Sigmoid soglia Hard soglia Deadzone x x soglia Semplice soglia Quadratica soglia Valore assoluto x Figura A.3. Esempi di funzioni non lineari utilizzate come soglia nelle reti neurali Vediamo ora come si può passare da un singolo neurone a una rete di neuroni artificiali. Pere prima cosa dobbiamo suddividere, approssimativamente, le reti neurali in tre categorie principali: 1. Le Reti neurali possono essere a singolo strato oppure multistrato; 2. Con Feedback oppure feedforward 3. Supervised oppure Unsupervised In una rete neurale feedforward ogni neurone riceve un input da un ambiente esterno e/ oppure da altri neuroni, senza pero’ che si formi un feedback. Un esempio di questa rete si può vedere in figura A.4 in cui ogni blocco rappresenta un singolo neurone. X Y N1 N2 N3 Figura A.4. Architettura a blocchi di una rete Feedforward 78 Le reti neurali cosiddette FeedBack cioè con retroazione consistono in neuroni artificiali con blocchi costruiti artificialmente, che operano in retroazione come si può vedere dalla figura A.5. X N1 + N2 Y - N3 Figura A.5. schema di una rete neurale Supervised con Feedback. In una rete neurale Unsupervised, i neuroni artificiali sono connessi direttamente con altri neuroni nelle immediate vicinanze come si può vedere dalla figura A.6. Figura A.6. Rappresentazione di una rete neurale Unsupervised. 79