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
2F
8.2 K
0.1F
+ 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
1F
LMF 90
12
9
8
10
1.6M
- 12
8
14
5
+
7
4
- 12
5
7
1
3
4
+5 V
0.1F
+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 500V

Reiezione di modo comune 106 dB

Deriva della tensione di offset 5V/°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
2F
8.2 K
+ 12
82 
+12
-
3 +
1
ELETT. 1
6
7
8
ELETT. 2
5
5
-
2
LF 359
1F
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+s3)
Fp1=0,1Hz
Fp2=10Hz
Fz2 =1kHz

(1+s1)
(1+s2)
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