ROBOCUP JR ITALIA 2012

Documenti analoghi
ROBOCUP JR ITALIA 2011

ROBOCUP JR ITALIA RIVA DEL GARDA

ROBOCUP JR ITALIA 2011

ROBOCUP JR ITALIA Riva del Garda aprile

IL PROGETTO «TELECOMANDO» (sensore ad infrarossi)

CHI SIAMO.

A1.2 - Utilizzare programmi applicativi per il monitoraggio ed il collaudo di sistemi elettronici.

ISTITUTO TECNICO INDUSTRIALE STATALE "G. MARCONI" Via Milano n PONTEDERA (PI) ANNO SCOLASTICO 2005/2006 CORSO SPERIMENTALE LICEO TECNICO

Macchinina evita ostacoli Arduino

ROBOCUP JUNIOR. CATANIA, Aprile SenigalliaRobot. A cura di: Mazzanti Matteo Stefanini Alessandro Simone Giovanni

Le misure di tempo e frequenza

Ricevitore Supervisionato RX-24

Macchina con Arduino Uno comandata tramite dispositivo Android e sensore ultrasuoni per fermarsi istantaneamente di fronte ad un ostacolo

Termometro digitale. Ivancich Stefano

RILEVATORE DI FIAMMA MOD. GL 91A/µp/M

RILEVATORE DI MOVIMENTO Art

ISTITUTO DI ISTRUZIONE SUPERIORE J.C. MAXWELL Data: 24 /9 /2016 Pag. 1di 5. PROGRAMMAZIONE ANNUALE A.S. 2016/ 2017 MECCANICA e MECCATRONICA

Ministero dell Istruzione dell Università e della Ricerca M320 ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Motori Motore passo-passo Stadio di potenza PWM Sincrono Stadio di potenza del motore passopasso. Blocchi funzionali. Set point e generatore PWM

INSEGUITORE SOLARE CON ARDUINO. Dispositivo che insegue il movimento solare realizzato con: 1. Arduino 2. 2 foto resistenze 3.

ITIS H. HERTZ A.S. 2009/2010 Classe IV Corso Serale - Progetto Sirio Programmazione preventiva del Corso di ELETTRONICA

FREQUENZIMETRO FQ-16S3-800

Misure di livello con sensori di prossimità Sonar SIMATIC PXS

Progetto di Informatica Industriale GIRASOLE Andrea Controzzi

EEPROM SERIALI IN I2C BUS.

Classe IV specializzazione elettronica. Elettrotecnica ed elettronica

Prof. Capuzzimati Mario - ITIS Magistri Cumacini - Como MICROCONTROLLORE

PWM 30 A. Disclaimer. Precauzioni di sicurezza

Camar Elettronica s.r.l. Via Mulini Esterna n CARPI (Modena) ITALY. 2 Temperature Pt100 - Collegamento 3 fili

Generatore. Generatore. Un sistema a raggi-x consiste di: Tubo a raggi-x. Sistema di rilevazione

RELAZIONE. Descrizione dell apparato sperimentale, materiale utilizzato, altre caratteristiche specifiche

Convertitori Tensione / Frequenza. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Per sistema di acquisizione dati, si deve intendere qualsiasi sistema in grado di rilevare e memorizzare grandezze analogiche e/o digitali.

ROBOCUP JR ITALIA 2012

ISTITUTO TECNICO INDUSTRIALE STATALE "G. MARCONI" Via Milano n PONTEDERA (PI) PROGRAMMAZIONE COORDINATA TEMPORALMENTE DISCIPLINA: ROBOTICA

S E R V O M O T O R I ( 2 )

ROBOCUP JR ITALIA 2012

Comprendere il funzionamento dei convertitori Saper effettuare misure di collaudo

ROBOCUP JR ITALIA 2015

A.S. 2015/16 CLASSE 5 AEE MATERIA: LABORATORIO DI T.P.S.E.

Descrizione caratteristiche cilindri elettrici serie ECC+

Una girobussola per Marte Relazione

Sistema SRT - Unita centrale di raccolta dati

..a cura di Cammisuli Chiara

Apparecchiatura Kit KS.ino2.1 Preliminare 0.1c

Scaricatore / Analizzatore di Batterie BDX

ROBOCUP JR ITALIA 2012

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232

Camar Elettronica s.r.l. Via Mulini Esterna n CARPI (Modena) ITALY

Fisica, tecnologia, scienze applicate: ulab2, un laboratorio portatile basato su arduino e due piccoli robot, LEMU e MOMOLAB, vanno a scuola

ISTITUTO DI ISTRUZIONE SUPERIORE J.C. MAXWELL Data: 17 / 09 / 2016 Pag. 1 di 5

5. Esercitazioni di laboratorio

MST_K12_INV2 Regolatore di velocita per motori in CC con inversione automatica della rotazione

ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE. Indirizzo: Elettronica e Telecomunicazioni. Tema di Sistemi Elettronici Automatici TRACCIA 2

I S T I T U T O T E C N I C O I N D U S T R I A L E S T A T A L E V E R O N A

Collaudo statico di un ADC

MST_K12_FAN. Regolatore di velocita per ventole PC. Manuale d uso e d installazione

Classe III specializzazione elettronica. Sistemi automatici

SENSORE DI TENSIONE SP

INDICE KIT PER TRASFORMATORI E MOTORI KIT PER IL MONTAGGIO DI 2 TRASFORMATORI DL 2106

MST_K15. Regolatore di velocita per Ventole in CC. Controllato in temperatura. Manuale d uso e d installazione

CIRCUITO DI CONDIZIONAMENTO PER IL TRASDUTTORE DI TEMPERATURA AD590

SEA Descrizione. Centralina Controllo Strip LED RGB

HOME CINEMA CORPORATE EDUCATIONAL. Wave. Schermo motorizzato di design

Motori a corrente continua BRUSHLESS

Display numerico con i LED

Micro Servoazionamento Passo-Passo - ViX


Robot Escape scatola di montaggio. Presentazione del produttore. Attrezzi necessari per la costruzione del robot Escape:

Encoder ottico MEC22 HR

SENSORI OTTICI - FOTORESISTENZE

Simatic Live. SIRIUS-SIDOOR la nostra soluzione integrata per il settore ascensoristico

LEGO Mindstorms e Arduino nella scuola secondaria di secondo grado: alcune esperienze didattiche. Pietro Bonora Liceo Scientifico A.B.

RELÈ di TERRA PER TENSIONE CONTINUA M79

IGB2 MANUALE DI SERVIZIO

RELAZIONE DI TELECOMUNICAZIONI ITIS Vobarno Titolo: Il diodo

VERIFICA SISTEMI E AUTOMAZIONE CLASSE VEL ALUNNO:... Punteggio 1 punto per ogni risposta/ esercizio corrett, tranne il secondo che vale 2

Serie DRWS: driver per motori Stepper, taglia unica Serie DRWB: driver per motori Brushless, taglie da 100, 400 e 750 W

IST-1395.CS01.01/A CE395CS / Istruzioni d uso Pag. 2/6

Trasportatori a catena mk

Sch ed e Ser ie RD7 7

SERVOMOTORI A ROTAZIONE CONTINUA ( 3 )

MANUALE ISTRUZIONI PER UNA CORRETTA INSTALLAZIONE DEI MOTORI TUBOLARI ELETTRONICI

KS 405. Terminale operatore con PLC integrato. inferiore a 200mA senza carichi. Memoria Programma Memoria Pagine

Pedali elettrici proporzionali serie PEP

INDICE. 1 DESCRIZIONE pg VISTA DISPOSITIVO pg CARATTERISTICHE TECNICHE pg DESCRIZIONE CIRCUITALE pg. 5-6

Per vedere tutti i tutorial:

Componenti a Semiconduttore

Mod. CPMS/EV IMPIANTO MODULARE PER IL CONTROLLO DI PROCESSO PROGRAMMA DI FORMAZIONE: INTRODUZIONE CONTROLLO DI PORTATA CONTROLLO DI LIVELLO

Corso di Laurea Magistrale in Informatica

GUIDA RAPIDA PER LA CONFIGURAZIONE DI AZIONAMENTI A VELOCITÀ VARIABILE

GENERATORE DI RAMPA A GRADINI

LAVORI SOTTO TENSIONE E VIETATO!

CASSETTE A PORTATA VARIABILE DOPPIO CONDOTTO

Safety. Detection. Control. Barriere di misura e automazione. Issue 1

M045 - ESAME DI STATO DI ISTITUTO PROFESSIONALE

Introduzione alla robotica

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

Progetto 3: Termometro con convertitore A/D

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Transcript:

Rete di scuole per la ROBOCUP JR ITALIA ROBOCUP JR ITALIA 2012 Riva del Garda 19 20 21 Aprile 1

DELLA SQUADRA X FIGHTERS ISTITUTO ITIS "DE PRETTO" DI SCHIO 2

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 RoboCupJr italiana - 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. 3

La Robocup Jr ITALIA è Una manifestazione nazionale fondata di tre punti forti: 1. una struttura che cura l organizzazione e gestisce gli aspetti di organizzazione, promozione, svolgimento ai diversi livelli, regionali e nazionali; 2. un contenuto condiviso, ovvero regolamenti, formule di gara, supporto formativo e informativo ai partecipanti; 3. una documentazione 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 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 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 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. 4

RICERCATORI 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 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. 5

Balestro Andrea Classe 5 AE X-FIGHTERS Partecipa alla gara di Rescue-B Istituto ITIS De Pretto di Schio 6

CAP. 1 DATI GENERALI Componenti della squadra: Balestro Andrea Istituto di provenienza: ITIS De Pretto di Schio(VI) Docenti responsabili: Giuseppe Tomiello Dario Marchiorato 7

CAP. 2 DATI DI CONTESTO E MOTIVAZIONE 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. 8

CAP. 3 STRUTTURA DEL ROBOT 9

Schema a blocchi del robot 10

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 11

ROBOCUP JR ITALIA CAP. 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. 12

CAP. 5 UNITÀ DI CONTROLLO 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 AT90S8535, 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 13

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

CAP. 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. SENSORE 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 15

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. 16

SENSORE 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. 17

ROBOCUP JR ITALIA 18

FINECORSA POSTERIORI 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 19

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. 20

ENCODER ROBOCUP JR ITALIA 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 21

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. 22

23

ROBOCUP JR ITALIA AMPOLLA 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; 24

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. 25

SENSORE 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. 26

CAP. 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 27

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 28

CAP. 8 AMBIENTE DI 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. 29

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. 30

CAP. 9 IL PROGRAMMA A 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. 31

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) 32

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) 33

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 34

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 35

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) 36

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 37

CAP. 10 fonte 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. 38

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