ROBOCUP JR ITALIA 2012 · - due sensori di temperatura per la ricerca delle vittime (le sorgenti di...

39
ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN) REPORT DI DOCUMENTAZIONE 1 Rete di scuole per la Rete di scuole per la Rete di scuole per la Rete di scuole per la ROBOCUP JR ITALIA ROBOCUP JR ITALIA ROBOCUP JR ITALIA ROBOCUP JR ITALIA ROBOCUP JR ROBOCUP JR ROBOCUP JR ROBOCUP JR ITALIA 2012 ITALIA 2012 ITALIA 2012 ITALIA 2012 Riva del Garda Riva del Garda Riva del Garda Riva del Garda 19 ˘ 20 ˘ 21 Aprile 19 ˘ 20 ˘ 21 Aprile 19 ˘ 20 ˘ 21 Aprile 19 ˘ 20 ˘ 21 Aprile

Transcript of ROBOCUP JR ITALIA 2012 · - due sensori di temperatura per la ricerca delle vittime (le sorgenti di...

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

1111

Rete di scuole per la Rete di scuole per la Rete di scuole per la Rete di scuole per la

ROBOCUP JR ITALIA ROBOCUP JR ITALIA ROBOCUP JR ITALIA ROBOCUP JR ITALIA

ROBOCUP JRROBOCUP JRROBOCUP JRROBOCUP JR ITALIA 2012ITALIA 2012ITALIA 2012ITALIA 2012

Riva del GardaRiva del GardaRiva del GardaRiva del Garda 19 ˘ 20 ˘ 21 Aprile19 ˘ 20 ˘ 21 Aprile19 ˘ 20 ˘ 21 Aprile19 ˘ 20 ˘ 21 Aprile

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

2222

REPORT DI DOCUMENTAZIONE DELLA SQUADRA

X−FIGHTERSX−FIGHTERSX−FIGHTERSX−FIGHTERS

ISTITUTO ITIS "DE PRETTO" DI SCHIO

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

3333

La “Rete di scuole per la Robocup Jr ITALIA” è espressione dell’Autonomia scolastica regolata dal D.P.R. 275/99 (art. 7) che permette alle scuole statali di operare sinergicamente per obiettivi condivisi e ritenuti importanti per l’offerta formativa erogata all’utenza. La Rete di scuole è nata sulla condivisione di una serie di principi EDUCATIVI e DIDATTICI riferiti alla realtà della scuola italiana. Questi principi e le conseguenti proposte operative erano stati riportati in un documento del maggio 2008 dal titolo: Manifesto per una RoboCupJrManifesto per una RoboCupJrManifesto per una RoboCupJrManifesto per una RoboCupJr italianaitalianaitalianaitaliana - una proposta per la diffusione dell’utilizzo didattico della Robotica nelle scuole a cura di Andrea Bonarini, Augusto Chioccariello e Giovanni Marcianò. Maggio 2008 L’obiettivo della Rete – organizzare l’edizione italiana della Robocup Jr – concretizza una spinta al confronto e alla collaborazione tra Istituti scolastici, elementi che motivano docenti e studenti all’impegno nell’innovazione, sia didattica che tecnologica, affrontando i problemi che costituiscono uno standard internazionale dal 2000, quando la Robocup (manifestazione riservata alle Università di tutto il mondo) ha proposto le tre “gare” per la scuola: Dance – Rescue – Soccer.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

4444

La Robocup Jr ITALIA è Una manifestazione nazionale fondata di tre punti forti: 1. una strutturastrutturastrutturastruttura che cura l’organizzazione e gestisce gli aspetti di organizzazione, promozione, svolgimento ai diversi livelli, regionali e nazionali; 2. un contenutocontenutocontenutocontenuto condiviso, ovvero regolamenti, formule di gara, supporto formativo e informativo ai partecipanti; 3. una dodododocumentazionecumentazionecumentazionecumentazione delle proposte didattiche e del lavoro degli studenti che coinvolgono l’uso di kit o robot auto costruiti per la partecipazione agli eventi organizzati dalla Rete. Questo volumetto appartiene alla collana di documentazione. Sul piano organizzativo e gestionale della Rete di scuole lo Statuto prevederà organismi ben distinti ma fortemente integrati: COMITATO DI GESTIONECOMITATO DI GESTIONECOMITATO DI GESTIONECOMITATO DI GESTIONE – formato dai Dirigenti scolastici degli Istituti fondatori o associati alla Rete. Si riunisce due volte l’anno in via ordinaria, e online per decisioni straordinarie. ISTITUTO CAPOFILAISTITUTO CAPOFILAISTITUTO CAPOFILAISTITUTO CAPOFILA – come previsto dal DPR 275/99 cura gli aspetti burocratici, amministrativi e contabili della Rete. Il Dirigente scolastico dell’Istituto capofila è il legale rappresentante della Rete e provvede a dare esecuzione alle delibere del Comitato di Gestione. COMITATO TECNICOCOMITATO TECNICOCOMITATO TECNICOCOMITATO TECNICO – formato dai docenti referenti degli Istituti fondatori o associati alla Rete, provvede a definire il Bando e i Regolamenti di gara per la manifestazione annuale nazionale, trasmettendoli al Comitato di gestione che li deve approvare.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

5555

RICERCATORI ASSOCIATIRICERCATORI ASSOCIATIRICERCATORI ASSOCIATIRICERCATORI ASSOCIATI – portano nella Rete il loro contributo scientifico di alto livello. Partecipano di diritto al Gruppo Tecnico e un loro rappresentante al Comitato di Gestione (senza diritto di voto). ISTITUTI PARTECIPANTIISTITUTI PARTECIPANTIISTITUTI PARTECIPANTIISTITUTI PARTECIPANTI – iscrivendosi alle gare, beneficiano del supporto della Rete ma non partecipano alle decisioni gestionali o tecniche. La partecipazione alla gara nazionale li rende idonei per aderire alla Rete. Diversamente serve il parere del Comitato Tecnico.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

6666

Balestro AndreaBalestro AndreaBalestro AndreaBalestro Andrea

Classe 5 AEClasse 5 AEClasse 5 AEClasse 5 AE

XXXX----FIGHTERSFIGHTERSFIGHTERSFIGHTERS

Partecipa alla gara di RescuePartecipa alla gara di RescuePartecipa alla gara di RescuePartecipa alla gara di Rescue----BBBB

Istituto ITIS “De Pretto” di SchioIstituto ITIS “De Pretto” di SchioIstituto ITIS “De Pretto” di SchioIstituto ITIS “De Pretto” di Schio

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

7777

CAP. 1 − DATI GENERACAP. 1 − DATI GENERACAP. 1 − DATI GENERACAP. 1 − DATI GENERALILILILI

Componenti della squadra:Componenti della squadra:Componenti della squadra:Componenti della squadra:

Balestro Andrea

Istituto di prIstituto di prIstituto di prIstituto di provenienza:ovenienza:ovenienza:ovenienza:

ITIS De Pretto di Schio(VI)

Docenti responsabili:Docenti responsabili:Docenti responsabili:Docenti responsabili: Giuseppe Tomiello Dario Marchiorato

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

8888

CAP. 2 − DATI DI CONCAP. 2 − DATI DI CONCAP. 2 − DATI DI CONCAP. 2 − DATI DI CONTESTO E TESTO E TESTO E TESTO E

MOTIVAZIONEMOTIVAZIONEMOTIVAZIONEMOTIVAZIONE L'idea di partecipare alla Robocup nella competizione Rescue-B mi è stata proposta dal professore di sistemi e automazione G. Tomiello. Da subito ho iniziato ad apportare le modifiche necessarie sul robot autocostruito dell’anno precedente affinché si adattasse alla competizione da svolgere. Nel corso di questo progetto molti problemi sono sorti ma sono stati in gran parte risolti anche grazie ai consigli e agli spunti dei nostri docenti e dei compagni di classe. Nei capitoli successivi verranno affrontati anche i vari problemi incontrati.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

9999

CAP. 3 ˘ STRUTTURA DCAP. 3 ˘ STRUTTURA DCAP. 3 ˘ STRUTTURA DCAP. 3 ˘ STRUTTURA DEL ROBOTEL ROBOTEL ROBOTEL ROBOT

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

10101010

Schema a blocchi del robot

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

11111111

Componenti principali del robot:

- due motori per la movimentazione del robot stesso - tre sensori a ultrasuoni per verificare il

posizionamento delle pareti - due sensori di temperatura per la ricerca delle

vittime (le sorgenti di calore) - un sensore di luce per riconoscere se il robot

entra in una zona nera - un encoder utilizzato per il calcolo del tragitto

percorso e per realizzare le curve - un’ampolla di mercurio per riconoscere se si trova

nella salita o meno - due finecorsa posteriori per il raddrizzamento del

robot nelle curve - un led ad alta luminosità per la segnalazione delle

vittime

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

12121212

CAP. 4 ˘ MECCANICACAP. 4 ˘ MECCANICACAP. 4 ˘ MECCANICACAP. 4 ˘ MECCANICA

Nella costruzione del robot ho cercato di mantenere delle dimensioni compatte e dare un certo ordine alle cose. Il primo punto riguarda lo spostamento all’interno del labirinto; infatti più le dimensioni sono compatte meno durante il percorso nascono problemi di collisione e eventuale incastro con le pareti. Per quanto concerne il secondo punto un lavoro ordinato non porta alla confusione nel ricercare gli eventuali problemi.

È stato scelto di montare i cingoli in quanto questi garantiscono una maggiore superficie d’appoggio durante la salita e permettono di superare gli eventuali ostacoli sul percorso (es. detriti) con maggior facilità rispetto alle ruote.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

13131313

CCCCAP. 5 ˘ UNITÀ DI CONAP. 5 ˘ UNITÀ DI CONAP. 5 ˘ UNITÀ DI CONAP. 5 ˘ UNITÀ DI CONTROLLOTROLLOTROLLOTROLLO Il BasicX-24 è uno dei microcontrollori programmabili in linguaggio Basic più potenti al mondo. Ha dimensioni molto contenute (solo 34x17mm) ed è possibile sviluppare in modo semplice e veloce le proprie applicazioni senza dover studiare linguaggi di

programmazione troppo complessi. Al suo interno alloggia un microcontroller Atmel Atmel Atmel Atmel AT90S8535AT90S8535AT90S8535AT90S8535, una memoria EEPROM da 32K, un quarzo ed un chip per la regolazione della tensione di alimentazione. Il microprocessore Atmel è già programmato per eseguire il codice operativo memorizzato sulla EEPROM. Il codice operativo viene generato dall'ambiente di sviluppo BasicX e trasferito nella EEPROM del modulo tramite un connettore seriale RS232. Questo microcontrollore è stato scelto per i seguenti motivi: - E’ programmabile in BasiX, un linguaggio molto simile a Visual Basic 6.0 studiato durante il corso degli studi. - Possiede un gran numero di ingressi/uscite (19 in tutto). - Ha tre canali PWM che possono gestire

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

14141414

indipendentemente tre motori. - Otto dei sedici ingressi possono essere usati come convertitori analogico digitali.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

15151515

CAP. 6 ˘ SENSORICAP. 6 ˘ SENSORICAP. 6 ˘ SENSORICAP. 6 ˘ SENSORI I sensori utilizzati per la realizzazione del robot, nel totale, sono nove: tre sensori a ultrasuoni, due sensori di temperatura, i finecorsa posteriori, l’encoder di un dei due motori, l’ampolla di mercurio e il sensore di luce. SENSORESENSORESENSORESENSORE ULTRASUONI ULTRASUONI ULTRASUONI ULTRASUONI

I sensori utilizzati nel robot sono di due tipi: quello frontale è un SRF05, mentre i due laterali si trattano di due SRF04. L’utilizzo di due sensori diversi è dovuto

dal fatto che erano presenti a scuola questi due sensori e il funzionamento e le caratteristiche di entrambi i sensori si assomigliano. Costituiscono entrambi una versione semplificata ed economica del sonar, adatto per le applicazioni di piccole automazioni come in questo caso. Il sensore di prossimità SFR05 (come il sensore SRF04) è dotato di una coppia di trasduttori ceramici in grado di generare un segnale ad ultrasuoni a 40Khz e di ricevere l'eco prodotto da un ostacolo frontale fino ad una distanza di 5 metri e di tutta la circuiteria necessaria per

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

16161616

condizionare i segnali in modo da poter essere gestiti da un normale microprocessore. Il sonar è dotato di una sensibilità sufficiente a rilevare un ostacolo del diametro di 3 cm ad una distanza di 2 metri. Il principio di funzionamento è esattamente uguale a quello di tutti i sonar: le onde ultrasonore vengono emesse e grazie al tempo che impiegano a ritornare è possibile conoscere la distanza dell’oggetto in questione. Un pregio di questi sensori che ho potuto constatare durante le prove è che le onde trasmesse dal sensore si propagano si in modo conico ma in modo molto direzionale, vale a dire che il cono è abbastanza stretto e perciò il sensore è meno influenzato da possibili oggetti che si trovano al di fuori del percorso.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

17171717

SENSORE DI TEMPERATURASENSORE DI TEMPERATURASENSORE DI TEMPERATURASENSORE DI TEMPERATURA

I sensori di

temperatura utilizzati sono dei TPA81 collegati attraverso il bus I2C. Essi rilevano il calore attraverso i sensori a infrarossi e nel campo della

robotica sono in grado di rilevare e misurare la temperatura di una fonte di calore statica. Il TPA81 è in grado di rilevare la temperatura della fiamma di una candela ad una distanza di 2 metri e non è influenzato dalla luce dell’ambiente in cui si trova. Inoltre può misurare la temperatura di 8 punti adiacenti contemporaneamente. L’idea iniziale è stata di montare un unico sensore di temperatura rivolto verso il senso di marcia, immaginando che questo riuscisse a rilevare la temperatura delle fonti di calore anche ai lati; ma eseguendo un test mi sono accorto che il sensore è anch’esso molto unidirezionale ed è in grado di rilevare la temperatura solo se la sorgente di calore si trova in linea con il sensore.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

18181818

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

19191919

FINECORSA FINECORSA FINECORSA FINECORSA POSTERIORIPOSTERIORIPOSTERIORIPOSTERIORI I finecorsa posteriori sono stati posizionati per il raddrizzamento del robot nelle curve. Infatti la rotazione del robot dipende molto dalla ruvidità della superficie su cui si trova. Ho notato, nelle prove, che nelle superfici più lisce il robot è in grado di compiere una rotazione di 90 o 180 gradi molto facilmente, mentre quando la superficie è molto ruvida tende a non completare la curva e conseguentemente ripartendo va a sbattere contro le pareti. In prima battuta ho pensato, nei casi in cui fosse possibile, di far arretrare il robot per un certo tempo dopo aver fatto l curva, in modo che questo si potesse raddrizzare e infine riposizionarsi al centro del modulo. Il problema è sorto nel momento in cui il tempo impostato per la retromarcia non era necessario quando compiva

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

20202020

curve sbagliate, cioè molto inferiori a 90 gradi, ma al tempo stesso era un tempo troppo lungo nel momento in cui la curva di 90 gradi era stata eseguita perfettamente. Da qui l’idea di posizionare sul retro del robot due finecorsa collegati in serie fra loro. Nel momento in cui entrambi sono premuti al microprocessore viene inviato un segnale di tipo High (5 Volt), che verrà poi interpretato dal programma.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

21212121

ENCODERENCODERENCODERENCODER

L’encoder utilizzato è integrato con i motori utilizzati per la movimentazione. Questi interruttori ad effetto Hall, sono sensori altamente stabili termicamente e

resistenti alle sollecitazioni meccaniche; sono maggiormente utilizzati in applicazioni dove il campo magnetico varia rapidamente e il valore di campo residuo è basso. Ciascun dispositivo include un regolatore di tensione, un generatore di Hall, un circuito stabilizzatore di temperatura, un amplificatore di segnale stabilizzato a chopper, un comparatore di Schmitt ed un mosfet a drain aperto, compresi su di un solo "chip" di silicio. Il regolatore di tensione permette di alimentare il dispositivo con tensione compresa tra 3,5 e 24V. Il mosfet di uscita può sopportare correnti di 20mA massimo. Per questo progetto l’encoder è utilizzato per il calcolo della distanza percorsa: infatti il robot è programmato per percorrere 30 cm alla volta (il che equivale a spostarsi di cella in cella) facendo si che si riesca a capire in quale cella si trovi. Inoltre l’encoder viene utilizzato per compiere le rotazioni di 90 e 180 gradi. Il segnale di uscita dall’encoder è un picco di ampiezza pari a circa 20

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

22222222

mA. Si tratta di un segnale troppo piccolo perché possa essere rilevato dal microprocessore, pertanto è stato realizzato un circuito elettronico per l’amplificazione del segnale e conseguente squadratura. Sono stati utilizzati due amplificatori operazionali (µA741), il primo in configurazione di amplificatore invertente (il segnale dell’encoder è negativo), il secondo in configurazione di comparatore a una soglia. L’alimentazione scelta per gli operazionali è quella dei 0-12 Volt, in quanto alimentandoli a 0-5 Volt non essendo il comparatore a una soglia ideale, non raggiunge i 5 Volt e ciò compromette la lettura da parte del microprocessore. Utilizzando però l’alimentazione 0-12 Volt è necessario che il segnale in uscita venga dimezzato, in quanto gli ingressi digitali dl microprocessore ammettono una tensione massima in ingresso di 5 Volt. È stato per cui fatto un partitore di tensione con due resistenze di valore uguale. Di seguito è riportato lo schema elettrico e la realizzazione su scheda.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

23232323

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

24242424

AMPOLLA DI MERCURIOAMPOLLA DI MERCURIOAMPOLLA DI MERCURIOAMPOLLA DI MERCURIO

L’ampolla di mercurio è stata montata per far si che durante la salita al piano superiore entri in funzione il

sottoprogramma dedicato alla rampa. Questo infatti mantiene sotto controllo la distanza delle pareti laterali e corregge la rotta nel caso in cui il robot tenda ad andare verso destra o sinistra. È stato

scelto di montare l’ampolla di mercurio perché durante le prove il robot tendeva a andare verso destra a causa anche dello slittamento dei cingoli. L’ampolla di mercurio è montata su una staffa che permette di regolarne l’inclinazione in modo tale da far si che si trovi nella situazione più ottimale possibile ( come è possibile vedere nel particolare). L’ampolla di mercurio possiede tre contatti: un comune e, visto il modo in cui è montata sul robot, un contatto normalmente chiuso e uno normalmente aperto. Il contato comune è quello che comunica con il microprocessore;

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

25252525

esso può trasmettere un segnale di 0 Volt attraverso il normalmente chiuso (in quanto collegato a massa) o un segnale di 5 Volt attraverso il normalmente aperto (che è collegato ai 5 Volt forniti da un 7805). La scelta di avere 0 Volt con il normalmente chiuso, anziché lasciare il contatto libero è nata dal fatto che per qualche disturbo il microprocessore rilevi un segnale alto anche se in realtà il robot non si trova sulla rampa.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

26262626

SENSORE DI LUCESENSORE DI LUCESENSORE DI LUCESENSORE DI LUCE

Il sensore di luce utilizzato è

completamente autocostruito. Si tratta della combinazione di un led ad alta luminosità di colore rosso abbinato a una fotoresistenza. Il led emette luce la quale viene proiettata sulla superficie del pavimento e riflessa.

In base alla quantità di luce che ritorna la fotoresistenza varia e di conseguenza la tensione ai suoi capi, in quanto fa parte di un partitore di tensione. La seconda resistenza è stata calcolata in modo tale da aver la maggior escursione di tensione tra zona bianca e zona nera. Il led è stato ricoperto da un tubetto nero per proiettare la luce esclusivamente sul pavimento, altrimenti la vicinanza del led alla fotoresistenza avrebbe alterato la lettura. Il sensore di luce è stato posizionato il più avanti possibile in modo da rilevare la zona nera senza che il robot sia avanzato eccessivamente.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

27272727

CAP. 6 ˘ MOTORICAP. 6 ˘ MOTORICAP. 6 ˘ MOTORICAP. 6 ˘ MOTORI Per far muovere il robot sono stati usati due motoriduttori della serie L1491243 12V DC, con rapporto di riduzione 43:1, dotato di soppressore disturbi con VDR sul collettore, direzione di rotazione secondo polarità. Particolarmente indicato per la realizzazione di Robot. Sono stati scelti i motori in DC perché la sorgente di alimentazione è in DC oltre al fatto che il vantaggio dato dall’uso di questi motori e’ che forniscono coppie di spunto elevate. I motoriduttori sono stati collegati con il microprocessore BX24 tramite un integrato L6202, il quale funge da ponte H. Dal microprocessore vengono mandati due segnali, uno che abilità il motore indicando la

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

28282828

velocità angolare(da 0 a 100), ossia attraverso il PWM, mentre il secondo segnale indica la direzione (Orario o Antiorario / True o False). SPEIFICHE TECNICHE: Tensione nominale: 12 Vdc Rapporto di riduzione: 43,3:1 Coppia: 3,8 Ncm Velocità: 40 rpm Velocità senza carico: 60 rpm Consumo: 50 mA Consumo senza carico: < 20 mA Lunghezza: 41 mm (L) Diametro esterno: 27 mm Peso: circa 55 g

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

29292929

CAP. 8 ˘ AMBIENTE DICAP. 8 ˘ AMBIENTE DICAP. 8 ˘ AMBIENTE DICAP. 8 ˘ AMBIENTE DI SVILUPPO SVILUPPO SVILUPPO SVILUPPO

L'ambiente di sviluppo utilizzato per programmare il microprocessore BX 24 è il Basic X, un ambiente molto simile a quello di Visual Basic della Microsoft da noi studiato durante il secondo anno del corso di elettrotecnica. Questo ambiente appartiene infatti alla famiglia Basic, tanto che è possibile un facile trasferimento di funzioni e moduli da Visual Basic a Basic X, e questo mi ha agevolato notevolmente l'approccio su questo nuovo ambiente di sviluppo.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

30303030

Uno degli aspetti più interessanti del modulo BX24 e dell'ambiente di programmazione BasicX è la notevole disponibilità di librerie di sistema già pronte per effettuare funzioni anche a bassissimo livello. Il programma è stato sviluppato per la maggior parte del tempo a casa, mentre nelle ore di scuola ho dedicato il tempo per le prove e le modifiche tecniche del robot.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

31313131

CAP. 9 ˘ IL PROGRAMMCAP. 9 ˘ IL PROGRAMMCAP. 9 ˘ IL PROGRAMMCAP. 9 ˘ IL PROGRAMMA SOFTWAREA SOFTWAREA SOFTWAREA SOFTWARE Il programma principale permette al robot di muoversi all’interno del labirinto; funge, per così dire, da cervello mentre delega a altri sottoprogrammi le varie operazioni, quali ad esempio la rotazione del robot, interrogare i vari sensori, controllare se si trova sulla rampa, se è all’interno di un vicolo cieco, ecc. Inizialmente avevo pensato di far muovere il robot senza alcuna interruzione fino a che non incontrava un muro frontale. Nel frattempo il robot interrogava i vari ultrasuoni e teneva in memoria le varie celle in cui era stato. Tutto questo ha funzionato fintanto che il programma è rimasto semplice e con poche funzioni. In una prova con un programma più complesso i problemi relativi a questa scelta di software si sono mostrati. Per cui ho scelto una via che impegnasse meno il microprocessore ma che potesse ottenere gli stessi risultati. L’idea di fondo del programma è di far muovere il robot di 30 cm alla volta, cioè la distanza necessaria affinché il robot si sposti da una cella a quella successiva. Una volta che il robot ha compiuto questo spostamento si ferma, stabilisce la nuova posizione (grazie anche all’utilizzo di una bussola fittizia), interroga gli ultrasuoni, mappa (cioè salva la posizione in cui si trova) e decide la prossima azione da compiere in base a come sono posizionati le pareti e anche all’orientamento del robot. Di seguito vengono riportati degli esempi di sottoprogrammi presenti nel software.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

32323232

L’esempio qui riportato è il sottoprogramma scritto in BasicX che gestisce la rotazione del robot. Private Sub TurnRobot(ByVal Dx As Byte, ByVal Sx As Byte, ByVal Reverse As Byte) Dim NuovaBussola as String ‘ impongo Count = 0; è la variabile che serve per il conteggio degli impulsi dell’encoder Count = 0 ‘ controllo se ho chiesto di compiere una rotazione verso destra If ((Dx = 1) And (Sx = 0) And (Reverse = 0)) Then ‘ inizio un ciclo Do-While che termina nel momento in cui il conteggio supera il valore che ho settato per la rotazione di 90 gradi Do ‘ incremento il valore di Count attraverso la funzione di libreria CountTransitions, la quale conta gli impulsi al pin designato in un certo intervallo di tempo Count = Count + CountTransitions(EncoderPin, TimeInterval) ‘ impongo un DutyCycle = 1.0 e setto il pin che gestisce la marcia dei motori alto per il motore sinistro (equivale a dire che il motore procede in avanti), basso per il motore destro (cioè procede all’indietro) DutyCycle = 1.0 Call PutPin(MarciaSx, bxOutputHigh) Call PutPin(MarciaDx, bxOutputLow) Call PutPinPWM(PWMDX, DutyCycle) Call PutPinPWM(PWMSX, DutyCycle) Loop While (Count < Count90) ‘ fermo i motori imponendo un DutyCycle = 0.1 e risetto i pin che gestiscono la marcia dei motori entrambi alti, cioè pronti a muoversi in avanti DutyCycle = 0.1 Call PutPin(MarciaSx, bxOutputHigh) Call PutPin(MarciaDx, bxOutputHigh) Call PutPinPWM(PWMDX, DutyCycle)

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

33333333

Call PutPinPWM(PWMSX, DutyCycle) ‘ controllo il nuovo orientamento del robot con la bussola fittizia If (Bussola = "N") Then NuovaBussola = "E" End If If (Bussola = "E") Then NuovaBussola = "S" End If If (Bussola = "S") Then NuovaBussola = "W" End If If (Bussola = "W") Then NuovaBussola = "N" End If Call Delay(0.1) End If ‘ controllo se ho chiesto di compiere una rotazione verso sinistra If ((Dx = 0) And (Sx = 1) And (Reverse = 0)) Then ‘ inizio un ciclo Do-While che termina nel momento in cui il conteggio supera il valore che ho settato per la rotazione di 90 gradi Do ‘ incremento il valore di Count attraverso la funzione di libreria CountTransitions, la quale conta gli impulsi al pin designato in un certo intervallo di tempo Count = Count + CountTransitions(EncoderPin, TimeInterval) ‘ impongo un DutyCycle = 1.0 e setto il pin che gestisce la marcia dei motori alto per il motore destro (equivale a dire che il motore procede in avanti), basso per il motore sinistro (cioè procede all’indietro) DutyCycle = 1.0 Call PutPin(MarciaSx, bxOutputLow) Call PutPin(MarciaDx, bxOutputHigh) Call PutPinPWM(PWMDX, DutyCycle) Call PutPinPWM(PWMSX, DutyCycle) Loop While (Count < Count90)

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

34343434

‘ fermo i motori imponendo un DutyCycle = 0.1 e risetto i pin che gestiscono la marcia dei motori entrambi alti, cioè pronti a muoversi in avanti DutyCycle = 0.1 Call PutPin(MarciaSx, bxOutputHigh) Call PutPin(MarciaDx, bxOutputHigh) Call PutPinPWM(PWMDX, DutyCycle) Call PutPinPWM(PWMSX, DutyCycle) ‘ controllo il nuovo orientamento del robot con la bussola fittizia If (Bussola = "N") Then NuovaBussola = "W" End If If (Bussola = "E") Then NuovaBussola = "N" End If If (Bussola = "S") Then NuovaBussola = "E" End If If (Bussola = "W") Then NuovaBussola = "S" End If Call Delay(0.1) End If ‘ controllo se ho chiesto di compiere una rotazione di 180 gradi If ((Dx = 0) And (Sx = 0) And (Reverse = 1)) Then ‘ inizio un ciclo Do-While che termina nel momento in cui il conteggio supera il valore che ho settato per la rotazione di 180 gradi Do ‘ incremento il valore di Count attraverso la funzione di libreria CountTransitions, la quale conta gli impulsi al pin designato in un certo intervallo di tempo Count = Count + CountTransitions(EncoderPin, TimeInterval) ‘ impongo un DutyCycle = 1.0 e setto il pin che gestisce la marcia dei motori alto per il motore destro (equivale a dire che il motore

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

35353535

procede in avanti), basso per il motore sinistro (cioè procede all’indietro) DutyCycle = 1.0 Call PutPin(MarciaSx, bxOutputLow) Call PutPin(MarciaDx, bxOutputHigh) Call PutPinPWM(PWMDX, DutyCycle) Call PutPinPWM(PWMSX, DutyCycle) Loop While (Count < Count180) ‘ fermo i motori imponendo un DutyCycle = 0.1 e risetto i pin che gestiscono la marcia dei motori entrambi alti, cioè pronti a muoversi in avanti DutyCycle = 0.1 Call PutPin(MarciaSx, bxOutputHigh) Call PutPin(MarciaDx, bxOutputHigh) Call PutPinPWM(PWMDX, DutyCycle) Call PutPinPWM(PWMSX, DutyCycle) ‘ controllo il nuovo orientamento del robot con la bussola fittizia If (Bussola = "N") Then NuovaBussola = "S" End If If (Bussola = "E") Then NuovaBussola = "W" End If If (Bussola = "S") Then NuovaBussola = "N" End If If (Bussola = "W") Then NuovaBussola = "E" End If Call Delay(0.1) End If ‘ risetto Count = 0 Count = 0 ‘ impongo Bussola = NuovaBussola; questo perché se avessi modificato direttamente Bussola una volta uscita da un confronto

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

36363636

sarebbe entrato in quello successivo perché la condizione si verificava nuovamente Bussola = NuovaBussola End Sub Il secondo esempio riportato è quello relativo al sottoprogramma relativo al raddrizzamento del robot nelle curve (quando questo è possibile), sempre scritto nel linguaggio di programmazione BasicX. Private Sub Azzeramento() ‘ setto i pin che gestiscono la marcia dei motori entrambi bassi, cioè pronti a muoversi indietro Call PutPin(MarciaDx,bxOutputLow) Call PutPin(MarciaSx,bxOutputLow) ‘ inizio un ciclo Do-While che termina nel momento in cui entrambi i finecorsa posteriori sono premuti, ossia quando sono appoggiato completamente alla parete Do DutyCycle = 1.0 Call PutPinPWM(PWMDX,DutyCycle) Call PutPinPWM(PWMSX,DutyCycle) ‘ rilevo il segnale che viene mandato dai finecorsa posteriori; 0 = non sono premuti, 1 = sono premuti RetroTouch = GetPin(TouchPin) Loop While(RetroTouch = 0) ‘ risetto i pin che gestiscono la marcia dei motori entrambi alti, cioè pronti a muoversi in avanti Call PutPin(MarciaDx,bxOutputHigh) Call PutPin(MarciaSx,bxOutputHigh) ‘ impongo la variabile di conteggio Count = 0 Count = 0 ‘ inizio un ciclo Do-While che termina nel momento in cui il robot si è centrato all’interno della cella Do Count = Count + CountTransitions(EncoderPin,TimeInterval)

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

37373737

DutyCycle = 1.0 Call PutPinPWM(PWMDX,DutyCycle) Call PutPinPWM(PWMSX,DutyCycle) Loop While(Count < CountCenter) ‘ fermo i motori imponendo un DutyCycle = 0.1 DutyCycle = 0.1 Call PutPinPWM(PWMDX,DutyCycle) Call PutPinPWM(PWMSX,DutyCycle) End Sub

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

38383838

CAP. 10 ˘ fonteCAP. 10 ˘ fonteCAP. 10 ˘ fonteCAP. 10 ˘ fonte DI ALIMENTAZIONE DI ALIMENTAZIONE DI ALIMENTAZIONE DI ALIMENTAZIONE

L’alimentazione è fornita da 10 batterie ricaricabili AA di tensione 1.2 Volt e corrente i 2.7Ah. Dal pacco batterie sono stati ricavati i 5 Volt per l’alimentazione dell’elettronica e i 12 Volt per i motori.

ROBOCUP JR ITALIA 19 -21 Aprile 2012 – Riva del Garda (TN)

REPORT DI DOCUMENTAZIONE

39393939

indiceindiceindiceindice Cap. 1 Cap. 1 Cap. 1 Cap. 1 –––– Dati generali Dati generali Dati generali Dati generali Pag.7 Cap. 2 Cap. 2 Cap. 2 Cap. 2 –––– Dati di contesto e motivazione Dati di contesto e motivazione Dati di contesto e motivazione Dati di contesto e motivazione Pag.8 Cap. 3 Cap. 3 Cap. 3 Cap. 3 –––– Struttura del robot Struttura del robot Struttura del robot Struttura del robot Pag.9 Cap. 4 Cap. 4 Cap. 4 Cap. 4 –––– Meccanica Meccanica Meccanica Meccanica Pag.12 Cap. 5 Cap. 5 Cap. 5 Cap. 5 –––– Unità di controllo Unità di controllo Unità di controllo Unità di controllo Pag.13 Cap. 6 Cap. 6 Cap. 6 Cap. 6 –––– Sensori Sensori Sensori Sensori Pag.15 Cap. 7 Cap. 7 Cap. 7 Cap. 7 –––– Motori Motori Motori Motori Pag.27 Cap. 8 Cap. 8 Cap. 8 Cap. 8 –––– Ambiente di sviluppo Ambiente di sviluppo Ambiente di sviluppo Ambiente di sviluppo Pag.29 Cap. 9 Cap. 9 Cap. 9 Cap. 9 –––– Il programma software Il programma software Il programma software Il programma software Pag.31 Cap. 10 Cap. 10 Cap. 10 Cap. 10 –––– Fonte di alimentazion Fonte di alimentazion Fonte di alimentazion Fonte di alimentazioneeee Pag.38