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