ITIS “S. De Pretto”
a.s. 2015/2016
REALIZZAZIONE DI UN SISTEMA
DI ACQUISIZIONE DEI
MOVIMENTI E DELLE
INCLINAZIONI DELLA MANO
Busellato Lorenzo
Classe 5C
Indirizzo “Elettronica ed
Elettrotecnica”
articolazione “Automazione”
Indice
Indice
pag. 1
Presentazione del concorso
pag. 2
Presentazione del progetto
pag. 4
Schema a blocchi
pag. 5
Principio di funzionamento
pag. 7
Hardware
pag. 8
Software
pag. 10
Software della base
pag. 11
Software del computer
pag. 13
Allegato 1 – Datasheet Attiny 85
Allegato 2 – Datasheet Atmega2560
Allegato 3 – Schema elettrico base
Allegato 4 – Programma base
Allegato 5 – Programma computer
Pag. 1 di 14
Presentazione del concorso
Nell’anno scolastico 2014/2015 ho partecipato assieme a un gruppo di studenti dell’Itis
“S. De Pretto” e a un gruppo di studentesse dell’ITCG “L. e V. Pasini” di Schio al
concorso “La tua futura impresa” bandito dalla Confindustria di Vicenza.
Il bando richiedeva agli studenti di proporre un modello d’impresa che presentasse
un’idea innovativa, curando equamente l’aspetto tecnico-progettuale e l’aspetto
economico.
Per fare ciò ci siamo appoggiati all’azienda “Enodia Srl” di Sottoriva Pietro che ci ha
fornito utili consigli sia dal punto di vista della creazione di un impresa che dal punto di
vista della gestione di un azienda.
Pag. 2 di 14
Il 14 novembre 2014 si sono svolte le
premiazioni del concorso a Vicenza,
dove una giuria d’imprenditori ha
giudicato il nostro prodotto,
“C.A.N.O.V.A.” come “migliore idea”.
I fattori decisivi per la nostra vittoria
sono stati l’unione tra due campi
totalmente differenti quali possono
essere un Istituto Tecnico e un Istituto
Commerciale, e l’innovazione
rappresentata dal nostro prodotto.
Terminata la prima fase del concorso,
nella quale l’idea d’impresa era solo una
proposta, è cominciata la seconda, nella
quale abbiamo dovuto studiare più a
fondo la nostra idea, realizzare un
prototipo del nostro prodotto innovativo
e proporre tutto a un gruppo
d’imprenditori, i quali avrebbero poi
deciso se concederci un finanziamento
per costituire effettivamente
un’impresa.
Pag. 3 di 14
Presentazione del progetto
L’idea che abbiamo proposto è quella di realizzare un prodotto, che abbiamo
battezzato “C.A.N.O.V.A.”, che consenta ad un artista o ad un artigiano di digitalizzare
le sue opere mentre le realizza, tramite un’apposita penna che registra i movimenti e le
inclinazioni della sua mano durante il lavoro, per poi salvare il “disegno” così ottenuto
su un computer.
Digitalizzare un’opera consente all’artigiano di poter lavorare anche su superfici più
grandi rispetto al prodotto reale che deve realizzare, permettendogli quindi di
riprodurre dettagli più precisi rispetto alla tecnica manuale.
Un altro vantaggio offerto dal nostro prodotto è che l’opera digitalizzata può essere
riprodotta da un qualsiasi mezzo di produzione, come ad esempio una fresa o un
braccio robotico, riducendo così il carico di lavoro per l’artigiano.
Conseguentemente i tempi di consegna al cliente diminuiscono, poiché non si deve
attendere che l’artigiano realizzi da capo una copia di un’opera preesistente.
Uno dei punti forti di C.A.N.O.V.A. è inoltre la portabilità del nostro prodotto, che è
costituito da una penna, una base e un dock di ricarica, che può essere trasportato
dovunque grazie alle sue dimensioni contenute a all’alta durata della batteria
Il nome “C.A.N.O.V.A.” è un acronimo che sta per “Computer Aided New Object Virtual
Art”, in italiano “Nuovo Oggetto per l’Arte Virtuale Assistita da Computer”, ed è un
omaggio al famoso scultore e pittore Veneto.
[foto prodotto]
Pag. 4 di 14
Schema a blocchi
Lo schema a blocchi del prodotto si divide in due sotto schemi, per la base e per la
penna.
Pag. 5 di 14
La penna è costruita attorno ad un microprocessore Attiny 85, le cui specifiche tecniche
sono riportate nel datasheet (Allegato 1), alimentato da una batteria LiPo ricaricabile
tramite l’apposito dock di ricarica.
Al microprocessore è collegata un IMU (“Inertial Measurement
Unit” o “Unità di Misurazione Inerziale”) a 6 gradi di libertà,
ossia il movimento nei tre assi e la rotazione attorno a questi,
composta da un accelerometro ADXL345 e da un giroscopio
ITG3200.
Oltre all’IMU, sulla penna sono presenti quattro led infrarossi
posti a 90° d’inclinazione l’uno dall’altro sulla circonferenza
della penna e un modulo radio ricetrasmittente da noi usato
solo come trasmettitore.
Attiny 85
La base è costruita attorno ad un microprocessore Atmega2560 basato su piattaforma
Arduino Mega, le cui specifiche sono riportate sul datasheet (Allegato 2), alimentato
tramite la porta USB che funge anche da mezzo di
comunicazione con il computer.
Sulla piattaforma Arduino è montata la scheda di
controllo che gestisce le fotocamere ed il modulo
ricetrasmittente, usato solo nella sua funzione di
ricevitore.
Arduino Mega
Pag. 6 di 14
Principio di funzionamento
La parte del progetto da me sviluppata riguarda l’acquisizione dei movimenti della
mano.
Dopo approfondite ricerche, sono giunto ad implementare un sistema di rilevazione
basato su due fotocamere ottenute da altrettanti telecomandi della nota console di
videogiochi Nintendo “Wii”.
Le fotocamere contenute nel telecomando hanno un filtro per raggi infrarossi posto
davanti alle lenti, che filtra tutta la banda di frequenza che non sia quella della luce
infrarossa compresa tra 430THz e 300GHz, oltre ad una lente dicroica che svolge lo
stesso compito, ed un microprocessore incorporato che legge i dati delle fotocamere, li
elabora, e restituisce con protocollo di comunicazione I2C (“Inter-Integrated Circuit”) le
coordinate sul piano parallelo a quello della fotocamera di ogni punto nello spazio (fino
a 4 in realtà) che emette raggi infrarossi.
Ho scelto di usare tali fotocamere in quanto sono dotate di un microprocessore interno
che velocizza il calcolo delle coordinate e che ricampiona l’immagine in uscita dalle
fotocamere da una risoluzione di 128*64 pixel a 1024*768 pixel, utilizzando
l’interpolazione bilineare.
La “penna” impugnata dall’utente ha
quindi 4 led infrarossi posti a 90° tra
loro, led che vengono percepiti dalle
fotocamere che, come si può vedere
dall’immagine, essendo poste
perpendicolarmente, restituiscono le
coordinate delle proiezioni nei due
piani (y-z ed x-z) della punta della
penna.
Incrociando le coordinate così ottenute si possono calcolare le coordinate nello spazio
tridimensionale della punta della penna.
Pag. 7 di 14
Hardware
La parte da me realizzata, la base, è costituita essenzialmente da tre elementi
hardware, ossia il microcontrollore, la scheda di controllo e le fotocamere.
Lo schema elettrico della scheda di controllo è riportato nell’Allegato 3.
Essa è realizzata su una scheda millefori su cui sono stati riportati con strip di
connettori maschio-maschio i pin della piattaforma Arduino, cui vanno a connettersi i
vari elementi circuitali.
È provvista innanzitutto di un diodo led rosso di segnalazione il cui catodo è connesso
al pin 13 dell’Arduino, mentre l’anodo a massa tramite una resistenza da 470Ω (R8),
che fornisce un utile indicatore in caso di errori del sistema o per comunicazioni
all’utente.
La resistenza è stata calcolata in modo da mantenere una corrente di circa 10mA sul
diodo, abbastanza grande da avere un’emissione di luce visibile e abbastanza piccola da
non danneggiare l’uscita digitale del microcontrollore, che può erogare fino a 40mA.
𝑉
5
=
= 500Ω ≅ 470Ω
𝐼 10𝑚
Ho posto inoltre un pulsante tra il pin RESET del microcontrollore e massa, in modo da
poter agevolmente resettare il microprocessore all’occorrenza.
𝑅=
Il circuito che genera il clock per le fotocamere è costituito da due porte "NOT",
presenti nell’integrato 74HC04 (IC1), e un oscillatore al quarzo, composto a sua volta da
un quarzo a 20MHz (X1), due resistenze da 1MΩ e da 47kΩ (R7, R6) e da due
condensatori da 10pF (C3, C4).
In parallelo all’alimentazione dell’integrato ho aggiunto un condensatore elettrolitico
(C2) che mantiene lineare la tensione e un condensatore ceramico (C6) che filtra
eventuali disturbi.
Inizialmente l’integrato che avevo scelto era il 74LS04, che comprende sei porte "NOT",
ma l’oscillatore così realizzato non riusciva a generare 20MHz, in quanto l’integrato
appartiene alla famiglia logica TTL (Transistor-Transistor Logic) che, per limitazioni
tecnologiche, non permette commutazioni a tale frequenza.
Ho scelto quindi di adottare l’integrato 74HC04 che appartiene alla famiglia logica
CMOS, che permette di arrivare alla frequenza di 20MHz.
Pag. 8 di 14
Per quanto riguarda il reset delle fotocamere, essendo un active-low (che si attiva cioè
quando la tensione sul pin è zero) esso è mantenuto costantemente a 5 volt dalla serie
della resistenza R5, da 33kΩ, e del condensatore C5, da 1nF.
La serie resistenza-condensatore costituisce un filtro passa-basso con costante di
tempo τ:
τ = R ∗ C = 33k ∗ 1n ≅ 33μs
Quindi la frequenza di taglio fT :
𝑓𝑇 =
1
1
=
≅ 30kHz
τ 33π
La tensione è quindi filtrata, in modo da renderla il più lineare possibile.
Per quanto riguarda la comunicazione I2C, la linea SCL è in comune a entrambe le
fotocamere, mentre le rispettive linee SCL sono selezionate alternativamente
utilizzando due transistor NPN (Q1, Q2), la cui base è collegata rispettivamente ai pin 3
e 4 del microcontrollore tramite due resistenze da 1kΩ (R2, R3).
Un transistor NPN (Q3), la cui base è collegata al pin 6 tramite una resistenza da 1kΩ
(R3), collega l’uscita di tensione a 3.3V del microcontrollore al contatto positivo dei
porta batterie dei telecomandi ogni qualvolta si deve interrompere lo stand-by delle
fotocamere.
Il modulo radio non ha bisogno di componenti esterni, e l’ho semplicemente connesso
a massa, all’alimentazione 5V ed al pin RX1, che riceve i dati in ingresso.
[foto scheda]
Pag. 9 di 14
Software
Il software si divide in due parti, ossia il “lato base” e il “lato computer”.
Il software sulla base è stato sviluppato nell’ambiente
Arduino in linguaggio Java adattato per la
programmazione su microcontrollore, che semplifica
molto la programmazione, ma rallenta l’esecuzione
dei programmi, poiché impedisce di avere un dialogo
diretto con i registri del microprocessore come
invece è permesso fare, ad esempio, programmando
in linguaggio C.
Ho scelto di programmare utilizzando questo
linguaggio in quanto esistevano già librerie per
interfacciare Arduino alle fotocamere, e questo ha
comportato un notevole risparmio di tempo nello
sviluppo del codice.
Il software sulla base si occupa di ricevere le
comunicazioni via radio che arrivano dalla penna e di
compiere il calcolo delle coordinate secondo ciò che il
microprocessore legge dalle fotocamere.
L’IDE di Arduino
Il software su computer è stato programmato in linguaggio Java utilizzando l’ambiente
di programmazione Processing, che graficamente è molto simile all’ambiente Arduino,
ma permette di programmare applicazioni visuali anziché di programmare su
microcontrollore.
Esso consente l’acquisizione in real-time delle coordinate e la modifica dei disegni
registrati, anch’essa possibile in real-time, con la possibilità di aggiungere o eliminare
punti al disegno.
Pag. 10 di 14
Software della base
Il programma è consultabile nell’Allegato 4.
Il programma caricato sulla scheda Arduino montata sulla base ha due tipi di
funzionamento, che sono eseguiti in base allo stato della variabile “debug”, di tipo
booleano.
Se quest’ultima assume il valore “true”, il funzionamento è quello di debug, ossia il
microcontrollore, attraverso il monitor seriale integrato nell’IDE di Arduino stampa tutti
i possibili comandi di debug, come ad esempio ‘l’ che accende il diodo led oppure ‘r’
che resetta il microprocessore.
Una volta inviato il comando ‘b’ il microcontrollore spedisce continuamente via seriale
le coordinate rilevate dalle fotocamere come ad esempio:
BLOB 1: x1,y1,s1, BLOB 2: x2,y2,s2,
“x1”, “y1”, “x2” ed “y2” sono le coordinate rilevate dalle due fotocamere mentre “s1” e
“s2” assumono in realtà lo stesso valore, in quanto indicano lo stato del pulsante sulla
penna che stabilisce se sto disegnando o meno.
Se invece la variabile debug assume il valore “false”, il programma parte in automatico
a inviare sulla seriale le coordinate ricavate dalle due fotocamere, già unite in un
singolo punto, come ad esempio:
FINAL: x,y,s,i,
“x” e “y” sono le coordinate del punto, mentre “s” indica se si sta disegnando o meno.
“i” è un indice progressivo che determina quale figura sto disegnando.
Questo è usato perché se non si distinguesse tra, ad esempio, una lettera e l’altra in
una parola scritta, un attuatore che vada a realizzare il disegno traccerebbe un'unica
linea mentre, con un indice che separa ogni figura questo non accade.
All’inizio del programma, oltre all’inizializzazione delle variabili c’è la fase di reset del
microprocessore.
Questo è necessario perché dopo aver inviato il segnale di “wake up” (ossia il segnale
che interrompe lo stand-by delle fotocamere) è necessario resettare il microprocessore
per effettuare letture corrette.
Pag. 11 di 14
Un problema che si è presentato è che se semplicisticamente si mandasse il reset del
microprocessore dopo il segnale di wake up, questo accadrebbe all’infinito.
Occorre infatti che il reset accada una sola volta per avvio del microprocessore, e ho
risolto questo problema utilizzando la memoria flash del microcontrollore.
Vado infatti a resettare il microprocessore solo se il primo bit della memoria flash è a 0,
e se è questo il caso, porto quel bit ad 1 e poi effettuo il reset.
Una volta effettuato il reset, la condizione logica che porta al reset non è più verificata,
ed il programma procede con il reimpostare il bit della memoria flash a 0.
Facendo così il microprocessore si resetta una sola volta quando si lancia il programma.
Pag. 12 di 14
Software su computer
Il software sul computer è un editor che permette l’acquisizione delle coordinate in
tempo reale e anche la loro modifica.
Schermata dell’editor
Il programma legge ciò che la base invia sulla seriale e stampa, se il pulsante sulla
penna è premuto, il punto sullo schermo.
Quando viene letto il punto successivo, se si sta ancora disegnando, viene tracciata una
linea dal punto precedente al punto corrente.
Cliccando con il pulsante sinistro del mouse è possibile aggiungere punti, mentre
cliccando con il pulsante destro è possibile eliminarli.
È possibile modificare il raggio d’azione della “gomma” facendo scorrere in su (per
aumentare) o in giù (per diminuire) la rotellina del mouse.
Pag. 13 di 14
L’eliminazione dei punti presenta due problemi.
Il primo è che se si allarga troppo con la rotellina del mouse l’area da cancellare, la
cancellazione richiederà molto tempo, in quanto il programma dovrà considerare un
numero di punti che cresce esponenzialmente con il crescere del raggio d’azione della
gomma.
Il secondo problema è che i punti non sono indipendenti tra loro.
Se, ad esempio, ho tracciato un arco di circonferenza e volessi, cancellando il punto
centrale, dividerlo in due archi separati, il programma non farebbe questo ma unirebbe
il punto immediatamente prima e quello immediatamente dopo a quello centrale con
una linea.
Questo è dovuto al fatto che l’indice che separa una figura dall’altra non viene
modificato durante la cancellazione, ed è un problema che si può risolvere facendo
aumentare di 1 tutti gli indici che vengono dopo quello del punto cancellato.
Questo risolverebbe il problema ma creerebbe un altro problema, ossia la lentezza del
programma che dovrebbe, potenzialmente, modificare migliaia di punti.
Pag. 14 di 14