Il team "Vicenza Thunders" nasce nel 2010 come un progetto avviato in ambito scolastico, indirizzato ad avvicinare i ragazzi al mondo della robotica: la RoboCup, competizione a livello nazionale ed internazionale di robotica. Grazie alla loro creatività e alla loro passione per l’elettronica, Riccardo Ertolupi e Daniele Spreggiaro fondano il team con l'intenzione di partecipare a queste gare ottenendo, nel 2011 e nel 2012, il primo ed il secondo posto nelle competizioni di Riva Del Garda e di Catania nella categoria "Soccer Lightweight" con due squadre di robot diverse. In queste gare si affrontano due robot per squadra che giocano a calcio con una speciale pallina con degli emettitori infrarossi al suo interno, lo scopo è lo stesso del calcio: fare goal nella porta degli avversari.
Nel 2012 un'altra importante occasione si presenta ai Vicenza Thunders: l'opportunità di partecipare alla RomeCup, manifestazione annuale che si tiene a Roma, valida per la qualificazione ai mondiali nella categoria "Soccer Open League". Per questa occasione costruiscono altri due robot e ottengono il pass per partecipare ai campionati mondiali; riuscendoci soprattutto grazie ad un’accurata e minuziosa fase di progettazione e realizzazione di due robot, questa volta, basati sulla board Arduino ed al generoso supporto economico del padre del microprocessore: Federico Faggin. Per andare ai mondiali il team decise di puntare in alto riprogettando completamente i robot, ma nel frattempo giunse la cattiva notizia che, nonostante la pressione fatta sui vertici scolastici, ai "Vicenza Thunders" non era stata concessa l’opportunità di partecipare alla competizione mondiale in Messico a causa della contemporaneità con gli esami di stato. Tuttavia il team non si é per niente scoraggiato e ha rielaborato il progetto dei nuovi robot, puntando molto sull'estetica, oltre che sulla potenza, e ha presentato alla fiera "Makers Italy" il nuovo modello, i Vicenza Thunders 2.0, come si può vedere in questo video dimostrativo girato proprio in fiera a Milano.
VISIONE GENERALE DEL SISTEMA:
Passando ad aspetti più tecnici, gli ultimi due robot costruiti sono uguali tra loro perchè nei “Vicenza Thunders” non ci sono un attaccante e un difensore fissi, ma i robot si scambiano i ruoli in modo dinamico, a seconda di come si evolve la partita. Per fare ciò e per scambiarsi dati riguardanti la posizione e la distanza dalla pallina, i due robot usano dei moduli bluetooth di classe 2, questa è una cosa che li distingue dalla maggior parte dei robot avversari e che rappresenta il punto di forza del team Vicenza Thunders, oltre alla loro impressionante velocità nei movimenti.
Premettiamo che la speciale pallina usata nelle competizioni è provvista di venti led infrarossi distribuiti in modo uniforme su tutta la sua superficie, così da irradiare in tutte le direzioni, in particolare, essa emette luce infrarossa modulata a 38 kHz in modo che i robot possano distinguerla dalla luce ambientale. Per individuare questa pallina i “Thunders” dispongono di 24 ricevitori infrarossi posti lungo il perimetro del robot e che gli garantiscono di avere una visone a 360° dello spazio circostante.
Per orientarsi nel campo di gioco, invece, ogni robot monta un magnetometro che permette di vedere l'angolo di rotazione rispetto al nord magnetico della terra e quindi di poter calcolare anche l’angolo di rotazione rispetto al campo di gioco con una precisione relativamente buona. Questo sensore, però, permette ai robot di sapere solo la direzione in cui muoversi e non l'effettiva posizione in campo, infatti, per fare ciò ogni robot ha quattro sensori ad ultrasuoni posti 90° l’uno dall’altro per misurare la distanza dai muretti che delimitano il campo, per poi calcolare la posizione in campo con un margine di errore accettabile.
Inoltre, per permettere all’utente di interfacciarsi con il sistema in modo semplice ed intuitivo, i robot sono provvisti di un ampio display grafico LCD 128x64 con retroilluminazione a led RGB e di una tastiera da venti tasti. Questo permette di scegliere le varie funzioni da far fare al robot, di tarare i sensori e di leggere i valori provenienti da essi.
Per quanto riguarda i movimenti dei “Thunders”, essi sfruttano quattro motori DC totalmente indipendenti tra loro e posizionati su due assi perpendicolari tra loro. I motori usati sono piuttosto potenti e veloci, fanno 500 RPM e con una coppia di 5 kg-cm, perciò richiedono molta energia e quindi per controllarli sono stati usati quattro potenti ponti ad H integrati che permettono di controllare la velocità e il senso di rotazione dei motori mediante segnali PWM generati da un microcontrollore. Questi vanno ad agire su quattro ruote omnidirezionali progettate e realizzate dai membri del team con la collaborazione di aziende del settore. Queste ruote particolari conferiscono all’automa la capacità di spostarsi in ogni direzione del piano semplicemente coordinando la velocità di rotazione di ciascuna ruota.
Per l’alimentazione dei robot viene usata una batteria LiPo da tre celle e 2000mAh perché è un ottimo compromesso tra peso, dimensioni e la potenza erogabile.
I nuovi “Thunders” sono controllati ciascuno da un Arduino MEGA2560 e da tre ATmega328 (per intenderci sono i microcontrollori che sono usati nell’Arduino UNO) e quindi, è come se ogni robot montasse in totale quattro Arduino, tutti intercomunicanti fra loro via seriale. L’Arduino Mega2560 ha il compito di gestire tutto il sistema in generale, quindi i motori, il display, la tastiera, la connessione bluetooth con l'altro robot e la comunicazione con gli altri microcontrollori. Contemporaneamente due dei tre ATmega328 montati sul robot vengono utilizzati per leggere i dati relativi ai ricevitori infrarossi; mentre l’altro ATmega ha la funzione di individuare la posizione nello spazio del robot tramite la lettura dei quattro sensori di distanza ad ultrasuoni e del sensore di bussola. La motivazione della scelta di un sistema formato da più microcontrollori è semplice e intuitiva: i sensori che vengono gestiti dagli ATmega328 hanno bisogno di letture continue per ridurre al minimo gli errori, e inoltre questo permette anche di avere un sistema multitask e quindi in grado di velocizzare tutte le operazioni.
COME MUOVERSI CON LE RUOTE OMNIDIREZIONALI?
Dopo un checkout generale della sensoristica, degli attuatori e di tutti i vari dispositivi utilizzati, ci soffermiamo in particolare sul sistema che permette al robot di muoversi in ogni direzione del piano. Cerchiamo, dunque, di capire come si comportano le ruote omnidirezionali e come è possibile sfruttare le loro caratteristiche, perché per fare muovere il robot in una direzione bisogna tener conto della somma dei momenti prodotti da tutte le quattro ruote.
In questo caso sono state utilizzate quattro ruote sfasate tra loro di 90° (qui si può vedere come è fisicamente la base di un robot). Le ruote omnidirezionali progettate dal team sono fatte come delle normali ruote ma, in aggiunta, hanno delle rotelline che ruotano liberamente aventi asse perpendicolare rispetto a quello della ruota e queste permettono alla ruota di scorrere anche in altre direzioni. Queste particolari ruote sono fissate ai motori citati in precedenza che, accoppiati con queste ruote dal diametro di circa 8 cm, permettono ai “Thunders” di essere molto veloci.
Nello schema qui affianco sono spiegate le combinazioni per ottenere i movimenti basilari e i più facilmente intuibili. Dalle figure si nota chiaramente come c'è la necessità di poter controllare il verso di rotazione e la velocità di ogni ruota e quindi di ogni singolo motore. Di conseguenza ogni motore avere il suo circuito di controllo composto da dei driver che nel caso dei "Thunders 2.0" sono quattro VNH2SP30, che sono dei ponti ad H integrati prodotti dalla STMicroelectronics e che hanno la particolarità di essere SMD e di poter erogare fino a 30A sul carico senza surriscaldarsi grazie alle adeguate zone di dissipazione del calore che gli sono state progettate nelle schede.
CIRCUITO ELETTRICO PER GESTIRE I QUATTRO MOTORI:
Nello schema sottostante si può vedere il circuito dedicato a ciascuno di questi integrati, per comodità consideriamo solo un VNH2SP30 poiché il circuito relativo agli altri driver è identico, cambiano solo i pin di comando provenienti dall'Arduino. Si nota che dal microcontrollore arrivano solo due linee di comando, una che va a finire sul pin denominato "PWM" e che serve per gestire con la velocità di rotazione del motore e che è appunto un segnale PWM che può avere una frequenza massima di 20kHz. Mentre l'altro pin dell'Arduino serve per controllare il senso di rotazione del motore: questa linea va diretta all'ingresso A dell'integrato, mentre arriva all'ingresso B attraverso una porta NOT, così che i due ingressi del ponte ad H abbiano sempre livelli logici opposti e questo è molto comodo perchè permette di risparmiare un'uscita del microcontrollore.
Passando al circuito specifico dell'integrato si notano i pin di alimentazione di GND e di VCC, che in questo integrato può essere al massimo di 41 V; poi c'è il pin di Current Sensing (CS) che fornisce un'uscita analogica proporzionale alla corrente che sta assorbendo il carico, nel caso dei “Thunders” è stato lasciato libero perchè non c'era interesse particolare per questo dato. Ci sono inoltre due pin un po' particolari che si chiamano "enable/diagnostic" e hanno due funzioni: normalmente sono degli input che abilitano o meno il funzionamento dei semi ponti ad H relativi agli ingressi e alle uscite A e B (funzione enable); mentre se ci sono dei problemi sull'integrato fungono da segnalatori del guasto (funzione diagnostic). In questo circuito sono stati usati solo come enable collegandoli ad una resistenza di pull-up, visto che l'applicazione è piuttosto semplice e nel caso ci fossero problemi sarebbero comunque facilmente individuabili.
Arriviamo dunque alla parte finale di questa spiegazione sull'uso del VNH2SP30: il collegamento delle uscite, con i motori. Infatti, c'è da prestare molta attenzione a quei diodi che vanno a VCC e a GND, a prima vista magari potrebbero sembrare inutili, ma in realtà sono fondamentali per evitare grossi problemi. Premettiamo che i motori hanno una componente induttiva e che quindi ad ogni variazione di corrente cui sono sottoposti prodocono delle tensioni inverse che possono danneggiare il resto dei componenti elettronici presenti nel circuito. Quei diodi servono dunque a "tagliare" questi picchi di tensione così da evitare danni al driver e agli altri integrati; in genere per svolgere questa funzione vengono usati diodi ultra fast che si polarizzano in tempi più brevi. In commercio si trovano anche altri tipi di driver motori nei quali questi diodi di ricircolo sono già integrati nel chip e in quel caso, quindi, non occorre porsi questo problema.
SOFTWARE PER GESTIRE I QUATTRO MOTORI:
/* La variabile speed può assumere valori da 0 a 255 è va a regolare la velocità di rotazione di tutti i motori. La variabile direction può assumere i seguenti valori: - 0 per far muovere il robot in avanti rispetto all'asse 0; - 1 per far muovere il robot in avanti rispetto all'asse a 45°; - 2 per far muovere il robot in avanti rispetto all'asse a 90°; - 3 per far muovere il robot in avanti rispetto all'asse a 135°; - 4 per far muovere il robot indietro rispetto all'asse 0; - 5 per far muovere il robot indietro rispetto all'asse a 45°; - 6 per far muovere il robot indietro rispetto all'asse a 90°; - 7 per far muovere il robot indietro rispetto all'asse a 135°; - 8 per fare ruotare il robot su se stesso in senso orario; - 9 per fare ruotare il robot su se stesso in senso antiorario. */ void basicMovoment(byte speed, byte direction) { // cambia il duty cycle del segnale PWM che regola la velocità analogWrite(2,speed); //sceglie in movimento da fare con la funzione switch switch(direction) { // direzione 0 -> i motori 1 e 2 girano in avanti // e i motori 3 e 4 all'indietro case 0: { analogWrite(3,255); analogWrite(4,255); analogWrite(5,0); analogWrite(6,0); } break; // direzione 1 -> i motori 1 e 3 stanno fermi, // il motore 2 gira in avanti e il 4 all'indietro case 1: { analogWrite(3,127); analogWrite(4,255); analogWrite(5,127); analogWrite(6,0); } break; // direzione 2 -> i motori 2 e 3 girano in avanti // e i motori 1 e 4 all'indietro case 2: { analogWrite(3,0); analogWrite(4,255); analogWrite(5,255); analogWrite(6,0); } break; // direzione 3 -> i motori 2 e 4 stanno fermi, // il motore 3 gira in avanti e l'1 all'indietro case 3: { analogWrite(3,0); analogWrite(4,127); analogWrite(5,255); analogWrite(6,127); } break; // direzione 4 -> i motori 3 e 4 girano in avanti // e i motori 1 e 2 all'indietro case 4: { analogWrite(3,0); analogWrite(4,0); analogWrite(5,255); analogWrite(6,255); } break; // direzione 5 -> i motori 1 e 3 stanno fermi, // il motore 4 gira in avanti e il 2 all'indietro case 5: { analogWrite(3,127); analogWrite(4,0); analogWrite(5,127); analogWrite(6,255); } break; // direzione 6 -> i motori 1 e 4 girano in avanti // e i motori 2 e 3 all'indietro case 6: { analogWrite(3,255); analogWrite(4,0); analogWrite(5,0); analogWrite(6,255); } break; // direzione 7 -> i motori 2 e 4 stanno fermi, // il motore 1 gira in avanti e il 3 all'indietro case 7: { analogWrite(3,255); analogWrite(4,127); analogWrite(5,0); analogWrite(6,127); } break; // direzione 8 -> tutti i motori girano all'indietro case 8: { analogWrite(3,0); analogWrite(4,0); analogWrite(5,0); analogWrite(6,0); } break; // direzione 9 -> tutti i motori girano in avanti case 9: { analogWrite(3,255); analogWrite(4,255); analogWrite(5,255); analogWrite(6,255); } break; // se viene inserito un valore errato nella variabile // direction, la funzione non fa niente default: return; } }

Davvero un esperimento interessante!
Bravi ragazzi!
è bello vedere che c’è passione mista a divertimento e che riuscite a portarle avanti insieme.
Grazie Antonello per i complimenti! Questa sperimentazione è servita molto a noi per imparare cose nuove ed approfondire argomenti molto interessanti che a scuola non vengono trattati. Ora speriamo che da questa cosa possano nascere altre nuove opportunità.
siccome nell’articolo ci sono due link che non funzionano, li metto qui:
– il video della dimostrazione fatta in fiera a Milano:
http://www.youtube.com/watch?v=1JzCwOQnjy8
– la nostra pagina facebook:
http://www.facebook.com/vicenza.thunders
Per chi volesse seguire i nostri progetti abbiamo creato un nuovo sito internet: http://www.vicenzathunders.com