ROBOCUP JR ITALIA 2012 · - due sensori di temperatura per la ricerca delle vittime (le sorgenti di...
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
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
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