Robotica con il Boe-Bot Guida per studenti VERSIONE 2.1 Garanzia La Parallax garantisce i suoi prodotti contro difetti dei materiali e di manifattura per un periodo di 90 giorni dal ricevimento del prodotto. Se scoprite un difetto, Parallax, a suo giudizio, lo riparerà o sostituirà la merce o rimborserà il prezzo di acquisto. Prima di restituire il prodotto a Parallax, richiedete un numero Return Merchandise Authorization (RMA). Scrivere il numero RMA fuori della scatola utilizzata per restituire la merce a Parallax. Per favore includete le seguenti informazioni insieme alla merce restituita: il vostro nome, numero telefonico, indirizzo della spedizione e una descrizione del problema. La Parallax restituirà il vostro prodotto o la sua sostituzione utilizzando lo stesso metodo di spedizione utilizzato per inviare il prodotto a Parallax. Garanzia soddisfatti o rimborsati di 14 giorni Se, entro 14 giorni dal ricevimento del vostro prodotto, trovate che non soddisfa le vostre necessità, potete restituirlo per un rimborso completo. La Parallax rimborserà il prezzo di acquisto del prodotto, costi di spedizione/gestione esclusi. Questa garanzia è nulla se il prodotto è stato modificato o danneggiato. Copyright e marchi BASIC Stamp, Stamps in Class, e Board of Education sono marchi registrati dalla Parallax, Inc. se decidete di utilizzare i nomi BASIC Stamp, Stamps in Class, e / o Board of Education nella vostra pagina web o in materiale stampato, voi dovrete specificare che "BASIC Stamp è un marchio registrato di Parallax, Inc." , "Stamp’s in Class è un marchio registrato di Parallax, Inc.”. "Board of Education è un marchio registrato di Parallax, Inc.". rispettivamente a seguito della prima apparizione del nome registrato. Altri nomi di marca e di prodotto sono marchi o marchi registrati dei loro relativi proprietari. ISBN# 1-928982-03-4 Rinuncia di responsabilità La Parallax, Inc. non è responsabile di danni, speciali, accidentali o conseguenti che derivano da qualsiasi violazione della garanzia o sotto qualsiasi teoria legale, includendo utili persi, tempo di fermo, buonuscita, danno a o sostituzione dell'apparecchiatura o di proprietà o qualsiasi costo di ripristino, riprogrammazione o riproduzione di qualsiasi dato memorizzato in o utilizzato con i prodotti Parallax. La Parallax non è inoltre responsabile di qualsiasi danno personale, tra cui quello alla vita e alla salute, che deriva da utilizzo di un qualunque dei nostri prodotti. Vi assumete la responsabilità completa per la vostra applicazione BASIC Stamp, qualsiasi rischio per la vita possa costituire. Sito WEB e Liste di Discussione Il sito web www.parallax.com possiede molti canali per il download, prodotti, applicativi per i clienti, ed acquisti online per i componenti usati in questo testo. Manteniamo inoltre diverse liste di discussione e-mail per persone interessate nell’uso dei prodotti Parallax. Queste liste sono accessibili dal sito www.parallax.com attraverso il menù Support → Discussion Groups. Le liste con cui noi operiamo sono le seguenti: BASIC Stamps – Con oltre 2,500 sottoscrittori, questa lista viene largamente utilizzata da tecnici, hobbisti e studenti, che così condividono i loro progetti BASIC Stamp e pongono domande al riguardo. Stamps in Class – Creato per educatori e studenti, questa lista ha 500 sottoscrittori che discutono l’uso dei programmi Stamps in Class nei loro corsi. La lista fornisce una opportunità sia per gli studenti che per gli educatori di fare domande ed ottenere risposte. Parallax Educators –Esclusivamente per educatori e per coloro che contribuiscono allo sviluppo dello Stamps in Class. Parallax ha creato questo gruppo per avere una risposta ai nostri programmi e fornisce un forum perché gli educatori possano sia sviluppare che ottenere supporto all’insegnamento. Parallax Translators – Consistente in meno di 10 persone, lo scopo di questa lista è fornire un canale tra la Parallax e coloro che traducono la nostra documentazione nelle lingue diverse dall’inglese. La Parallax fornisce documenti Word editabili ai nostri traduttori, e cerca di coordinare nel tempo le traduzioni con le pubblicazioni. Toddler Robot – Un cliente ha iniziato questa lista di discussione per parlare di applicativi e programmazione del robot Toddler della Parallax. SX Tech – Discussione circa la programmazione del microcontrollore SX con strumenti di programmazione assembler Parallax e compilatori BASIC e C di altri fornitori. Circa 600 membri. Javelin Stamp – Discussione degli applicativi e progetti con il Javelin Stamp, un modulo Parallax che si programma usando un sottoinsieme del linguaggio di programmazione Java della Sun. Approssimativamente 250 membri. ERRATA Sebbene si sia fatto un grande sforzo per assicurare l’accuratezza dei nostri testi, possono tuttavia persistere ancora errori. Se trovate un errore, per favore comunicatecelo inviandoci un e-mail ad [email protected]. Ci sforziamo continuamente di migliorare i nostri materiali educativi e la nostra documentazione, quindi riesaminiamo in continuazione i nostri testi. Saltuariamente, sarà inserita nel nostro sito, www.parallax.com, una pagina di Errata con una lista di errori conosciuti e di correzioni per un determinato testo,. Vi preghiamo di controllare nei download gratuiti, le singole pagine di prodotto per file di errata. Tabella dei Contenuti · Pagina i Tabella dei Contenuti Prefazione....................................................................................................................5 Antefatto .........................................................................................................................5 Uditorio ...........................................................................................................................6 Gruppi di Supporto e Discussione ..................................................................................6 Il Programma Educativo Stamps in Class ......................................................................7 Traduzioni .......................................................................................................................9 Contributi Speciali ...........................................................................................................9 Capitolo 1: Il Cervello del vostro Boe-Bot ...............................................................1 Hardware e Software ......................................................................................................2 Esercizio #1: Procurarsi il Software ................................................................................4 Esercizio #2: Installazione del Software .......................................................................10 Esercizio #3: Impostazione dell’Hardware e collaudo del Sistema...............................13 Esercizio #4: Il vostro primo Programma ......................................................................22 Esercizio #5: Alla ricerca di Risposte............................................................................30 Esercizio #6: Presentazione del Codice ASCII .............................................................33 Esercizio #7: Quando avete Finito ................................................................................35 Sommario .....................................................................................................................37 Capitolo 2: I Servo Motori del vostro Boe-Bot.......................................................41 Presentazione dei Servo a Rotazione Continua ...........................................................41 Esercizio #1: Come Controllare il Tempo e Ripetere Azioni .........................................42 Esercizio #2: Controllare il Tempo e Ripetere Azioni con un Circuito ..........................45 Esercizio #3: Connessioni dei Servo Motori .................................................................58 Esercizio #4: Centratura dei Servo ...............................................................................66 Esercizio #5: Come Memorizzare Valori e Contare ......................................................70 Esercizio #6: Collaudo dei Servo ..................................................................................75 Sommario .....................................................................................................................85 Capitolo 3: Assemblare e Collaudare il Boe-Bot...................................................89 Esercizio #1: Assemblaggio del Boe-Bot ......................................................................89 Esercizio #2: Ri-Controllare i Servo ..............................................................................99 Esercizio #3: Circuito Indicatore di Start/Reset e Programma....................................103 Esercizio #4: Argomento Avanzato – Curve di Trasferimento dei Servo ....................109 Sommario ...................................................................................................................116 Capitolo 4: Navigazione con il Boe-Bot ...............................................................121 Esercizio #1: Manovre Base del Boe-Bot ...................................................................121 Esercizio #2: Taratura delle Manovre Base ...............................................................127 Esercizio #3: Calcolo delle Distanze...........................................................................131 Esercizio #4: Manovre – Accelerazione - Decelerazione ...........................................136 Pagina ii · Robotica con il Boe-Bot Esercizio #5: Semplificare la Navigazione con le Subroutine.....................................139 Esercizio #6: Utilizzo della EEPROM per le Manovre Complesse .............................145 Sommario ...................................................................................................................156 Capitolo 5: Navigazione Tattile con i “Baffi”....................................................... 161 Navigazione Tattile .....................................................................................................161 Esercizio #1: Montaggio e Collaudo dei “Baffi”...........................................................162 Esercizio #2: Collaudo sul Campo dei “Baffi” .............................................................169 Esercizio #3: Navigazione con i “Baffi” .......................................................................173 Esercizio #4: Intelligenza Artificiale e Comprensione di quando si è Bloccati ............178 Sommario ...................................................................................................................184 Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze ................. 187 Presentazione della Fotoresistenza............................................................................187 Esercizio #1: Montaggio e Collaudo dei Circuiti a Fotoresistenza..............................188 Esercizio #2: Il Movimento Evitando le Ombre degli Oggetti......................................195 Esercizio #3: Una Miglior Reattività per un Boe-Bot Controllato dalle Ombre............198 Esercizio #4: Ottenere Maggiori Informazioni dalle vostre Fotoresistenze.................200 Esercizio #5: Un Boe-Bot che Segue la Luce di una Torcia .......................................206 Esercizio #6: Muoversi Verso la Luce ........................................................................215 Sommario ...................................................................................................................224 Capitolo 7: Navigazione con l’Illuminazione Infrarossa..................................... 229 Usare l’Illuminazione Infrarossa per Vedere la Strada ...............................................229 Esercizio #1: Montaggio e Collaudo della Coppia di IR..............................................231 Esercizio #2: Collaudo della Rilevazione di Oggetti ed Interferenza degli Infrarossi..236 Esercizio #3: Taratura dell’Area di Rilevamento degli Infrarossi ................................241 Esercizio #4: Rilevamento degli Oggetti e come Evitarli ............................................243 Esercizio #5: Navigazione IR ad Alte Prestazioni.......................................................246 Esercizio #6: Il Rilevatore di Caduta...........................................................................249 Sommario ...................................................................................................................256 Capitolo 8: Controllo del Robot con la Rilevazione della Distanza .................. 259 Determinazione della Distanza con lo stesso Circuito Rilevatore IR/LED ..................259 Esercizio #1: Collaudo della Variazione di Frequenza ...............................................259 Esercizio #2: Il Boe-Bot Veicolo Ombra......................................................................267 Esercizio #3: Seguire una Linea .................................................................................276 Sommario ...................................................................................................................284 Appendice A: Ricerca Guasti nella Comunicazione dal PC al BASIC Stamp .. 289 Appendice B: BASIC Stamp e Scheda Madre Componenti e Prestazioni........ 293 Appendice C: Codice Colori delle Resistenze .................................................... 297 Appendice D: Regole di Esecuzione dei Prototipi.............................................. 299 Tabella dei Contenuti · Pagina iii Appendice E: Elenco Componenti del Boe-Bot ..................................................305 Appendice F: Bilanciamento delle Fotoresistenze .............................................309 Appendice G: Taratura degli IR per la Rilevazione della Distanza ....................317 Appendice H: Gare di Navigazione con il Boe-Bot .............................................323 Indice .......................................................................................................................327 Prefazione · Pagina v Prefazione ANTEFATTO I Robot sono usati nelle industrie Automobilistiche, mediche, e di produzione, in tutti i tipi di veicoli di esplorazione, e naturalmente, in molti film di fantascienza. La costruzione e la programmazione di un robot è una combinazione di meccanica, elettronica, e risoluzione di problemi. Quello che sta per sperimentare con il Boe-Bot, sarà pertinente con applicazioni realistiche di controllo robotica, con la sola differenza della mole e della sofisticazione. I principi del controllo elettronico, i listati dei programmi esempio, ed I circuiti che userete, sono molto simili (e qualche volta anche identici) alle applicazioni industriali sviluppate dai tecnici. La parola "robot" fu usata per la prima volta in una commedia satirica " I Robot Universali di Rossa" scritta da Dare Crape nel 1920. I robot in questa commedia tendevano ad essere umanoide. Da questo punto in avanti, sembrava che molte storie di fantascienza implicassero che questi robot si ribellavano contro l'autorità umana. Il cambiamento si è avuto, quando la General Motors ha installato i primi robot nei suoi stabilimenti di produzione nel 1961. Queste macchine automatizzate hanno presentato un'immagine completamente diversa dai robot "umanoidi" di fantascienza. Lo scopo di questo testo è di mostrare allo studente quanto sia facile rimanere coinvolti e divertiti nel campo dell’ingegneria, della meccatronica, e dello sviluppo di programmi man mano che si progetta, costruisce e si programma un robot autonomo. Questa serie di esperimenti presenterà agli studenti i concetti base della robotica usando la Board of Education Robot (da qui in poi chiamata "Boe-Bot"). Un esempio di Boe-Bot con un circuito di rilevazione di ostacoli ad infrarossi costruito sulla sua piastra prototipi viene mostrato nella Figura P-1. Gli esperimenti iniziano con una presentazione del cervello del vostro Boe-Bot, il BASIC Stamp, successivamente comincia la costruzione, il collaudo e la calibrazione del Boe-Bot. Dopo di che programmerete il Boe-Bot per le manovre basilari, e procederete con l’aggiunta dei sensori che gli permetteranno di reagire agli stimoli dell’ambiente circostante. Pagina vi · Robotica con il Boe-Bot Figura P-1 Il Boe-Bot™ della Parallax Inc Robot Autonomo su ruote. UDITORIO La guida per studenti Robotica con il Boe-Bot è stata creata per allievi dai tredici anni in poi come testo susseguente a “Che cosa è un Microcontrollore?”. Come tutti gli altri programmi educativi Stamps in Class, questa serie di esperimenti insegna nuove tecniche e nuovi circuiti con una sovrapposizione minima con gli altri testi. Gli argomenti generali spiegati in questa serie sono: semplice navigazione del Boe-Bot sotto controllo del programma, navigazione con l’uso di una varietà di sensori, navigazione con l’uso della controreazione e di varie tecniche di controllo, navigazione usando l’intelligenza artificiale programmata. Ciascun argomento è impostato con un formato semplice e lineare, pensato per fornire una conoscenza concettuale insieme ad alcune esperienze pratiche. Coloro che volessero approfondire ulteriormente la tecnologia industriale, l’elettronica o la robotica beneficeranno significativamente della esperienza iniziale con questi argomenti. GRUPPI DI SUPPORTO E DISCUSSIONE Per coloro che necessitino di supporto nell’uso di questo testo, sono disponibili i due Gruppi di Discussione Yahoo! seguenti. È possibile accedere a questi due gruppi dal sito www.parallax.com nel ‘Support menu’ alla voce ‘Discussion Groups’. Stamps In Class Group: Aperto a studenti, insegnanti ed autodidatti indipendenti, questo forum permette ai membri di porsi domande a vicenda e condividere le risposte man mano che procedono negli esperimenti, gli esercizi ed i progetti di questo testo. Parallax Educator’s Group: questo forum moderato fornisce supporto per insegnanti e caldeggia i consigli e le esperienze, visto che continuiamo a sviluppare i nostri curriculum Stamps in Class. Per associarsi a questo gruppo dovete fornirci la prova del vostro stato di insegnante approvato dalla Parallax. La guida per insegnanti per questo testo è disponibile per il download gratuito tramite questo forum. Prefazione · Pagina vii Supporto Educativo: [email protected] Se avete difficoltà nella sottoscrizione a qualsiasi di questi gruppi Yahoo! contattate il Team Parallax Stamps in Class, lo stesso dicasi se avete domande, circa i materiali usati in questo testo, i nostri programmi Stamps in Class, i nostri corsi per Insegnanti, o qualsiasi dei nostri servizi educativi. Vendite Educative: [email protected] Per informazioni circa la politica di sconti per scopi educativi, forniture per classi dei nostri kit Stamps in Class ed altri prodotti selezionati, contattate il nostro Reparto Vendite. Supporto Tecnico: [email protected] Per domande generali riguardanti l’uso e l’impostazione dei nostri prodotti hardware o software contattate il nostro reparto tecnico. IL PROGRAMMA EDUCATIVO STAMPS IN CLASS Questo testo puo essere completato con successo senza alcun prerequisito. Sebbene, Che Cosa è un Microcontrollore? sia il primo testo (la porta di ingresso) dei nostri programmi educativi Stamps in Class. “Che Cosa è un Microcontrollore?”, Guida per Studenti, Versione 2.2, Parallax Inc., 2004 Dopo aver completato questo testo, potrete continuare i vostri studi con qualsiasi delle guide per studenti o con gli altri kit elencati più avanti. Tutti i libri elencati sono disponibili per il download gratuito dal sito www.parallax.com. Le versioni citate più avanti erano quelle aggiornate al momento della stampa di questo testo. Per essere sicuri di avere le ultime revisioni, vogliate controllare i seguenti siti web www.parallax.com o www.stampsinclass.com; ci sforziamo continuamente di migliorare il nostro programma educativo. Guide per Studenti Stamps in Class: Per una comprensione affidabile della pratica di progettazione adottata nei moderni dispositivi e macchinari, si raccomanda vivamente di eseguire accuratamente gli esercizi ed i progetti delle seguenti guide per studenti. Pagina viii · Robotica con il Boe-Bot “Applied Sensors”, Student Guide, Version 1.3, Parallax Inc., 2003 “Basic Analog and Digital”, Student Guide, Version 1.3, Parallax Inc., 2004 “Industrial Control”, Student Guide, Version 1.1, Parallax Inc., 1999 (al momento ancora in lingua inglese) Ulteriori Kit di Robotica: Dopo aver completato questi testi, sarete in grado di seguire testi e kit di robotica più avanzati come quelli sotto elencati: “Advanced Robotics: with the Toddler”, Student Guide, Version 1.2, Parallax Inc., 2003 “SumoBot” Manual, Version 2.0, Parallax Inc., 2004 (anche questi ancora in lingua inglese) Kit per Progetti Educativi: Elements of Digital Logic, Understanding Signals ed Experiments with Renewable Energy si focalizzano maggiormente su argomenti elettronici, mentre StampWorks fornisce una varietà di progetti che sono utili agli hobbisti, agli inventori ed ai progettisti interessati a provare una varietà di soluzioni. “Elements of Digital Logic”, Student Guide, Version 1.0, Parallax Inc., 2003 “Experiments with Renewable Energy”, Student Guide, Version 1.0, Parallax Inc., 2004 “StampWorks”, Manual, Version 1.2, Parallax Inc., 2000-2001 “Understanding Signals”, Student Guide, Version 1.0, Parallax Inc., 2003 (anche questi ancora in lingua inglese) Riferimenti Il Manuale del BASIC Stamp è un riferimento essenziale per tutti gli studenti che seguono i corsi Stamps in Class. È pieno di informazioni sui microcontrollori BASIC Stamp, sulla Board of Education e sulle nostre altre schede prototipi, sull’Editor del BASIC Stamp, e sul nostro liguaggio di programmazione PBASIC. “BASIC Stamp Manual”, Version 2.0c, Parallax Inc., 2000 (in lingua inglese) Prefazione · Pagina ix TRADUZIONI IN ALTRE LINGUE I testi educativi della Parallax possono essere tradotti in altre lingue previo il nostro consenso (e-mail [email protected]). Se desiderate effettuare una traduzione, vogliate contattarci in modo che vi si possa fornire il testo correttamente formattato in formato MS Word. Manteniamo inoltre un gruppo di discussione per i traduttori della Parallax a cui vi potete associare. Si chiama Parallax Translators Yahoo! Group, e le informazioni per rintracciarlo sono inserite nel retro copertina di questo testo. Vedere la sezione intitolata: Error! Reference source not found. nel retrocopertina. CONTRIBUTORI SPECIALI Chuck Schoeffler, Ph.D., è l’autore di alcune parti del testo della v1.2 text insieme alla Parallax, Inc. All’epoca, il Dr. Schoeffler era professore al dipartimento della Industrial Technology Education dell’Università dell’Idaho. Ha progettato il Board of Education Robot (Boe-Bot) originale, mostrato quì di seguito oltre che molte varianti similari di robot con molte funzioni uniche. Dopo svariate revisioni, il progetto di Chuck è stato adottato come base del Boe-Bot Parallax usato in questo testo. Russ Miller della Parallax ha progettato il Boe-Bot basandosi su questo prototipo. Figura P-2 Prototipo Originale del Boe-Bot Andrew Lindsay, Roboticista Capo della Parallax, da quell momento ha riscritto questo testo ed I suoi esercizi con tre obbiettivi in testa. Primo, supportare tutti gli esercizi con istruzioni “come fare per” attentamente scritte. Secondo, presentare in ciascun capitolo nuovi circuiti, programmazioni, tecniche ingegneristiche e concetti di robotica ai lettori ed agli studenti. Terzo, assicurarsi che gli esperimenti possano essere eseguiti con un alto grado di successo usando le più aggiornate attrezzature della Parallax. Come con la v2.0, le attrezzature più aggiornate sono la Board of Education Rev C o la BASIC Stamp HomeWork Board. Pagina x · Robotica con il Boe-Bot Grazie ai 2000 studenti dei corsi estivi della Parallax. A Branden Gunn, per la sua assistenza con le illustrazioni della v1.3. Grazie a Dale Kretzer per la revisione editoriale, che è stata incorporate nella v1.4. Grazie anche, per i loro contributi, ai seguenti partecipanti degli e-group Stamps in Class: Richard Breen, Robert Ang, Dwayne Tunnell, Marc Pierloz, and Nagi Babu. Questi partecipanti hanno presentato una o più delle cose seguenti: correzione di errori, utili suggerimenti editoriali, o nuovi mateiali per la v1.4. Grazie agli studenti Laura Wong ed a Rob Gerber per I loro rispettivi contribute alla v1.5. Un grazie speciale allo staff Parallax, Inc.. Tutti ed in particolare ciascun membro dell gruppo Parallax ha in qualche modo contribuito nel fare del programma Stamps in Class un successo. Un Grazie particolare a Stefano Caruso [email protected] per la traduzione di questo manuale in Italiano e per la correzione di alcuni piccoli errori sintattici, logici o tipografici. La v2.0 di questa guida per studenti è una revisione totale ed una riscrittura completa comprendente nuovi esercizi, il supporto del PBASIC 2.5 ed il supporto della BASIC Stamp HomeWork Board. Questa revisione non sarebbe stata possibile senza le seguenti persone. I Parallaxiani: Andy Lindsay – autore, Rich Allred – illustrazioni tecniche, Stephanie Lindsay – edizioni tecnica, Kris Magri – revisore e “guru “ della robotica. Contributori del programma Stamps in Class: Robert Ang, Sid Weaver. Se avete suggerimenti, pensate di aver trovato un errore, o vorreste contribuire con un Esercizio o Capitolo nelle future versioni dei testi di Robotica con il Boe-Bot o Ulteriore Robotica!, contattateci alla e-mail [email protected]. Sottoscrivete e tenetevi in contatto con i gruppi di discussione StampsInClass Yahoo! Per le offerte in hardware gratuito per i contributi a Robotica con il Boe-Bot. Per maggiori informazioni vedere la sezione Error! Reference source not found. nel retro copertina. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 1 Capitolo 1: Il Cervello del vostro Boe-Bot Il robot Boe-Bot™ della Parallax, Inc è il cuore degli esercizi, i progetti ed il contesto di questo libro. Il Boe-Bot ed il primo piano del suo cervello, il microcontrollore programmabile BASIC Stamp® 2 sono mostrati nella Figura 1-1. Il modulo BASIC Stamp 2 è sia potente che facile da usare, specialmente con un robot. Figura 1-1 modulo BASIC Stamp® 2 su un robot Boe-Bot™. Gli esercizi di questo testo vi guideranno attraverso la scrittura di semplici programmi che faranno eseguire al BASIC Stamp ed al vostro Boe-Bot quattro attività robotiche essenziali: 1. Osservare i sensori per rilevare il mondo circostante 2. Prendere decisioni basandosi sulle osservazioni fatte 3. Controllare il proprio movimento (azionando i motori che fanno girare le sue ruote) 4. Scambiarsi informazioni con il proprio Roboticista (che sarete voi!) Il linguaggio di programmazione che userete per eseguire queste attività viene chiamato PBASIC, che sta per: • • • • • • Parallax – La società che ha inventato e prodotto i microcontrollori BASIC Stamp. Beginners – Per i Principianti perchè imparino ad usare come programmare i computers All-purpose – Potente ed utile per la soluzione di molti tipi diversi di problemi Symbolic – Che usa simboli (termini che assomigliano alle parole/frasi Inglesi) Instruction – Per istruire un computer come risolvere i problemi Code - In termini che possano essere compresi da voi e dal computer Page 2 · Robotica con il Boe-Bot Che cos’è un Microcontrollore? È un dispositivo programmabile che si trova nel vostro orologio da polso digitale, telefono cellulare, calcolatrice, radiosveglia, etc. In questi dispositivi, il microcontrollore è stato programmato per rilevare se premete un tasto, emettere un tono di avviso, e controllare il display digitale. Si possono trovare anche all’interno di macchinari industriali, automobile, sottomarini e astronavi perchè possono essere programmatic per leggere sensori, prendere decisioni e sincronizzare dispositivi che controllano parti in movimento. La guida per studenti Che cosa è un Microcontrollore? è il primo testo raccomandato per i principianti. È pieno di esempi su come usare i microcontrollori, e su come rendere il BASIC Stamp il cervello delle vostre invenzioni microcontrollate. È disponibile dalla www.parallax.com, per il download gratuito ed è anche incluso nel CD Parallax. I kit What’s a Microcontroller e le versioni stampate (solamente in Inglese) delle Guide per Studenti possono essere acquistate direttamente dalla Parallax, sia on-line al sito www.parallax.com o telefonicamente al numero (888) 512-1024. HARDWARE E SOFTWARE Iniziare la programmazione BASIC Stamp è simile all’inizio con un PC o laptop nuovo. Le prime cose che la maggior parte delle persone fa quando acquistano un PC o Laptop nuovo è di toglierlo dall’imballo, collegarlo, installare e provare del nuovo software, e può darsi perfino scrivere del software con un linguaggio di programmazione. Se questa è la prima volta con i microcontrollori BASIC Stamp, farete esattamente le stesse cose. Questo Capitolo vi mostra come assemblare e far sì che la programmazione del BASIC Stamp funzioni: • • • • • Trovare ed installare il software di programmazione Collegare il vostro modulo BASIC Stamp ad una pila o ad un alimentatore Collegare il vostro modulo BASIC Stamp al computer per la programmazione Scrivere i vostri primi programmi PBASIC Spengete l’alimentazione quando avete finito Se siete in una classe, il BASIC Stamp potrebbe già essere pronto. In questo caso, il vostro insegnante vi può fornire ulteriori istruzioni. Altrimenti, gli esercizi in questo capitolo vi accompagneranno attraverso tutte le fasi per avere il vostro computer BASIC Stamp collegato e funzionante. Sia questo testo che Che cosa è un Microcontrollore? contengono istruzioni per iniziare con l’hardware ed il software del BASIC Stamp nel Capitolo 1. Queste istruzioni sono quasi identiche. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 3 Se avete già completato la guida per studenti Che Cos’è un Microcontrollore?, andate al capitolo successivo. Similmente, se avete già familiarità con il vostro BASIC Stamp e con la Board of Education o con la BASIC Stamp HomeWork Board, andate al capitolo successivo. Presentazione del BASIC Stamp e della Board of Education Il modulo BASIC Stamp 2 e la scheda madre Board of Education® sono mostrati nella Figura 1-2. come detto in precedenza, un modulo BASIC Stamp è un computer molto piccolo. Questo computer molto piccolo viene inserito nella Board of Education, che viene chiamata scheda madre. Come presto vedrete, la Board of Education semplifica la connessione dell’alimentazione e del cavo seriale al BASIC Stamp. Negli esercizi successive, vedrete anche come la Board of Education semplifichi la costruzione di Circuiti ed il loro collegamento al BASIC Stamp. Figura 1-2 Modulo BASIC Stamp® 2 (sinistra) Scheda Madre dellaBoard of Education® (destra) Presentazione della BASIC Stamp HomeWork Board La piattaforma di progettazione BASIC Stamp® HomeWork Board™ viene mostrata di seguito nella Figura 1-3. questa scheda è simile alla Board of Education ma ha già montato il microcontrollore BASIC Stamp 2. Per gli esercizi di questo testo, come piattaforma di progettazione, potete usare sia il modulo BASIC Stamp 2 con la scheda madre Board of Education che la BASIC Stamp HomeWork Board. Assicuratevi comunque di seguire le istruzioni specifiche della piattaforma di progettazione che state usando, dal momento che ci sono tra loro alcune differenze. Page 4 · Robotica con il Boe-Bot Figura 1-3 piattaforma di progettazione BASIC Stamp® HomeWork Board™. Quale è la differenza? Usare la scheda madre Board of Education ed il modulo BASIC Stamp vi da delle prestazioni aggiuntive, come connettori a cui collegare dei servo motori, il controllo su quale tipo di alimentazione dare ai servo, ed un utile interruttore a 3 posizioni che potete usare per controllare quale parte del sistema viene alimentata. Inoltre il modulo BASIC Stamp 2 è rimuovibile, e può essere sostituito. La piattaforma di progettazione BASIC Stamp HomeWork Board non ha connettori per i servo, non ha neanche il connettore, ne l’interruttore di alimentazione, d’altronde costa anche meno. Dovrete costruirvi le connessioni per i servo e dovrete controllare l’alimentazione scollegandola dalla scheda, o costruendo il vostro circuito alimentatore. Il microcontrollore BASIC Stamp 2 è costruito direttamente sulla scheda, e ciascun pin I/O è protetto con una resistenza a montaggio superficiale da 220 Ω. Vedere anche: Appendice B: BASIC Stamp e Scheda Madre Componenti e Prestazioni ESERCIZIO #1: PROCURARSI IL SOFTWARE L’ Editor del BASIC Stamp (versione 2.0 o superiore) è il software che userete nella maggior parte degli esercizi e dei progetti di questo testo. Questo software vi permette di scrivere programmi sul vostro computer e di scaricarli nel cervello del BASIC Stamp del vostro Boe-Bot. Inoltre visualizza sul vostro computer anche i messaggi inviati dal BASIC Stamp, fornendo al vostro Boe-Bot un sistema per informare voi, il roboticista su che cosa sta facendo e sentendo. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 5 L’ Editor del BASIC Stamp è un software gratuito, ed i due modi più facili per ottenerlo sono: • • Effettuare il Download dal sito Internet: Cercate “BASIC Stamp Windows Editor Versione 2.0…” sul sito www.parallax.com → Downloads → BASIC Stamp Software. Incluso nel CD Parallax: seguite il link Software sulla pagina iniziale. Assicuratevi che la data stampata sul CD sia più recente di Aprile 2003. Avete fretta? Procuratevi la vostra copia dell’ Editor del BASIC Stamp Windows versione 2.0 (o superiore) ed installatelo sul vostro PC o laptop. Quindi, saltate a: Esercizio #3: impostazione dell’ Hardware e Collaudo del Sistem. Se avete domande, L’ Esercizio #1 può essere usato come una guida passo-passo per ottenere il software, e l’ Esercizio #2 può essere usato come riferimento per l’installazione del software sul vostro PC o laptop. Requisiti di Sistema e di Computer Vi servirà sia un PC o un computer laptop per far girare il software dell’Editor del BASIC Stamp. Iniziare con il BASIC Stamp è più facile se il vostro PC o laptop ha le seguenti caratteristiche: • • • Sistema operativo Windows 95 o versioni successive Una porta seriale o USB Un drive CD-ROM, accesso al World Wide Web, od ambedue Adattatore di porta USB: se il vostro computer ha solamente porte USB, vi potrebbe servire un adattatore da USB a Seriale. Per maggiori dettagli vedere il riquadro informativo a pagina 14 . Eseguire il Download del Software da Internet Il download del software dell’ Editor del BASIC Stamp dal sito web della Parallax è facile. La pagina web mostrata nella Figura 1-4 può essere differente dalla pagina web che vedete quando visitate il sito. Ciò nonostante, i passi per effettuare il download del software dovrebbero essere simili ai seguenti: Usando un browser web, andare al sito www.parallax.com (mostrato in Figura 1-4). Puntare al menu Downloads per visualizzare le opzioni. Puntare al link BASIC Stamp Software e clickare per selezionarlo. Page 6 · Robotica con il Boe-Bot Figura 1-4 Il sito Web della Parallax: www.parallax.com Quando siete nella pagina del BASIC Stamp Software, trovate un Editor Windows del BASIC Stamp con un numero di versione 2.0 o più alto. Fate click l’icona di Download. Nella Figura 1-5, l’icona di Download appare simile ad una cartella di file alla destra della descrizione: “BASIC Stamp Windows Editor Versione 2.0 Beta 1 (6MB)”. Figura 1-5 La Pagina Downloads del sito Web della Parallax Quando la finestra di Download del File mostrata in Figura 1-6 appare, selezionate: Salvate questo file su disco. Fate click il pulsante OK. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 7 Figura 1-6 Finestra di Download del File La Figura 1-7 mostra la finestra Salva Come che appare. Potete usare il campo “salva in” per trovare una locazione conveniente sul disco rigido del vostro computer per salvare il file. Dopo aver scelto dove salvare il file che state scaricando, Fate click sul pulsante Salva. Figura 1-7 Finestra Salva Come Selezione di una locazione dove salvare il file √ Attendere mentre il programma di installazione dell’ Editor del BASIC Stamp viene scaricato (mostrato in Figura 1-8). Se state utilizzando una connessione tramite modem, ciò può richiedere svariati minuti. Page 8 · Robotica con il Boe-Bot Figura 1-8 Finestra di Progresso del Download Quando il download è completo, lasciate aperta la finestra mostrata in Figura 1-9 mentre passate alla sezione seguente - Esercizio #2: Installazione del Software. Figura 1-9 Finestra di termine del Download Andare all’ Esercizio #2: Installazione del Software. Gli altri download gratuiti nel sito web della Parallax includono: • • • • Questo testo ed altri testi Stamps in Class Video di Robot Altro software gratuito Centinaia di applicazioni ed esperimenti che potete provare! Trovare il Software sul CD della Parallax Potete anche installare l’ Editor del BASIC Stamp dal CD della Parallax, ma il CD deve essere più recente di Aprile, 2003 in modo che possiate avere la versione dell’ Editor del BASIC Stamp che sia compatibile con gli esempi di questo. Potete trovare l’anno ed il mese del CD Parallax esaminando l’etichetta del CD. Inserite il CD della Parallax nel drive del vostro computer. Il browser del CD della Parallax si chiama applicazione di benvenuto. E viene mostrato nella Figura 1-10 e dovrebbe partire automaticamente appena inserite il CD nel drive del computer. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 9 Se l’applicazione di benvenuto non dovesse partire automaticamente, fate un doppioclick sull’icona My Computer, quindi doppio-click sul vostro drive del CD, e quindi doppio-click su Welcome. Fate click il link Software mostrato in Figura 1-10. Figura 1-10 Il Browser del CD della Parallax Fate click il + vicino alla cartella del BASIC Stamps mostrata in Figura 1-11. Fate click il + vicino alla cartella Windows. Fate click l’icona del dischetto floppy etichettata “Stamp 2/2e/2sx/2p/2pe (stampw.exe)”. Continuate nell’ Esercizio #2: Installazione del Software. Page 10 · Robotica con il Boe-Bot Figura 1-11 Il Browser del CD della Parallax Selezionate la pagina del programma di installazione dell’ Editor del BASIC Stamp. I download Gratuiti del sito web della Parallax sono inclusi nel CD della Parallax, ma solamente fino alla data di creazione del CD. La data sull’etichetta del CD indica quando è stato creato. Se il CD è vecchio di appena uno o due mesi, probabilmente avreste l’ultima versione del software. Se il CD è più vecchio, prendete in considerazione la richiesta alla Parallax di un CD più recente oppure scaricate i file che vi servono dal sito web della Parallax. ESERCIZIO #2: INSTALLAZIONE DEL SOFTWARE Sia che abbiate scaricato l’installatore dell’editor del BASIC Stamp che lo abbiate localizzato sul CD della Parallax. È ora tempo di attivare l’installatore dell’editor del BASIC Stamp. Installazione passo passo del Software Se avete scaricato l’installatore dell’editor del Editor del BASIC Stampda internet, Fate click il pulsante Open nella finestra di Download Completato mostrata in Figura 1-12. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 11 Figura 1-12 Finestra di Download Completato If you skipped here from the “Download del Software da Internet” section, click the Open button. Se avete localizzato il software sul CD della Parallax, Fate click il pulsante Install mostrato in Figura 1-13. Figura 1-13 Il Browser del CD della Parallax Il pulsante Install è posizionato in basso nella finestra. Quando la finestra InstallShield Wizard dell’ Editor del BASIC Stamp si apre, Fate click il pulsante Next mostrato in Figura 1-14. Figura 1-14 InstallShield Wizard per l’ Editor del BASIC Stamp Per tipo di impostazione selezionate Typical come mostrato in Figura 1-15. e Fate click il pulsante Next. Page 12 · Robotica con il Boe-Bot Figura 1-15 tipo di impostazione Quando l’ InstallShield Wizard vi dice “Ready to Install the Program”, Fate click il pulsante Install mostrato in Figura 1-16. Figura 1-16 Ready to Install Fate click il pulsante Install. Quando la finestra InstallShield Wizard vi dice “InstallShield Wizard Completed” come mostrato in Figura 1-17, Fate click Finish. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 13 Figura 1-17 InstallShield Wizard Completed ESERCIZIO #3: IMPOSTAZIONE DELL’ HARDWARE E COLLAUDO DEL SISTEMA Perché il BASIC Stamp possa funzionare deve essere alimentato. Deve anche essere collegato al PC in modo che possa essere programmato. Dopo aver fatto questi collegamenti, potete usare l’ Editor del BASIC Stamp per collaudare il sistema. Questo Esercizio vi mostrerà come. Impostazione del cavo seriale del Computer La Board of Education o la BASIC Stamp HomeWork Board deve essere collegata al vostro PC o laptop con un cavo seriale o con un adattatore da USB a Seriale. Se state usando un cavo seriale, collegatelo ad una porta COM disponibile sul vostro computer come mostrato in Figura 1-18. Page 14 · Robotica con il Boe-Bot Com Figura 1-18 Porta seriale del PC o Laptop Inserite il cavo seriale in una porta COM disponibile sul vostro PC o laptop. Se state usando un adattatore da USB a Seriale, seguite le istruzioni di installazione hardware e software fornite con il prodotto. Adattatore US232B/LC da USB a Seriale della FTDI: al momento della stesura di questo testo, l’adattatore da USB a Seriale US232B/LC costruito dalla Future Technology Devices International è l’adattatore consigliato per l’uso con i prodotti della Parallax. L’adattatore US232B/LC viene fornito come mostrato in Figura 1-19 ed un mini-CD ROM contenente i driver per l’uso con diversi sitemi operativi incluso ® Microsoft Windows . Download dei Driver Software US232B/LC: I driver software ed altre informazioni circa questo prodotto possono essere scaricati dal sito: http://www.ftdichip.com/FT232.htm. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 15 Figura 1-19 Adattatore US232B/LC da USB a Seriale della FTDI Questo adattatore ha il codice Parallax # 800-00030. e viene consegnato con un CD contenente il software (non mostrato). Ora che il cavo per la programmazione è collegato al vostro computer, è tempo di assemblare l’hardware. Se avete un BASIC Stamp ed una Board of Education, seguite le istruzioni della prossima sezione (Istruzioni per il Collegamento della Board of Education ). Se avete una BASIC Stamp HomeWork board, saltate alle istruzioni per il collegamento della BASIC Stamp HomeWork Board a pagina 19. Se le vostre attrezzature sono già collegate, saltate la sezione per il collaudo della comunicazione a pagina 21. Istruzioni per il Collegamento della Board of Education Se avete un BASIC Stamp ed una Board of Education, la Figura 1-20 mostra ed elenca l’hardware che vi servirà per iniziare. Hardware Richiesto (1) Striscia con quattro piedini in gomma (1) Porta Pile (1) BASIC Stamp 2 (1) Board of Education (4) Pile alcaline tipo AA stilo (non incluse) Page 16 · Robotica con il Boe-Bot Figura 1-20 Hardware necessario per iniziare con il BASIC Stamp e con la Board of Education Collegamento dell’ Hardware I piedini in gomma mostrati in Figura 1-21, devono essere applicati nella faccia inferiore della vostra Board of Education. Nella faccia inferiore della Board of Education sono disegnati dei cerchietti dove ciascun piedino in gomma deve essere applicato. Togliere ciascun piedino in gomma dalla striscia adesiva ed applicatelo nella faccia inferiore della Board of Education. Figura 1-21 Piedini in Gomma (sinistra) Applicati alla faccia inferiore della Board of Education (right) La Board of Education Rev C ha un interruttore a 3-posizioni (vedere la Figura 1-22). La posizione-0 serve a spengere completamente la Board of Education. Sia che usiate le pile sia che usiate l’alimentatore la Board of Education Rev C, quando l’interruttore a 3 posizioni è messo su 0, il dispositivo è spento. Mettete l’interruttore a 3-posizioni sulla Board of Education in posizione-0. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 17 Figura 1-22 Interruttore a 3-posizioni 0 1 2 Metterlo in posizione-0 per togliere l’alimentazione. Solamente la Board of Education Rev C ha un interruttore a 3-posizioni. Se avete la Board of Education Rev A o B: • • Quando verrete invitati a mettere in posizione-0 l’interruttore a 3 posizioni, togliete l’alimentazione scollegando il pacco porta pile (il contrario della Figura 1-24, passo 3). Quando verrete invitati a mettere in posizione-1 o in posizione-2, l’interruttore a 3 posizioni, collegate il pacco porta pile come mostrato in Figura 1-24, passo 3. Mettete le pile nel porta pile (Figura 1-23). Controllate che il terminale negativo di ciascuna pila sia orientato verso la molla del porta pile. La polarità per ciascuna pila è anche riportato in ogni alloggiamento delle pile. Figura 1-23 Porta Pile Indicatori di Polarità nel porta pile (sinistra) e pile inserite nella posizione corretta (destra). Se il modulo BASIC Stamp non è già inserito nello zoccolo della vostra Board of Education, inseritelo come mostrato nella Figura 1-24, passo-1. confrontate la tacca di riferimento del modulo BASIC Stamp con quella segnata sulla vostra scheda, in modo da non inserirlo al contrario. Controllate inoltre che i piedini siano allineati correttamente in modo che siano corrispondenti con le fessure dello zoccolo, quindi premetelo a fondo. Collegate il cavo seriale alla Board of Education come nella Figura 1-24, passo-2. Collegate il portapile nel connettore 6-9 VDC come nella Figura 1-24, passo-3. Page 18 · Robotica con il Boe-Bot 15 14 Vdd 13 12 6-9VDC 9 Vdc Battery Red Black X4 Pwr 3 STA MPS CLA SS in TM 1 Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7 U1 Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8 Vss P1 P3 P5 P7 P9 P11 P13 P15 Vin Vss P0 P2 P4 P6 P8 P10 P12 P14 Vdd X1 Reset Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 0 1 2 www.stampsinclass.com Board of Education © 2000-2003 2 Figura 1-24 Board of Education, BASIC Stamp, Cavi delle Pile e Seriale Collegate i componenti nell’ordine mostrato nel disegno. 1 Muovete l’interruttore a 3-posizioni dalla posizione-0 alla posizione-1 per alimentare la scheda. Figura 1-25 Interruttore a 3-posizioni 0 1 2 Mettetelo in posizione-1 per accendere. Il LED verde etichettato Pwr on sulla Board of Education deve ora essere acceso. Figura 1-26 Il BASIC Stamp e la Board of Education Collegate e Pronti per essere Programmate Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 19 Saltate alla sezione Collaudo della Comunicazion a pagina 21. Istruzioni per il Collegamento della BASIC Stamp HomeWork Board Questa sezione vi guiderà nella connessione del BASIC Stamp al vostro computer e ad un alimentatore (pila da 9 V) se avete una BASIC Stamp HomeWork Board. Hardware Richiesto Radunate i seguenti componenti dal vostro kit Figura 1-27 (1) Striscia di quattro piedini adesivi in gomma (1) una pila da 9 V (non inclusa) (1) BASIC Stamp HomeWork Board Figura 1-27 Hardware richiesto per la BASIC Stamp HomeWork Board Togliere ciascun piedino in gomma dalla striscia adesiva ed applicatelo nella faccia inferiore della HomeWork Board vicino ai fori di fissaggio ad ogni angolo della scheda come mostrato nella Figura 1-28. Figura 1-28 Piedini in Gomma Collegate il cavo seriale e la pila alla HomeWork Board (Figura 1-29, passi 1 e 2). Page 20 · Robotica con il Boe-Bot 1 STAM PS CL ASS (916) 624-8333 www.parallaxinc.com www.stampsinclass.com in Vdd Vin Figura 1-29 HomeWork Board, Pila e Cavo Seriale Rev A Vss X3 2 Power Powercell Alkaline Battery Reset P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 Inserite il Cavo Seriale e la Pila da 9 V nella HomeWork Board. X2 © 2002 BASIC Stamp HomeWork Board La Figura 1-30 mostra la BASIC Stamp HomeWork Board collegata alla sua alimentazione a pila ed al cavo seriale. Notate che Il Led verde Pwr non si accende quando inserite la pila ma solamente quando un programma stà girando. Siete ora pronti per il collaudo della connessione di programmazione tra il BASIC Stamp ed il vostro PC/laptop. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 21 Figura 1-30 La BASIC Stamp HomeWork Board Pronta per la programmazione Collaudo della Comunicazione Primo, attivate il programma clickando due volte sull’icona dell’Editor del BASIC Stamp nel desktop. Dovrebbe assomigliare all’icona mostrata in Figura 1-31. Figura 1-31 Icona dell’ Editor del BASIC Stamp Cercate un’icona simile a questa sul desktop del vostro computer. Per attivare l’Editor del BASIC Stamp può anche essere usato il menù di Avvio di Windows. Fate click sul pulsante Avvio di Windows, qundi selezionate Programs → Parallax, Inc. → Stamp Editor 2…, e poi Fate click l’icona dell’Editor del BASIC Stamp. La finestra dell’Editor del BASIC Stamp dovrebbe ora essere simile a quella mostrata nella Figura 1-32. La prima volta che attivate l’ Editor del BASIC Stamp, possono essere visualizzati alcuni messaggi ed una lista delle porte COM trovate dal programma sul vostro computer. Per essere sicuri che il BASIC Stamp comunichi con il computer, Fate click il menu Run, quindi selezionate Identify. Page 22 · Robotica con il Boe-Bot Figura 1-32 Editor del BASIC Stamp Apparirà una finestra di identificazione simile a quella mostrata in Figura 1-33. l’esempio nella Figura indica che è stato rilevato un BASIC Stamp 2 sulla porta COM2. Figura 1-33 Finestra di Identificazione Esempio: BASIC Stamp 2 trovato sulla COM2. Controllate la finestra di identificazione per accertarvi che un BASIC Stamp 2 sia stato trovato su una delle porte COM. Se il BASIC Stamp 2 è stato rilevato, allora siete pronti per l’Esercizio #4: il vostro primo programma. Se la finestra di identificazione non rileva nessun BASIC Stamp 2 su nessuna delle porte COM, per suggerimenti andate alla pagina 289 (Appendice A: Ricerca Guasti nella Comunicazione dal PC al BASIC Stamp ). ESERCIZIO #4: IL VOSTRO PRIMO PROGRAMMA Il primo programma che scriverete e collauderete dirà al BASIC Stamp di inviare un messaggio al vostro PC o laptop. La Figura 1-34 mostra come il BASIC Stamp invia un flusso di uno e zero per comunicare caratteri di testo che devono essere visualizzati sul PC o laptop. Questi uno e zero sono chiamati numeri binari. Come presto vedrete il software dell’Editor del BASIC Stamp ha la capacità di rilevare e visualizzare questi messaggi. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 23 11 10 0 1000 0100 01 10 00 10 1 0 1 10 10101001 0 0 1 000 100 1 0 6-9VDC 9 Vdc Battery Figura 1-34 Messaggi dal BASIC Stamp al vostro Computer STA MPS CL A SS in TM 101 0 11 00 001 0 10 0 1 1 Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7 U1 Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8 10 0 www.stampsinclass.com Il vostro Primo Programma I programmi esempio che scriverete nell’Editor del BASIC Stamp e che scaricherete al BASIC Stamp saranno sempre mostrati con un sottofondo grigio chiaro. Di seguito viene mostrato un esempio: Programma Esempio: HelloBoeBot.bs2 ' Robotica con il Boe-Bot - HelloBoeBot.bs2 ' Il BASIC Stamp invia un messaggio di testo al vostro PC/laptop. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Ciao, questo è un messaggio dal vostro Boe-Bot." END Digiterete questo programma nell’Editor del BASIC Stamp. Alcune righe del programma vengono inserite automaticamente clickando sui pulsanti della barra degli Strumenti. Altre righe le dovrete digitare sulla tastiera. Page 24 · Robotica con il Boe-Bot √ √ Iniziate clickando l’icona del BS2 icon (il chip verde diagonale) sulla Barra degli Strumenti, mostrata evidenziata nella Figura 1-35. Se mantenete il cursore su questo pulsante, sarà mostrata una descrizione volante di aiuto “Stamp Mode: BS2”. Poi, Fate click sull’icona ingranaggio etichettata “2.5” mostrata evidenziata nella Figura 1-36. La sua descrizione volante di aiuto è “PBASIC Language: 2.5”. Figura 1-35 Icona BS2 Figura 1-36 Icona PBASIC 2.5 Clickando su questo pulsante inserirà automaticamente “ ‘ {$STAMP BS2}” all’inizio del vostro programma. Clickando su questo pulsante inserirà automaticamente “ ‘ {$PBASIC 2.5}” all’inizio del vostro programma. USATE SEMPRE questi pulsanti della Barra degli Strumenti per aggiungere queste due righe all’inizio di ogni programma! La direttiva di Compilazione usa le parentesi { }. Se cercate di digitare questi caratteri potreste erroneamente usare le parentesi tonde ( ) o le parentesi quadre [ ]. Se lo fate, il vostro programma non funzionerà. graffe Digitate il resto del programma nell’Editor del BASIC Stamp esattamente come mostrato nella Figura 1-37. Notate che le prime due righe sono sopra le direttive di compilazione, ed il resto del programma è sotto. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 25 Figura 1-37 HelloBoeBot.bs2 inserito nell’ Editor del BASIC Stamp Salvate il vostro lavoro clickando File e selezionando Salvate, (mostrato in Figura 138). Figura 1-38 Salvataggio del programma HelloBoeBot.bs2 Digitate il nome HelloBoeBot.bs2 nel campo del nome del file in basso nella finestra salva come, vedi la Figura 1-39. Fate click il pulsante Salva. Page 26 · Robotica con il Boe-Bot Figura 1-39 Digitazione del Nome del File La prossima volta che salverete, l’Editor del BASIC Stamp salverà automaticamente con lo stesso nome (HelloBoeBot.bs2) a meno che non specifichiate un altro nome clickando File e selezionando Salva Come (invece di Salva). Fate click Run, e selezionate Run dal menu che appare (clickandolo) come mostrato in Figura 1-40. Figura 1-40 Attivazione del vostro Primo Programma HelloBoeBot.bs2 Quando il programma sarà trasferito dal PC/LapTop al vostro BASIC Stamp apparirà brevemente una finestra di avanzamento del Download. La Figura 1-41 mostra la finestra del Terminale di Debug che deve apparire quando il download è completo. Potete avere la prova che questo è un messaggio dal BASIC Stamp premendo e rilasciando il pulsante di Reset sulla vostra Board of Education o HomeWork Board. Ogni volta che premete e rilasciate il pulsante di Reset, il programma si attiverà di nuovo, e vedrete visualizzata un’altra copia del messaggio nel Terminale di Debug. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 27 Premete e rilasciate il pulsante di Reset. Vedete il secondo messaggio “Hello…” apparire nel Terminale di Debug? Figura 1-41 Terminale di Debug Il Terminale di Debug visualizza i messaggi inviati al PC/laptop dal BASIC Stamp. L’Editor del BASIC Stamp ha delle scorciatoie per i compiti più comuni. Per esempio, per attivare un programma, potete premere insieme i tasti ‘Ctrl’ e ‘R’. potete anche clickare il pulsante Run. È il triangolo blu mostrato nella Figura 1-42 che assomiglia al tasto Play di un CD player. L’aiuto volante (il suggerimento Run) apparirà se puntate al pulsante Run con il vostro mouse. Potete avere suggerimenti similari per trovare che cosa fanno gli altri pulsanti semplicemente puntandoli. Figura 1-42 Editor del BASIC Stamp Pulsanti Scorciatoia Come Funziona HelloBoeBot.bs2 Le prime due righe nell’esempio sono chiamate commenti. Un commento è una riga di testo che viene ignorata dall’Editor del BASIC Stamp, perché è inserita per facilitare la lettura del programma da parte degli umani, non per il BASIC Stamp. In PBASIC, qualsiasi cosa alla destra di un apostrofo è normalmente considerato dall’Editor del BASIC Stamp un commento. Il primo commento dice da quale libro è tratto il programma esempio e qual è il nome del programma. Il secondo commento contiene una descrizione utile, di una riga che spiega che cosa fa il programma. ' Robotics with the Boe-Bot - HelloBoeBot.bs2 Page 28 · Robotica con il Boe-Bot ' Il BASIC Stamp invia un messaggio di testo al vostro PC/laptop. Esiste un’eccezione: ci sono vari messaggi speciali che potete inviare all’ Editor del BASIC Stamp inserendoli all’interno degli apostrofi (alla destra dell’apostrofo in una data riga). Sono chiamati direttive di compilazione, ed ogni programma in questo testo userà queste due direttive: ' {$STAMP BS2} ' {$PBASIC 2.5} La prima direttiva si chiama la direttiva Stamp, ed indica all’ Editor del BASIC Stamp che scaricherete il programma in un BASIC Stamp 2. la seconda direttiva si chiama direttiva PBASIC, ed indica all’ Editor del BASIC Stamp che state usando la versione 2.5 del linguaggio di programmazione PBASIC. Un comando è una parola che potete usare per dire al BASIC Stamp di eseguire un determinato compito. Il primo dei due comandi in questo programma si chiama DEBUG: DEBUG "Ciao, questo è un messaggio dal vostro Boe-Bot." Questo è il comando che dice al BASIC Stamp di inviare un messaggio al PC tramite il cavo seriale. Il secondo comando si chiama END: END Questo commando è utile perchè mette il BASIC Stamp in modalità a basso consumo quando ha finito di svolgere il programma. In modalità a basso consumo, il BASIC Stamp attende che venga premuto il pulsante di Reset (e rilasciato), oppure che venga caricato un nuovo programma dall’ Editor del BASIC Stamp. Se il pulsante di Reset sulla vostra scheda viene premuto, il BASIC Stamp farà ripartire dall’inizio il programma che avevate caricato. Se invece viene caricato un nuovo programma, il vecchio verrà cancellato ed il nuovo (una volta caricato) partirà. Il Vostro Turno – Formattatori di DEBUG e Caratteri di Controllo Un formattatore di DEBUG è una parola–chiave che potete usare per far apparire in un certo modo nel Terminale di Debug il messaggio che il BASIC Stamp invia. DEC è un esempio di formattatore che fa visualizzare un valore decimale nel Terminale di Debug. Un esempio di carattere di controllo è CR, che invia un… a capo al Terminale di Debug. Il testo od i numeri che seguono un CR verranno visualizzati nella riga sottostante. Potete Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 29 modificare il vostro programma in modo che contenga più comandi DEBUG insieme con alcuni formattatori e caratteri di controllo. Qui viene mostrato un esempio di come farlo: Primo, salvate il programma con un nuovo nome clickando il menu File e selezionando Salvate As. Un nome nuovo valido potrebbe essere HelloBoeBotYourTurn.bs2. Modificate I commenti all’inizio del programma come descritto: ' Robotica con il Boe-Bot - HelloBoeBotYourTurn.bs2 ' Il BASIC Stamp fa semplici calcoli matematici ed invia ' i risultati al Terminale di Debug. Aggiungete queste tre righe fra il primo comando DEBUG ed il comando END: DEBUG CR, "Quanto fà 7 X 11?" DEBUG CR, "La risposta è: " DEBUG DEC 7 * 11 Salvate i cambiamenti che avete fatto clickando File e selezionando Salvate. Il vostro programma dovrebbe ora essere simile a quello mostrato in Figura 1-43. Scaricate ed attivate il programma modificato. Suggerimento: potete sia clickare ancora Run dal menu Run, come in Figura 1-40, che clickare il pulsante Run, come mostrato nella Figura 1-42. Figura 1-43 HelloBoeBot.bs2 Modificato Confrontate il vostro lavoro con il programma esempio qui mostrato. (ovviamente i commenti saranno in Italiano) Page 30 · Robotica con il Boe-Bot Dove è andato a finire il mio Terminale di Debug? Qualche volta il Terminale di Debug viene nascosto dietro la finestra dell’Editor del BASIC Stamp. Potrete sempre riportarlo in primo piano usando: il menu Run come mostrato alla sinistra della Figura 1-44, o il tasto scorciatoia del Terminale di Debug 1 mostrato a destra nella Figura, oppure il tasto F12 sulla vostra tastiera. Figura 1-44 Per riportare il Terminale di Debug 1 in primo piano Usando il menu (sinistra) ed usando il tasto scorciatoia (destra). Il vostro Terminale di Debug dovrebbe ora assomigliare alla Figura 1-45. Figura 1-45 Uscita del programma HelloBoeBot.bs2 modificato Controllate che quando rilanciate il programma, otteniate il risultato desiderato. ESERCIZIO #5: ALLA RICERCA DI RISPOSTE Il programma esempio che avete ppena terminato, presenta due comandi PBASIC: DEBUG ed END. Potete trovare alter informazioni circa questi comandi e su come vengono usati, cercandoli sia nell’help dell’Editor del BASIC Stamp oppure nel BASIC Stamp Manual. Questo Esercizio vi guiderà con un esempio di ricerca di DEBUG usando l’help dell’Editor del BASIC Stamp ed il BASIC Stamp Manual. Uso dell’help dell’Editor del BASIC Stamp Nell’Editor del BASIC Stamp, Fate click mostrato in Figura 1-46. Help, quindi selezionate Index come Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 31 Figura 1-46 Selezionare Index dal Menu di Help Digitare DEBUG nel campo etichettato Type in the keyword to find: (Figura 1-47). Quando la parola DEBUG appare nella lista sottostante, Fate click la, quindi Fate click il pulsanteDisplay. Figura 1-47 La ricerca del comando DEBUG Usando l’Help Il vostro Turno Usate le barre di scorrimento per vedere la recensione del comando DEBUG. Notare che ci sono molte spiegazioni e programmi di esempio che potete provare. Fate click la linguetta Contents, e trovate DEBUG. Fate click la linguetta Search, ed attivate una ricerca per la parola DEBUG. Ripetete questo procedimento per il comando END. Procurarsi ed usare il Manuale del BASIC Stamp Il BASIC Stamp Manual è disponibile per il download gratuito dal sito web Parallax, ed è anche incluso nel CD della Parallax. Può anche essere acquistato in forma stampata e rilegata. Page 32 · Robotica con il Boe-Bot Download del BASIC Stamp Manual dal sito web della Parallax Usando un browser web, andare a www.parallax.com. Puntare al menu Downloads per visualizzare le opzioni. Puntare al collegamento Documentation e Fate click per selezionarlo. Quando siete nella pagina di documentazione del BASIC Stamp, trovate il BASIC Stamp Manual. Fate click l’icona Download (assomiglia ad una cartella) a destra della descrizione: “BASIC Stamp Manual Version 2.0 (3.2 MB)”. Consultare il BASIC Stamp Manual sul CD Parallax Fate click sul collegamento Documentation. Fate click sul + vicino alla cartella dei BASIC Stamps. Fate click sull’icona del libro BASIC Stamp Manual. Fate click sul pulsante View. La Figura 1-48 mostra un estratto dall’indice del BASIC Stamp Manual (Pagina 2). Esso mostra che le informazioni sul comando DEBUG possono essere trovate a pagina 97. Figura 1-48 Trovare il comando DEBUG nell’indice La Figura 1-49 mostra un estratto dal BASIC Stamp Manual. Qui il comando DEBUG viene spiegato in dettaglio. Date un rapido sguardo alle spiegazioni del comando DEBUG nel BASIC Stamp Manual. Contate il numero di programmi esempio contenuti nella sezione DEBUG. Quanti sono? Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 33 Figura 1-49 Revisione del comando DEBUG nel BASIC Stamp Manual Il vostro Turno Usate l’indice del BASIC Stamp Manual per cercare il comando DEBUG. Cercate il comando END nel BASIC Stamp Manual. ESERCIZIO #6: PRESENTAZIONE DEL CODICE ASCII Nell’Esercizio #4: il vostro primo programma, avete usato il formattatore DEC con il comando DEBUG per visualizzare un numero decimale nel Terminale di Debug. Ma che cosa accade se usate il formattatore DEC con un numero? Se usate il comando DEBUG seguito da un numero senza formattatori, il BASIC Stamp leggerà quel numero come un codice ASCII. Programmazione con il codice ASCII ASCII è l’abbreviazione di Codice Standard Americano per l’Interscambio di Informazioni (American Standard Code for Information Interchange). La maggior parte dei microcontrollori e dei PC usano questo codice per assegnare un numero a ciascun tasto della tastiera. Alcuni numeri corrispondono ad azioni della tastiera, come cursore su, cursore giù, spazio e cancellazione. Altri numeri corrispondono a caratteri stampabili e simboli. I numeri dal 32 fino al 126 corrispondono a quei caratteri e simboli che il BASIC Stamp può visualizzare nel Terminale di Debug. Il programma seguente userà il codice ASCII per visualizzare le parole “BASIC Stamp 2” nel Terminale di Debug. Programma Esempio– ASCIIName.bs2 √ Digitate ed attivate ASCIIName.bs2. Page 34 · Robotica con il Boe-Bot Ricordatevi di usare le icone della barra degli strumenti per inserire le direttive di compilazione nei vostri programmi! '{$STAMP BS2} – Usate l’icona con l’integrato verde. '{$PBASIC 2.5} - Usate l’icona con la forma di ingranaggio etichettata 2.5. Potete rivedere un’immagine di queste icone a pagina 24. 'WChe cosa è un Microcontrollore- ASCIIName.bs2 'Usa il codice ASCII code in un comando DEBUG per visualizzare le parole ' BASIC Stamp 2. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG 66,65,83,73,67,32,83,116,97,109,112,32,50 END Come Funziona ASCIIName.bs2 Ciascuna lettera nel comando DEBUG che appare nel Terminale di Debug corrisponde ad un simbolo in codice ASCII. DEBUG 66,65,83,73,67,32,83,116,97,109,112,32,50 66 è il codice ASCII per la “B” maiuscola, 65 è il codice per la “A” maiuscola e così via. 32 è il codice per lo spazio tra i caratteri.Notate che ciascun numero di codice, è stato separato da virgole. Le virgole permettono all’unico comando DEBUG di trattare ciascun simbolo come se fosse preceduto dal comando. Questo è molto più semplice che dover scrivere 12 distinti comandi DEBUG. Il Vostro Turno– Explorare il codice ASCII √ √ √ √ Salvate ASCIIName.bs2 con il nome ASCIIRandom.bs2 Scegliete 12 numeri casuali fra 32 e 127. Sostituite i numeri del codice ASCII nel programma con quelli da voi scelti. Lanciate il vostro programma modificato per vedere che cosa avete ottenuto! Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 35 L’Appendice A del BASIC Stamp Manual ha una tabella dei numeri del codice ASCII e dei simboli corrispondenti. Potete cercarvi i codici corrispondenti per le lettere del vostro nome. √ √ √ √ √ Salvate ASCIIRandom.bs2 con il nome YourASCIIName.bs2 Cercate la tabella del codice ASCII nel BASIC Stamp Manual. Modificate il programma inserendo le lettere del vostro nome. Lanciate il programma per vedere se avete scandito correttamente il vostro nome. Se è così, bel lavoro, salvate il vostro programma! ESERCIZIO #7: QUANDO AVETE FINITO È importante scollegare l’alimentazione dal vostro BASIC Stamp e dalla Board of Education o dalla HomeWork Board per diverse ragioni. Primo, le vostre pile dureranno più a lungo se il sistema non assorbe corrente quando non lo state usando. Secondo, in esperimenti futuri, costruirete circuiti sull’area prototipi della Board of Education o della HomeWork Board, e mentre lo fate, l’alimentazione dovrà essere tolta. I circuiti prototipi non dovrebbero mai essere lasciati incustoditi con l’alimentazione o la pila collegata. Non potete sapere quale evento dannoso può succedere mentre non ci siete. Scollegate sempre l’alimentazione dalla vostra Board of Education o dalla HomeWork Board, anche se vi state allontanando per un minuto o due. Se siete in una classe, il vostro insegnante può darvi ulteriori istruzioni, come scollegare il cavo seriale, riporre la Board of Education/HomeWork Board in un luogo sicuro, etc. A parte questi dettagli, il passo più importante che dovete sempre seguire è scollegare l’alimentazione quando avete finito. Scollegare l’Alimentazione Con la Board of Education Rev C, scollegare l’alimentazione è semplice: Se state usando la Board of Education Rev C, muovete l’interruttore a 3-posizioni in posizione-0 spingendolo a sinistra come mostrato nella Figura 1-50. Page 36 · Robotica con il Boe-Bot Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7 Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8 U1 P10 P12 P14 Vdd P11 P13 P10 P15 P9 Vin P8 P7 X1 P6 P5 P4 P3 Reset P2 P1 P0 Figura 1-50 Scollegare l’alimentazione della Board of Education Rev C X2 0 1 2 Board of Education www.stampsinclass.com © 2000-2003 Non rimuovete il BASIC Stamp dal suo zoccolo sulla Board of Education! Resistete alla tentazione di riporre la vostra Board of Education ed il BASIC Stamp separatamente. Ogni volta che il BASIC Stamp viene rimosso e reinserito nel suo zoccolo, possono essere commessi errori che lo possono. Sebbene il BASIC Stamp sia qualchevolta spostato da uno zoccolo ad un altro durante un progetto molto grande, ciò non sarà necessario in nessuno degli esercizi di questo testo. Anche lo spegnimento della BASIC Stamp HomeWork Board è facile: Se state usando la BASIC Stamp HomeWork Board, scollegate la pila come mostrato in Figura 1-51. Vdd Vin Vss X3 Power Powercell Alkaline Battery Reset P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 Figura 1-51 Scollegare la pila dalla HomeWork Board X2 © 2002 BASIC Stamp HomeWork Board la Board of Education Rev A o B deve essere spenta togliendolo spinotto dell’alimentatore dal jack o scollegando la pila. Il vostro Turno Ora togliete l’alimentazione. Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 37 SOMMARIO Questo Capitolo vi ha guidato attraverso gli argomenti seguenti: • • • • • • • • • • • Una introduzione al BASIC Stamp Dove trovare il software dell’Editor del BASIC Stamp che userete in tutti gli esercizi e gli esperimenti di questo testo Come installare il software dell’Editor del BASIC Stamp Una introduzione al BASIC Stamp, alla Board of Education, ed alla HomeWork Board Come impostare l’hardware del BASIC Stamp Come collaudare l’hardware ed il software Come scrivere e lanciare un programma PBASIC L’uso dei comandi DEBUG ed END L’uso del carattere di controllo CR e del formattatore DEC Come usare l’Help dell’Editor del BASIC Stamp ed il BASIC Stamp Manual Come togliere l’alimentazione dalla Board of Education o dalla HomeWork Board quando avete finito Domande 1. Quale dispositivo è il cervello del vostro Boe-Bot? 2. Qual è lo scopo del cavo seriale? 3. Quando il BASIC Stamp invia un carattere al vostro PC/laptop, quale tipo di numeri vengono usati per inviare messaggi attraverso il cavo seriale? 4. Che cosa dovreste fare dopo aver digitato il vostro programma nell’Editor del BASIC Stamp prima di lanciare il programma? 5. qual è il nome della finestra che visualizza i messaggi inviati dal BASIC Stamp al vostro PC/laptop? 6. Che cosa significa un apostrofo all’inizio di una riga di codice di programma PBASIC? 7. Quali comandi PBASIC avete imparato in questo capitolo? 8. Diciamo che vogliate fare una pausa per uno spuntino, o può darsi che vogliate smettere per un periodo più lungo e tornare al vostro progetto dopo un paio di giorni. Che cosa dovete sempre fare prima di smettere? Page 38 · Robotica con il Boe-Bot Esercizi 1. Spiegate che cosa potete fare con ciascun comando PBASIC che avete imparato in questo capitolo. 2. Spiegate che cosa accadrebbe se toglieste tutti i caratteri di controllo CR dai comandi DEBUG del programma seguente, scrivete quindi che cosa apparirebbe nel Terminale di Debug. DEBUG "Ciao, Questo è un messaggio dal vostro Boe-Bot!" DEBUG CR, "Quanto fa 7 X 11?" DEBUG CR, "La risposta è: " 3. Spiegate che cosa fa l’asterisco in questo comando: DEBUG DEC 7 * 11 4. Indovinate che cosa visualizzerebbe il Terminale di Debug se lanciate questo comando: DEBUG DEC 7 + 11 5. C’è un problema con questi due comandi. Quando lanciate il codice, i numeri visualizzati sono attaccati come se fosse un numero unico più grande invece di due più piccoli. Modificate questi due comandi in modo che le risposte appaiano nel Terminale di Debug in due righe diverse. DEBUG DEC 7 * 11 DEBUG DEC 7 + 11 Progetti 1. Usate DEBUG per visualizzare la soluzione del problema: 1 + 2 + 3 + 4. 2. Usate la sezione a pagina 28 de Il Vostro Turno – Formattatori di DEBUG come guida per salvare il vostro file con un nuovo nome e modificatelo. Usate il nome di file HelloBoeBotCh01Project02.bs2. Aggiungete questa riga al programma e lanciatelo: DEBUG 65, 66, 67, 68, 69, 70 Quindi, inserite il formattatore DEC prima di ciascuno di questi numeri in modo che la riga sia: DEBUG DEC 65, DEC 66, DEC 67, DEC 68, DEC 69, DEC 70 Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 39 Rilanciate il programma e descrivete che cosa fa il formattatore DEC. Quindi, spiegate in una relazione di un paragrafo che cosa stà facendo ciascuna di queste righe: DEBUG DEBUG DEBUG DEBUG DEBUG "Ciao!" 32, 32, 32, 32 "Di nuovo Ciao!" 13 "Addio." 3. Predire che cosa vi aspettereste di vedere se rimuoveste il formattatore da questo comando. Usate un progamma PBASIC per controllare la vostra predizione. DEBUG DEC 7 * 11 4. riguardate la Figura 1-34 a pagina 23. In quale modo potete inviare il numero 65 (che rappresenta una ‘A’) se siete limitati agli zero ed agli uno? La risposta è che il numero 65 può essere rappresentato usando gli uno e gli zero. Imparerete di più in seguito circa il sistema di numerazione binaria (a base-2). Per ora, limitatevi a modificare un programma aggiungendogli questo segmento di codice ed a verificare che faccia le stesse cose del vostro segmento di codice del progetto 2. ' Invia i codici ASCII 65, 66, 67, 68, 69, e 70. ' Il Terminale di Debug visualizzerà "ABCDEF". DEBUG %01000001, %01000010, %01000011 DEBUG %01000100, %01000101, %01000110 5. Quali righe potete cancellare in HelloBoeBotYourTurn.bs2 se mettete il comando mostrato sotto nella riga subito prima del comando END nel programma? Controllate la vostra ipotesi (la vostra predizione di che cosa avverrà). Assicuratevi di salvare HelloBoeBotYourTurn.bs2 con un altro nome come ad esempio HelloBoeBotCh01Project05.bs2. Fate quindi le vostre modifiche, salvate e lanciate il vostro programma. DEBUG "What's 7 X 11?", CR, "The answer is: ", DEC 7 * 11 Page 40 · Robotica con il Boe-Bot Ulteriori Ricerche Seguendo le indicazioni di questo Capitolo, avete visitato la sezione Software del sito web Parallax o del CD Parallax per avere una copia dell’Editor del BASIC Stamp. Potete andare alla sezione Documentation sia del sito web Parallax che del CD Parallax per avere una copia gratuita di questo testo che del BASIC Stamp Manual. Potete anche acquistare delle copie stampate dalla Parallax (ovviamente solo in lingua Inglese). “BASIC Stamp Manual”, Version 2.0c, Parallax Inc., 2000 Cercandoli nel BASIC Stamp Manual potete imparare molto di più sui comandi DEBUG ed END. Potete trovarli nell’Indice. Il BASIC Stamp Manual ha molti più esempi che potrete provare, insieme a lezioni simili a quelle nella sezione Progetti che avete appena terminato. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 41 Capitolo 2: I Servo Motori del vostro Boe-Bot Questo Capitolo vi guiderà nelle operazioni di collegamento, regolazione e collaudo dei motori del Boe-Bot. Per fare questo, dovrete comprendere alcuni comandi PBASIC e tecniche di programmazione che controllano la direzione, la velocità e la durata del movimento dei servo. Pertanto gli esercizi #1, #2, e #5 vi presenteranno questi strumenti di programmazione, e poi gli esercizi #3, #4, e #6 applicheranno queste tecniche ai servo motori. Dal momento che il controllo preciso dei servo è la chiave delle prestazioni del Boe-Bot, il completamento di questi esercizi prima di montare i servo nel telaio del BoeBot è sia importante che necessario! PRESENTAZIONE DEI SERVO A ROTAZIONE CONTINUA I servo Parallax a rotazione continua mostrati in Figura 2-1 sono i motori che faranno girare le ruote del Boe-Bot. Questa Figura illustra le parti esterne dei servo. A molti di questi componenti verrà fatto riferimento man mano che procederete nelle istruzioni di questo e del prossimo capitolo. Figura 2-1 I servo a rotazione continua della Parallax Control horn Mounting Flange Access hole for center adjusting feedback potentiometer Phillips screw Label should read “Continuous Rotation” Case contains motor, circuits, and gears Cable for power and control signal Mounting Flange Plug for RC servo connection ports on Board of Education CONSIGLIO: potete trovare utile contrassegnare questa pagina per poterla consultare in seguito. Pagina 42 · Robotica con il Boe-Bot Confronto fra Servo Standard e Servo a Rotazione Continua: I servo standard sono progettati per ricevere segnali elettronici che gli dicono di fermarsi in una posizione particolare. I servo standard sono comunemente usati con il radiocomando nei flap degli aeromodelli, nei timoni dei modellini di barche, e nel volante dei modellini di auto. I servo a rotazione continua usano segnali elettronici simili, ma invece di mantenere una determinata posizione, essi girano in un determinato verso ad una velocità determinata. ESERCIZIO #1: COME CONTROLLARE IL TEMPO E RIPETERE AZIONI Il controllo della velocità di un servo motore implica un programma che faccia inviare dal BASIC Stamp lo stesso messaggio in continuazione. Perché il servo mantenga la sua velocità e direzione, il messaggio si deve ripetere circa 50 volte al secondo. Questo esercizio ha alcuni programmi esempio in PBASIC che dimostrano come ripetere lo stesso messaggio e come controllare la temporizzazione del messaggio. Visualizzazione dei Messaggi a Ritmi Umani Per dire al BASIC Stamp di attendere un momento prima di eseguire il comando successivo potete usare il comando PAUSE. PAUSE Duration Il numero che mettete alla destra del comando PAUSE si chiama argomento Duration, ed il suo valore indica al BASIC Stamp per quanto tempo deve attendere prima di andare al comando seguente. L’unità dell’argomento Duration sono i millesimi di secondo (ms). Così, se volete attendere per un secondo, usate un valore di 1000. qui viene mostrato come dovrebbe essere scritto il comando: PAUSE 1000 Se volete attendere per un tempo doppio, provate: PAUSE 2000 Un secondo si abbreva con “s”. In questo testo, quando vedete 1s, significa un secondo. Un millisecondo è un millesimo di secondo, e si abbrevia con “ms”. Il comando PAUSE 1000 ritarda il programma di 1000 ms, che è 1000/1000 di secondo, che è equivalente ad un secondo, o 1 s. Avete Capito? Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 43 Programma Esempio: TimedMessages.bs2 Ci sono molti modi differenti di usare il comando PAUSE. Questo programma esempio usa PAUSE per ritardare la visualizzazione dei messaggi che vi dicono quanto tempo è trascorso. Il programma dovrebbe attendere un secondo prima di inviare il messaggio “Un secondo è trascorso …” ed altri due prima di visualizzare il messaggio “Tre secondi sono trascorsi…”. Digitate il programma seguente nell’Editor del BASIC Stamp. Salvate il programma con il nome “TimedMessages.bs2”. Lanciate il programma, quindi osservate il ritardo tra i messaggi. ' Robotica con il Boe-Bot - TimedMessages.bs2 ' mostra come il comando PAUSE possa essere usato per visualizzare messaggi ' a velocità umana. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Partenza del Contatore..." PAUSE 1000 DEBUG CR, " Trascorso Un secondo..." PAUSE 2000 DEBUG CR, " Trascorsi Tre secondi..." DEBUG CR, "Fatto." END Da ora in poi, le tre istruzioni che vengono prima di questo programma saranno riassunte come: Digitate, salvate e lanciate TimedMessages.bs2. Il Vostro Turno– Pause di Diversa Duration Potete cambiare il ritardo tra i messaggi cambiando gli argomenti Duration dei comandi PAUSE. Provate a cambiare gli argomenti PAUSE Duration da 1000 a 2000 e poi a 5000 e 10000, per esempio: Pagina 44 · Robotica con il Boe-Bot DEBUG "Partenza del contatore..." PAUSE 5000 DEBUG CR, "Trascorsi cinque secondi..." PAUSE 10000 DEBUG CR, " Trascorsi quindici secondi..." Lanciate il programma modificato. Provate per gli argomenti Duration anche numeri come 40 e 100; saranno molto brevi. In Continuazione Una delle cose migliori dei computer e dei microcontrollori è che non si lamentano mai di annoiarsi a fare la stessa cosa in continuazione. qui c’è un esempio di un programma che ripete la stessa operazione, in continuazione. Potete inserire i vostri comandi tra le parole DO e LOOP se volete che vengano eseguite in continuazione. DO…LOOP Per esempio, diciamo che volete visualizzare un messaggio in continuazione, ogni secondo. Semplicemente mettetei vostri comandi DEBUG e PAUSE tra le parole DO e LOOP in questo modo: DO DEBUG "Ciao!", CR PAUSE 1000 LOOP Programma Esempio: HelloOnceEverySecond.bs2 Digitate, Salvate e Lanciate HelloOnceEverySecond.bs2. Verificate che il messaggio “Ciao!” sia visualizzato una volta al secondo. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 45 ' Robotica con il Boe-Bot - HelloOnceEverySecond.bs2 ' Visualizza un messaggio una volta al secondo. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG "Ciao!", CR PAUSE 1000 LOOP Il Vostro Turno– Un Messaggio Differente Potete modificare il vostro programma in modo che una parte di esso sia eseguita una sola volta, ed un’altra parte venga eseguita in continuazione. Modificate il programma in modo che i comandi siano come i seguenti: DEBUG "Ciao!" DO DEBUG "!" PAUSE 1000 LOOP Lanciatelo e vedete cosa succede! Potete anticipare il risultato? ESERCIZIO #2: CONTROLLARE IL TEMPO E RIPETERE AZIONI CON UN CIRCUITO In questo Esercizio, costruirete un circuito che emette luce permettendovi di “vedere” il genere di segnali usati per controllare i motori del Boe-Bot. Che cosa è un Microcontrollore? Estratti – Questo Esercizio contiene estratti scelti dalla guida per studenti Che cosa è un Microcontrollore? v2.0. √ Anche se avete familiarità con gli argomenti di Che cosa è un Microcontrollore ?, non saltate questo Esercizio. Nella seconda metà di questo esercizio, esaminerete i segnali che controllano i vostri servo e sui diagrammi di temporizzazione da un punto di vista diverso da quello presentato nel testo Che cosa è un Microcontrollore? Pagina 46 · Robotica con il Boe-Bot Presentazione del LED e della Resistenza Una Resistenza è un componente che si oppone “resiste” al passaggio dell’elettricità. Questo flusso di elettricità si chiama corrente. Ciascuna resistenza ha un valore che indica con quanta forza si oppone al flusso di corrente. Questa valore di resistenza si indica in ohm, ed il simbolo per l’ohm è la lettera greca omega - Ω. La resistenza con cui lavorerete in questo esercizio è la resistenza da 470 Ω mostrata in Figura 2-2. La resistenza ha due fili (chiamati terminali), uno a ciascuna estremità. Tra i due terminali c’è un corpo ceramico, ed è questa la parte che resiste al flusso di corrente. La maggior parte degli schemi circuitali con delle resistenze usa il simbolo sulla sinistra con la linea a zig-zag per indicare alle persone che stanno costruendo il circuito che deve usare una resistenza da 470 Ω. Si chiama simbolo schematico. Il disegno sulla destra è un disegno di componente usato in qualche testo Stamps in Class per principianti per aiutarvi nella costruzione dei circuiti. Gold Silver or Blank 470 Ω Yellow Violet Brown Figura 2-2 Componente Resistenza da 470 Ω Simbolo Schematico (sinistra) e disegno pratico (destra) Le strisce colorate indicano il valore della resistenza. Vedere l’Appendice C: Codice Colori delle Resistenze per informazioni su come determinare il valore delle resistenze a partire dalle strisce colorate dipinte sul corpo in ceramica. Un diodo è una dispositivo che fa scorrere la corrente solo in un senso, ed un diodo emettitore di luce (Light Emitting Diode = LED) emette luce quando la corrente lo attraversa. A differenza del codice colori delle resistenze, il colore del LED normalmente vi indica di quale colore si illuminerà quando la corrente lo attraversa. La marcatura di un LED è contenuta nella sua forma. Dal momento che un LED è un dispositivo unidirezionale, lo dovrete collegare nel modo giusto, o non funzionerà come voluto. La Figura 2-3 mostra il simbolo schematico di un LED ed il disegno del componente. Un LED ha due terminali. Uno si chiama anodo, l’altro si chiama catodo. In questo esercizio, dovrete inserire un LED in un circuito, e dovrete fare attenzione ed essere sicuri che i terminali anodo e catodo siano correttamente collegati al circuito. Sul disegno del componente, l’anodo è etichettato con il segno più (+). Sul simbolo schematico, l’anodo è la parte larga del triangolo. In questo disegno di componente, il terminale catodo è il Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 47 piedino etichettato con un segno meno (-), e sul simbolo schematico, il catodo è la linea sul vertice del triangolo. Figura 2-3 Disegno del componente del LED e simbolo schematico Disegno del Componente (sopra) e simbolo schematico (sotto). Nelle figure seguenti il disegno del LED avrà un + vicino al terminale anodo. _ + LED Quando iniziate la costruzione del vostro circuito, assicuratevi di controllare il simbolo schematico ed il disegno del componente. Per il disegno del componente, notate che i terminali del LED sono di lunghezza diversa. Il terminale più lungo è l’anodo, ed il più corto è il catodo. Inoltre, se guardate attentamente al corpo plastico del LED, è rotondo con uno smusso dal lato del terminale più corto che vi indica il catodo. Cosa molto utile se i terminali sono stati tagliati alla stessa lunghezza. Componenti del Circuito di Prova del LED (2) LED – rossi (2) Resistenze – 470 Ω (giallo-viola-marrone) Circuito di Prova del LED Se avete completato il testo Che cosa è un Microcontrollore?, senza dubbio avete familiarità con il circuito mostrato in Figura 2-4. il lato sinistro di questa figura mostra lo schema del circuito, ed il lato destro mostra un esempio di schema di cablaggio del circuito costruito sull’area prototipi della vostra scheda. Costruite il circuito mostrato in Figura 2-4. Assicuratevi che il terminale corto dei LED (i catodi) siano inseriti nei connettori neri etichettati Vss. Pagina 48 · Robotica con il Boe-Bot Assicuratevi che i terminali lunghi (gli anodi, marcati con un ⊕ nello schema di cablaggio) siano collegati nei fori dell’area prototipi esattamente come mostrato. Vdd X3 P13 470 Ω P12 470 Ω LED Vss LED Vss P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Vin + Vss + Figura 2-4 Due LED Collegati ai pin I/O del BASIC Stamp P13 e P12 Schema elettrico (sinistra) e schema di cablaggio (destra). Nuovo nella costruzione dei Circuiti? Vedere l’ Appendice D: Regole di Esecuzione dei Prototipi. La Figura 2-5 mostra ciò che farà fare al circuito LED il BASIC Stamp programmato. Immaginate di avere una pila da 5 volt (5 V). Sebbene una pila da 5 V non sia reale, la Board of Education ha un dispositivo chiamato regolatore di tensione che alimenta il BASIC Stamp con l’equivalente di una pila da 5 V. Quando collegate un circuito a Vss, è come collegarlo al polo negativo della pila da 5 V. Quando collegate l’altro capo del circuito a Vdd, è come se lo collegaste al polo positivo della pila da 5 V. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 49 Vdd + N - - N N 5V Vss _ +++ +++ +++ --- - -N --N N - + + = N Vdd + - N N N - - - - - - - - 5V Vss _ +++ +++ +++ -----N - NN - Figura 2-5 Interruzione del BASIC Stamp Il BASIC Stamp può essere programmato per collegare internamente il circuito del LED a Vdd od a Vss. - Volt è abbreviato in V. Che significa 5 volts viene abbreviato con 5 V. Quando date tensione ad un circuito, è come applicargli “pressione” elettrica. La Corrente è riferita al ritmo con cui gli elettroni passano in un circuito. Vedrete spesso le misure di corrente espresse in Ampere, abbreviato con A. La quantità di corrente che un motore elettrico assorbe viene misurato in Ampere, per esempio 2 A, 5 A, etc. Per quanto, le correnti che gestirete nella Board of Education siano misurate in millesimi di Ampere, o milliampere. Per esempio, nel circuito di Figura 2-5 scorrono 10.3 mA. Quando questi collegamenti sono stati fatti, vengono applicati al circuito 5 V di pressione elettrica forzando gli eletttroni a passare attraverso il LED facendolo accendere. Non appena scollegate il terminale della resistenza dal polo positivo, la corrente cessa di scorrere ed il LED si spenge. Potete fare un ulteriore passo collegando il terminale della resistenza a Vss, che ottiene lo stesso risultato. Questa è l’azione per cui programmerete il BASIC Stamp per far accendere (emettere luce) e spengere (non emettere luce) il LED. Programma che controlla il circuito di prova dei LED Per far sì che il BASIC Stamp colleghi alternativamente un LED a Vdd ed a Vss potete usare i comandi HIGH e LOW. L’argomento Pin è un numero tra 0 e 15 che indica al BASIC Stamp quale pin di I/O collegare a Vdd o Vss. HIGH Pin LOW Pin Per esempio, se usate il comando HIGH 13 Dice al BASIC Stamp di collegare il pin I/O P13 a Vdd, che accende il LED. Pagina 50 · Robotica con il Boe-Bot Similmente, se usate il comando LOW 13 Dice al BASIC Stamp di collegare il pin I/O P13 a Vss, che spenge il LED. Provate. Programma Esempio: HighLowLed.bs2 Digitate, Salvate e Lanciate HighLowLed.bs2. Verificate che il circuito LED collegato a P13 si accenda e si spenga, una volta al secondo. ' Robotica con il Boe-Bot – HighLowLed.bs2 ' Accende e spenge il LED collegato a P13 una volta al secondo. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il LED collegato a Pin 13 stà lampeggiando!" DO HIGH 13 PAUSE 500 LOW 13 PAUSE 500 LOOP Come Funziona HighLowLed.bs2 La Figura 2-6 mostra come il BASIC Stamp possa collegare un circuito LED alternativamente a Vdd ed a Vss. Quando è collegato a Vdd, il LED emette luce. Quando è collegato a Vss, il LED non emette luce. Il comando HIGH 13 dice al BASIC Stamp di collegare P13 a Vdd. Il comando PAUSE 500 dice al BASIC Stamp di lasciare il circuito in quello stato per 500 ms. Il comando LOW 13 dice al BASIC Stamp di collegare il LED a Vss. Di nuovo, il comando PAUSE 500 dice al BASIC Stamp di lasciarlo in quello stato per altri 500 ms. Dal momento che questi comandi sono messi tra i comandi DO e LOOP, vengono eseguiti in continuazione. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 51 SOUT 1 SIN 2 ATN 3 VSS 4 BS2 24 VIN SOUT 1 23 VSS SIN 2 22 RES ATN 3 VSS 4 P14 18 P13 8 17 P12 P4 9 16 P11 P10 P5 10 15 P10 P9 P6 11 14 P9 P8 P7 12 13 P8 6 18 P13 P2 7 8 17 P12 P3 P4 9 16 P11 P5 10 15 P6 11 14 P7 12 13 7 P3 Vss BS2-IC RES P15 5 P1 P2 22 VDD (+5V) P0 P14 Vdd VSS 21 P15 6 VIN 23 19 VDD (+5V) 19 5 P1 24 20 21 20 P0 BS2 Vdd Vss BS2-IC Figura 2-6 Interruzione del BASIC Stamp Il BASIC Stamp può essere programmato per collegare internamente il circuito del LED a Vdd od a Vss. Una Prova Diagnostica per il vostro Computer Alcuni computer, per esempio alcuni laptop, arresteranno il programma PBASIC dopo la prima iterazione del ciclo DO...LOOP. Questi computer non hanno una porta seriale standard. Mettendo un comando DEBUG nel programma LedOnOff.bs2, il Terminale di Debug impedisce che questo accada. Provate a rilanciare il programma senza i comandi DEBUG per vedere se il vostro computer ha il problema di questa porta seriale non standard. Non succede spesso, ma è importante per voi saperlo. √ √ √ Aprite HighLowLed.bs2. Cancellate interamente l’istruzione DEBUG. Lanciate il programma modificato osservando il LED. Se il LED lampeggia continuamente, proprio come faceva con il programma originale con il comando DEBUG, il vostro computer non ha questo problema. Se il LED lampeggia una soola volta e poi si ferma, avete un computer con una porta seriale non standard. Se scollegate il cavo seriale dalla vostra scheda e premete il pulsante di reset, il BASIC Stamp attiverà il programma normalmente senza bloccarsi. In questo caso nei vostri programmi, dovreste aggiungere un singolo comando: DEBUG "Il programma è in funzione!" Subito dopo le direttive di compilazione. Questo aprirà il Terminale di Debug e quindi anche la porta COM prevenendo così il blocco del programma dopo il primo ciclo DO…LOOP, o di qualsiasi degli altri comandi di iterazione che imparerete nei capitoli successivi. Vedrete questa istruzione in alcuni degli altri programmi esempio che normalmente non necessiterebbero di un comando DEBUG. In questo modo, potrete far Pagina 52 · Robotica con il Boe-Bot funzionare tutti gli altri programmi anche se il vostro computer non ha la porta seriale standard. Presentazione del Diagramma di Temporizzazione Un diagramma di temporizzazione è un grafico che rapporta i segnali alto (Vdd) e basso (Vss) al tempo. Il tempo aumenta da sinistra a destra, ed i segnali alti e bassi si posizionano a Vdd (5 V) od a Vss (0 V ). Il diagramma di temporizzazione di Figura 2-7 vi mostra una parte lunga 1000 ms dei segnali alti/bassi con cui avete appena finito di esercitarvi. La linea di puntini (…) alla destra dei segnali, è un modo di indicare che il segnale si ripete uguale. Figura 2-7 Diagramma di Temporizzazione di HighLowLed.bs2 500 ms … Vdd (5 V) Vss (0 V) In alto sopra il diagramma di temporizzazione vengono indicati gli stati on/off dei LED. 500 ms 1000 ms Il Vostro Turno– Far Lampeggiare l’altro LED Far lampeggiare l’altro LED (collegato a P12) è un semplice scambio di argomento del comando Pin nei comandi HIGH e LOW prima di rilanciare il programma. Modificate il programma in modo che i comandi siano uguali ai seguenti: DO HIGH 12 PAUSE 500 LOW 12 PAUSE 500 LOOP Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 53 Lanciate il programma modificato e verificate che l’altro LED lampeggi. Potete anche far lampeggiare ambedue i LED allo stesso tempo. Modificate il programma come mostrato di seguito: DO HIGH 12 HIGH 13 PAUSE 500 LOW 12 LOW 13 PAUSE 500 LOOP Lanciate il programma modificato e verificate ambedue i LED lampeggino all’incirca nello stesso momento. Potete modificare il programma per far sì che un LED si alterni all’altro, potete anche cambiare il ritmo di lampeggio regolando in più o in meno l’argomento Duration del comando PAUSE. Provatelo! Visualizzare il Segnale di Controllo del Servo con un LED I segnali alti e bassi che programmerete perché il BASIC Stamp li invii al servo motore devono durare un lasso di tempo molto preciso. Questo perché i servo motori misurano la quantità di tempo in cui un segnale rimane alto, e usa quest’informazione come istruzione per decidere in quale direzione girare. Per un controllo accurato del servo motore, il tempo in cui questi segnali devono rimanere alti, deve essere molto più accurato della precisione che potete ottenere con l’uso dei PAUSE comandi HIGH e PAUSE. Potete solamente cambiare l’argomento Duration del comando a passi di 1 ms (ricordate che è 1/1000 di secondo) alla volta. Esiste un comando diverso che si chiama PULSOUT che può inviare segnali alti per precise quantità di tempo. Queste quantità di tempo sono i valori che userete nell’argomento Duration, e sono misurati in unità di due milionesimi di secondo! PULSOUT Pin, Duration Pagina 54 · Robotica con il Boe-Bot Un microsecondo è un milionesimo di secondo. Viene abbreviato con la sigla µs. fate attenzione quando scrivete questo valore, non è la lettera ‘u’ del nostro alfabeto; è la lettera greca mu ‘µ’. Per esempio, 8 microsecondi si abbrevia in 8 µs. Potete inviare un segnale HIGH che accende il LED collegato a P13 per 2 µs (due milionesimi di secondo) usando questo comando: PULSOUT 13, 1 Invece questo comando accenderà il LED per 4 µs PULSOUT 13, 2 Questo comando invia un segnale alto che potete realmente vedere: PULSOUT 13, 65000 Per quanto tempo rimarrà acceso il circuito LED collegato a P13 quando gli inviate questo impulso? Calcoliamolo. Il tempo che rimane acceso è 65000 volte 2 µs. cioè: Duration = 65000 × 2 µs = 65000 × 0.000002 s = 0.13 s È ancora abbastanza veloce, tredici centesimi di secondo. Il valore più grande che potete usare in un argomento Duration è 65535. Potete inviare un impulso basso invece di un impulso alto usando il comando LOW 13 prima di usare il comando PULSOUT. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 55 Programma Esempio: PulseP13Led.bs2 Il diagramma di temporizzazione della Figura 2-8 mostra il treno di impulsi che state per inviare al LED con questo nuovo programma. Questa volta, il segnale alto dura 0.13 secondi, ed il segnale basso dura 2 secondi. Questo è 100 volte più lento del segnale che abbisogna al servo per controllare il suo movimento. 0.13 s 0.13 s Vdd (5 V) Figura 2-8 Diagramma di Temporizzazione per PulseP13Led.bs2 Vss (0 V) 2.0 s Digitate, Salvate e Lanciate PulseP13Led.bs2. Verificate che il circuito LED collegato a P13 si accenda per circa tredici centesimi di secondo ogni due secondi. ' Robotica con il Boe-Bot – PulseP13Led.bs2 ' Invia un impulso di 0.13 secondi al circuito LED collegato a P13 ogni 2 s. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in funzione!" DO PULSOUT 13, 65000 PAUSE 2000 LOOP Programma Esempio: PulseBothLeds.bs2 Questo Programma Esempio invia un impulso al LED collegato a P13, quindi invia un impulso al LED collegato a P12 come mostrato in Figura 2-9. dopo di chè, fa una pausa di due secondi. Pagina 56 · Robotica con il Boe-Bot 0.13 s 0.13 s P13 0.13 s 0.13 s Figura 2-9 Diagramma di Temporizzazione per PulseBothLeds.bs2 i LED emettono luce per 0.13 secondi mentre il segnale è alto. P12 2.26 s Le tensioni (Vdd e Vss) in questo diagramma di temporizzazione non sono etichettate. Con il BASIC Stamp, è implicito che il segnale alto sia 5 V (Vdd) ed il segnale basso sia 0 V (Vss). Questa è una pratica comune nei documenti che spiegano la temporizzazione dei segnali alti e bassi. Spesso ci sono uno o più di questi documenti per ciascun componente nel circuito che un progettista sta tentando di progettare. I Progettisti che hanno creato il BASIC Stamp hanno dovuto scegliere tra molti di questi documenti alla ricerca di informazioni necessarie per decidere durante la progettazione del prodotto. Qualche volta anche i tempi non sono citati, o solamente indicati con un etichetta come thigh e tlow. Poi, i valori di temporizzazione desiderati per thigh e tlow sono elencati in una tabella in altra parte del documento. Questi concetti sono discussi più dettagliatamente in Basic Analog and Digital, un’altra guida per studenti Stamps in Class della Parallax Digitate, Salvate e Lanciate PulseBothLeds.bs2. Verificate che ambedue i circuiti LED lampeggino simultaneamente per circa tredici centesimi di secondo, ogni due secondi. ' Robotica con il Boe-Bot – PulseBothLeds.bs2 ' Invia un impulsi di 0.13 secondi a P13 ed a P12 ogni due 2 secondi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il programma è in funzione!" Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 57 DO PULSOUT 13, 65000 PULSOUT 12, 65000 PAUSE 2000 LOOP Il Vostro Turno– Visualizzare i Segnali del Servo alla Massima Velocità Ricordatevi che il segnale per il servo è 100 volte più veloce del programma che avete appena provato. Primo, provate a lanciare il programma dieci volte più veloce. Il che significa dividere tutti gli argomenti Duration (PULSOUT e PAUSE) per 10. Modificate il programma in modo che i comandi siano come sotto specificato: DO PULSOUT 13, 6500 PULSOUT 12, 6500 PAUSE 200 LOOP Lanciate il programma modificato e verificate che faccia lampeggiare i LED dieci volte più veloci. Ora, provate 100 volte più veloce (un centesimo della durata). Invece di lampeggiare, il LED apparirà solamente acceso in modo fioco e non come se aveste inviato un segnale alto. Questo perché il LED stà lampeggiando così velocemente e per così brevi periodi che l’occhio umano non può percepire la reale accensione ma solamente un cambiamento della luminosità. Modificate il programma in modo che i comandi siano: DO PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 LOOP Lanciate il programma modificato e verificate that it makes both LEDs about the same brightness. Try substituting 850 in the Duration argument for the PULSOUT command that goes to P13. DO Pagina 58 · Robotica con il Boe-Bot PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 LOOP Lanciate il programma modificato e verificate che il LED P13 ora sia appena più luminoso del LED P12. potreste dover schermare con le mani i LED per notare la differenza. Essi hanno una luminosità diversa perché il LED collegato a P13 viene acceso per un tempo più lungo del LED collegato a P12. Provate a digitare 750 nell’argomento Duration del comando PULSOUT che controlla tutti e due i LED. DO PULSOUT 13, 750 PULSOUT 12, 750 PAUSE 20 LOOP Lanciate il programma modificato e verificate la luminosità di tutti e due i LED sia di nuovo la stessa. Può non essere ovvio, ma il livello di luminosità è nel mezzo di quelli dati prima negli argomenti Duration e cioè 650 ed 850. ESERCIZIO #3: CONNESSIONI DEI SERVO MOTORI In questo Esercizio, costruirete un circuito che collega il servo all’alimentazione e ad un pin I/O del BASIC Stamp. Componenti per il Collegamento dei Servo (2) Servo Parallax a Rotazione Continua Ricerca delle istruzioni di Collegamento per la vostra Scheda Madre Ci sono tre diverse revisioni della Board of Education ed una revisione della BASIC Stamp HomeWork Board. Le Board of Education possono essere della Rev A, B, o C. La HomeWork Board è Rev B. La Figura 2-10 mostra gli esempi delle etichette che potete vedere sulla vostra scheda. Esaminate l’etichetta sulla vostra scheda per capire se avete una BASIC Stamp HomeWork Board Rev B o la Board of Education Rev C, B, od A. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 59 (916) 624-8333 www.parallaxinc.com www.stampsinclass.com Vdd Vin Rev B P3 P2 P1 P0 Rev C X3 BASIC Stamp HomeWork Board Rev B 15 14 © 2000-2003 Board of Education Rev C Rev A 13 12 STA in C MPS LASS Red Black X4 Vdd X2 Board of Education Vss X5 Vin Rev B Vss X3 Board of Education Rev B VR1 X3 Vdd nc Figura 2-10 Esempi delle etichette di revisione sulla BASIC Stamp HomeWork Board e sulle Board of Education Vss X2 5 Board of Education Rev A Conoscendo di quale revisione è la vostra scheda madre, andate alle istruzioni relative (elencate sotto) per la connessione dei servo alla scheda: Pagina 60 Pagina 63 → → Board of Education Rev C BASIC Stamp HomeWork Board Board of Education Rev B Se avete la Board of Education Rev B, seguite le istruzioni relative alla Board of Education Rev C nel seguito del testo, sempre tenendo a mente i seguenti due punti: • • La Board of Education Rev B non ha l’interruttore a tre posizioni. Quando vi sarà richiesto di mettere l’interruttore in posizione 0, dovrete scollegare la pila o togliere il jack di alimentazione, mentre dovrete fare l’inverso quando vi verrà chiesto di mettere l’interruttore in posizione 1 o 2. La Board of Education Rev B non ha l’impostazione tramite ponticelli per l’alimentazione dei servo. L’alimentazione dei servo sarà la stessa del BASIC Stamp per i progetti Boe-Bot. Board of Education Rev A Se avete la Board of Education Rev A, in tutto il testo seguite le istruzioni della BASIC Stamp HomeWork Board. Quando avete finito, andate all’Esercizio #4: Centratura dei Servo a pagina 66. Pagina 60 · Robotica con il Boe-Bot Collegamento dei Servo alla Board of Education Rev C Togliete l’alimentazione mettendo l’interrutttore a tre posizioni della vostra Board of Education in posizione-0 (vedere la Figura 2-11). Reset 0 1 2 Figura 2-11 Togliere l’alimentazione La Figura 2-12 mostra il connettore per i servo sulla Board of Education Rev C. questa acheda ha un ponticello che potete usare per stabilire se i servo saranno alimentati tamite Vin o con Vdd. Per impostarlo, dovrete toglierlo tirandolo verso l’alto, per inserirlo nella giusta posizione. Se state usando il portapile da 6 V, inserite il ponticello nella posizione Vin come mostrato nella parte sinistra di Figura 2-12. Usate solamente pile alkaline di tipo AA (1.5 V). Evitate l’uso di batterie ricaricabili dal momento che la loro tensione è di 1,2 V e non di 1,5 V, la differenza può non sembrare molta, ma è sufficiente ad impedire il corretto funzionamento. Se state usando un alimentatore da 7.5 V, 1000 mA positivo centrale, impostate il ponticello su Vdd come mostrato nella parte destra di Figura 2-12. ATTENZIONE – L’uso sbagliato degli alimentatori DC da rete può danneggiatre i vostri servo. Se avete poca o nessuna esperienza con gli alimentatori DC da rete, prendete in considerazione l’uso del portapile da 6 V che viene fornito con il Boe-Bot. Usate solamente alimentatori con uscita DC tra 6 e 7.5 V, e capacità di corrente di 800 mA o più. Usate solamente alimentatori DC con jack dello stesso tipo del portapile del Boe-Bot (2.1 mm, positivo centrale). Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 61 15 14 Vdd 13 12 Red Black X4 X5 Selezionate Vdd se state usando un alimentatore DC da rete (220 V 50 Hz). 15 14 Vdd 13 12 Vin Selezionate Vin se state usando il portapile che viene fornito con il kit del Boe-Bot. Red Black X4 Figura 2-12 Selezione dell’alimentazione dei vostri servo sulla Board of Education Rev C X5 Vin Tutti gli esempi e le istruzioni in questo libro useranno il portapile. La Figura 2-13 mostra lo schema del circuito che assemblerete sulla Board of Education Rev C. Il ponticello è posizionato su Vin. Collegate i vostri servo alla Board of Education Rev C come mostrato in Figura 2-13. Vin White Red Black P13 White Red Black White Red Black 15 14 Vdd 13 12 Vss Red Black Vin X4 White Red Black P12 Vss X5 Figura 2-13 Schema elettrico delle connessioni dei Servo e schema di cablaggio per la Board of Education Rev C Come faccio a sapere quale servo è collegato a P13 e quale a P12? Avete appena collegato i vostri servo nei connettori con dei numeri stampati sopra. Se il numero sul connettore è 13, significa che il servo è collegato a P13. se il numero è 12, significa che è collegato a P12. Quando avete finito di assemblare il sistema, dovrebbe assomigliare alla Figura 2-14. Pagina 62 · Robotica con il Boe-Bot Figura 2-14 Board of Education con i Servo ed il portapile collegati Aggiungete il circuito di controllo dello stato dei servo come nella Figura 2-15. Vdd Vin X3 P13 470 Ω P12 470 Ω LED Vss LED Vss + Vss + P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura 2-15 Circuito di controllo dello stato dei Servo a LED Spengete l’alimentazione – Istruzioni Speciali per la Board of Education Rev C Non lasciate mai acceso il vostro sistema quando non ci state lavorando. √ Per spengere la vostra Board of Education Rev C, muovete l’interruttore a tre posizioni in posizione 0. Andate a pagina 66 (Esercizio #4: Centratura dei Servo). Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 63 Collegamento dei Servo alla BASIC Stamp HomeWork Board Se state collegando i vostri servo alla BASIC Stamp HomeWork Board, vi serviranno i componenti sottoelencati e mostrati in Figura 2-16: Elenco Componenti: (1) Pacchetto PortaPile con estremità dei fili stagnati (2) Servo Parallax a Rotazione Continua (2) Spinotti a 3-poli maschio-maschio (4) Ponticelli (4) Pile AA – 1.5 V alkaline (2) LED – Rossi (2) Resistenze – 470 Ω (giallo-viola-marrone) Nota: Dovrete avere anche due circuiti LED/Resistenza montati sulla vostra piastra prototipi. Se è già così, non vi serviranno ulteriori componenti, altrimenti procurateveli. Figura 2-16 Componenti per la Centratura dei Servo sulla HomeWork Board La Figura 2-17 mostra lo schema dei circuiti servo sulla HomeWork Board. Prima di cominciare la costruzione di questo circuito, assicuratevi di aver scollegato il pacco portapile dalla BASIC Stamp HomeWork Board. La pila da 9 V deve essere scollegata dal suo alloggiamento, ed il pacco portapile non deve avere le pile inserite. Pagina 64 · Robotica con il Boe-Bot Vbp White Red Black P13 Vss Vbp Figura 2-17 Schema dei Collegamenti dei Servo sulla BASIC Stamp HomeWork Board. White Red Black P12 Vss Rimuovete i due circuiti LED/Resistenza e mettete da parte i componenti. Costruite le porte per i servo mostrate sulla sinistra della Figura 2-18. Ricontrollate attentamente che il filo nero con la striscia bianca sia connesso a Vbp, ed il filo nero sia invece collegato a Vss. Ricontrollate attentamente che tutti i collegamenti per P13, Vbp, Vss, Vbp, e P12 corrispondano esattamente allo schema di cablaggio. Collegate i conettori dei servo agli spinotti maschio-maschio come mostrato a destra nella Figura 2-18. Ricontrollate attentamente che il colore dei fili dei servo corrispondano con la legenda della Figura. Vbp sta per (Voltage battery pack) Tensione dal Pacco Porta Pile. Si riferisce ai 6 VDC forniti dal pacco porta pile con le 4 pile da 1.5 V. Questo è collegato direttamente alla piastra prototipi per l’alimentazione dei servo per il Boe-Bot costruito con la HomeWork Board o con la Board of Education Rev A. il vostro BASIC Stamp è sempre alimentato dalla pila da 9 V. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 65 Filo Nero con (916) 624-8333 striscia bianca www.parallaxinc.com www.stampsinclass.com Vdd Vin Filo Nero (916) 624-8333 www.parallaxinc.com www.stampsinclass.com Rev B Vdd Vss Vin Rev B Vss X3 X3 P15 P14 P13 P12 P11 P10 P9 P8 Figura 2-18 Schema di Collegamento dei Servo per la BASIC Stamp HomeWork Board Å Å Å Å Å P13 Vbp Vss Vbp P12 Collegamento delle Porte P15 P14 P13 P12 P11 P10 P9 P8 Å Bianco Å Rosso Å Nero Sinistra (costruzione delle porte servo). Destra (connessione dei servo). Collegamento dei Servo con colori dei fili Il vostro assemblaggio deve quindi essere come in Figura 2-19. Figura 2-19 Alimentazione Doppia e Servo Connessi Aggiungete i circuiti LED/Resistenza per il controllo dei servo come in Figura 2-20. Pagina 66 · Robotica con il Boe-Bot (916) 624-8333 www.parallaxinc.com www.stampsinclass.com Vdd X3 P13 470 Ω P12 470 Ω LED Vss LED Vss Vin + Rev B Vss Vss + P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura 2-20 Circuito di controllo dei Servo a LED © 2002 HomeWork Board Quando tutte le connessioni sono state eseguite ed attentamente ricontrollate, inserite le pile nel porta pile e ricollegate la pila da 9 V alle clip della HomeWork Board. Togliere l’alimentazione – Istruzioni Speciali per la HomeWork Board Mai lasciare l’alimentazione del vostro sistema collegata quando non ci state lavorando. Da ora in poi, togliere l’alimentazione comprenderà due azioni: √ √ Staccate la pila da 9 V dalle clip per togliere l’alimentazione alla HomeWork Board. Questa azione toglie alimentazione al BASIC Stamp entrocontenuto, ed anche l’alimentazione ai connettori vicino alla piastra prototipale (Vdd, Vin, e Vss). Togliete una pila dal portapile. Questa azione toglie alimentazione ai servo. ESERCIZIO #4: CENTRATURA DEI SERVO In questo Esercizio, lancerete un programma che invia ai servo un segnale, con l’informazione di stare fermo-bloccato. A causa del fatto che i servo non sono stati pretarati in fabbrica, probabilmente essi cominceranno a girare. Userete quindi un piccolo giravite per tararli in modo che stiano fermi quando ricevono uno specifico segnale dal Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 67 BASIC Stamp. Questa operazione viene chiamata centratura ddei servo. Dopo la taratura, collauderete i servo per assicurarvi che funzionino correttamente. Il programma di collaudo invierà segnali che faranno ruotare i servo in senso orario ed in senso antiorario a diverse velocità. Attrezzi e Componenti per i Servo Il giravite Parallax mostrato in Figura 2-21 è l’unico attrezzo extra di cui avrete bisogno per questo esercizio. In alternativa, qualsiasi giravite Phillips #1 a croce con un gambo di 1/8” (3.18 mm) dovrebbe andar bene. Figura 2-21 Giravite Parallax Invio del Segnale di Centratura La Figura 2-22 mostra il segnale che deve essere inviato ai servo per la loro calibrazione. Questo si chiama segnale di centratura, ed istruisce i servo perché stiano fermi-bloccati nella loro posizione “centrale”. L’istruzione consiste di un impulso di 1.5 ms, che viene generato dallo stesso comando PULSOUT che avete usato per far lampeggiare i LED. Dal momento che i servo sono costruiti per stare centrati con un impulso di 1.5 ms, darete all’argomento Duration del comando PULSOUT un valore di 750. Quando i servo ricevono questo segnale, probabilmente cominceranno a girare. Userete quindi il piccolo giravite per regolare ciascun servo fino a che si fermi e mantenga quella posizione. 1.5 ms 1.5 ms Figura 2-22 Diagramma di Temporizzazione per la centratura dei Servo P12.bs2 P12 20 ms Gli impulsi di 1.5 ms indicano ai servo di rimanere fermi e di mantenere la posizione “centrata”. La cosa migliore è di centrare un servo alla volta, perché in questo modo potete sentire quando un motore si ferma mentre lo state calibrando. Questo programma farà girare Pagina 68 · Robotica con il Boe-Bot solamente il servo collegato a P12, e le istruzioni vi guideranno nella procedura di calibrazione. Dopo aver completato la procedura di calibrazione per il servo collegato a P12, la ripeterete con il servo collegato a P13. Se avete la Board of Education Rev C, assicuratevi di mettere l’interruttore a tre posizioni in posizione -2 come mostrato in Figura 2-23. 0 1 2 Figura 2-23 Mettete l’interruttore a 3-Posizioni in posizione-2 Se state usando una delle altre Board of Education o la HomeWork Board, controllate i collegamenti di alimentazione del vostro BASIC Stamp e dei vostri servo. Digitate, Salvate e Lanciate CenterServoP12.bs2. Programma Esempio: CenterServoP12.bs2 ' Robotica con il Boe-Bot - CenterServoP12.bs2 ' Questo programma invia impulsi di 1.5 ms al servo collegato ' a P12 per il centraggio manuale. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" DO PULSOUT 12, 750 PAUSE 20 LOOP Verificate che il LED di controllo del segnale del circuito collegato a P12 si acccenda. Dovrebbe emettere luce, indicando che gli impulsi vengono trasmessi al servo collegato a P12. Se il servo non è ancora stato centrato, la sua crociera comincerà a girare, e dovreste sentire il motore emettere un leggero rumore. Se il servo non è stato ancora centrato, usate il giravite per regolare delicatamente il potenziometro interno come mostrato in Figura 2-24. regolate il potenziometro fino a che non trovate la posizione che fa fermare il movimento del motore. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 69 Attenzione: non spingete con troppo con il giravite! Il potenziometro interno al servo è abbastanza delicato, state attenti a non applicare più forza del necessario quando regolate il servo. Se il servo è già stato calibrato, non girerà. È raro ma anche un servo difettoso o danneggiato non girerà. L’Esercizio #6 vi chiarirà questa possibilità prima che i servo siano installati sul telaio del vostro Boe-Bot. Se il servo come deve fare, non gira, saltate alla sezione a pagina 69 de Il vostro Turno in modo che possiate collaudare e centrare l’altro servo collegato a P13. Figura 2-24 Calibrazione della Centratura del Servo Inserite la punta del giravite Phillips nel foro del potenziometro Ruotate delicatamente per regolare il potenziometro Ora il vostro servo è centrato. Che cos’è un Potenziometro? Un potenziometro è un tipo di resistenza regolabile. La resistenzza di un potenziometro viene regolata da una parte mobile. Su alcuni potenziometri, questa parte mobile ha una manopola o un cursore, altri hanno una fessura dove può essere inserito un giravite con cui regolare la resistenza. La resistenza del potenziometro interno del servo a rotazione continua della Parallax si regola con un giravite a croce Phillips #1. potete saperne di più circa i potenziometri nelle guide per studenti Che cosa è un Microcontrollore? ed in Basic Analog and Digital. Il Vostro Turno– Centratura del Servo Collegato a P13 Ripetete il procedimento per il servo collegato a P13 usando questo programma: Programma Esempio: CenterServoP13.bs2 ' Robotica con il Boe-Bot - CenterServoP13.bs2 Pagina 70 · Robotica con il Boe-Bot ' Questo programma invia impulsi di 1.5 ms al servo collegato ' a P13 per la centratura manuale. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" DO PULSOUT 13, 750 PAUSE 20 LOOP Ricordatevi di scollegare completamente l’alimentazione quando avete finito. Se avete una Board of Education Rev C. √ Muovete l’interruttore a 3-posizioni in posizione-0. Se avete una BASIC Stamp HomeWork Board: √ √ Staccate la pila da 9 V dalle clip sulla scheda per spengere la HomeWork Board. Togliete una pila dal pacco porta pile per spengere i servo. ESERCIZIO #5: COME MEMORIZZARE VALORI E CONTARE Questo Esercizio presenta le variabili, che vengono usate nei programmi PBASIC per memorizzare valori. I programmi Boe-Bot più avanti in questo libro, si affideranno pesantemente alle variabili. Dal momento che il vostro programma PBASIC può memorizzare variabili, le può altresì usare per contare. E siccome può contare, può anche controllare e tenere traccia del numero di volte che un evento accade. Per questo esercizio non è necessario che i vostri servo siano alimentati. √ √ Se avete una Board of Education Rev C, mettete l’interruttore a 3-posizioni in posizione -1. Ciò toglie alimentazione solamente alle porte servo. Il BASIC Stamp, Vdd, Vin, e Vss saranno comunque connessi all’alimentazione. Se avete una BASIC Stamp HomeWork Board, togliete una pila dal pacco porta pile, maa lasciate collegata la pila da 9 V alle clip sulla scheda. Ciò toglie alimentazione ai servo, ma l’alimentazione rimane per il BASIC Stamp entrocontenuto, a Vdd, a Vin, ed a Vss. Usare le variabili per Memorizzazione, Operazioni Matematiche e conteggio Le variabili possono essere usate per memorizzare valori. Prima che possiate usare una variabile nel PBASIC, la dovete dichiarare. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 71 variableName VAR Size In PBASIC potete dichiarare quattro tipi differenti di variabili: Tipo Bit Nib Byte Word – – – – – Contiene da 0 a 1 da 0 a 15 da 0 a 255 da 0 a 65535 Oppure da -32768 a + 32767 Il prossimo Programma Esempio impiega solamente due variabili word: value anotherValue VAR VAR Word Word dopo aver dichiarato una variabile, potete anche inizializzalre, che significa assegnargli un valore di partenza, o valore iniziale. value = 500 anotherValue = 2000 Valore di Default – se non inizializzate una variabile, il programma partirà automaticamente memorizzando il numero zero in quella variabile. E questo viene chiamato valore di default. Il segno “=” in value = 500 è un esempio di operatore. Potete usare altri operatoriper fare calcoli matematici con le variabili. Seguono un paio di esempi di moltiplicazione: value = 10 * value large = large * medium Programma Esempio: VariablesAndSimpleMath.bs2 Questo programma mostra come dichiarare, inizializzare, ed effettuare operazioni sulle variabili. Prima di lanciare il programma, predire che cosa dovrebbe visualizzare ciascun comando DEBUG. Digitate, Salvate e Lanciate VariablesAndSimpleMath.bs2. Confrontate i risultati con la vostra predizione e spiegate le eventuali differenze. ' Robotica con il Boe-Bot - VariablesAndSimpleMath.bs2 ' Dichiarazione delle variabili ed uso per la soluzione di alcuni problemi ' aritmetici. Pagina 72 · Robotica con il Boe-Bot ' {$STAMP BS2} ' {$PBASIC 2.5} value anotherValue VAR VAR Word Word ' Dichiara le variabili value = 500 anotherValue = 2000 ' Inizializza le variabili DEBUG ? value DEBUG ? anotherValue ' Visualizza i valori value = 10 * anotherValue ' Esegue le operazioni DEBUG ? value DEBUG ? anotherValue ' Visualizza di nuovo i valori END Come Funziona VariablesAndSimpleMath.bs2 Questo codice dichiara due variabili word, value ed anotherValue. value anotherValue VAR VAR Word Word ' Dichiara le variabili I seguenti comandi sono esempi di inizializzazione di variabili con un valore determinato da voi. value = 500 anotherValue = 2000 ' Inizializza le variabili Questi comandi DEBUG vi aiutano a vedere il valore delle variabili dopo che le avete inizializzate. Siccome a value è stato assegnato 500 e ad anotherValue è stato assegnato 2000, questi comandi DEBUG inviano al Terminale di Debug i messaggi “value = 500” e “anotherValue = 2000”. DEBUG ? value DEBUG ? anotherValue ' Visualizza i valori Il formattatore “?” del comando DEBUG può essere usato prima di una variabile per far visualizzare al Terminale di Debug il suo nome, il valore decimale che contiene, ed un comando di a capo. È molto utile per cercare il contenuto di una variabile. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 73 L’indovinello nelle tre righe seguenti è, che cosa verrà visualizzato? La risposta è che value sarà impostato uguale a dieci volte anotherValue. Dal momento che anotherValue è 2000, value sarà impostato a 20,000. La variabile anotherValue rimane invariata. value = 10 * anotherValue ' Effettua le operazioni DEBUG ? value DEBUG ? anotherValue ' Visualizza di nuovo i valori Il Vostro Turno– Calcoli con Numeri Negativi Se volete effettuare calcoli che coinvolgono numeri negativi, potete usare il formattatore SDEC del comando DEBUG per visualizzarli . Di seguito viene mostrato un esempio che può essere fatto modificando VariablesAndSimpleMath.bs2. Cancellate questa porzione di VariablesAndSimpleMath.bs2: value = 10 * anotherValue ' Effettua le operazioni DEBUG ? value DEBUG ? anotherValue ' Visualizza di nuovo i valori E sostituiteli con i comandi seguenti: value = value - anotherValue ' La risposta è uguale a -1500 DEBUG "value = ", SDEC value, CR ' Visualizza di nuovo i valori DEBUG ? anotherValue Lanciate il programma modificato e verificate that value cambi da 500 a -1500. Conteggio e Ripetizione Controllata La maniera più conveniente di controllare il numero di volte in cui una parte di codice viene eseguito è con il ciclo FOR…NEXT. La sintassi viene mostrata di seguito: FOR Counter = StartValue TO EndValue {STEP StepValue}…NEXT La stringa di tre puntini … vi indica dove inserire i comandi tra FOR e NEXT. Verificate di aver dichiarato la variabile che deve essere usata nell’argomento di Countert. Gli argomenti di StartValue e di EndValue possono essere sia numeri che variabili. Quando vedete qualche cosa in parentesi graffe {} nella descrizione della sintassi, significa che è un argomento opzionale. In altre parole, il ciclo FOR…NEXT può funzionare anche senza, ma lo potete usare per uno scopo speciale. Pagina 74 · Robotica con il Boe-Bot Non necessariamente dovete chiamare una variabile “counter”. Per esempio, la potete chiamare anche “myCounter”. myCounter VAR Word Qui viene mostrato un esempio di ciclo FOR…NEXT che per contare usa la variabile myCounter. Visualizza anche il valore della variabile myCounter ad ogni iterazione del ciclo. FOR myCounter = 1 TO 10 DEBUG ? myCounter PAUSE 500 NEXT Programma Esempio: CountToTen.bs2 Digitate, Salvate e LanciateCountToTen.bs2. ' Robotica con il Boe-Bot – CountToTen.bs2 ' Usa una variable in un ciclo FOR...NEXT. ' {$STAMP BS2} ' {$PBASIC 2.5} myCounter VAR Word FOR myCounter = 1 TO 10 DEBUG ? myCounter PAUSE 500 NEXT DEBUG CR, "Fatto!" END Il Vostro Turno– Valori Differenti di Start ed End e conteggio in Salti Per gli argomenti di StartValue ed EndValue potete usare valori diversi. Modificate il ciclo FOR…NEXT come di seguito descritto: FOR myCounter = 21 TO 9 DEBUG ? myCounter PAUSE 500 NEXT Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 75 Lanciate il programma modificato. Avete notato che il BASIC Stamp può decrementare il valore della variabile, il che significa, contare all’indietro? Ricordate gli argomenti opzionali {STEP StepValue}? Li potete usare per far contare a salti myCounter. Invece di 9, 10, 11…, potete farlo contare a salti di due (9, 11, 13…) o di cinque (10, 15, 20…), o a qualsiasi gli diate StepValue, in avanti od all’indietro. Segue un esempio che usa StepValue in passi di 3: Aggiungete STEP 3 al ciclo FOR…NEXT come descritto di seguito: FOR myCounter = 21 TO 9 STEP 3 DEBUG ? myCounter PAUSE 500 NEXT Lanciate il programma modificato e verificate che conti all’indietro in salti di 3. ESERCIZIO #6: COLLAUDO DEI SERVO C’è un’ultima cosa da fare prima di assemblare il vostro Boe-Bot, ed è il collaudo dei servo. In questo esercizio, lancerete un programma che farà girare i servo a differenti velocità ed in direzioni opposte. Facendo questo, verificherete che i vostri servo funzionano correttamente prima del montaggio sul Boe-Bot. Per questo esercizio tutto il vostro sistema, inclusi i servo deve essere alimentato. √ √ Se avete una Board of Education Rev C, mettete l’interruttore a 3-posizioni in posizione-2. In questo modo alimentate le porte servo oltre che, come in posizione-1, alimentare il BASIC Stamp, Vdd, Vin, e Vss. Se avete una BASIC Stamp HomeWork Board, rimettete al suo posto la pila che avevate tolto dal pacco porta pile. Così facendo rialimenterete le porte servo. Inoltre, inserite la pila da 9 V sulle clip della. Alimenterete così anche il BASIC Stamp entrocontenuto, Vdd, Vin, e Vss. Questo è un esempio di collaudo del sottosistema. Il collaudo dei sottosistemi è una buona abitudine da acquisire, perché non è divertente rismontare un robot solamente per risolvere un problema di cui potevate accorgervi prima del montaggio definitivo! Pagina 76 · Robotica con il Boe-Bot Collaudo del Sottosistema è la pratica di collaudo di componenti individuali prima che siano assemblati in un dispositivo più grande. È una strategia valida che vi può aiutare nell’ambito robotico. È anche una capacità essenziale usata dai tecnici di tutto il mondo per lo sviluppo di qualsiasi cosa, dai giocattoli, alle automobili, dai videogiochi, allo space shuttle ed ai robot per l’esplorazione di Marte. Specialmente nei dispositivi più complicati, può diventare quasi impossibile trovare un guasto od un problema se prima non si è collaudato i singoli componenti. Nei progetti aerospaziali, per esempio, disassemblare un prototipo per risolvere un problema può costare centinaia di migliaia, o perfino milioni di dollari. In questo genere di progetti, il collaudo dei sottosistemi è rigoroso e generalizzato. La Larghezza di Impulso Controlla la Velocità e la Direzione Ricordando dalla centratura dei servo che un segnale con una larghezza di impulso di 1.5 ms faceva stare fermo/bloccato i servo. Questo era fatto usando un comando PULSOUT con una Duration di 750. che cosa succede se la larghezza dell’impulso del segnale non è di 1.5 ms? Nella sezione Il vostro Turno dell’Esercizio #2, avete programmato il BASIC Stamp per inviare una serie di impulsi di 1.3 ms ad un LED. Esaminate con attenzione quella serie di impulsi ed osservate come può essere usata per controllare un servo. La Figura 2-25 mostra un servo Parallax a rotazione continua che gira alla massima velocità in senso orario quando gli inviate impulsi di 1.3 ms. La massima velocità è di 50 - 60 RPM. 1.3 ms 1.3 ms Vdd (5 V) standard servo www.parallax.com Vss (0 V) Figura 2-25 Un treno di impulsi di 1.3 ms fa girare il servo alla massima velocità in senso orario 20 ms Che cosa significa RPM? (Revolutions Per Minute) Giri al Minuto. È il numero di giri completi che un dato oggetto compie in un minuto. Che cosa è un treno di impulsi? Così come un treno ferroviario è una serie di carrozze, un treno di impulsi è una serie di impulsi. Potete usare ServoP13Clockwise.bs2 per inviare questo treno di impulsi al servo collegato a P13. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 77 Programma Esempio: ServoP13Clockwise.bs2 Digitate, Salvate e LanciateServoP13Clockwise.bs2. Verificate che la crociera del servo stia girando a circa 50 - 60 RPM in senso orario. ' Robotica con il Boe-Bot – ServoP13Clockwise.bs2 ' Fa girare il servo collegato a P13 alla massima velocità in senso orario. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" DO PULSOUT 13, 650 PAUSE 20 LOOP Notate che un’impulso di 1.3 ms richiede un argomento Duration del comando PULSOUT di 650, cioè meno di 750. Tutte le larghezze di impulso minori di 1.5 ms, e quindi l’argomento Duration di PULSOUT minori di 750, farà ruotare il servo in senso orario. Programma Esempio: ServoP12Clockwise.bs2 Cambiando l’argomento Pin del comando PULSOUT da 13 a 12, farete girare il servo collegato a P12 alla massima velocità in senso orario. Salvte ServoP13Clockwise.bs2 con il nome ServoP12Clockwise.bs2. Modificate il programma aggiornando a 12 l’argomento Pin del comando PULSOUT. Lanciate il programma e verificate che il servo collegato a P12 stia girando a 50 - 60 RPM in senso orario. ' Robotica con il Boe-Bot – ServoP12Clockwise.bs2 ' Fa girare il servo collegato a P12 alla massima velocità in senso orario. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" DO PULSOUT 12, 650 PAUSE 20 LOOP Pagina 78 · Robotica con il Boe-Bot Programma Esempio: ServoP12Counterclockwise.bs2 Avrete probabilmente previsto che impostare l’argomento Duration del comando PULSOUT maggiore di 750 farà girare il servo in senso antiorario. Una Duration di 850 invierà impulsi di 1.7 ms come mostrato in Figura 2-26. questo farà girare il servo alla massima velocità in senso antiorario. 1.7 ms 1.7 ms Vdd (5 V) standard servo www.parallax.com Vss (0 V) 20 ms Figura 2-26 Un treno di impulsi di 1.7 ms fa girare il servo alla massima velocità in senso antiorario Salvate ServoP12Clockwise.bs2 con il nome ServoP12Counterclockwise.bs2. Modificate il programma cambiando l’argomento Duration del comando PULSOUT da 650 a 850. Lanciate il programma e verificate che il servo collegato a P12 stia ora girando a 50 60 RPM in senso antiorario. ' Robotica con il Boe-Bot – ServoP12Counterclockwise.bs2 ' Fa girare il servo collegato a P12 alla massima velocità in senso ' antiorario. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" DO PULSOUT 12, 850 PAUSE 20 LOOP Il Vostro Turno– Collaudo della Velocità e della Direzione dei Servo Modificate l’argomento Pin del comando PULSOUT in modo che il servo collegato a P13 giri in senso antiorario. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 79 Programma Esempio: ServosP13CcwP12Cw.bs2 Potete usare due comandi PULSOUT per far girare ambedue i servo nello stesso momento, e potete anche farli girare in senso opposto. Digitate, Salvate e LanciateServosP13CcwP12Cw.bs2. Verificate che il servo collegato a P13 giri alla massima velocità in senso antiorario mentre il servo collegato a P12 giri alla massima velocità in senso. ' Robotica con il Boe-Bot - ServosP13CcwP12Cw.bs2 ' Fa girare il servo collegato a P13 alla massima velocità in senso antiorario ' ed il servo collegato a P12 alla massima velocità in senso orario. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" DO PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 LOOP Presto tutto questo sarà importante. Pensateci: quando i servo saranno montati su ciascun lato del telaio, uno dovrà girare in senso orario mentre l’altro dovrà girare in senso antiorario per far andare dritto il Boe-Bot. Vi sembra strano? Se non riuscite ad immaginarlo, provate questo: Mettete i vostri servo schiena a schiena e rilanciate il programma. Il Vostro Turno– Regolazione della velocità e della Direzione Ci sono quattro diverse combinazioni di argomenti Duration del comando PULSOUT che verranno usati ripetutamente nella programmazione dei movimenti del Boe-Bot nei capitoli successivi. ServosP13CcwP12Cw.bs2 invia una di queste combinazioni, 850 a P13 e 650 a P12. Collaudando diverse possibili combinazioni e compilando la colonna delle descrizioni della Table 2-1, potrete capire bene il tutto e costruirvi un riferimento personale. Compilerete la colonna dei comportamenti dopo che il vostro Boe-Bot sarà completamente assemblato, quando potrete vedere come ciascuna combinazione lo fa muovere. Pagina 80 · Robotica con il Boe-Bot Provate le seguenti combinazioni di argomenti Duration del comando PULSOUT, compilate la colonna delle descrizioni con i vostri risultati. Table 2-1: Combinazioni della Duration di PULSOUT Duration P13 P12 Descrizione 850 650 Massima velocità, servo P13 antiorario, servo P12 orario. 650 850 850 850 650 650 750 850 650 750 750 750 760 740 770 730 850 700 800 650 Ambedue i servo devono stare fermi a causa della centratura eseguita nell’Esercizio #4. Comportamento Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 81 FOR…NEXT per Controllare il tempo di azionamento dei Servo Sperando, che abbiate ben compreso che la larghezza degli impulsi controlla la velocità e la direzione dei servo Parallax a rotazione continua. È un modo molto semplice di controllare la velocità e la direzione. C’è anche un modo altrettanto semplice per controllare la durata del movimento di un motore, con un ciclo FOR…NEXT. Viene qui mostrato un esempio di ciclo FOR…NEXT che farà girare i servo per alcuni secondi: FOR counter = 1 TO 100 PULSOUT 13, 850 PAUSE 20 NEXT Cerchiamo di indovinare la durata esatta con cui questo codice farà girare i servo. Ad ogni iterazione del ciclo, il comando PULSOUT dura 1.7 ms, il comando PAUSE dura 20 ms, ed il tempo di esecuzione del ciclo è di 1.3 ms. Una iterazione del ciclo = 1.7 ms + 20 ms + 1.3 ms = 23.0 ms. Dal momento che il ciclo viene eseguito 100 volte, è uguale a 23.0 ms volte 100. time = 100 × 23.0 ms = 100 × 0.0230 s = 2.30 s Assumete di voler far girare il servo 4.6 secondi. Il vostro ciclo FOR…NEXT dovrà essere eseguito per una durata doppia: FOR counter = 1 TO 200 PULSOUT 13, 850 PAUSE 20 NEXT Programma Esempio: ControlServoRunTimes.bs2 Digitate, Salvate e Lanciate ControlServoRunTimes.bs2. Verificate che il servo P13 giri in senso antiorario per circa servo 2.3 secondi, seguito dal servo P12 che girerà per un tempo doppio. ' Robotica con il Boe-Bot - ControlServoRunTimes.bs2 ' Fa girare il servo P13 alla massima velocità per 2.3 s, Pagina 82 · Robotica con il Boe-Bot ' quindi fa girare il servo P12 per un tempo doppio. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" counter VAR Byte FOR counter = 1 TO 100 PULSOUT 13, 850 PAUSE 20 NEXT FOR counter = 1 TO 200 PULSOUT 12, 850 PAUSE 20 NEXT END Assumete di voler far girare ambedue i servo, P13 con una larghezza di impulso di 850 ed il servo P12 con una larghezza di impulso di 650. Ora, ciascuna iterazione del ciclo, durerà: 1.7ms 1.3 ms 20 ms 1.6 ms --------24.6 ms – – – – – Servo collegato a P13 Servo collegato a P12 durata della Pausa Durata del Ciclo di Iterazione -----------------------------Totale Se volete far girare i servo per un determinato tempo, lo potete calcolare in questo modo: Numero di Impulsi = Tempo s / 0.0246s = Tempo / 0.0246 Assumete di voler far girare i servo per 3 secondi. Ciò significa: Numero di Impulsi = 3 / 0.0246 = 122 Ora, potete usare il valore 122 nell’argomento EndValue del ciclo FOR…NEXT, che sarà quindi: FOR counter = 1 TO 122 PULSOUT 13, 850 Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 83 PULSOUT 12, 650 PAUSE 20 NEXT Programma Esempio: BothServosThreeSeconds.bs2 Viene di seguito mostrato un esempio per far girare per tre secondi i servo in direzioni opposte, per poi invertire la loro direzione. Digitate, Salvate e Lanciate BothServosThreeSeconds.bs2. ' Robotica con il Boe-Bot - BothServosThreeSeconds.bs2 ' fa girare ambedue i servo in direzioni opposte per tre secondi, quindi ' inverte la direzione di ambedue i servo e li fa girare per tre secondi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" counter VAR Byte FOR counter = 1 TO 122 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT FOR counter = 1 TO 122 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT END Verificate che ciascun servo giri in una direzione per tre secondi, inverta quindi la direzione per altri tre secondi. Avete notato che mentre i servo invertivano la direzione nello stesso momento, stavano girando in direzioni opposte? In che modo ci sarà utile? Il Vostro Turno– Predire il Tempo di Attivazione dei Servo Scegliete un tempo (in secondi), di durata del funzionamento dei servo Dividete il numero di secondi per 0.024. Il risultato è il numero di cicli che dovrete eseguire. Modificate BothServosThreeSeconds.bs2 in modo che faccia girare ambedue i servo per il tempo che avete scelto Pagina 84 · Robotica con il Boe-Bot Confrontate la vostra predizione con il tempo effettivo di funzionamento Ricordatevi di scollegare l’alimentazione dal vostro sistema (la scheda ed i due servo) quando avete finito. Questo significa mettere l’interruttore a 3-posizioni in posizione-0 se avete la Board of Education Rev C. Se avete una HomeWork Board, scollegate la pila da 9 V e rimuovete una pila dal pacco porta pile. Consiglio – per misurare il tempo di funzionamento, premete e mantenete premuto il pulsante Reset sulla vostra Board of Education (o BASIC Stamp HomeWork Board). Quando siete pronti a misurare il tempo, lasciate andare il pulsante di Reset. Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 85 SOMMARIO Questo Capitolo vi ha guidato nella connessione, la regolazione ed il collaudo dei servo Parallax a rotazione continua. Insieme a questo vi sono stati spiegati una varietà di comandi PBASIC. Il comando PAUSE ferma il programma per periodi brevi o lunghi secondo l’argomento Duration che avete usato. Il comando DO…LOOP rende efficiente la ripetizione di un comando singolo o di un gruppo di comandi PBASIC. HIGH e LOW sono stati spiegati come modo diretto di far collegare dal BASIC Stamp un pin I/O a Vdd od a Vss. I segnali alti e bassi sono stati studiati con l’aiuto di un circuito LED. Questi segnali sono stati usati per spiegare i diagrammi di temporizzazione. È stato spiegato il comando PULSOUT come un modo più preciso di inviare un segnale alto o basso, ed un circuito LED è stato usato anche per visualizzare i segnali inviati dal comando PULSOUT. DO…LOOP, PULSOUT, e PAUSE sono poi stati usati per inviare ai servo a rotazione continua della Parallax i segnali per stare fermi/bloccati, cioè un impulso di 1,5 ms ogni 20 ms. I servo sono stati calibrati con un giravite mentre ricevevano impulsi di 1,5 ms fino a che stavano fermi. Questo procedimento viene chiamato “centratura” dei servo. Dopo aver centrato i servo, sono state spiegate le variabili come mezzo per memorizzare valori. Le Variabili possono essere usate per le operazioni matemtiche e di conteggio. Sono stati spiegati i cicli FOR…NEXT come mezzo per contare. I cicli FOR…NEXT controllano il numero di volte che il codice inserito tra le istruzioni FOR e NEXT viene eseguito. I cicli FOR…NEXT sono stati quindi usati per controllare il numero di impulsi inviati ad un servo, che a sua volta controllano la durata di funzionamento del servo. Domande 1. 2. 3. 4. 5. Per cosa sono comunemente usati i servo standard? In cosa differiscono i servo Parallax a Rotazione Continua dai servo standard? Che cosa fa il comando PAUSE? Che cosa fa PAUSE 3000? E PAUSE 20? Quanto dura un millisecondo? Come lo abbreviate? Quali comandi PBASIC potete usare per eseguire più volte altri comandi PBASIC? 6. Che cosa fa una resistenza in un circuito? A che cosa servono le strisce colorate sul corpo di una resistenza? 7. Che cosa significa la parola LED? Che cosa fa un LED in un circuito? What Quali sono i due terminali di un LED? Pagina 86 · Robotica con il Boe-Bot 8. Quale comando forza il BASIC Stamp a collegare internamente uno dei suoi pin I/O a Vdd? Quale comando fa lo stesso tipo di collegamento, ma a Vss? 9. Quale comando potete usare per inviare un segnale alto per un certo numero di microsecondi? Quanto dura un microsecondo, e come viene abbreviato? 10. Quale sono i nomi delle variabili di diversa grandezza che possono essere dichiarate nei programmi PBASIC? Quali valori può contenere ciascun tipo di variabile? 11. Qual è la differenza principale tra un ciclo FOR…NEXT ed un ciclo DO…LOOP? 12. Come fa a sapere un ciclo FOR…NEXT da quale numero deve cominciare a contare ed a quale numero fermarsi? 13. Qual’è il modo di controllare la velocità ed il verso di rotazione di un servo? Che relazione c’è con i diagrammi di temporizzazione? Come si relaziona con i comandi PBASIC? Quali sono i comandi e gli argomenti che potete variare per controllare la velocità e la direzione di un servo a rotazione continua? 14. Qual è il modo di controllare il tempo di funzionamento di un servo? Quali comandi servono per controllare il tempo di funzionamento di un servo? Esercizi 1. Scrivete un comando PAUSE che faccia stare il BASIC Stamp senza fare nulla per 10 secondi. 2. Disegnate un diagramma di temporizzazione per questo ciclo DO…LOOP: DO PULSOUT 15, 6500 PULSOUT 14, 6500 PAUSE 200 LOOP 3. Modificate questo ciclo FOR…NEXT in modo che conti da 6 a 24 in salti di 3. Scrivete anche, la dichiarazione di variabile che vi servirà per far lavorare questo programma. FOR counter = 9 TO 21 DEBUG ? counter PAUSE 500 NEXT 4. Modificate questo ciclo DO…LOOP per far girare ambedue i servo in senso antiorario. DO PULSOUT 13, 850 Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 87 PULSOUT 12, 650 PAUSE 20 LOOP 5. Prendete la vostra risposta alla domanda precedente e modificatela in modo che faccia girare i servo per 6,5 secondi. Assicuratevi di annotare i vostri calcoli. Progetti 1. Disegnate uno schema elettrico che abbia i circuiti LED collegati a P14 ed a P15 ed i due servo collegati a P12 ed a P13. 2. Scrivete un porgramma che faccia girare in senso antiorario il servo collegato a P12 per due secondi. Durante questo tempo, il LED collegato a P14 deve accendersi. Il programma poi non deve fare nulla per due secondi. Quindi, il programma deve far girare in senso orario P13. Mentre il servo P13 stà girando in senso orario, il LED collegato a P15 deve accendersi. 3. Scrivete un programma che faccia accendere fiocamente il LED collegato a P14 (on/off con ogni impulso) mentre il servo P12 stà girando. 4. Scrivete un programma che faccia girare i servo per tre secondi in ogni combinazione di rotazione. Suggerimento: vi serviranno quattro diversi cicli FOR…NEXT. Primo, ambedue i servo dovranno girare in senso antiorario, poi in senso orario. Quindi, il servo P12 deve ruotare in senso orario mentre il servo P13 ruota in senso antiorario, e finalmente, il servo P12 deve ruotare in senso antiorario mentre il servo P13 ruota in senso orario. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 89 Capitolo 3: Assemblare e Collaudare il Boe-Bot Questo Capitolo contiene istruzioni per il montaggio ed il collaudo del vostro Boe-Bot. È particolarmente importante completare la parte collaudo prima di andare al capitolo successivo. Facendo questo, potrete evitare un certo numero di errori comuni che porterebbero ad un comportamento sconcertante del vostro Boe-Bot nei capitoli successivi. Segue un sommario di cosa farete in ciascun esercizio di questo capitolo: Esercizio 1 2 3 4 Sommario Costruire il Boe-Bot Ricollaudare i servo per essere sicuri che siano collegati correttamente Collegare e clooaudare un altoparlante che vi avvisi quando le pile del BoeBot sono scariche Argomento avanzato opzionale – disegnare le curve di spostamento dei vostri servo ESERCIZIO #1: ASSEMBLARE IL BOE-BOT Questo Esercizio vi guiderà passo – passo nell’assemblaggio del Boe-Bot. In ciascun passo, raccoglierete alcuni dei componenti, e li assemblerete in modo da corrispondere alle immagini. Ciascuna immagine ha istruzioni che la accompagnano; assicurative di seguirle attentamente. Attrezzi e componenti per i Servo Tutti gli attrezzi mostrati in Figura 3-1 sono comuni e possono essere trovati in molti casalinghi e cartolerie. Possono anche essere acquistati nei negozi di elettronica. Attrezzi (1) Giravite Phillips #1 a croce con gambo di 1/8” (3,18 mm) (Richiesto) (1) Chiave esagonale da 1/4” (6,36 mm) (Opzionale) (1) Pinzetta a becchi tondi (Opzionale) Pagina 90 · Robotica con il Boe-Bot Figura 3-1 Attrezzi per il montaggio del Boe-Bot Montaggio della meccanica superiore Iniziate raccogliendo il seguente materiale. Quindi, seguite le istruzioni accluse. Elenco Materiali: Vedere la Figura 3-2. (1) (4) (4) (1) Telaio del Boe-Bot Supporti da 1” Viti a testa tonda, 1/4” 4-40 Passacavo in gomma, 13/32” Istruzioni: Inserite il passacavo in gomma 13/32” nel foro centrale del telaio del Boe-Bot. Assicuratevi che il solco del passacavo sia correttamente inserito nel bordo del foro. Usate le quattro viti da 1/4” 4-40 per applicare i quattro supporti al telaio come mostrato. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 91 Figura 3-2 Telaio e meccanica superiore Componenti (sinistra); assemblaggio (destra). Componenti del Boe-Bot – I componenti per il Boe-Bot possono essere sia inclusi nel Boe-Bot full kit o in una combinazione della Board of Education Full Kit e del Kit di Componenti Robotic. Per maggiori informazioni vedere l’ Appendice E: Elenco Componenti del Boe-Bot . Rimozione delle crociere dei Servo Scollegate l’alimentazione dal vostro BASIC Stamp e dai servo. Togliete tutte le pile AA dal porta pile. Scollegate i servo dalla vostra scheda. Elenco Comopnenti: Vedere la Figura 3-3. (2) Servo a rotazione continua della Parallax, preventivamente centrati Istruzioni: Usate il giravite Phillips per togliere le viti che fermano le crociere sull’asse del servo. Tirate delicatamente ciascuna crociera per estrarla dall’asse. Conservate le viti; saranno usate in un passo successivo. Pagina 92 · Robotica con il Boe-Bot Figura 3-3 Rimozione delle Crociere dei Servo vite a croce Crociera Asse Componenti (sinistra); dopo avere seguito le istruzioni (destra). Fermatevi! √ Prima del prossimo passo, dovete aver completato gli esercizi del Capitolo 2: I Servo Motori del vostro Boe-Bot t • • Esercizio #3: Collegamento dei Servo Motori Esercizio #4: Centratura dei Servo Montaggio dei Servo sul telaio Elenco Componenti: Vedere la Figura 3-4. (1) Tealio del Boe-Bot (parzialmente assemblato) (2) Servo Parallax a Rotazione Continua (8) Viti a testa tonda, 3/8” 4-40 (8) Dadi, 4-40 Istruzioni: attaccate i servo al telaio usando le viti ed i dadi. Notate che per una prestazione migliore dovrete inserire nella finestra rettangolare i servo dall’interno del telaio piuttosto che dall’esterno. Usate dei pezzetti di scotch per etichettare i servo sinistro (S) e destro (D). Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 93 Figura 3-4 Montagggio dei Servo sul Telaio Componenti (Sinistra); Assemblati (Destra). Montaggio del Pacco Porta Pile La Figura 3-5 mostra due diversi insiemi di componenti. Usate i componenti di sinistra se avete la Board of Education, ed i componenti di destra se avete la HomeWork Board. Elenco Componenti per il Boe-Bot con la Board of Education Rev C: Elenco Componenti per il Boe-Bot con la HomeWork Board: Vedere la Figura 3-5 (lato sinistro). Vedere la Figura 3-5 (lato destro). (1) Telaio del Boe-Bot (parzialmente assemblato) (2) Viti a testa svasata, 3/8” 4-40 (2) Dadi, 4-40 (1) Pacco Porta Pile con Spinotto a positivo Centrale (1) Telaio del Boe-Bot (parzialmente assemblato) (2) Viti a testa svasata, 3/8” 4-40 (2) Dadi, 4-40 (1) Pacco Porta Pile con fili stagnati Pagina 94 · Robotica con il Boe-Bot Figura 3-5 Componenti per il Montaggio del Pacco Porta Pile Per l’uso con la Board of Education Per l’uso con la HomeWork Board Istruzioni: Usate le viti a testa svasata ed i dadi per attaccare il Pacco Porta Pile nel lato inferiore del telaio del Boe-Bot come mostrato sul lato sinistro della Figura 3-6. Assicuratevi di inserire bene nel Pacco Porta Pile, qundi serrate a fondo i dadi sul lato superiore del telaio. Come mostrato nel lato destro della Figura 3-6, inserite il cavo di alimentazione del Pacco Porta Pile nel foro centrale con il passacavo. Inserite i cavi dei servo nello stesso foro. Disponete i cavi dei servo e quello di alimentazione come mostrato. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 95 Figura 3-6 Pacco Porta Pile Installato Vista Lato Inferiore (sinistra); Lato Superiore (destra). Montaggio delle Ruote Elenco Componenti: (1) Boe-Bot parzialmente assemblato (non mostrato) (1) Coppiglia 1/16” (1) Sfera di Polietilene da 1” (2) Elastici di Gomma (2) Ruote in Plastica (2) Viti che erano avanzate dalla rimozione delle crociere Figura 3-7 Componenti delle Ruote Istruzioni: il lato sinistro della Figura 3-8 mostra il ruotino di coda del Boe-Bot montato sul telaio. Il ruotino di coda è semplicemente una sfera con un foro nel centro. Una coppiglia lo ferma al telaio e funge da perno di rotazione. Allineate il foro del ruotino di coda con i fori della coda del telaio. Inserite laa coppiglia attraverso i fori (sinistra del telaio, ruotino di coda, destra del telaio). Piegate leggermente l’estremità della coppiglia in modo che non possa uscire dai fori. Il lato destro della Figura 3-8 mostra le ruote motrici del Boe-Bot montate sui servo. Pagina 96 · Robotica con il Boe-Bot Allungate ciascun elastico e posizionatelo sulla periferia di ciascuna ruota. Ciascuna ruota ha una sede che si adatta sull’asse del servo. Premete ciascuna ruota sull’asse del servo assicurandovi di inserirla fino in fondo. Usate le viti che avevate messo da parte nello smontaggio delle crociere per fissare le ruote all’asse dei servo. Figura 3-8 Montaggio delle ruote Ruotino di Coda (sinistra); Ruote Motrici (destra). Montaggio della Scheda al Telaio Elenco Componenti per il Boe-Bot con la Board of Education: Elenco Componenti per il Boe-Bot con la HomeWork Board: Vedere il lato sinistro della Figura 3-9. Vedere il lato destro della Figura 3-9. (1) Telaio del Boe-Bot (parzialmente assemblato) (4) Viti a testa tonda, 1/4” 4-40 (1) Board of Education con il BASIC Stamp 2 (1) Telaio del Boe-Bot (parzialmente assemblato) (4) Viti a testa tonda, 1/4” 4-40 (1) BASIC Stamp HomeWork Board Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 97 Figura 3-9 Telaio del BoeBot e Schede Con la Board of Education Rev C Con la HomeWork Board La Figura 3-10 mostra le porte servo ricollegate per ambedue le schede; la Board of Education Rev C (lato sinistro) e la HomeWork Board (lato destro). Ricollegate i servo alle porte servo. Assicuratevi di collegare il connettore etichettato ‘S’ alla porta P13 ed il connettore etichettato ‘D’ alla porta P12. Pagina 98 · Robotica con il Boe-Bot White Red Black Bianco White Red Black Nero (916) 624-8333 www.parallaxinc.com www.stampsinclass.com 15 14 Vdd 13 12 Vdd Red Black X4 X5 Sulla Board of Education Rev C Vin Rev B Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 Å Å Å Å Å P13 - Bianco Vbp - Rosso Vss - Nero Vbp - Rosso P12 - Bianco Figura 3-10 Le Porte Servo Ricollegate Board of Education Rev C (sinistra) HomeWork Board (destra). Sulla HomeWork Board La Figura 3-11 mostra il telaio del Boe-Bot con le rispettive schede montate. Posizionate la scheda sui quattro supporti in modo che i fori della scheda siano allineati con i fori dei supporti. Assicuratevi che l’area prototipale bianca sia sul lato delle ruote motrici, non sul lato del ruotino di coda. Figura 3-11 Le schede montate sul telaio del Boe-Bot Con la Board of Education Rev C Con la HomeWork Board La Figura 3-12 mostra un Boe-Bot assemblato, a sinistra costruito con la Board of Education Rev C ed a destra con la HomeWork Board. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 99 Dal lato inferiore del telaio, tirate via dal foro centrale con il passacavo i cavi in eccesso. Disponete i cavi in eccesso tra i servo ed il telaio. Figura 3-12 Boe-Bot Assemblato Con la Board of Education Rev C Con la HomeWork Board ESERCIZIO #2: RICOLLAUDARE I SERVO In questo Esercizio, collauderete di nuovo i servo per assicurarvi che i collegamenti elettrici tra la scheda ed i servo siano corretti. La Figura 3-13 indica il lato frontale, il retro, il lato destro ed il sinistro del vostro Boe-Bot. Dovete essere sicuri che il servo di destra giri quando riceve gli impulsi da P12 e che il servo di sinistra giri quando riceve gli impulsi da P13. Pagina 100 · Robotica con il Boe-Bot Sinistra Fronte Retro Figura 3-13 Il Fronte, Retro, Sinistra e Destra del vostro robot BoeBot Destra Collaudo della Ruota Destra Il prossimo programma esempio collauderà il servo della ruota destra, mostrato in figura Figura 3-14. Il programma farà girare questa ruota in senso orario per tre secondi, poi la fermerà, quindi la farà girare in senso antiorario per tre secondi. Orario 3 secondi Fermo 1 secondo Antiorario 3 secondi Figura 3-14 Collaudo della Ruota Destra Programma Esempio: RightServoTest.bs2 Alimentate il vostro BASIC Stamp ed i servo. Promemoria circa la connessione dell’alimentazione al vostro BASIC Stamp ed ai Servo. √ √ Se avete una Board of Education Rev Connettete l’interruttore a 3-posizioni in posizione-2. Se avete una BASIC Stamp HomeWork Board, ricollegate la pila da 9 V alle clip sulla scheda e rimettete al loro posto la pila AA che avevate tolto dal pacco porta pile. Digitate, Salvate e LanciateRightServoTest.bs2. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 101 Verificate che la ruota destra giri in senso orario per tre secondi, si fermi, e quindi giri in senso antiorario per altri tre secondi. Se la ruota destra/Servo non si comporta come previsto, vedere la sezione Risoluzione dei Problemi dei Servo. Subito dopo RightServoTest.bs2. Se la ruota destra/Servo si comporta come previsto, allora andate alla sezione Il vostro Turno, dove collauderete la ruota sinistra. ' Robotica con il Boe-Bot - RightServoTest.bs2 ' Il Servo destro gira in senso orario per tre secondi, si ferma, ' quindi in senso antiorario per altri tre secondi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" counter VAR Word FREQOUT 4, 2000, 3000 ' Segnale di Inizio del Programma. FOR counter = 1 TO 122 PULSOUT 12, 650 PAUSE 20 NEXT ' Orario appena meno di 3 secondi. FOR counter = 1 TO 40 PULSOUT 12, 750 PAUSE 20 NEXT ' Fermo per 1 secondo. FOR counter = 1 TO 122 PULSOUT 12, 850 PAUSE 20 NEXT ' Antiorario per 3 secondi. END Pagina 102 · Robotica con il Boe-Bot Risoluzione dei Problemi dei Servo: Questa è un elenco di alcuni sintomi comuni e di come risolverli. Il servo non gira. √ √ √ √ Se state usando la Board of Education Rev C, controllate che l’interruttore a 3posizioni sia messo in posizione-2. potete quindi far ripartire il programma premendo e rilasciando il pulsante di Reset. Se state usando la BASIC Stamp HomeWork Board, controllate che nel pacco porta pile ci siano le pile. Ricontrollate le connessioni del servo usando la Figura 3-10 a pagina 98 come guida. Se state usando la HomeWork Board, potreste anche dare una seconda occhiata alla Figura 2-18 a pagina 65. Controllate e ricontrollate che abbiate digitato correttamente il programma. Il servo di destra non gira ma il sinistro si. Questo significa che avete invertito i collegamenti dei servo. Il servo che è collegato a P12 dovrebbe essere collegato a P13, e viceversa. √ √ √ √ √ √ Togliete l’alimentazione. Scollegate ambedue i servo. Collegate il servo che era collegato a P12 a P13. Collegate l’altro servo (che era collegato a P13) a P12. Ricollegate l’alimentazione. Rilanciate RightServoTest.bs2. La ruota non si ferma; ma gira lentamente. Questo significa che il servo non è correttamente centrato. Per ovviare a questo piccolo inconveniente, potete modificare il programma. Sostituendo i valori del comando PULSOUT 12, 750. √ √ √ Se la ruota gira lentamente in senso antiorario, usate un valore leggermente inferiore di 750. Se gira lentamente in senso orario, usate un valore leggermente maggiore di 750. Se potete trovare un valore tra 740 e 760 che ferma completamente il vosto servo, quindi ricordatevi di usare sempre in tutti i programmi quel valore al posto di PULSOUT 12, 750. La Ruota non si Ferma per un Secondo tra la Rotazione Oraria e quella Antioraria. La ruota può ruotare rapidamente per tre secondi in una direzione e quattro nell’altra. Può anche girare rapidamente per tre secondi, quindi rallentare per un secondo, poi girare nell’altro verso per tre secondi. Oppure, può girare rapidamente per sette secondi. it might turn rapidly in the same direction for seven seconds. Senza tener conto di tutto questo, significa che il potenziometro della centratura è fuori taratura. √ Rimuovete le ruote, smontate i servo e ripetete l’esercizio del capitolo 2 Esercizio #4: Centratura dei Servo. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 103 Il Vostro Turno– Collaudo della Ruote Sinistra È ora tempo di effettuare lo stesso collaudo per la ruota sinistra come mostrato in Figura 3-15. questo significa modificare RightServoTest.bs2 in modo che i comandi PULSOUT siano inviati al servo collegato a P13 invece che al servo collegato a P12. Tutto quello che dovete fare è cambiare i tre comandi PULSOUT in modo che sia PULSOUT 13 invece di PULSOUT 12. Orario 3 secondi Fermo 1 secondo Figura 3-15 Collaudo della Ruota Sinistra Antiorario 3 secondi Salvate RightServoTest.bs2 con il nome LeftServoTest.bs2. Cambiate i tre comandi PULSOUT in modo che si legga PULSOUT 13 invece di PULSOUT 12. Salvate e quindi lanciate il programma. Verificate che faccia girare il servo sinistro in senso orario per 3 secondi, si fermi per 1 secondo e quindi riparta in senso antiorario per altri 3 secondi. Se la ruota sinistra/Servo non si comporta come previsto, vedere la sezione Risoluzione dei Problemi dei Servo a pagina 102. Se la ruota sinistra/Servo si comporta come previsto, allora siete pronti per andare al prossimo esercizio. ESERCIZIO #3: CIRCUITO INDICATORE DI START/RESET E DI PROGRAMMA Quando la tensione scende sotto un certo livello, un dispositivo non può funzionare correttamente, questo fenomeno viene chiamato “brownout”(quasi come il “blackout” ma meno dannoso). Il BASIC Stamp si autoprotegge dal brownout mettendo il suo processore e la memoria di programma in uno stato dormiente fino a che la tensione non ritorna a livelli normali. Un calo della tensione a 5.2 V alla connessione Vin risulta in una tensione sotto i 4.3 V al regolatore interno del BASIC Stamp. Un circuito chiamato Pagina 104 · Robotica con il Boe-Bot rivelatore di brownout sul BASIC Stamp è sempre all’erta per rivelare questa condizione. Quando si verifica un brownout, il rivelatore di brownout disabilita il processore del BASIC Stamp e della memoria di programma. Quando la tensione ritorna sopra i 5.2 V, il BASIC Stamp riprende la sua attività, ma non dallo stesso punto in cui si era fermato. Parte invece dall’inizio. Questo comportamento è ugale a quello che si ha quando togliete l’alimentazione e poi la ridate, ed è anche la stessa cosa che succede se premete e rilasciate il pulsante di Reset sulla vostra scheda. Quando le pile del Boe-Bot si scaricano, il brownout può causare la ripartenza del programma quando meno ve lo aspettate. Questo può portare ad un comportamento erratico del vostro Boe-Bot molto difficile da scoprire se ancora non avete collaudato con successo il vostro programma. In alcuni casi, il programma del Boe-Bot potrebbe girare correttamente e poi all’improvviso, sembrare perduto ed andare in una direzione imprevista. Se le pile scariche sono la causa, potrebbe darsi che il programma abbia ricominciato da capo. In altri casi, il Boe-Bot può comportarsi in un modo confuso per il fatto che la tensione delle pile è ancora sufficiente ad alimentare il BASIC Stamp ma quando entrano in azione i servo motori la tensione si abbassa oltre il limite del brownout. Il programma tenta di far girare i servo per una frazione di secondo, quindi si riavvia dall’inizio, e così via di nuovo fino a che le pile non siano definitivamente scariche. In questi casi un indicatore di start/reset si rivela estremamente utile per la diagnosi del comportamento del robot. Un modo per indicare la condizione di reset è di inserire un segnale inconfondibile all’inizio di ogni programma del Boe-Bot. Il segnale viene emesso non appena viene data alimentazione, ma anche ogni volta che si verifica una condizione di reset dovuta al brownout. Un segnale efficace per la condizione di reset è un tono emesso da un altoparlante ogni volta che il programma del BASIC Stamp parte dal reset o dall’inizio. Istruzioni Speciali per la BASIC Stamp HomeWork Board Sebbene l’indicatore di reset vi avvisi quando la pila da 9 V che alimenta il BASIC Stamp si sta scaricando, non vi avviserà se l’alimentazione dei servo verrà meno (le pile del pacco porta pile). Potrete comunque accorgervi se le pile del pacco portapile si stanno scaricando perché i servo nelle normali operazioni inizieranno ad andare sempre più piano. Quando vi accorgete di questo sintomo, sostituite le pile scariche con pile nuove da 1.5 V AA alkaline. Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 105 Questo esercizio vi farà conoscere un dispositivo chiamato altoparlante piezoelettrico (cicalino piezo) che ptrete usare per generare dei toni. Questo cicalino può emettere toni differenti in base alla frequenza dei segnali alti/bassi che riceve dal BASIC Stamp. Il simbolo schematico ed il disegno del componente del cicalino piezo sono mostrati in Figura 3-16. Questo cicalino sarà usato per emettere toni quando il BASIC Stamp verrà resettato in questo esercizio così come negli altri nel resto degli esercizi di questo testo. Figura 3-16 Cicalino Piezo Che cosa è la Frequenza? È la misura di quanto spesso un evento si verifica in una data quantità di tempo. Che cosa è un elemento piezoelettrico e come può generare dei suoni? È un cristallo che cambialeggermente la sua forma quando gli viene applicata una tensione. Applicando dei segnali alti/bassi in rapida successione ad un cristallo piezoelettrico, lo si forza a cambiare forma rapidamente e quindi a vibrare. Far vibrare un oggetto fa anche vibrare l’aria che lo circonda. E questo è quello che noi percepiamo come suoni e toni. Ad ogni ritmo di vibrazione corrisponde un tono diverso. Per esempio se pizzicate una corda di chitarra, essa vibrerà ad una frequenza, e voi sentirete un suono particolare. Se pizzicate una corda diversa, vibrerà ad una frequenza differente emettendo un tono differente. Nota: Gli elementi piezoelettrici hanno molti usi. Per esempio, quando una forza gli viene applicata, l’elemento emette una tensione. Alcuni elementi piezoelettrici hanno una frequenza alla quale vibrano naturalmente. Questi elementi vengono usati come riferimento di frequenza per molti computer e microcontrollori. Componenti Richiesti (1) Boe-Bot Assemblato e collaudato (1) Cicalino Piezo (varie.) Ponticelli di filo Costruzione del circuito indicatore di Start/Reset La Figura 3-17 mostra un schema di circuito di allarme con cicalino piezo sia per la Board of Education che per la BASIC Stamp HomeWork Board. La Figura 3-18 mostra lo schema di cablaggio per ciascuna scheda. Pagina 106 · Robotica con il Boe-Bot Togliete Sempre l’Alimentazione Prima di Modificare i vostri Circuiti! √ √ √ Se avete una Board of Education Rev C. Muovete l’interruttore a 3-posizioni in posizione-0. Se avete una BASIC Stamp HomeWork Board, staccate la pila da 9 V dalle clip sulla scheda. Togliete una pila dal pacco porta pile. : Assemblate il circuito mostrato in Figura 3-17 ed in Figura 3-18. P4 Figura 3-17 Circuito Indicatore di Start/Reset del Programma Vss To Servos To Servos 15 14 Vdd 13 12 (916) 624-8333 Rev B www.parallax.com www.stampsinclass.com Red Black X4 Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Board of Education Rev C Vdd © 2000-2003 Vin Vss X3 Figura 3-18 Schema di cablaggio del Circuito Indicatore di Start/Reset del Programma Board of Education (sinistra) and HomeWork Board (destra). + HomeWork Board Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 107 I circuiti del cicalino piezo e dei servo rimarranno collegati alla vostra scheda per tutti gli esercizi di questo testo. Tutti gli schemi circuitali da qui in poi, mostreranno circuiti che dovranno essere aggiunti ai circuiti esistenti del cicalino piezo e dei servo. Tutti gli schemi di cablaggio mostreranno i circuiti degli schemi relativi insieme alle connessioni dei circuiti del cicalino e dei servo. Programmazione dell’indicatore di Start/Reset Il prossimo Programma Esempio prova il cicalino piezo. Usa il comando FREQOUT per inviare segnali alti/bassi temporizzati con precisione al cicalino. Viene di seguito mostrata la sintassi del comando FREQOUT: FREQOUT Pin, Duration, Freq1 {,Freq2} Questa è l’impostazione del comando FREQOUT usato nel prossimo Programma Esempio. FREQOUT 4, 2000, 3000 L’argomento Pin è 4, stà a significare che i segnali alti/bassi saranno inviati al piedino di I/O P4. l’argomento Duration, indica per quanto tempo dureranno i segnali alti/bassi, è 2000, che stà per 2000 ms o 2 secondi. L’argomento Freq1 è la frequenza dei segnali alti/bassi. In questo esempio, i segnali alti/bassi creeranno un tono di 3000 hertz, o 3 kHz. La frequenza può essere misurata in Hertz (Hz). L’hertz è l’unità di misura della frequenza ed indica il numero di volte che un evento accade nell’unità di tempo. Un hertz è semplicemente una volta al secondo, e si abbrevia in 1 Hz. Un kilohertz è mille-volte-alsecondo, e si abbrevia in 1 kHz. Toni sintetizzati digitalmente con FREQOUT. Il comando FREQOUT iniva degli impulsi alti/bassi di durata variabile che faranno assomigliare più precisamente il tono emesso dal cicalino piezo alle vibrazioni naturali delle corde musicali. Programma Esempio: StartResetIndicator.bs2 Questo Programma Esempio emette un beep all’inizio del programma, quindi continua il programma che iniva dei messaggi DEBUG ogni mezzo secondo. Questi messaggi continueranno indefinitamente perché sono nidificati in un ciclo DO… LOOP. Se l’alimentazione del BASIC Stamp viene interrotta mentre il programma si trova all’interno del ciclo DO…LOOP, il programma ripartirà nuovamente dall’inizio. Quando Pagina 108 · Robotica con il Boe-Bot ripartirà, emetterà di nuovo un beep. Potete simulare una condizione di brownout sia premendo e rilasciando il pulsante di reset sulla vostra scheda che togliendo l’alimentazione. Ridate alimentazione alla vostra scheda. Digitate, Salvate e Lanciate StartResetIndicator.bs2. Verificate che il cicalino piezo emetta un tono chiaramente udibile per due secondi prima dell’inizio della visualizzazione dei messaggi “In attesa del Reset ….” nel Terminale di Debug. Se non udite il tono, controllate il cablaggio ed il codice per eventuali errori. Ripetete questa procedura fino a che non ottenete un tono udibile dal vostro cicalino. Se udite il tono, provate a simulare la condizione di brownout premendo e rilasciando il pulsante di reset sulla vostra scheda. Verificate che il cicalino piezo emetta un tono chiaramente udibile dopo ogni reset. Porvate anche a scollegare e ricollegare l’alimentazione, e verificate che anche questa situazione ottenga come risultato un tono di avviso di reset. ' Robotica con il Boe-Bot - StartResetIndicator.bs2 ' Collauda il circuito del cicalino piezo. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG CLS, "Beep!!!" FREQOUT 4, 2000, 3000 ' Direttiva Stamp. ' Direttiva PBASIC. ' Visualizzazione mentre il cicalino suona. ' Segnala lo start/reset del programma. DO DEBUG CR, "In attesa del Reset…" PAUSE 500 LOOP ' DO...LOOP ' Visualizza il messaggio ' ogni 0.5 secondi ' fino al reset hardware. Come Funziona StartResetIndicator.bs2 StartResetIndicator.bs2 Inizia visualizzando il messaggio “Beep!!!” quindi, immediatamente dopo, il comando FREQOUT invia un tono di 3 kHz al cicalino piezo per 2 s. A causa della velocità con cui il BASIC Stamp esegue le istruzioni, sembra che il messaggio venga visualizzato nello stesso momento in cui il cicalino piezo emette il tono. Quando il tono è stato emesso, il programma entra in un ciclo DO…LOOP, visualizzando lo stesso messaggio “In attesa del Reset…” in continuazione. ad ognissione del tasto reset Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 109 sulla Board of Education oppure ad ogni interruzione dell’alimentazione, il programma ricomincia da capo. Il vostro Turno - Aggiunta di StartResetIndicator.bs2 ad un altro programma Da ora in poi le righe di codice del programma indicatore di pile scariche sarà usato all’inizio di ogni programma esempio. Potete considerarle parte della “routine di inizializzazione” o “ routine di boot” per ogni programma del Boe-Bot. Copiate il comando FREQOUT da StartResetIndicator.bs2 nel programma HelloOnceEverySecond.bs2 prima della sezione del ciclo DO…LOOP. Lanciate il programma modificato e verificate che risponda con un tono di avviso ogni volta che il BASIC Stamp viene resettato (sia premendo e rilasciando il pulsante di Reset sulla scheda che scollegando e ricollegando l’alimentazione). ESERCIZIO #4: ARGOMENTO AVANZATO – CURVE DI TRASFERIMENTO DEI SERVO In questo esercizio, realizzerete un grafico della velocità del servo in rapporto alla larghezza dell’impulso. Una cosa che può accelerare questo procedimento è la finestra di trasmissione del Terminale di Debug, che è mostrato in Figura 3-19. potete usare la finestra di trasmissione per inviare messaggi al BASIC Stamp. Inviando messaggi che dicano al BASIC Stamp quale larghezza di impulso (argomento Duration di PULSOUT) inviare ai servo, potete provare le varie velocità dei servo alle varie larghezze di impulso. Pagina 110 · Robotica con il Boe-Bot Finestra di Trasmissione Figura 3-19 Finestre del Terminale di Debug Finestra di Ricezione Uso del Comando DEBUGIN A questo punto, avete probabilmente conoscerete il comando DEBUG e come possa essere usato per inviare messaggi dal BASIC Stamp al Terminale di Debug. La zona dove vengono visualizzati i messaggi si chiama Finestra di Ricezione. Il Terminale di Debug ha anche una Finestra di Trasmissione, che vi permette di inviare informazioni al vostro BASIC Stamp mentre un programma sta girando. Per ricevere le informazioni che digiterete, il vostro programma dovrà contenere il comando DEBUGIN. Il comando DEBUGIN posiziona il valore da voi digitato nella fiestra di trasmissione in una variabile. Nel prossimo Programma Esempio, una variabile di tipo word chiamata pulseWidth contiene il valore che il comando DEBUGIN riceve. Pertanto, il programma deve prima avere una dichiarazione per quella variabile. pulseWidth VAR Word Ora, il comando DEBUGIN può essere usato per ricevere un valore decimale che digiterete nella finestra di trasmissione del Terminale di Debug e memorizzarlo in pulseWidth: DEBUGIN DEC pulseWidth Potrete quindi programmare il BASIC Stamp per usare questo valore. Qui viene usato nell’argomento Duration del comando PULSOUT: Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 111 PULSOUT 12, pulseWidth Programma Esempio: TestServoSpeed.bs2 Questo programma vi permette di impostare l’argomento Duration del comando PULSOUT digitandolo nella finestra di trasmissione del Terminale di Debug. Digitate, Salvate e Lanciate TestServoSpeed.bs2. Puntate con il mouse nella finestra di trasmissione del Terminale di Debug, e clickate per attivare il cursore in quella finestra per la digitazione. Digitate 650 quindi premete il tasto Enter. Verificate che il servo giri alla massima velocità in senso orario per sei secondi. Quando il servo ha smesso di girare, sarete invitati a digitare un altro valore. Digitate 850 quindi premete il tasto Enter. Verificate che il servo giri alla massima velocità in senso antiorario per sei secondi. ' ' ' ' Robotica con il Boe-Bot - TestServoSpeed.bs2 Prende la larghezza di Impulso, quindi conta i giri al minuto della ruota. La ruota girerà per 6 secondi Moltiplicate per 10 per ottenere i giri al minuto (RPM). '{$STAMP BS2} '{$PBASIC 2.5} counter VAR pulseWidth VAR pulseWidthComp VAR Word Word Word FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. DO DEBUG "Digitate la Larghezza di Impulso: " DEBUGIN DEC pulseWidth pulseWidthComp = 1500 - pulseWidth FOR counter = 1 TO 244 PULSOUT 12, pulseWidth PULSOUT 4, pulseWidthComp PAUSE 20 NEXT Pagina 112 · Robotica con il Boe-Bot LOOP Come Funziona TestServoSpeed.bs2 Vengono dichiarate tre variabili, counter per il ciclo FOR…NEXT, pulseWidth per i comandi DEBUGIN e PULSOUT, e pulseWidthComp che memorizza un valore fittizio che viene usato in un secondo comando PULSOUT. counter VAR pulseWidth VAR pulseWidthComp VAR Word Word Word Il comando FREQOUT viene usato per avvisare che il programma è partito. FREQOUT 4,2000,3000 Il resto del programma è annidato all’interno di un ciclo DO…LOOP, così sarà eseguito in continuazione. All’operatore del Terminale di Debug viene richiesto di digitare una larghezza di impulso. Questo dato viene memorizzato nella variabile pulseWidth. DEBUG "Digitate la Larghezza di Impulso: " DEBUGIN DEC pulseWidth Per migliorare l’accuratezza della misura, devono essere inviati due comandi PULSOUT. Rendendo il comando PULSOUT della stessa grandezza al di sotto di 750 come l’altro lo è al di sopra, la somma dei due argomenti Duration del comando PULSOUT sarà sempre 1500. questo garantisce che i due comandi PULSOUT insieme impieghino la stessa quantità di tempo. Il risultato è che non importa la Duration del comando PULSOUT, il ciclo FOR…NEXT impiegherà sempre lo stesso tempo ad essere eseguito. Questo renderà più acccurata la misurazione dei giri al minuto RPM che prenderete nella sezione Il vostro Turno. Il comando prende il valore della larghezza di impulso che avete digitato, e calcola una larghezza di impulso che sommata alla precedente dia come risultato 1500. Se digitate 650, pulseWidthComp sarà 850. Se digitate 850, pulseWidthComp sarà 650. Se digitate 700, pulseWidthComp sarà 800. Provate con alcuni altri esempi. La somma finale sarà sempre 1500. pulseWidthComp = 1500 - pulseWidth Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 113 Un ciclo FOR…NEXT che dura 6 secondi invia impulsi al servo di destra (P12). Il valore di pulseWidthComp viene inviato al cicalino, causando l’emissione di un rapido ticchettio. È possibile mettere il Boe-Bot su un fianco (dal lato della ruota che non gira) mentre state collaudando l’altra ruota. FOR counter = 1 TO 244 PULSOUT 12, pulseWidth PULSOUT 4, pulseWidthComp PAUSE 20 NEXT Il Vostro Turno– Realizzazione di un grafico della larghezza dell’impulso in rapporto alla velocità di rotazione del servo La Figura 3-20 mostra un esempio di curva di trasferimento per un servo a rotazione continua. L’asse orizzontale mostra la larghezza dell’impulso in ms, e l’asse verticale mostra la velocità di rotazione del servo in RPM. In questo grafico, il senso orario è negativo ed il senso antiorario è positivo. Questa particolare curva di trasferimento del servo spazia da circa -48 RPM a 48 RPM nella scala delle larghezze di impulso da 1.3 ms a 1.7 ms. Rotational Velocity vs. Pulse Width for Servo 60 Rotational Velocity, RPM 40 20 Figura 3-20 Esempio di curva di trasferimento per un servo Parallax 0 -20 -40 -60 1.300 1.350 1.400 1.450 1.500 1.550 1.600 1.650 1.700 Pulse Width, m s Right Servo Potete usare la Table 3-1 per registrare i dati della curva di trasferimento dei vostri servo. Pagina 114 · Robotica con il Boe-Bot Table 3-1: Larghezza di Impulso e RPM per i Servo Parallax Larghezza Impulso (ms) Velocità Rotazione (RPM) Larghezza Impulso (ms) Velocità Rotazione (RPM) Larghezza Impulso (ms) Velocità Rotazione (RPM) Larghezza Impulso (ms) 1.300 1.400 1.500 1.600 1.310 1.410 1.510 1.610 1.320 1.420 1.520 1.620 1.330 1.430 1.530 1.630 1.340 1.440 1.540 1.640 1.350 1.450 1.550 1.650 1.360 1.460 1.560 1.660 1.370 1.470 1.570 1.670 1.380 1.480 1.580 1.680 1.390 1.490 1.590 1.690 Velocità Rotazione (RPM) 1.700 Ricordatevi che l’argomento Duration del comando PULSOUT è in unità di 2 µs. PULSOUT 12, 650 iniva impulsi che durano 1.3 a P12. PULSOUT 12, 655 invia impulsi di 1.31 ms, PULSOUT 12, 660 invia impulsi di 1.32 ms, e così via. Duration = 650 × 2 µs = 650 × 0.000002 s = 0.0013 s = 1.3 m s Duration = 655 × 2 µs = 655 × 0.000002 s = 0.00131 s = 1.31 m s Duration = 660 × 2 µs = 660 × 0.000002 s = 0.00132 s = 1.32 m s Fate un segno sulla vostra ruota in modo da avere un punto di riferimento per contare i giri. Run TestServoSpeed.bs2. Clickate la Finetra di Trasmissione del Terminale di Debug. Digitate il valore 650. Contate quanti giri fa la ruota. Dal momento che il servo gira per 6 secondi, potete moltiplicare questo valore per 10 per ottenere i giri al minuto(RPM). Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 115 Moltiplicate questo valore per 10 ed inserite il risultato nella Table 3-1 a fianco del valore 1.3 ms. Digitate il valore 655. Contate quanti giri fa la ruota. Moltiplicate questo valore per 10 ed inserite il risultato nella Table 3-1 a fianco del valore 1.31 ms. Continuate ad incrementare i valori di durata di 5 in 5 (0.01 ms) fino ad arrivare ad 850 (1.7 ms). Usate un foglio di calcolo, un calcolatore, o carta millimetrata per visualizzare i dati. Ripetete questo procedimento per l’altra ruota. Pagina 116 · Robotica con il Boe-Bot SOMMARIO Questo capitolo ha esaminato l’assemblaggio del Boe-Bot ed il suo collaudo. Compreso l’assemblaggio meccanico, come il montaggio delle varie parti mobili al telaio del BoeBot. Ha incluso anche l’assemblaggio circuitale, il montaggio ed il collaudo del cicalino piezo. Il collaudo ha comportato anche il ricollaudo dei servo dopo che erano stati disconnessi per l’assemblaggio meccanico del Boe-Bot. Una sezione avanzata ha esaminato l’uso del comando DEBUGIN, che ha facilitato la realizzazione del grafico delle curve di trasferimento dei servo. È stato studiato il concetto di brownout insieme con l’effetto che questa condizione produce in un programma che gira sul BASIC Stamp. Il Brownout causa lo spegnimento del BASIC Stamp, e la successiva ripartenza del programma dall’inizio. È stato aggiunto un cicalino piezo per segnalare la partenza del programma. Se il cicalino suona mentre un programma è in esecuzione, quando non ci si aspetta che lo faccia, questo può indicare un probabile brownout. La condizione di Brownout può a sua volta indicare pile in via di esaurimento. Per far emettere un tono al cicalino che indichi un Reset, è stato esaminato il comando FREQOUT. Questo comando fa parte di una routine di inizializzazione che verrà usata in tutti i programmi del Boe-Bot. Fino a questo capitolo, il Terminale di Debug è stato usato per visualizzare messaggi inviati al computer dal BASIC Stamp. Questi messaggi erano visualizzati nella finestra di ricezione. Ma il Terminale di Debug ha anche una finestra di trasmissione che potete usare per inviare messaggi dal computer al BASIC Stamp. Il BASIC Stamp può catturare questi valori eseguendo il comando DEBUGIN, che memorizza un valore inviato dalla Finestra di Trasmissione del Terminale di Debug in una variabile. Il valore può quindi essere usato dal programma PBASIC. Questa tecnica è stata usata come aiuto nella raccolta dei dati per la realizzazione di un grafico della curva di trasferimento dei servo a rotazione continua. Domande 1. 2. 3. 4. 5. Che cosa è una condizione di brownout? Quali sono sul Boe-Bot alcuni dei sintomi di una condizione di brownout? Come può essere usato un cicalino piezo per rilevare un brownout? Che cosa è un Reset? Che cosa è una routine di inizializzazione? Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 117 6. In che modo un cicalino piezo genera dei toni? 7. Quali sono gli argomenti del comando FREQOUT? Che cosa fa ciascun argomento? 8. Quali sono i tre (o più) possibili errori che si possono fare scollegando e ricollegando i servo? 9. Quale comando avete cambiato in RightServoTest.bs2 per collaudare la ruota sinistra invece della desrtra? 10. Che cosa pensate che succeda se tentate di inviare al BASIC Stamp information usando la Finestra di Trasmissione del Terminale di Debug quando un comando DEBUGIN non è in esecuzione in attesa di un valore? 11. Che cosa pensate che succeda se il BASIC Stamp esegue un comando DEBUGIN, ma non vengono inviati dati dalla Finestra di Trasmissione del Terminale di Debug? Esercizi 1. Scrivete un comando FREQOUT che faccia emettere un tono che sia diverso dal tono di rilevamento del reset, ad indicare che un programma è finito. 2. Scrivete un comando FREQOUT che faccia emettere un tono (diverso dai toni di inizio e fine del programma) che indichi il completamento di un processo intermedio. Provate un valore con una durata di 100 ms ad una frequenza di 4kHz. 3. Scrivete una dichiarazione di variabile ed un comando DEBUGIN che possa essere usato per caricare un valore nella vostra variabile. Progetti 1. Modificate RightServoTest.bs2 in modo che emetta un tono a significare che il collaudo è completato. 2. Modificate RightServoTest.bs2 in modo che emetta un tono che vi avvisi ogni volta che il ciclo FOR…NEXT è completo. 3. Modificate TestServoSpeed.bs2 in modo che usi DEBUGIN per inserire nel ciclo FOR…NEXT una larghezza di impulso per il servo di sinistra ed il servo di destra insieme al numero di impulsi da inviare. Usate questo programma per controllare il movimento del vostro Boe-Bot dalla Finestra di Trasmissione del Terminale di Debug. 4. Progetto Avanzato– Usate le curve di trasferimento del servo sinistro e destro per predire gli argomenti Duration dei comandi PULSOUT che faranno girare ad una velocità il servo di sinistra in una direzione ed il servo di destra alla stessa Pagina 118 · Robotica con il Boe-Bot velocità nella direzione opposta. La Figura 3-21 mostra un esempio di come potrebbe essere effettuato il calcolo per far girare il servo di sinistr a 40 RPM in senso orario ed il servo di destra 40 RPM in senso antiorario. Notate che al servo di sinistra servono impulsi di circa 1.440 ms mentre al servo di destra servono impulsi di circa 1.590 ms. potete moltiplicare ciascuno di questi valori per 500 per ottenere gli argomenti Duration del comando PULSOUT. Fate delle prove usando le curve di trasferimento dei vostri servo. Rotational Velocity vs. Pulse Width for Servo 60 Figura 3-21 Curve di Trasferimento 40 Rotational Velocity, RPM Orario 3 secondi 20 0 -20 Queste possono essere usate per calcolare le durate degli impulsi di sinistra e di destra. Fermo 1 secondo Antiorario 3 secondi -40 -60 1.300 1.350 1.400 1.450 1.500 1.550 1.600 1.650 1.700 Pulse Width, ms Left Servo Right Servo I servo in questo esempio sono intenzionalmente discordanti. Questo aiuta a dimostrare che problemi fisici, come servo che girano a velocità differenti, possano essere risolti modificando il programma PBASIC che stà controllando i servo. L’impostazione della larghezza di impulso per ciascun servo, consiste semplicemente nell’inserire un valore appropriato di Duration in ciascun comando PULSOUT. Nel caso di Figura 3-21, i comandi PBASIC per eguagliare le velocità dei due servo sono: PULSOUT 13, 720 PULSOUT 12, 795 ' 1.44 X 500 = 720 ' 1.59 X 500 = 795 Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 119 Capitolo 4: Navigazione con il Boe-Bot · Pagina 121 Capitolo 4: Navigazione con il Boe-Bot Il Boe-Bot può essere programmato per eseguire svariate manovre. Le manovre e le tecniche di programmazione che studieremo qui saranno usate anche nei capitoli successivi. La sola differenza è che in questo capitolo, il Boe-Bot eseguirà ciecamente le manovre. Nei capitoli successivi, il Boe-Bot eseguirà manovre simili in risposta alle condizioni che rileverà con i suoi sensori. In questo capitolo verranno anche studiati modi per calibrare e mettere a punto la navigazione del Boe-Bot. Saranno incluse tecniche per far andare dritto il Boe-Bot, curve più precise, ed il calcolo delle distanze. Esercizio 1 2 3 4 5 Sommario Programmazione del Boe-Bot per eseguire le manovre base: avanti, indietro, curva a sinistra, curva a destra, e rotazioni sul proprio asse. Messa a punto delle manovre dell’Esercizio 1 in modo che siano più precise. Uso della matematica per il calcolo del numero di impulsi da inviare per far percorrere al Boe-Bot una distanza predefinita. Invece di far partire ed arrestare il Boe-Bot modo brusco, scrivere programmi che facciano accelerare e decelerare gradualmente il Boe-Bot durante le manovre. Scrivere subroutine per effettuare le manovre base in modo che in un programma ciascuna subroutine possa essere usata più volte secondo necessità. ESERCIZIO #1: MANOVRE BASE DEL BOE-BOT La Figura 4-1 mostra i lati frontale, posteriore, sinistro, e destro del vostro Boe-Bot. Quando il Boe-Bot avanza, nel disegno, dovrebbe rotolare verso il bordo destro della pagina. Indietreggiando dovrebbe muoversi verso il bordo sinistro della pagina. Una curva a destra farebbe muovere il Boe-Bot verso la sommità della pagina, ed una curva a sinistra lo farebbe andare verso il fondo della pagina. Pagina 122 · Robotica con il Boe-Bot Curva a Sinistra Indietro Figura 4-1 Il Vostro Boe-Bot e le Direzioni di Marcia Avanti Curva a Destra Avanzamento Questa è una cosa divertente: per far avanzare il Boe-Bot, la ruota sinistra del Boe-Bot deve girare in senso antiorario, e la sua ruota destra deve girare in senso orario. Se ancora non avete afferrato il concetto, date un’occhiata alla Figura 4-2 e vedete se riuscite ad autoconvincervi che è tutto vero. Visto dal lato sinistro, perché il Boe-Bot avanzi la ruota deve ruotare in senso antiorario. Visto dal lato destro, perché il Boe-Bot avanzi la ruota deve ruotare in senso orario. Counterclockwise Forward Lato Sinistro Figura 4-2 Rotazione delle Ruote per l’avanzament o Clockwise Forward Lato Destro Ricordate dal capitolo 2 che l’argomento Duration del comando PULSOUT controlla la velocità e la direzione con cui il servo gira. Gli argomenti StartValue ed EndValue di un ciclo FOR…NEXT controllano il numero di impulsi inviati. Dal momento che ciascun Capitolo 4: Navigazione con il Boe-Bot · Pagina 123 impulso impiega lo stesso tempo, l’argomento EndValue controlla anche il tempo di funzionamento del servo. Il seguente Programma Esempio farà avanzare il Boe-Bot per circa tre secondi. Programma Esempio: BoeBotForwardThreeSeconds.bs2 Assicuratevi che il BASIC Stamp ed i servo siano alimentati. Digitate, Salvate e Lanciate BoeBotForwardThreeSeconds.bs2. ' Robotica con il Boe-Bot - BoeBotForwardThreeSeconds.bs2 ' Fa avanzare il Boe-Bot per tre secondi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" counter VAR Word FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. FOR counter = 1 TO 122 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT END Come Funziona BoeBotForwardThreeSeconds.bs2 Dopo il Capitolo 2, avete già molta esperienza con gli elementi di questo programma: una dichiarazione di variabile, un ciclo FOR…NEXT, comandi PULSOUT con argomenti Pin e Duration, e comandi PAUSE. Segue un riesame di che cosa fà e di come si relaziona ciascun comando al movimento di servo. Primo viene dichiarata una variabile che sarà usata nel ciclo FOR..NEXT. counter VAR Word dovreste poi riconoscere questo comando che genera un tono per avvisare della partenza del programma. Sarà usato in tutti I programmi che usano i servo. FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. Pagina 124 · Robotica con il Boe-Bot Questo ciclo FOR…NEXT invia 122 gruppi di impulsi ai servo, uno ciascuno a P13 ed a P12, con una pausa di 20 ms dopo ciascun gruppo e poi ritorna all’inizio del ciclo. FOR counter = 1 TO 122 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT PULSOUT 13, 850 fa ruotare il servo di sinistra in senso antiorario mentre PULSOUT 12, 650 fa ruotare il servo di destra in senso orario. Di conseguenza, ambedue le ruote gireranno in modo da far avanzare il Boe-Bot. Ci vogliono circa 3 secondi perché il ciclo FOR…NEXT sia eseguito 122 volte, così il Boe-Bot procederà in avanti per circa 3 secondi. Il Vostro Turno– Regolazione della Distanza e della velocità cambiando l’argomento EndValue del ciclo FOR…NEXT da 122 a 61, potete far muovere il Boe-Bot per la metà del tempo. Questo a sua volta farà avanzare il Boe-Bot per la metà della distanza. Salvate BoeBotForwardThreeSeconds.bs2 con un nuovo nome. Cambiate l’argomento EndValue del ciclo FOR...NEXT da 122 a 61. Lanciate il programma e verificate che il Boe-Bot avanzi per metà del tempo e percorra metà distanza. Provate questi passi di nuovo, ma questa volta, impostate l’argomento EndValue del ciclo FOR...NEXT a 244. Gli argomenti Duration dei comandi PULSOUT di 650 e di 850 fanno girare i servo pressappoco alla loro massima velocità. Portando gli argomenti Duration del comando PULSOUT vicini al valore di fermo di 750, potete rallentare il vostro Boe-Bot. Modificate il vostro programma con questi comandi PULSOUT: PULSOUT 13, 780 PULSOUT 12, 720 Lanciate il programma e verificate che il vostro Boe-Bot si muova più lentamente. Capitolo 4: Navigazione con il Boe-Bot · Pagina 125 Retrocedere, Curvare, e Ruotare Tutto quello che ci vuole per ottenere altri tipi di movimento dal vostro Boe-Bot sono diverse combinazioni degli argomenti Duration del comando PULSOUT. Per esempio, questi due comandi PULSOUT possono essere usate per far retrocedere il Boe-Bot: PULSOUT 13, 650 PULSOUT 12, 850 Questi due comandi faranno curvare il vostro Boe-Bot a sinistra (se lo state guardando dall’alto in senso antiorario): PULSOUT 13, 650 PULSOUT 12, 650 Questi due comandi faranno curvare il vostro Boe-Bot a destra (se lo state guardando dall’alto in senso orario): PULSOUT 13, 850 PULSOUT 12, 850 Potete combinare questi comandi per far muovere il Boe-Bot in avanti, curvare a sinistra, curvare a destra, quindi arretrare. Programma Esempio: ForwardLeftRightBackward.bs2 Digitate, Salvate e Lanciate ForwardLeftRightBackward.bs2. Consiglio – Per digitare questo programma più velocemente, usate le funzioni copia e incollaper creare i quattro cicli FOR…NEXT. Quindi adattate solamente i valori di Duration del PULSOUT e gli EndValues del ciclo FOR…NEXT. ' Robotica con il Boe-Bot - ForwardLeftRightBackward.bs2 ' Si muove in avanti, a sinistra, a destra, quindi all’indietro per collaudo ' e calibrazione. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" counter VAR FREQOUT 4, 2000, 3000 Word ' Segnala lo start/reset del programma. Pagina 126 · Robotica con il Boe-Bot FOR counter = 1 TO 64 ' Avanti PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT PAUSE 200 FOR counter = 1 TO 24 ' Curva a Sinistra – circa 1/4 di giro PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT PAUSE 200 FOR counter = 1 TO 24 ' Curva a Destra – circa 1/4 di giro PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT PAUSE 200 FOR counter = 1 TO 64 ' Indietro PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT END Il Vostro Turno- Rotazione su se stessi Potete far ruotare il Boe-Bot su se stesso facendo perno su una ruota. Il trucco sta nel tenere ferma una ruota mentre l’altra gira. Per esempio, se tenete ferma la ruota di sinistra e fate ruotare in senso orario (avanzamento) la ruota di destra, il Boe-Bot ruoterà a sinistra. PULSOUT 13, 750 PULSOUT 12, 650 Capitolo 4: Navigazione con il Boe-Bot · Pagina 127 Se volete ruotare a destra avanzando, semplicemente fermate la ruota destra, e fate girare in senso antiorario (avanzamento) la ruota sinistra. PULSOUT 13, 850 PULSOUT 12, 750 Questi sono i comandi PULSOUT per la rotazione in retromarcia a destra. PULSOUT 13, 650 PULSOUT 12, 750 E questi, sono i comandi PULSOUT per la rotazione in retromarcia a sinistra. PULSOUT 13, 750 PULSOUT 12, 850 Salvate ForwardLeftRightBackward.bs2 con il nome PivotTests.bs2. Sostituite i comandi PULSOUT appena trattati alle routine avanzamento, sinistra, destra, e retromarcia. Regolate il tempo di manovra per ciascuna routine con il valore EndValue del ciclo FOR…NEXT a 30. Accertatevi di cambiare anche i commenti di ogni ciclo FOR…NEXT per riflettere appropriatamente ciascuna azione di rotazione. Lanciate il programma modificato e verificate che le diverse azioni di rotazione funzionino. ESERCIZIO #2: CALIBRAZIONE DELLE MANOVRE BASE Immaginate di scrivere un programma che istruisca il Boe-Bot per avanzare alla massima velocità per quindici secondi. Che cosa succederebbe se il Boe-Bot curvasse leggermente a sinistra od a destra durante il suo spostamento, quando invece si pensa che dovrebbe procedere in linea retta? Non è necessario smontare il Boe-Bot a pezzi e ricentrare i servo con un giravite per risolvere il problema. Potete sempre variare leggermente il programma per far viaggiare alla stessa velocità le ruote del Boe-Bot. Mentre la regolazione con il cacciavite verrebbe chiamato “calibrazione hardware”, la regolazione del programma viene chiamato “calibrazione software”. Linearizzare il percorso del Boe-Bot Il primo passo da intraprendere è l’esame del percorso del Boe-Bot abbastanza a lungo per vedere se sta curvando a sinistra od a destra quando dovrebbe procedere in linea retta. Dieci secondi di avanzamento dovrebbero essere sufficienti. E questo dovrebbe essere Pagina 128 · Robotica con il Boe-Bot ottenuto con una semplice modifica a BoeBotForwardThreeSeconds.bs2 dall’esercizio precedente. Programma Esempio: BoeBotForwardTenSeconds.bs2 Aprite BoeBotForwardThreeSeconds.bs2. Rinominate e Salvatelo con il nome BoeBotForwardTenSeconds.bs2. Cambiate l’EndValue del FOR counter da 122 a 407, come di seguito specificato: ' Robotica con il Boe-Bot - BoeBotForwardTenSeconds.bs2 ' Fa avanzare il Boe-Bot per dieci secondi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Programma è in Funzione!" counter VAR Word FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. FOR counter = 1 TO 407 ' Numero degli impulsi di – run time. PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 ' Servo sinistro max velocità antiorario. ' Servo destro max velocità orario. NEXT END Lanciate il programma, ed osservate attentamente per vedere se il Boe-Bot vira a destra od a sinistra mentre avanza per dieci secondi. Il Vostro Turno– Regolazione della velocità del Servo per Linearizzare il percorso del Boe-Bot Se il vostro Boe-Bot va perfettamente diritto, provate comunque questo esempio. Se seguite le istruzioni, dovrebbero regolare il vostro Boe-Bot in modo che curvi leggermente a destra. Assumete che il Boe-Bot curvi leggermente a sinistra. Ci sono due modi di considerare il problema: la ruota sinistra può girare troppo lentamente, o la ruota destra sta girando troppo velocemente. Dal momento che il Boe-Bot stà avanzando alla massima velocità, Capitolo 4: Navigazione con il Boe-Bot · Pagina 129 aumentare la ruota sinistra non è molto pratico, invece rallentare la ruota destra dovrebbe risolvere il problema. Ricordate che la velocità del servo è determinata dall’argomento Duration del comando PULSOUT. Più la Duration si avvicina a 750, più lentamente girerà il servo. Questo significa che dovreste cambiare il 650 nel comando PULSOUT 12,650 con un valore più vicino a 750. Se il Boe-Bot va solo un pochino fuori rotta, può darsi che PULSOUT 12,663 risolva. Se i servo sono gravemente disallineati, può darsi che sia necessario PULSOUT 12,690. Per ottenere il valore giusto, ci vorranno probabilmente diverse prove. Assumete che la vostra prima stima sia PULSOUT 12,663, ma che il risultato non sia quello atteso perché il Boe-Bot ancora curva leggermente a destra. Così provate PULSOUT 12,670. ora può darsi che la correzzione sia eccessiva, e ne risulti che PULSOUT 12,665 sia la modifica corretta. Se il vostro Boe-Bot curva a destra invece che a sinistra, significa che dovrete rallentare la ruota sinistra riducendo la Duration di 850 nel comando PULSOUT 13,850. Ancora, più si avvicina questo valore a 750, più lentamente girerà il servo. Modificate BoeBotForwardTenSeconds.bs2 in modo che faccia procedere in linea retta il Boe-Bot. Usate del nastro od un pennarello per marcare sui servo i migliori valori di PULSOUT. Se il vostro Boe-Bot avanza correttamente in linea retta, provate le modifiche appena studiate ed osservate l’effetto. Dovrebbe far curvare il Boe-Bot invece che in linea retta. Vi accorgerete che programmando il Boe-Bot per retrocedere in linea retta, è una situazione completamente diversa. Modificate BoeBotForwardTenSeconds.bs2 in modo che faccia procedere il Boe-Bot all’indietro per dieci secondi. Ripetete il test per la linea retta. Ripetete i passi per la correzione degli Duration dei comandi PULSOUT per linearizzare il viaggio del Boe-Bot all’indietro. Pagina 130 · Robotica con il Boe-Bot Calibrare le Curve Le calibrazioni Software possono anche essere fatte per far curvare il Boe-Bot di un angolo desiderato, come per esempio 90°. La quantità di tempo che impiega il Boe-Bot a curvare, determina la velocità di curva (gradi/tempo). Essendo il ciclo FOR…NEXT a controllare il tempo di rotazione, potete regolare il valore EndValue del ciclo FOR…NEXT per avvicinarvi all’angolo di curva desiderato. Questa è la routine di curva a sinistra tratta da ForwardLeftRightBackward.bs2. FOR counter = 1 TO 24 ' Curva a Sinistra – circa 1/4 di giro PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT Assumete che il Boe-Bot curvi un po’ più di 90° (1/4 di giro completo). Provate FOR counter = 1 TO 23, o perfino FOR counter = 1 TO 22. Se non effettua la curva completa, aumentate il tempo di rotazione aumentando l’argomento EndValue del ciclo FOR…NEXT di una quantità adatta al completamento del quarto di giro. Se vi trovate con un valore che sorpassa leggermente i 90° ed un altro che di poco ma non arriva a 90°, provate a scegliere il valore che sorpassa i 90°, quindi rallentate leggermente i servo. Nel caso di curva a sinistra, ambedue gli argomenti Duration di PULSOUT dovrebbero essere cambiati da 650 ad un valore più vicino a 750. come con l’esercizio della linea retta, questo sarà un procedimento iterativo. Il Vostro Turno- Curve a 90° Modificate ForwardLeftRightBackward.bs2 in modo che faccia delle curve di 90° precisi. Aggiornate ForwardLeftRightBackward.bs2 con i valori di PULSOUT che avete determinato per la marcia avanti ed indietro in linea retta. Aggiornate le marcature su ciascun servo con una annotazione circa il valore appropriato di EndValue per una curva di 90°. Prendete nota del fatto che se state muovendo il vostro Boe-Bot su un tessuto come una moquette, non vi aspettate risultati perfetti! Una moquette è come un prato, il modo in cui Capitolo 4: Navigazione con il Boe-Bot · Pagina 131 le fibre si inclinano può influenzare il movimento del Boe-Bot, specialmente su lunghe distanze. Per manovre precise, si raccomanda di usare una superficie liscia. ESERCIZIO #3: CALCOLO DELLE DISTANZE In molti concorsi robotici, una navigazione più precisa del robot gli fa guadagnare punteggi migliori. Una gara popolare di robotica per principianti si chiama punto di ritorno. Lo scopo di questa gara è di far andare in una o più locazioni un robot e quindi farlo ritornare esattamente da dove era partito. Potete ricordarvi di aver chiesto ai vostri genitori, questa domanda molte volte durante un viaggio di vacanza o verso la casa di parenti: “Quando Arriviamo?” Forse qunado siete cresciuti un po, ed avete appreso le divisioni a scuola, avete iniziato ad osservare la segnaletica stradale per vedere quanto lontana fosse la destinazione. Poi controllavate la velocità sul tachimetro della vostra automobile. Dividendo la distanza per la velocità, ottenevate una stima abbastanza accurata del tempo che avreste impiegato per arrivarci. Potreste non aver pensato esattamente in questi termini, ma questa è l’equazione che stavate usando. time = distance speed Pagina 132 · Robotica con il Boe-Bot Esempio – Tempo per la Distanza in Miglia Esempio – Tempo per la Distanza Metrica Se distate 140 miglia dalla vostra destinazione, e state viaggiando a 70 miglia orarie, ci vorranno 2 ore per arrivarci. Se distate 200 chilometri dalla vostra destinazione, e state viaggiando a 100 km/ora, ci vorranno 2 ore per arrivarci. 140 miles 70 miles/hour 1 hour = 140 miles × 70 miles = 2 hours time = 200 kilometers 100 kilometers/hour 1 hour = 200 km × 100 km time = = 2 hours Con il Boe-Bot potrete fare lo stesso esercizio, eccetto che dovrete controllare la distanza della destinazione. Viene di seguito descritta l’equazione che userete: servo run time = Boe - Bot distance Boe - Bot speed Dovrete provare la velocità del Boe-Bot. Il modo più semplice per saperlo è di far procedere il Boe-Bot a fianco di un metro per un secondo. Misurando quanta distanza percorre il vostro Boe-Bot, ne conoscerete la velocità. Se il vostro metro è in pollici, la risposta sarà in pollici al secondo (in/s), se è in centimetri la risposta sarà in centimetri al secondo (cm/s). Digitate, Salvate e Lanciate ForwardOneSecond.bs2. Mettete il vostro Boe-Bot a fianco di un metro come mostrato in Figura 4-3. Assicuratevi di allineare il punto dove le ruote toccano la superfice con la marcatura del metro corrispondente allo 0 in/cm. Capitolo 4: Navigazione con il Boe-Bot · Pagina 133 Figura 4-3: Misura della Distanza Percorsa dal Boe-Bot 6-9VDC 15 14 Vdd 1 3 12 9 Vdc Battery Red Black X4 Pwr ST in AMPS CLA SS TM 1 Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7 U1 Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8 www.stampsinclass.com Vss P0 P2 P4 P6 P8 P1 0 P1 2 P1 4 Vd d Vss P1 P3 P5 P7 P9 P11 P1 3 P1 5 Vin X1 Reset Vdd X5 Vin Vss X3 P1 5 P1 4 P1 3 P1 2 P11 P1 0 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 0 1 2 Board of Education Rev C © 2000-2003 Measured Distance inch cm 1 2 1 3 4 2 5 6 7 3 8 4 5 6 7 8 9 10 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Premete il pulsante di Reset sulla vostra scheda per rilanciare il programma. Misurate la distanza percorsa dal vostro Boe-Bot fino al punto in cui le ruote toccano la superfice e registratela qui di seguito:__________________ in / cm. Programma Esempio: ForwardOneSecond.bs2 ' Robotica con il Boe-Bot - ForwardOneSecond.bs2 ' Fa avanzare il Boe-Bot per un secondo. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" counter VAR FREQOUT 4, 2000, 3000 FOR counter = 1 TO 41 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT END Word ' Segnala lo start/reset del programma. Pagina 134 · Robotica con il Boe-Bot Potete anche pensare alla distanza che avete appena registrato, come alla velocità del vostro Boe-Bot, in unità al secondo. Diciamo che il vostro Boe-Bot abbia viaggiato per 9 in (23 cm). Dal momento che il vostro Boe-Bot ha impiegato un secondo per percorrere quella distanza, significa che il vostro Boe-Bot viaggia a circa 9 in/s (23 cm/s). Ora, potete calcolare per quanti secondi dovrà viaggiare il vostro Boe-Bot per percorrere una specifica distanza. Esempio – Tempo per 20 pollici Esempio – Tempo per 51 centimetri A 9 in/s il vostro Boe-Bot dovrà viaggiare per 2.22 s per percorrere 20 pollici. A 23 cm/s, il vostro Boe-Bot dovrà viaggiare per 2.22 s per percorrere 51 cm. time = 20 in 9 in/s = 20 in × time = 1s 9 in = 2.22 s 51 cm 23 cm/s = 51 cm × 1s 23 cm = 2.22 s In ogni caso, per calcolare quanti impulsi dovranno essere inviati ai servo, dovrete moltiplicare il tempo di percorrenza per 40.65 impulsi/secondo. 40.65 pulses s = 90.24... pulses ≈ 90 pulses pulses = 2.22 s × Il calcolo in questo esempio viene eseguito in due passaggi. Per prima cosa, calcolate per quanto tempo devono girare i servo per far percorrere al Boe-Bot una determinata distanza, quindi calcolate quanti impulsi ci vogliono per far funzionare i servo per quel tempo. Dal momento che sapete di dover moltiplicare per 40.65 per ottenere il numero di impulsi partendo dal tempo, potete ridurre il tutto ad un’unica formula. pulses = Boe − Bot dis tan ce 40.65 pulses × Boe − Bot speed s Capitolo 4: Navigazione con il Boe-Bot · Pagina 135 Esempio – Tempo per 20 pollici Esempio – Tempo per 51 centimetri A 9 in/s, il vostro Boe-Bot dovrà funzionare per 2.22 s per percorrere 20 in. A 23 cm/s, il vostro Boe-Bot dovrà funzionare per 2.22 s per percorrere 51 cm. 20 in 40.65 pulses × 9 in/s s 1 s 40.65 pulses = 20 in × × 9 in 1s pulses = 51 cm 40.65 pulses × 23 cm/s s 1s 40.65 pulses = 51 cm × × 23 cm 1s pulses = = 20 ÷ 9 × 40.65 pulses = 51 ÷ 23 × 40.65 pulses = 90.333... pulses = 90.136... pulses ≈ 90 pulses ≈ 90 pulses Il Vostro Turno– la Distanza del vostro Boe-Bot Ora, è tempo di provare tutto questo con distanze di vostra scelta. Se non lo avete ancora fatto, usate un metro ed il programma ForwardOneSecond.bs2 per determinare la velocità del vostro Boe-Bot in in/s od in cm/s. Decidete per quale distanza volete far viaggiare il vostro Boe-Bot. Usate l’equazione degli impulsi per calcolare quanti impulsi dovrete inviare ai servo del Boe-Bot: pulses = Boe − Bot dis tan ce 40.65 pulses × Boe − Bot speed s Modificate BoeBotForwardOneSecond.bs2 in modo che invii il numero di impulsi che avete determinato per percorrere la distanza da voi scelta. Lanciate il programma e controllate quanto vi siete avvicinati al risultato aspettato. Questa Tecnica non è Esente da Errori. L’esercizio che avete appena completato, non tiene in conto il fatto che ci vogliono un certo numero di impulsi prima che il Boe-Bot arrivi alla massima velocità. Non tiene conto nemmeno della distanza in più percorsa dal Boe-Bot prima di fermarsi completamente. Potrete provare tutto questo nella sezione Progetti nel Sommario di questo Capitolo. Pagina 136 · Robotica con il Boe-Bot ESERCIZIO #4: MANOVRE – ACCELERAZIONE - DECELERAZIONE Chiameremo Rampa il metodo di aumentare o diminuire gradualmente la velocità dei servo invece di farli partire o fermare brutalmente. Questa tecnica può aumentare l’aspettativa di vita sia dei servo che delle pile del vostro Boe-Bot. Programmazione per la Rampa La chiave per ottenere l’effetto Rampa è di usare una variabile insieme alle costanti per gli argomenti Duration del comando PULSOUT. La Figura 4-4 mostra un ciclo FOR…NEXT che può accelerare il Boe-Bot da fermo alla massima velocita di avanzamento. Ad ogni iterazione del ciclo FOR…NEXT, la variabile pulseCount viene incrementata di 1. durante il primo ciclo, pulseCount è 1, che è uguale all’uso di PULSOUT 13, 751 e PULSOUT 12, 749. Nel secondo ciclo, il valore di pulseCount è 2, ed è uguale all’uso dei comandi PULSOUT 13, 752 e PULSOUT 12, 748. Man mano che il valore della variabile pulseCount aumenta, lo stesso fa la velocità dei servo. Alla centesima iterazione del ciclo, la variabile pulseCount è 100, che è come usare i comandi PULSOUT 13, 850 e PULSOUT 12, 650, che per il Boe-Bot corrisponde alla massima velocità in avanti. pulseCount VAR Word FOR pulseCount = 1 TO 100 PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 - pulseCount PAUSE 20 1, 2, 3, …100 Figura 4-4 Esempio di Rampa NEXT Recall from Capitolo 2, Esercizio #5 that FOR…NEXT loops can also decrement, that is, count downward from a higher number to a lower number. You can use this to ramp the speed back down again by using FOR pulseCount = 100 TO 1. Here is an Programma Esempiothat uses FOR…NEXT loops to ramp up to full speed, then ramp back down. Programma Esempio: StartAndStopWithRamping.bs2 Digitate, Salvate e Lanciate StartAndStopWithRamping.bs2. Verificate che il Boe-Bot acceleri gradualmente fino alla massima velocità, la mantenga per un po’, e qundi sempre gradualmente deceleri fino a fermarsi. Capitolo 4: Navigazione con il Boe-Bot · Pagina 137 ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - StartAndStopWithRamping.bs2 ' Accelerazione, Marcia Avanti, Decelerazione. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" pulseCount VAR Word ' Contatore del ciclo FOR...NEXT. ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale ------- ' Segnala lo start/reset del programma. ]------------------------------------------------ ' Accelerazione in marcia avanti. FOR pulseCount = 1 TO 100 PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 - pulseCount PAUSE 20 ' ' ' ' Ciclo Pulse Pulse Pausa in Accelerazione per 100 impulsi. = 1.5 ms + pulseCount. = 1.5 ms – pulseCount. per 20 ms. NEXT ' Continua in marcia avanti per 75 impulsi. FOR pulseCount = 1 TO 75 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT ' ' ' ' Il Ciclo invia 75 impulsi in Avanti. impulsi di 1.7 ms al servo sinistro. impulsi di 1.3 ms al servo destro. Pausa per 20 ms. ' Decelerazione dalla massima velocità avanti fino a fermarsi. FOR pulseCount = 100 TO 1 PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 - pulseCount PAUSE 20 NEXT ' ' ' ' Ciclo Pulse Pulse Pausa in decelerazione per 100 impulsi. = 1.5 ms + pulseCount. = 1.5 ms - pulseCount. per 20 ms. END ' Fermo fino al Reset. Pagina 138 · Robotica con il Boe-Bot Il vostro Turno Potete anche creare routine che combinino l’accelerazione o la decelerazione con altre manovre. Questo è un esempio di come accelerare fino alla massima velocità in retromarcia invece che in marcia avanti. La sola differenza tra questa routine e la routine di accelerazione in marcia avanti è che nel comando PULSOUT 13 il valore di pulseCount viene sottratto da 750, quando prima veniva sommato. Similmente, nel comando PULSOUT 12, pulseCount viene sommato al valore di 750, mentre prima veniva sottratto. ' Accelerazione fino alla massima velocità in retromarcia FOR pulseCount = 1 TO 100 PULSOUT 13, 750 - pulseCount PULSOUT 12, 750 + pulseCount PAUSE 20 NEXT Potete anche fare una routine per inserire la Rampa in una curva aggiungendo il valore di pulseCount a 750 in ambedue i comandi PULSOUT. Sottraendo pulseCount da 750 in ambedue i comandi PULSOUT, Potete effettuare una Rampa per una curva nell’altra direzione. Questo è un esempio di un quarto di giro con Rampa. I servo non riescono ad arrivare alla massima velocità prima che debbano decelerare di nuovo. ' Rampa in aumento per la Curva a Destra. FOR pulseCount = 0 TO 30 PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 + pulseCount PAUSE 20 NEXT ' Rampa in diminuzione per la Curva a Destra. FOR pulseCount = 30 TO 0 PULSOUT 13, 750 + pulseCount PULSOUT 12, 750 + pulseCount PAUSE 20 Capitolo 4: Navigazione con il Boe-Bot · Pagina 139 NEXT Aprite ForwardLeftRightBackward.bs2 dall’esercizio #1, e salvatelo con il nuovo nome di ForwardLeftRightBackwardRamping.bs2. Modificate il nuovo programma in modo che il vostro Boe-Bot acceleri e deceleri ad ogni manovra. Suggerimento: potete usare gli spezzoni di codice suesposti, ed ed altri simili tratti da StartAndStopWithRamping.bs2. ESERCIZIO #5: SEMPLIFICARE LA NAVIGAZIONE CON LE SUBROUTINE Nel prossimo capitolo, il vostro Boe-Bot dovrà effettuare manovre per evitare ostacoli. Uno dgli ingredienti per evitare gli ostacoli è l’esecuzione di manovre preprogrammate. Ed un modo di eseguire manovre preprogrammate è con le subroutine. Questo esercizio studia le subroutine, ed anche due diversi modi di creare manovre riusabili con le subroutine. All’interno di una Subroutine Esistono due parti in una subroutine PBASIC. Una parte è la chiamata di una subroutine. È il comando nel programma che gli dice di saltare alla parte di codice riusabile, quindi torna indietro quando ha finito. L’altra parte è la stessa subroutine. Inizia con un’etichetta che serve come nome e finisce con un comando RETURN. I comandi tra l’etichetta ed il comando RETURN costituiscono il blocco di codice che fa il lavoro ripetibile che chiamerete subroutine. La Figura 4-5 mostra parti di un programma PBASIC che contiene una chiamata alla subroutine ed una subroutine. La chiamata ad una subroutine è il comando GOSUB My_Subroutine. La subroutine reale è tutto il codice messo tra l’etichetta My_Subroutine: fino al comando RETURN. Viene qui spiegato come funziona. Quando il programma giunge al comando GOSUB My_Subroutine, cerca l’etichetta My_Subroutine: . Come mostrato dalle frecce (1), il programma salta all’etichetta My_Subroutine: ed inizia ad eseguire i comandi successivi, riga per riga, così vedrete nel vostro Terminale di Debug il messaggio “Comandi nella subroutine”. PAUSE 1000 causa una pausa di un secondo. Quindi, quando il programma giunge al comando RETURN, le frecce (2) mostrano come salti indietro al comando immediatamente successivo al comando GOSUB. In questo caso, è un comando DEBUG che visualizza il messaggio “Dopo la subroutine”. Pagina 140 · Robotica con il Boe-Bot DO DEBUG PAUSE GOSUB DEBUG PAUSE LOOP "Before subroutine",CR 1000 My_Subroutine "After subroutine", CR 1000 1 Figura 4-5 Basilari delle Subroutine My_Subroutine: DEBUG "Command in subroutine", CR PAUSE 1000 RETURN 2 Programma Esempio– OneSubroutine.bs2 Digitate, Salvate e Lanciate OneSubroutine.bs2 ' Robotica con il Boe-Bot - OneSubroutine.bs2 ' Questo programma dimostra la chiamata ad una subroutine semplice. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG PAUSE GOSUB DEBUG END "Prima della subroutine",CR 1000 My_Subroutine "Dopo la subroutine", CR My_Subroutine: DEBUG "Commandi nella subroutine", CR PAUSE 1000 RETURN √ Osservate il vostro Terminale di Debug, premendo il pulsante di reset alcune volte, dovreste ottenere ogni volta lo stesso insieme di tre messaggi nello stesso ordine. Questo è un Programma Esempio che ha due subroutine. Una subroutine emette un tono acuto mentre l’altra emette un tono grave. I comandi posti fra DO e LOOP chiamano a turno ciascuna delle subroutine. Porvate questo programma e notate l’effetto. Capitolo 4: Navigazione con il Boe-Bot · Pagina 141 Programma Esempio– TwoSubroutines.bs2 Digitate, Salvate e Lanciate TwoSubroutines.bs2 ' Robotica con il Boe-Bot - TwoSubroutines.bs2 ' Questo programma dimostra che una subroutine è un blocco ' di codice riusabile. ' {$STAMP BS2} ' {$PBASIC 2.5} DO GOSUB DEBUG PAUSE GOSUB DEBUG PAUSE DEBUG LOOP High_Pitch "Programma Principale", CR 1000 Low_Pitch "Di Nuovo nel Programma Principale ", CR 1000 "Ripetizione...",CR,CR High_Pitch: DEBUG "Tono Acuto", CR FREQOUT 4, 2000, 3500 RETURN Low_Pitch: DEBUG "Tono Grave", CR FREQOUT 4, 2000, 2000 RETURN Provate ad inserire le routine di Navigazione; Avanzamento, Curva a Sinistra, Curva a Destra, e Retromarcia nelle subroutine. Segue un esempio: Programma Esempio– MovementsWithSubroutines.bs2 Digitate, Salvate e Lanciate MovementsWithSubroutines.bs2. Suggerimento: potete usare il menu di Edit nell’Editor del BASIC Stamp per copiare ed incollare blocchi di codice da un programma all’altro. ' Robotica con il Boe-Bot - MovementsWithSubroutines.bs2 ' Rende i movimenti Avanzamento, Sinistra, Destra, e Retromarcia ' delle subroutine riusabili. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" Pagina 142 · Robotica con il Boe-Bot counter VAR FREQOUT 4, 2000, 3000 GOSUB GOSUB GOSUB GOSUB Word ' Segnala lo start/reset del programma. Forward Left Right Backward END Forward: FOR counter = 1 TO 64 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT PAUSE 200 RETURN Left: FOR counter = 1 TO 24 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT PAUSE 200 RETURN Right: FOR counter = 1 TO 24 PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT PAUSE 200 RETURN Backward: FOR counter = 1 TO 64 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN Potete riconoscere lo schema dei movimenti che il vostro Boe-Bot eseguiva; sono gli stessi eseguiti da ForwardLeftRightBackward.bs2. Chiaramente ci sono molti modi Capitolo 4: Navigazione con il Boe-Bot · Pagina 143 diversi di strutturare un programma per eseguire gli stessi movimenti. Una terza possibilità viene descritta nell’esempio seguente. Programma Esempio– MovementsWithVariablesAndOneSubroutine.bs2 Questo è un altro programma esempio che farà eseguire al vostro Boe-Bot le stesse manovre, ma lo fa usando una sola subroutine ed alcune variabili. Avete sicuramente notato che fino a questo punto, ciascuna manovra del Boe-Bot è stata eseguita tramite blocchi di codice similari. Confrontate questi due fammenti di codice: ' Massima Velocità Avanti ' Decelerazione in Retromarcia FOR counter = 1 TO 64 FOR pulseCount = 100 TO 1 PULSOUT 13, 750 - pulseCount PULSOUT 12, 750 + pulseCount PAUSE 20 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT NEXT La cosa che fa eseguire manovre diverse a questi due blocchi di codice sono le variazioni degli argomenti di FOR StartValue ed EndValue, e degli argomenti Duration del comando PULSOUT. Questi argomenti potendo essere variabili possono essere ripetutamente cambiati durante l’esecuzione del programma per generare manovr differenti. Invece di usare routine separate con argomenti specifici per ogni manovra, il programma seguente usa sempre la stessa subroutine. Comunque, ogni volta prima di chiamare la subroutine, memorizza un nuovo valore in ciascuna variabile. Digitate, Salvate e Lanciate MovementWithVariablesAndOneSubroutine.bs2. ' Robotica con il Boe-Bot - MovementWithVariablesAndOneSubroutine.bs2 ' Realizza una Subroutine di Navigazione che Accetta Parametri. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" counter pulseLeft pulseRight pulseCount VAR VAR VAR VAR Word Word Word Byte Pagina 144 · Robotica con il Boe-Bot FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. ' Avanzamento pulseLeft = 850: pulseRight = 650: pulseCount = 64: GOSUB Navigate ' Curva a Sinistra pulseLeft = 650: pulseRight = 650: pulseCount = 24: GOSUB Navigate ' Curva a Destra pulseLeft = 850: pulseRight = 850: pulseCount = 24: GOSUB Navigate ' Retromarcia pulseLeft = 650: pulseRight = 850: pulseCount = 64: GOSUB Navigate END Navigate: FOR counter = 1 TO pulseCount PULSOUT 13, pulseLeft PULSOUT 12, pulseRight PAUSE 20 NEXT PAUSE 200 RETURN Il vostro Boe-Bot ha eseguito la sequenza consueta di manovre di Avanzamento, Curva a Sinistra, Curva a Destra, e Retromarcia? Questo programma può essere a prima vista difficoltoso da leggere, perché le istruzioni sono disposte in una maniera diversa. Invece di avere ciascuna dichiarazione di variabile e ciascun comando GOSUB su righe diverse, esse sono raggruppate insieme nella stessa riga separate da “due punti”. In questo caso, i “due punti” funzionano come “A capo” per separare ciascuna istruzione PBASIC. In questo modo l’uso del due punti permette di memorizzare insieme tutti i nuovi valori delle variabili per una data manovra, e sulla stessa riga della chiamata alla subroutine. Il vostro Turno Modificate MovementWithVariablesAndOneSubroutine.bs2 per far compiere al vostro Boe-Bot un percorso seguendo i lati di un quadrato, guardando avanti nei primi due lati ed indietro negli altri due. Suggerimento: dovrete usare gli argomenti di PULSOUT EndValue che avete determinato per i vostri servo nell’esercizio #2, a pagina 130. Capitolo 4: Navigazione con il Boe-Bot · Pagina 145 ESERCIZIO #6: ARGOMENTO AVANZATO – UTILIZZO DELLA EEPROM PER LE MANOVRE COMPLESSE Quando scaricate un programma PBASIC nel vostro BASIC Stamp, l’Editor del BASIC Stamp converte il vostro programma in valori numerici chiamati “tokens”. Questi “tokens” sono quello che il BASIC Stamp usa come istruzioni per l’esecuzione del programma. Vengono memorizzati in uno dei due piccoli chip neri presenti sul vostro BASIC Stamp, quello marcato "24LC16B.” questo chip è un tipo speciale di memoria chiamato EEPROM, che sta per memoria a sola lettura cancellabile e programmabile elettricamente (Electrically Erasable Programmable Read Only Memory). L’EEPROM del BASIC Stamp può contenere 2048 bytes (2 kB) di informazione. Quella non usata per contenere il programma (che viene memorizzata dall’indirizzo 2047 verso l’indirizzo 0) può essere usata per contenere dati (che vengono memorizzati dall’indirizzo 0 verso l’indirizzo 2047). Se i dati che memorizzate nella EEPROM si sovrappongono al vostro programma, il programma PBASIC non potrà essere eseguito correttamente. La memoria EEPROM è diversa dalla RAM memoria ad accesso casuale (Random Access Memory) usata per la memorizzazione delle variabili per diversi aspetti: • • • La EEPROM impiega più tempo per la memorizzazione di un valore, a volte fino a diversi millisecondi. La EEPROM può essere scritta un numero limitato di volte, circa 10 milioni di cicli di scrittura. La RAM ha una capacità di lettura/scrittura illimitata. La funzione primaria della EEPROM è di memorizzare i programmi; i dati sono memorizzati nello spazio rimanente. Potete vedere il contenuto della EEPROM del BASIC Stamp con l’Editor del BASIC Stamp clickando Run e selezionando Memory Map. La Figura 4-6 mostra la mappa della memoria di MovementsWithSubroutines.bs2. Notate la mappa condensata della EEPROM sul lato sinistro della figura. Questa area ombreggiata nel piccolo riquadro in basso mostra la quantità di EEPROM occupata da MovementsWithSubroutines.bs2. La mappa di memoria mostrata in questo esercizio è stata tratta dall’Editor del BASIC Stamp v2.1. Se state usando una versione precedente dell’Editor del BASIC Stamp, la vostra mappa di memoria conterrà le stesse informazioni, ma con una formattazione diversa. Pagina 146 · Robotica con il Boe-Bot Figura 4-6 Mappa di Memoria del BASIC Stamp Visto che siete giunti a questo punto, notate anche che la variabile counter che avevate dichiarato come word è visibile nel Registro 0 della Mappa della RAM. Questo programma vi può essere sembrato lungo durante la digitazione, ma occupa solamente 136 dei 2048 bytes disponibili nella memoria di programma. Rimane ancora memoria sufficiente per una lunga lista di istruzioni. Dal momento che un carattere occupa un byte nella memoria, c’è spazio per 1912 dichiarazioni di istruzione di un carattere. Navigazione EEPROM Fino a questo punto avete provato tre diversi modi di programmazione per far muovere il vostro Boe-Bot in avanti, curvare a sinistra, curvare a destra, ed andare in retromarcia. Ciascuna tecnica ha i suoi meriti, ma tutte sarebbero problematiche se voleste che il vostro Boe-Bot esegua un insieme di manovre più lungo e complesso. Il prossimo programma esempio userà i già familiari blocchi di codice delle subroutine per ciascuna manovra base. A ciascuna manovra viene dato come riferimento un codice di una lettera. Nella EEPROM possono essere memorizzzate lunghe liste di questi codici che verranno poi letti e decodificati durante l’esecuzione del programma. Questo evita la noia della ripetizione di lunghe liste di subroutine, o la necessità di cambiare le variabili prima di ciascun comando GOSUB. Capitolo 4: Navigazione con il Boe-Bot · Pagina 147 Questo metodo di programmazione richiede alcuni nuove istruzioni PBASIC: la direttiva DATA , ed i comandi READ e SELECT...CASE...ENDSELECT. date uno sguardo a ciascuno prima di provare un Programma Esempio. A ciascuna manovra base viene attribuito un codice di una lettera corrispondente alla sua subroutine: F per Avanti (forward), B per Retromarcia (backward), L per Curva a Sinistra (Left_Turn), ed R per Curva a Destra (Right_Turn). Movimenti complessi del Boe-Bot possono essere rapidamente rappresentati creando una stringa di queste lettere codice. L’ultima lettera della stringa è una Q, che significherà “Fine” (quit) quando i movimenti saranno terminati. La lista viene salvata nella EEPROM durante il download del programma con la direttiva DATA, che si scrive in questo modo: DATA "FLFFRBLBBQ" Ciascuna lettera viene memorizzata in un byte della EEPROM, cominciando dall’indirizzo 0 (a meno che non venga indicato un altro indirizzo). Mentre il programma sta girando, viene usato il comando READ per leggere questa lista dalla EEPROM. Questi valori possono essere letti dall’interno di un ciclo DO…LOOP in questo modo: DO READ address, instruction address = address + 1 ' in questo punto viene omesso il blocco di codice PBASIC. LOOP La variabile address è la locazione di ciascun byte nella EEPROM che contiene una lettera codice. La variabile instruction conterrà il valore attuale di quel byte, la vostra lettera codice. Notate che ad ogni iterazione del ciclo, il valore della variabile address viene incrementato di uno. Questo consentirà la lettura di ciascuna lettera dai byte consecutivi nella EEPROM, partendo dall’indirizzo 0. un blocco di codice con il comando SELECT...CASE...ENDSELECT può essere usato per selezionare una variabile e valutarla caso per caso ed di conseguenza eseguire dei blocchi di codice. Il seguente è un blocco di codice che osserverà ciascun valore lettera contenuta nella variabile instruction e chiamare di conseguenza la subroutine appropriata per ciascun caso, per una data lettera. SELECT instruction CASE "F": GOSUB Forward CASE "B": GOSUB Backward Pagina 148 · Robotica con il Boe-Bot CASE "R": GOSUB Right_Turn CASE "L": GOSUB Left_Turn ENDSELECT Il comando DO…LOOP ha istruzioni opzionali utili per circostanze differenti. Il comando DO...LOOP UNTIL (condition) permette ad un ciclo di essere eseguito fino al verificarsi di una certa condizione. DO WHILE (condition) …LOOP permette ad un ciclo di essere eseguito solamente fino a che esiste una certa condizione. Il vostro programma esempio userà DO…LOOP UNTIL (condition). In questo caso, farà eseguire il ciclo DO…LOOP fino a che dalla EEPROM non venga letto il carattere “Q”. DO ' in questo punto viene omesso il blocco di codice PBASIC. LOOP UNTIL instruction = "Q" Seguono questi concetti, tutti insieme in un singolo programma. Programma Esempio: EepromNavigation.bs2 Per capire che cosa fa ciascuna parte del programma, leggete attentamente le istruzioni di codice ed i commenti nel programma Navigation.bs2 Digitate, Salvate e Lanciate EepromNavigation.bs2. ' Robotica con il Boe-Bot - EepromNavigation.bs2 ' Navigazione effettuata usando i caratteri memorizzati nella EEPROM. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG " Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------pulseCount address instruction VAR VAR VAR Word Byte Byte ' Memorizza il numero di impulsi. ' Memorizza l’indirizzo EEPROM. ' Memorizza l’istruzione in EEPROM. ' -----[ EEPROM Data ]-------------------------------------------------------' ' DATA Address: 0123456789 |||||||||| "FLFFRBLBBQ" ' Queste due righe commentate mostrano ' L’indirizzo EEPROM di ciascun dato. ' Le istruzioni di navigazione. ' -----[ Inizializzazione ]---------------------------------------------------- Capitolo 4: Navigazione con il Boe-Bot · Pagina 149 FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. ' -----[ Routine Principale]-------------------------------------------------DO READ address, instruction address = address + 1 ' Il Dato dell’indirizzo nell’istruzione. ' +1 all’indirizzo per la prossima lettura. SELECT instruction CASE "F": GOSUB Forward CASE "B": GOSUB Backward CASE "L": GOSUB Left_Turn CASE "R": GOSUB Right_Turn ENDSELECT LOOP UNTIL instruction = "Q" END ' ferma l’esecuzione fino al reset. ' -----[ Subroutine – Marcia Avanti ]----------------------------------------Forward: FOR pulseCount = 1 TO 64 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT RETURN ' ' ' ' ' Subroutine di Marcia Avanti. Invio di 64 impulsi di avanzamento. Impulsi di 1.7 ms al servo sinistro. Impulsi di 1.3 ms al servo destro. Pausa per 20 ms.. ' Ritorno al ciclo della routine principale. ' -----[ Subroutine – RetroMarcia ]------------------------------------------Backward: FOR pulseCount = 1 TO 64 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' ' ' ' ' Subroutine di RetroMarcia. Invio di 64 impulsi di retromarcia. Impulsi di 1.3 ms al servo sinistro. Impulsi di 1.7 ms al servo destro. Pausa per 20 ms.. ' Ritorno al ciclo della routine principale. ' -----[ Subroutine – Curva a Sinistra ]-------------------------------------Left_Turn: FOR pulseCount = 1 TO 24 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT RETURN ' ' ' ' ' Subroutine di Curva a Sinistra. Invio di 24 Impulsi di Curva a Sinistra. Impulsi di 1.3 ms al servo sinistro. Impulsi di 1.3 ms al servo destro. Pausa per 20 ms. ' Ritorno al ciclo della routine principale. Pagina 150 · Robotica con il Boe-Bot ' -----[ Subroutine – Curva a Destra ]---------------------------------------Right_Turn: FOR pulseCount = 1 TO 24 PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' ' ' ' ' Subroutine di Curva a Destra. Invio di 24 Impulsi di Curva a Destra. Impulsi di 1.7 ms al servo sinistro. Impulsi di 1.7 ms al servo destro. Pausa per 20 ms.. ' Ritorno al ciclo della routine principale. Il vostro Boe-Bot ha effettuato un percorso seguendo i lati di un rettangolo, andando avanti per i primi due lati ed in retromarcia per gli altri due? Se sembrava piuttosto un trapezio, potreste voler regolare gli argomenti di FOR pulseCount EndValue delle subroutine per effettuare curve a 90° più precise. Il vostro Turno Con EepromNavigation.bs2 aperto nell’Editor del BASIC Stamp, clickate Run e selezionate Memory Map. Le vostre istruzioni memorizzate appariranno all’inizio della mappa dettagliata della EEPROM come mostrato nella Figura 4-7. I numeri visualizzati sono in codice ASCII (American Standard Code for Information Interchange) in formato esadecimale che corrisponde alle lettere che avevate digitato nelle vostre dichiarazioni data. Figura 4-7 Mappa di Memoria con memorizzate le istruzioni visibili nella finestra EEPROM Map Clickate nella casella Display ASCII vicino all’angolo in basso a sinistra della finestra Memory Map. Capitolo 4: Navigazione con il Boe-Bot · Pagina 151 Ora le istruzioni di direzione appariranno nel formato più familiare mostrato nella Figura 4-8. Invece dei codici ASCII, essi appaiono come i caratteri effettivi che avete registrato usando la direttiva DATA . Figura 4-8 Ingrandimento della Mappa di Memoria Dettagliata della EEPROM dopo aver selezionato la casella Display ASCII Questo programma ha memorizzato un totale di 10 caratteri nella EEPROM. A questi dieci caratteri si accede con la variabile address del comando READ. La variabile address è stata dichiarata di tipo byte, così rende accessibili fino a 256 locazioni, ben oltre le 10 di cui abbisognamo in questo caso. Se la variabile address venisse dichiarata nuovamente di tipo word, potreste teoricamente accedere a 65535, molto al di là delle locazioni disponibili. Ricordatevi comunque che man mano che il vostro programma cresce, il numero di indirizzi EEPROM disponibili per la memorizzazione dei dati diminuisce. Potete modificare la stringa esistente di dati con nuove istruzioni di direzione. Potete anche aggiungere dichiarazioni addizionali DATA. I dati vengono memorizzati in sequenza, così il primo carattere della seconda stringa di dati sarà memorizzato immediatamente dopo l’ultimo carattere della prima stringa di dati. Provate a cambiare, ed a cancellare caratteri nella direttiva DATA, e rilanciate il programma. Ricordate che l’ultimo carattere nella direttiva DATA dovrà sempre essere una “Q.” Modificate la direttiva DATA per far effettuare al vostro Boe-Bot la consueta sequenza di movimenti Avanti, Sinistra, Destra, Retromarcia. Provate ad aggiungere una seconda direttiva DATA. Ricordate di togliere la “Q” dalla fine della prima direttiva DATA e di aggiungerlo alla fine della seconda. Pagina 152 · Robotica con il Boe-Bot Altrimenti, il programma eseguirà solamente i comandi presenti nella prima direttiva DATA. Programma Esempio– EepromNavigationWithWordValues.bs2 Il prossimo Programma Esempio a prima vista sembra complicato, ma è un modo molto efficiente di progettare programmi per una coreografia personalizzata dei movimenti. Questo Programma Esempio usa la memorizzazione di dati nella EEPROM, ma non usa subroutine. Invece, viene usato un singolo blocco di codice, con le variabili al posto degli argomenti FOR…EndValue e Duration di PULSOUT. Queste variabili vengono impostate con i valori letti dalla EEPROM. Per default, la direttiva DATA memorizza le informazioni nella EEPROM in forma di byte. Per memorizzare elementi di dati con formato word, potete aggiungere il modificatore Word alla direttiva DATA, prima di ciascun elemento di dato nella vostra stringa. Ciascun dato di formato word userà due byte della memoria EEPROM, in questo modo i dati saranno recuperati ogni due locazioni di memoria. Quando usate più di una direttiva DATA, è più conveniente assegnare un’etichetta a ciascuna. In questo modo, i vostri comandi READ si potranno riferire all’etichetta per ritrovare i dati senza bisogno di dover calcolare in quale indirizzo della EEPROM inizia ciascuna stringa di dati. Date un’occhiata a questo frammento di codice: ' addressOffset Pulses_Count DATA Pulses_Left DATA Pulses_Right DATA 0 Word 64, Word 850, Word 650, 2 Word 24, Word 650, Word 650, 4 Word 24, Word 850, Word 850, 6 8 Word 64, Word 0 Word 650 Word 850 Ciascuna delle tre dichiarazioni DATA inizia con la sua etichetta. Il modificatore Word deve essere anteposto a ciascun elemento di dato, e gli elementi vengono separati da virgole. Queste tre stringhe di dati saranno memorizzate nella EEPROM una dopo l’altra. Non dobbiamo fare nessun calcolo per conoscere l’indirizzo di uno specifico dato, perché le etichette e la variabile addressOffset lo faranno automaticamente. Il comando READ usa ciascuna etichetta per determinare l’indirizzo EEPROM di inizio di quella stringa, a cui poi aggiungerà il valire della variabile addressOffset per sapere di quanti indirizzi avanzare per trovare un elemento nella stringa. Il dato trovato all’indirizzo risultante sarà messo nella variabile di formato word alla fine dell’istruzione READ. Esaminate adesso questo frammento di codice: DO READ Pulses_Count + addressOffset, Word pulseCount Capitolo 4: Navigazione con il Boe-Bot · Pagina 153 READ Pulses_Left + addressOffset, Word pulseLeft READ Pulses_Right + addressOffset, Word pulseRight addressOffset = addressOffset + 2 ' PBASIC code block omitted here. LOOP Alla prima iterazione del ciclo, addressOffset = 0. Il primo comando READ recupererà il valore 64 dal primo indirizzo corrispondente all’etichetta Pulses_Count, e lo metterà nella variabile pulseCount. Il secondo comando READ recupera il valore 850 dal primo indirizzo specificato dall’etichetta Pulses_Left, e lo metterà nella variabile pulseLeft. Il terzo comando READ recupera il valore di 650 dal primo indirizzo specificato dall’etichetta Pulses_Right e lo mette nella variabile pulseRight. Notate che questi sono i tre valori nella colonna “0” del frammento di codice a pagina 152. Quando il valore di queste variabili viene messo nel blocco di codice che segue, questo: FOR counter = 1 TO pulseCount PULSOUT 13, pulseLeft PULSOUT 12, pulseRight PAUSE 20 NEXT diventa FOR counter = 1 TO 64 PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 NEXT Riconoscete le manovre base generate da questo blocco di codice? Osservate le altre colonne del frammento di codice a pagina 152 ed anticipate come sarà il blocco di codice FOR…NEXT alla seconda, terza e quarta iterazione del ciclo. Osservate le linee dalla seconda all’ultima del codice del programma seguente. Che cosa accadrà alla quinta iterazione del ciclo? Digitate, Salvate e Lanciate EepromNavigationWithWordValues.bs2. ' Robotica con il Boe-Bot - EepromNavigationWithWordValues.bs2 ' Memorizzza liste di valori in formato word. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG " Il Programma è in Funzione!" ' Direttiva Stamp. ' Direttiva PBASIC. Pagina 154 · Robotica con il Boe-Bot ' -----[ Variabili ]---------------------------------------------------------counter pulseCount addressOffset instruction instruction. pulseRight pulseLeft VAR VAR VAR VAR Word Word Byte Byte VAR VAR Word Word ' Memorizza il Numero di Impulsi. ' Memorizza l’offset dall’etichetta. ' Memorizza le istruzioni in EEPROM ' Memorizza le larghezze di impulsi dei servo. ' -----[ EEPROM Data ]-------------------------------------------------------' addressOffset Pulses_Count DATA Pulses_Left DATA Pulses_Right DATA 0 Word 64, Word 850, Word 650, 2 Word 24, Word 650, Word 650, 4 Word 24, Word 850, Word 850, 6 8 Word 64, Word 0 Word 650 Word 850 ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. ' -----[ Routine Principale]-------------------------------------------------DO READ Pulses_Count + addressOffset, Word pulseCount READ Pulses_Left + addressOffset, Word pulseLeft READ Pulses_Right + addressOffset, Word pulseRight addressOffset = addressOffset + 2 FOR counter = 1 TO pulseCount PULSOUT 13, pulseLeft PULSOUT 12, pulseRight PAUSE 20 NEXT LOOP UNTIL pulseCount = 0 END ' Ferma l’esecuzione fino al reset. Il vostro Boe-Bot ha eseguito la sequenza consueta di manovre di Avanzamento, Curva a Sinistra, Curva a Destra, e Retromarcia? Vi siete abbastanza annoiati fino ad ora? Vorreste vedere il vostro Boe-Bot fare qualcosa di diverso, o vorreste progettare le vostre coreografie? Capitolo 4: Navigazione con il Boe-Bot · Pagina 155 Il Vostro Turno– Creazione delle Vostre Routine di Navigazione Personali Salvate EepromNavigationWithWordValues.bs2. con un nuovo nome. Sostituite le direttive DATA con quelle sottoriportate. Lanciate il programma modificato ed osservate che cosa fa il vostro Boe-Bot. Pulses_Count DATA Word Word Pulses_Left DATA Word Word Pulses_Right DATA Word Word 60, 110, 850, 740, 650, 760, Word Word Word Word Word Word 80, 100, 800, 715, 700, 785, Word Word Word Word Word Word 100, 80, 785, 700, 715, 800, Word Word Word Word Word Word 110, 60, Word 0 760, Word 750, 650, Word 750 740, Word 750, 850, Word 750 Create una tabella con tre righe, una per ciascuna direttiva DATA, ed una colonna per ciascuna manovra che volete far fare al Boe-Bot, più una per l’elemento Word 0 nella riga Pulses_Count. Usate la tabella per pianificare la coreografia del vostro Boe-Bot, compilandola con gli argomenti di FOR…EndValue e PULSOUT Duration che vi serviranno per ciascun blocco di codice della manovra. Modificate il vostro programma con le direttive DATA appena pianificate. Digitate, Salvate e Lanciate il vostro programma personalizzato. Il vostro Boe-Bot esegue le manovre come le avevate immaginate? Continuate a lavorarci fino a che non lo fa. Pagina 156 · Robotica con il Boe-Bot SOMMARIO In questo capitolo sono state studiate le manovre base del Boe-Bot: Avanzamento, Retromarcia, rotazione sul posto per curvare a destra od a sinistra, e la rotazione sul proprio asse. Il tipo di manovra viene determinato dagli argomenti Duration dei comandi PULSOUT. La durata delle manovre è determinata dagli argomenti StartValue ed EndValue del ciclo FOR…NEXT. Il capitolo 2 comprendeva le regolazioni hardware, la centratura meccanica dei servo del Boe-Bot con un giravite. Questo capitolo ha focalizzato l’attenzione sulla calibrazione fine tramite la manipolazione del software. In special modo, una diifferenza nella rotazione dei due serv, è stata compensata cambiando l’argomento Duration del comando PULSOUT del servo più veloce. Questo cambia il percorso leggermente curvo del Boe-Bot linearizzandolo quando i servo non sono perfettamente uguali. È stata affinata la calibrazione per migliorare la precisione del Boe-Bot nell’eseguire le curve all’angolo desiderato, adattando gli argomenti StartValue ed EndValue di un ciclo FOR…NEXT. La programmazione del Boe-Bot per percorrere una distanza predefinita può essere conseguita misurando la distanza percorsa in un secondo, con l’aiuto di un metro. Usando questa distanza, ed il numero di impulsi per secondo, potete calcolare il numero di impulsinecessario per coprire una determinata distanza. È stata studiata la rampa come metodo per accelerare e decelerare. È meno dannoso per i servo, e viene raccomandato sempre di usare le routine di rampa invece delle routine di partenza o arresto brutali mostrate nei programmi esempio. La rampa viene ottenuta prendendo la stessa variabile usata nel ciclo FOR…NEXT come contatore e sommandola o sottraendola a 750 negli argomenti Duration del comando PULSOUT. Sono state studiate le subroutine come metodo di scrivere manovre preprogrammate riusabili in un programma PBASIC. Invece di scrivere un intero ciclo FOR…NEXT per ciascuna manovra, secondo necessità con il comando GOSUB può essere eseguita una singola subroutine contenente un ciclo FOR…NEXT. Una subroutine inizia con una etichetta, e termina con il comando RETURN. Una subroutine viene chiamata dal programma principale tramite un comando GOSUB. Quando la subroutine è terminata ed incontra il comando RETURN, il prossimo comando che sarà eseguito, è quello immediatamente seguente il comando GOSUB. Capitolo 4: Navigazione con il Boe-Bot · Pagina 157 La EEPROM del BASIC Stamp contiene il programma che stà funzionando, è possibile trarre vantaggio dalla porzione di memoria non utilizzata per memorizzare valori. Questo è un modo egregio per memorizzare routine di navigazione personalizzate. La direttiva DATA può memorizzare valori nella EEPROM. Per default vengono memorizzati byte, ma aggiungendo a ciascun valore, il modificatore Word vi permette di memorizzare valori fino a 65535 nello spazio di due byte della memoria EEPROM. Potete leggere i valori della EEPROM usando il comando READ. Se state recuperando una variabile di tipo word, assicuratevi di usare il modificatore Word prima della variabile che riceverà il valore letto dal comando READ. È stato studiato SELECT…CASE come sistema di valutazione caso per caso di una, e per l’esecuzione di un diverso blocco di codice a secondo del caso. Le condizioni opzionali DO…LOOP sono utili il alcune circostanze; è stata dimostrata DO…LOOP UNTIL (condition) come modo di continuare l’esecuzione del comando DO…LOOP fino alla rilevazione di una particolare condizione. Domande 1. In quale direzione deve girare la ruota sinistra per far avanzare il Boe-Bot? Ed in quale direzione deve girare la ruota destra? 2. In quale direzione deve girare la ruota destra per far retrocedere il Boe-Bot? Ed in quale direzione deve girare la ruota sinistra? 3. Che cosa controlla la velocità e la direzione in cui gira un servo? Quale comando PBASIC ed argomento vi dà il controllo programmato sulla velocità e la direzione del servo? 4. Quando il Boe-Bot ruota su se stesso a sinistra, che cosa fanno le ruote destra e sinistra? Quali comandi PBASIC vi servono per far ruotare il Boe-Bot a sinistra? 5. Se il vostro Boe-Bot vira leggermente a sinistra quando state usando un programma per farlo andare in linea retta’ come lo correggete? Quale comando deve essere adattato e quale tipo di adattamento dovreste fare? 6. Se il vostro Boe-Bot viaggia ad 11 in/s, di quanti impulsi abbisognerà per percorrere 36 pollici? 7. Se il vostro Boe-Bot viaggia ad 60 cm/s, di quanti impulsi abbisognerà per percorrere 1 metro? 8. Quale relazione c’è tra l’argomento Counter di un ciclo FOR…NEXT e l’argomento Duration del comando PULSOUT che rende possibile la rampa? 9. Quale differenza c’è tra una subroutine ed una chiamata ad una subroutine? Quali sono le caratteristiche di ciascuna? Pagina 158 · Robotica con il Boe-Bot 10. Quale comando potete usare per precaricare valori nella memoria EEPROM del BASIC Stamp prima di lanciare un programm? 11. Quale comando potete usare per recuperare un valore memorizzato nella EEPROM e copiarlo in una variabile? 12. Quale comando potete usare per selezionare e valutare una variabile in base al caso ed eseguire un blocco di codice diverso per ciascun caso ? 13. Quali sono le diverse condizioni che possono essere usate con DO…LOOP? 14. Come fa EepromNavigationWithWordValues.bs2 a sapere quando terminare le manovre? E come fa EepromNavigation.bs2 a sapere quando fermarsi? 15. Qual è la differenza tra il comando READ usato in EepromNavigation.bs2 e quello usato in EepromNavigationWithWordValues.bs2? Esercizi 1. Scrivete una routine che faccia retrocedere il Boe-Bot back per 350 impulsi. 2. Scrivete una routine che faccia curvare a sinistra ed in avanti il Boe-Bot per 50 impulsi. 3. Assumete di aver provato i vostri servo ed abbiate scoperto che con 48 impulsi eseguano una curva di 180° a destra. Con questa informazione, scrivete delle routine per far curvare il Boe-Bot di 30, 45, e 60 gradi. 4. Con riferimento all’Esercizio #3: Calcolo delle distanze. Determinate il numero di impulsi da inviare se volete che il vostro Boe-Bot percorra 60 cm assumendo che la sua velocità sia di 53 cm/s. Usate i valori da voi calcolati per scrivere una routine che faccia percorrere al Boe-Bot 60 cm in avanti. 5. Scrivete una routine che faccia avanzare il Boe-Bot il linea retta, poi esegua una curva accelerando e decelerando, per continuare poi in avanti. 6. Esistono quattro possibili manovre per curvare. Scrivete una subroutine per ciascuna. Scrivete una routine esempio che chiami ciascuna subroutine di curva. Progetti 1. è tempo di compilare la colonna 3 della Table 2-1: Combinazioni della Duration di PULSOUT a pagina 80. Per farlo, modificate gli argomenti Duration di PULSOUT nel programma BoeBotForwardThreeSeconds.bs2 usando ciascun paio di valori della colonna 1. Registrate i comportamento relativo del vostro Boe-Bot per ciascun paio nella colonna 3. una volta completata, questa tabella servirà come guida di riferimento nella progettazione delle vostre manovre personalizzate del Boe-Bot. Capitolo 4: Navigazione con il Boe-Bot · Pagina 159 2. La Figura 4-9 mostra quattro semplici percorsi a ostacoli. Scrivete un programma che faccia percorrere al vostro Boe-Bot i percorsi di cascuna figura. Assumete che tutte le distanze delle linee rette (incluso il diametro del cerchio) sia di una yarda o di un metro. Figura 4-9 Semplici Percorsi ad Ostacoli 3. Modificate i vostri programmi del progetto 2 in modo che le manovre vengano eseguite con la rampa. 4. Create una subroutine personalizzata per ciascuna manovra del progetto 1. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 161 Capitolo 5: Navigazione Tattile con i “Baffi” I macchinari robottizzati multiformi si basano su svariati interruttori tattili. Per esempio, un interruttore tattile può rilevare quando un braccio robotico incontra un oggetto. Il robot può essere programmato per afferrare l’oggetto per metterlo in un altro posto. Le fabbriche usano gli interruttori tattili per contare oggetti in una linea di produzione, ed anche per allineare oggetti durante i processi industriali. In tutti questi esempi, gli interruttori forniscono informazioni che regolano qualche forma di reazione programmata. Questi ingressi sono controllati elettronicamente dal prodotto, che sia un robot, od un calcolatore, od una linea di produzione. Basandosi sullo stato degli interruttori, il braccio del robot afferra un oggetto, oppure il calcolatore visualizza gli aggiornamenti, o la linea di produzione della fabbrica reagisce con motori o servo per guidare i prodotti. In questo capitolo, assemblerete e collauderete sul vostro Boe-Bot degli interruttori tattili chiamati “baffi”. Programmerete quindi il Boe-Bot per controllare lo stato di questi interruttori, e decidere che cosa fare quando si incontra un ostacolo. NAVIGAZIONE TATTILE I “baffi” sono così chiamati perché questi interruttori assomigliano alle vibrisse dei gatti, sebbene alcuni sostengano che assomigliano di più a delle antenne. Ad ogni modo, questi baffi sono mostrati in Figura 5-1 montati su un Boe-Bot. I baffi danno al Boe-Bot la capacità di sentire il mondo intorno a lui tramite il tatto, in modo molto simile alle antenne di una formica o alle vibrisse di un gatto. Gli esercizi di questo capitolo useranno solamente i baffi, ma possono anche essere usati insieme ad altri sensori che studierete più avanti nei capitoli successivi per aumentare le funzionalità del vostro Boe-Bot. Pagina 162 · Robotica con il Boe-Bot Figura 5-1 Boe-Bot con i Baffi ESERCIZIO #1: MONTAGGIO E COLLAUDO DEI BAFFI Prima di andare alla programmazione per far navigare il Boe-Bot in base a ciò che tocca, prima è essenziale assemblare e collaudare i baffi. Questo esercizio vi guiderà nell’assemblaggio e nel collaudo dei baffi. Circuito dei Baffi e suo Assemblaggio Raccogliete l’hardware dei baffi mostrato in Figura 5-2. Scollegate l’alimentazione dalla vostra scheda e dai servo. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 163 Elenco Componenti: (2) Baffi (2) viti a testa tonda 7/8” 4-40 Phillips (2) distanziali ½” (2) Rondelle in Nylon (2) Spinotti 3-pin m/m (2) Resistenze, 220 Ω (rosso-rosso-marrone) (2) Resistenze, 10 kΩ (marrone-nero-arancio) Figura 5-2 Hardware dei Baffi Assemblaggio dei Baffi Togliete le viti che fissano la scheda sul lato frontale. Per seguire le istruzioni successive riferitevi alla Figura 5-3. Inserite la rondella in nylon ed il distanziatore da ½” in ciascuna vite da 7/8”. Avvitate le viti attraverso i fori nella scheda ai supporti inferiori senza stringerle. Inserite le estremità uncinate dei baffi sul gambo delle viti, se necessario una sopra la rondella ed una sotto, posizionandole in modo che si incrocino senza tooccarsi. Serrare le viti definitivamente per bloccare i baffi senza forzare troppo. Figura 5-3 Montaggio dei Baffiing Board of Education / HomeWork Board Il prossimo passo è l’aggiunta del circuito dei baffi mostrato nella Figura 5-4 al circuito del cicalino piezo che avete assemblato e collaudato nel Capitolo 2 e nel Capitolo 3. Pagina 164 · Robotica con il Boe-Bot Se avete una Board of Education, assemblare il circuito dei baffi mostrato in Figura 5-4 usando lo schema di cablaggio della Figura 5-5 a pagina 165 come riferimento. Se avete la HomeWork Board, assemblate il circuito dei baffi mostrato nella in Figura 5-4 usando lo schema di cablaggio della Figura 5-6 a pagina 166 come riferimento. Vdd Vdd 10 kΩ 10 kΩ P7 220 Ω P5 220 Ω Right Whisker Vss Left Whisker Vss Figura 5-4 Schema elettrico dei Baffi Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 165 Figura 5-5: Schema di Cablaggio dei Baffi per la Board of Education Left Whisker To Servos 15 14 Vdd 13 12 Red Black X4 Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Board of Education Rev C © 2000-2003 Right Whisker Usate le Resistenze da 220 Ω (rosso-rosso-marrone) per collegare P5 e P7 agli spinotti a 3-pin corrispondenti. Usate le resistenze da 10 kΩ (marrone-nero-arancio) per collegare Vdd a ciascuno spinotto a 3-pin. Pagina 166 · Robotica con il Boe-Bot Figura 5-6: Schema di Cablaggio dei Baffi per la HomeWork Board Left Whisker To Servos (916) 624-8333 Rev B www.parallax.com www.stampsinclass.com Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + HomeWork Board Right Whisker Usate le Resistenze da 220 Ω (rosso-rosso-marrone) per collegare P5 e P7 agli spinotti a 3-pin corrispondenti. Usate le resistenze da 10 kΩ (marrone-nero-arancio) per collegare Vdd a ciascuno spinotto a 3-pin. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 167 Collaudo dei Baffi Osservate accuratamente lo schema elettrico dei baffi di (Figura 5-7). Ciascun baffo è sia l’estensione meccanica che il contatto di massa di un interruttore ad un polo. La ragione per cui i baffi sono collegati a massa (Vss) è perché i fori della scheda, sono collegati a Vss. In questo modo i distanziali metallici, e le viti, costituiscono un collegamento elettrico per ciascun baffo. Vdd Vdd 10 kΩ 10 kΩ P7 220 Ω P5 220 Ω Right Whisker Vss Left Whisker Figura 5-7 Schema Elettrico dei Baffi– Osservate Accuratamente Vss Il BASIC Stamp può essere programmato per rilevare quando un baffo viene premuto. I pin I/O collegati a ciascun interruttore osservano la tensione alla resistenza da 10 kΩ di pull-up. La Figura 5-8 illustra coem tutto questo funziona. Quando uno dei baffi non è premuto, la tensione al pin I/O collegato a quel baffo è 5 V (1 logico). Quando un baffo invece viene premuto, la linea I/O line viene messa a massa (Vss), in questo modo la linea vede 0 V (0 logico). Come fareste a farvi dire dal BASIC Stamp se sta leggendo un 1 o uno 0? Siccome il circuito è collegato a P7, questo valore 1 o 0 apparirà in una variabile di nome IN7. IN7 viene chiamato registro di ingresso. Le variabili dei registri di ingresso sono già presenti e non devono essere dichiarate all’inizio del vostro programma. Potete vedere quale valore stà contenendo usando il comando DEBUG BIN1 IN7. BIN1 è un formattatore che indica al Terminale di Debug di visualizzare una cifra binaria (che sia 1 oppure 0). Pagina 168 · Robotica con il Boe-Bot SOUT 1 SIN 2 ATN 3 VSS 4 P0 5 P1 6 P2 7 P3 8 P4 9 Vdd 10 kΩ 24 VIN SOUT 1 23 VSS SIN 2 22 RES ATN 3 21 VDD (+5V) VSS 4 20 P15 P0 5 19 P14 P1 6 19 P14 18 P13 P2 7 18 P13 17 P12 P3 8 17 P12 16 P11 P4 9 16 P11 P5 10 15 P10 P5 10 15 P10 P6 11 14 P9 P6 11 14 P9 13 P8 P7 12 13 P8 BS2 1 0 P7 12 220 Ω Vdd 10 kΩ BS2-IC 220 Ω BS2 1 0 24 VIN 23 VSS 22 RES 21 VDD (+5V) 20 P15 BS2-IC Figura 5-8 Rilevazione di Contatti Elettrici Whisker pressed Vss Vss Programma Esempio: TestWhiskers.bs2 Il Programma Esempio è pensato per collaudare i baffi per assicurarsi che funzionino correttamente. E questo lo ottiene visualizzando lo stato dei registri di ingresso che corrispondono ai pi I/O collegati al circuito dei (IN7 ed IN5). Ogni volta che un programma PBasic viene lanciato, tutti i pin I/O per default sono impostati come ingressi. Questo significa che i pin I/O collegati ai baffi, funzioneranno come ingressi automaticamente. Come ingresso, un pin di I/O collegato ad un baffo farà memorizzare al registro di ingresso un 1 se la tensione è 5 V (baffo non premuto) e 0 se la tensione è 0 V (baffo premuto). Il Terminale di Debug può essere usato per visualizzare questi valori. Ricollegate l’alimentazione alla vostra scheda ed ai servo. Digitate, Salvate e Lanciate TestWhiskers.bs2. Questo programma fa uso del Terminale di Debug, e per questo lasciate collegato il cavo seriale al BASIC Stamp mentre il programma sta girando. ' Robotica con il Boe-Bot - TestWhiskers.bs2 ' Visualizza lo stato dei pin I/O collegati ai baffi. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 169 DEBUG "Stato dei Baffi", CR, "Sinistro Destro", CR, "-------------" DO DEBUG CRSRXY, 0, 3, "P5 = ", BIN1 IN5, " P7 = ", BIN1 IN7 PAUSE 50 LOOP Notate i valori visualizzati nel Terminale di Debug; dovrebbe visualizzare che tutti e due P7 e P5 sono uguali ad 1. Controllate la Figura 5-5 a pagina 165 (o la Figura 5-6 a pagina 166) così saprete quale baffo è il “Baffo sinistro” e quale baffo è il “Baffo destro”. Premete il baffo destro verso lo spinotto a 3-pin, e notate i valori visualizzati nel Terminale di Debug. Ora dovreste leggere: P5 = 1 P7 = 0 Premete il baffo sinistro verso lo spinotto a 3-pin, e notate di nuovo i valori visualizzati nel Terminale di Debug. Questa volta dovreste leggere: P5 = 0 P7 = 1 Premete ora tutti e due i baffi contro gli spinotti a 3-pin. Ora dovreste leggere: P5 = 0 P7 = 0 Se i baffi hanno passato tutti questi collaudi, siete pronti per passare oltre; altrimenti, controllate il vostro programma ed i circuiti alla ricerca di errori. Che cosa è CRSRXY? È un formattatore che vi permette di disporre convenientemente le informazioni che il vostro programma invia al Terminale di Debug. Il formattatore CRSRXY 0, 3, nel comando DEBUG CRSRXY, 0, 3, "P5 = ", BIN1 IN5, " P7 = ", BIN1 IN7 Posiziona il cursore alla colonna 0, righa 3 nel Terminale di Debug. Questo fa disporre in modo ordinato sotto l’intestazione della tabella “Stato dei Baffi”. Ad ogni iterazione del ciclo, i nuovi valori sovrascrivono i vecchi perché il cursore trona indietro allo stesso posto. ESERCIZIO #2: COLLAUDO SUL CAMPO DEI BAFFI Assumete di dover collaudare i baffi qualche tempo dopo quando non siete collegati ad un computer. Dal momento che il Terminale di Debug non sarà disponibile, che cosa Pagina 170 · Robotica con il Boe-Bot potreste fare? Una soluzione potrebbe essere di programmare il BASIC Stamp in modo che emetta un segnale di uscita che corrisponda al segnale di ingresso ricevuto. Questo può essere fatto con una coppia di circuiti LED ed un programma che accenda e spenga i LED in base allo stato dei baffi. Elenco Componenti: (2) Resistenze - 220 Ω (rosso-rosso-marrone) (2) LED – Rossi Assemblaggio dei circuiti a LED per il Collaudo di Baffi Scollegate l’alimentazione dealla scheda e dei servo. Se avete una Board of Education, aggiungete il circuito mostratoin Figura 5-9 con l’aiuto dello schema di cablaggio della Figura 5-10 (pagina 171). Se avete una HomeWork Board, aggiungete il circuito mostrato nella Figura 5-9 con l’aiuto dello schema di cablaggio della Figura 5-11 (page 172). P10 Figura 5-9 LED Whisker Collaudo Schematic 220 Ω P1 220 Ω LED Vss LED Vss Add this LED circuit. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 171 Figura 5-10: Schema di Cablaggio dei Baffi più Led per la Board of Education Il terminale lungo indica l’anodo To Servos Left Whisker 15 14 Vdd 13 12 Red Black X4 Vdd X5 Vin Vss La smussatura sul corpo indica il catodo X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Board of Education Rev C © 2000-2003 Il terminale lungo indica l’anodo Right Whisker Pagina 172 · Robotica con il Boe-Bot Figura 5-11: Schema di Cablaggio più LED per la HomeWork Board Il terminale lungo indica l’anodo To Servos Left Whisker (916) 624-8333 Rev B www.parallax.com www.stampsinclass.com Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + La smussatura sul corpo indica il catodo HomeWork Board Il terminale lungo indica l’anodo Right Whisker Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 173 Programma per il Collaudo dei Circuiti LED dei Baffi Ricollegate l’alimentazione alla vostra scheda. Salvate TestWhiskers.bs2 con il nome TestWhiskersWithLeds.bs2. Aggiungete questi due comandi tra il secondo comando DEBUG ed il comando PAUSE 50. IF (IN7 = 0) THEN HIGH 1 ELSE LOW 1 ENDIF IF (IN5 = 0) THEN HIGH 10 ELSE LOW 10 ENDIF Queste istruzioni si chiamano IF…THEN, e saranno studiate più approfonditamente nel prossimo esercizio. Queste istruzioni sono usate per prendere decisioni con il PBASIC. Le prime due istruzioni IF…THEN impostano P1 alto, che accende il LED quando viene premuto il baffo collegato a P7 (IN7 = 0). La parte ELSE dell’istruzione fa andare basso P1, il che spenge il LED quando il baffo non viene premuto. La seconda istruzione IF…THEN fa la stessa cosa per il baffo collegato a P5 ed al LED collegato a P10. lanciate TestWhiskersWithLeds.bs2. Collaudate il programma premendo delicatamente i baffi. I LED rossi devono accendersi non appena ciascun baffo tocca gli spinotti a 3-pin. ESERCIZIO #3: NAVIGAZIONE CON I BAFFI Nell’esercizio #1, il BASIC Stamp è stato programmato per rilevare se un determinato baffo è stato. In questo esercizio, il BASIC Stamp sarà programmato per usare questa informazione nella guida del Boe-Bot. Quando il Boe-Bot stà avanzando ed un baffo viene premuto, significa che il Boe-Bot ha urtato qualcosa. Un programma di navigazione deve prendere questa informazione, decidere che cosa significa, ed impostare una serie di manovre che lo facciano tornare indietro per andare in una direzione differente. Pagina 174 · Robotica con il Boe-Bot Programmazione del Boe-Bot per Navigare in Base alle Informazioni dai Baffi Questo nuovo programma fa avanzare il Boe-Bot fino a che incontra un ostacolo. In questo caso, il Boe-Bot capisce quando incontra un ostacolo perché lo urta con uno od ambedue i baffi. Non appena l’ostacolo viene rilevato dai baffi, le routine e le subroutine di navigazione sviluppate nel Capitolo 4 faranno retrocedere e curvare il Boe-Bot. Quindi, il Boe-Bot riprende ad avanzare fino a che urta contro un altro ostacolo. Perché possa fare questo, il Boe-Bot deve essere programmato per prendere decisioni. Il PBASIC ha dei comandi chiamati istruzioni IF…THEN che prendono decisioni. La sintassi per l’istruzione IF…THEN è: IF (condition) THEN…{ELSEIF (condition)}…{ELSE}…ENDIF I puntini “…” significano che tra le parole chiave potrete inserire un blocco di codice (uno o più comandi). Il prossimo programma esempio prende decisioni in base alle informazioni avute dai baffi, e quindi chiama delle subroutine per far agire il Boe-Bot. Le subroutine sono simili a quelle che avete sviluppato nel Capitolo 4. di seguito viene mostrato come è usato IF…THEN. IF (IN5 = 0) AND (IN7 = 0) THEN GOSUB Back_Up ' Ambedue i Baffi rilevano un ostacolo, GOSUB Turn_Left ' Retromarcia & curva ad U GOSUB Turn_Left ELSEIF (IN5 = 0) THEN ' Contatto del baffo sinistro GOSUB Back_Up ' Retromarcia & curva a destra GOSUB Turn_Right ELSEIF (IN7 = 0) THEN ' Contatto del baffo sinistro GOSUB Back_Up ' Retromarcia & curva a sinistra GOSUB Turn_Left ELSE ' Ambedue i baffi ad 1, nessun ostacolo GOSUB Forward_Pulse ' Applica un impulso in avanti & ENDIF ' controlla ancora Programma Esempio: RoamingWithWhiskers.bs2 Questo programma dimostra un modo di valutare l’informazione dei baffi e decidere quale subroutine di navigazione chiamare usando IF…THEN. Ricollegare l’alimentazione alla vostra scheda ed ai servo. Digitate, Salvate e Lanciate RoamingWithWhiskers.bs2. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 175 ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - RoamingWithWhiskers.bs2 ' Il Boe-Bot usa i baffi per rilevare gli oggetti, ed aggirarli. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------pulseCount VAR Byte ' Contatore del ciclo FOR...NEXT. ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma. ' -----[ Routine Principale ]------------------------------------------------DO IF (IN5 = 0) AND (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF ' Ambedue i Baffi rilevano un ostacolo, ' Retromarcia & curva ad U ' Contatto del baffo sinistro ' Retromarcia & curva a destra ' Contatto del baffo sinistro ' Retromarcia & curva a sinistra ' Ambedue i baffi ad 1, nessun ostacolo ' Applica un impulso in avanti & ' controlla ancora LOOP ' -----[ Subroutine ]-------------------------------------------------------Forward_Pulse: PULSOUT 13,850 PULSOUT 12,650 PAUSE 20 RETURN ' Invia un singolo impulso in avanti. Turn_Left: FOR pulseCount = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT ' Curva a Sinistra, circa 90-gradi. Pagina 176 · Robotica con il Boe-Bot RETURN Turn_Right: FOR pulseCount = 0 TO 20 PULSOUT 13, 850 PULSOUT 12, 850 ' Curva a Destra, circa 90-gradi. PAUSE 20 NEXT RETURN Back_Up: FOR pulseCount = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' Retromarcia. Come Funziona la Navigazione con i Baffi L’istruzione IF...THEN nella Routine principale per prima cosa controlla i baffi per qualsiasi stato che richieda attenzione. Se ambedue i tasti sono premuti (IN5 = 0 ed IN7 = 0), esegue una inversione ad U chiamando la subroutine Back_Up seguita dalla chiamata alla subroutine Turn_Left due volte di seguito. Invece, se rileva la pressione del solo baffo sinistro (IN5 = 0), allora il programma chiama la subroutine Back_Up seguita dalla subroutine Turn_Right. Se rileva la pressione del baffo destro (IN7 = 0), viene chiamata la subroutine Back_Up, seguita dalla subroutine Turn_Left. La sola combinazione non esaminata è quando nessuno dei due baffi risulta premuto (IN5 = 1 ed IN7 = 1). In questo caso il comando ELSE chiama la subroutine Forward_Pulse. IF (IN5 = 0) AND (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 177 Le subroutine Turn_Left, Turn_Right, e Back_Up vi dovrebbero sembrare familiari, ma la subroutine Forward_Pulse ha una differenza. Invia solamente un impulso, quindi effettua un return. Questo è molto importante, perché significa che il Boe-Bot ha il tempo di controllare lo stato dei suoi baffi tra un impulso di avanzamento e l’altro. Forward_Pulse: PULSOUT 12,650 PULSOUT 13,850 PAUSE 20 RETURN Siccome ciascun impulso di avanzamento fa percorrere al Boe-Bot circa mezzo centimetro, è veramente una buona idea quella di inviargli un solo impulso, quindi tornare indietro nel programma e controllare di nuovo i baffi. Dal momento che le istruzioni IF…THEN sono interne a DO…LOOP, ogni volta che il programma ritorna da Forward_Pulse, giunge a LOOP, che spedisce l’esecuzione del programma al DO. Quindi che cosa accade? Le istruzioni IF…THEN controllano di nuovo lo stato dei baffi. Il vostro Turno Gli argomenti EndValue del ciclo FOR...NEXT nelle routine Back_Right e Back_Left possono essere regolate per una curva più o meno accentuata, e la routine Back_Up può avere il suo EndValue regolato per una corsa più corta che consenta la navigazione in spazi più ristretti. Sperimentate con l’argomento EndValue del ciclo FOR...NEXT delle routine di navigazione del programma RoamingWithWhiskers.bs2. Potete anche modificare le istruzioni IF…THEN per far indicare ai LED del precedente esercizio quali manovre stà effettuando il Boe-Bot aggiungendo i comandi HIGH e LOW per controllare i circuiti LED. Questo è un esempio. IF (IN5 = 0) AND (IN7 = 0) THEN HIGH 10 HIGH 1 GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN HIGH 10 GOSUB Back_Up GOSUB Turn_Right Pagina 178 · Robotica con il Boe-Bot ELSEIF (IN7 = 0) THEN HIGH 1 GOSUB Back_Up GOSUB Turn_Left ELSE LOW 10 LOW 1 GOSUB Forward_Pulse ENDIF √ Modificate l’istruzione IF…THEN nel programma RoamingWithWhiskers.bs2 per far indicare con i LED le manovre del Boe-Bot. ESERCIZIO #4: INTELLIGENZA ARTIFICIALE E COMPRENSIONE DI QUANDO SI È BLOCCATI Potete aver notato che quando il Boe-Bot arriva ad un angolo si blocca. Non appena il Boe-Bot arriva ad un angolo, il suo baffo tocca il muro a sinistra, quindi gira a destra. Quando il Boe-Bot tenta di avanzare di nuovo, il suo baffo destro tocca il muro a destra, così facendo, gira a sinistra. Quindi curva ed urta nuovamente il muro sinistro, e poi ancora il muro destro, e così via, fino a che qualcuno non lo toglie da quella difficile situazione. Programmazione per uscire dagli angoli RoamingWithWhiskers.bs2 può essere modificato per rivelare questo problema ed agire di conseguenza. Il trucco stà nel contare il numero di volte che i baffi vengono attivati alternativamente. Una cosa importante per questo trucco è che il programma si deve ricordare lo stato in cui ciascun baffo era durante il contatto precedente. Deve quindi confrontarlo con lo stato attuale dei baffi. Se essi sono contrari, allora deve aggiungere uno al contatore. Se il contatore supera una soglia che voi (il programmatore) avete impostato, allora, è tempo di fare un’inversione ad U ed azzerare il contatore dell’alternanza dei baffi. Il prossimo programma si basa anche sul fatto che voi potete “nidificare” le istruzioni IF…THEN. In altre parole, il programmma controlla una condizione, e se questa è vera, ne controlla un’altra all’interno della prima. Questo esempio è lo pseudo codice di come può essere usato. IF condizione 1 THEN Comandi per la condizione 1 vera Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 179 IF condizione Comandi per ELSE Comandi per ENDIF ELSE Comandi per ENDIF 2 THEN la condizione 2 ed anche per la condizione 1 la condizione 1 ma non per la condizione 2 la condizione 1 falsa Il prossimo è un programma esempio di istruzioni IF…THEN nidificate nella routine che rivela l’alternanza consecutiva del contatto dei baffi. Programma Esempio: EscapingCorners.bs2 Digitate, Salvate e Lanciate EscapingCorners.bs2. It will cause your Boe-Bot to execute a U-turn at either the fourth or fifth alternate corner depending on which whisker was pressed first. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - EscapingCorners.bs2 ' Il Boe-Bot esce dagli angoli rivelando la pressione alternata dei baffi. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------pulseCount counter old7 old5 VAR VAR VAR VAR Byte Nib Bit Bit ' ' ' ' Conatore del ciclo For...next. Conteggio dei contatti alternati. Memorizza il precedente IN7. Memorizza il precedente IN5. ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 counter = 1 old7 = 0 old5 = 1 ' -----[ Routine Principale ' Segnala lo start/reset del programma. ' Conteggio alternato degli Angoli. ' Costituzione dei Vecchi Valori. ]------------------------------------------------ DO ' --- Rivela l’Alternanza Consecutiva degli Angoli -------------------------' Vedere la sezione "Come Funziona EscapingCorners.bs2" dopo il programma. Pagina 180 · Robotica con il Boe-Bot IF (IN7 <> IN5) THEN ' Uno o l’Altro Premuti. IF (old7 <> IN7) AND (old5 <> IN5) THEN ' Diversi dal Precedente. counter = counter + 1 ' Conteggio Alternato dei Baffi +1. old7 = IN7 ' Registra il Contatto del Baffo old5 = IN5 ' Per il Nuovo Confronto. IF (counter > 4) THEN ' Se il Conteggio = 4, counter = 1 ' resetta il contatore dei Baffi GOSUB Back_Up ' ed Esegui una Curva ad U. GOSUB Turn_Left GOSUB Turn_Left ENDIF ' Contatore ENDIF > 4. ELSE ' ELSE (old7=IN7) o (old5=IN5), counter = 1 ' non alternanza, reset counter. ENDIF ' ENDIF (old7<>IN7) e ' (old5<>IN5). ENDIF ' ENDIF (IN7<>IN5). ' --- Le stesse Routine di Navigazione di RoamingWithWhiskers.bs2 ----------- IF (IN5 = 0) AND (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF ' I 2 Baffi Rivelano Ostacoli ' Retromarcia & Curva ad U ' Left whisker contacts ' Back up & turn right ' Right whisker contacts ' Back up & turn left ' Both whiskers 1, no contacts ' Apply a forward pulse ' and check again LOOP ' -----[ Subroutine ]--------------------------------------------------------Forward_Pulse: PULSOUT 13,850 PULSOUT 12,650 PAUSE 20 RETURN ' Invia un singolo impulso avanti. Turn_Left: FOR pulseCount = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT RETURN ' Curva a Sinistra, circa 90 gradi. Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 181 Turn_Right: FOR pulseCount = 0 TO 20 PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' Curva a Destra, circa 90-gradi. Back_Up: FOR pulseCount = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' Retromarcia. Come Funziona EscapingCorners.bs2 Siccome questo programma è una versione modificata di RoamingWithWhiskers.bs2, qui verranno discusse solamente le nuove funzionalità relative alla rivelazione ed all’uscita dagli angoli. Per la rivelazione degli angoli vengono create tre variabili aggiuntive. La variabile di tipo nibble counter può contenere valori tra 0 e 15. Dal momento che il vostro valore ottimale per la rivelazione degli angoli è 4, la grandezza della variabile è ragionevole. Ricordate che una variabile bit può contenere un singolo bit, che sia un 1 od uno 0. Le due prossime variabili (old7 ed old5) sono ambedue Variabili bit. Anche queste sono della grandezza giusta dal momento che vengono usate per memorizzare i vecchi valori di IN7 ed IN5, le quali sono anche loro Variabili bit. counter old7 old5 VAR VAR VAR Nib Bit Bit Queste Variabili devono essere inizializzate (gli devono essere attribuite dei valori iniziali). Allo scopo di rendere più facile la lettura del programma, counter è impostato ad 1, e quando arriva a 4 a causa del fatto che il Boe-Bot è bloccato in un angolo, viene resettato ad 1. Le vaariabili dei vecchi valori old7 ed old5 devono essere impostate in modo che assomiglino a che uno dei due baffi sia stato premuto prima dell’inizio del programma. Questo deve essere fatto perché la routine per la rivelazione dell’alternanza degi baffi confronta sempre degli schemi alternati, che siano indifferentemente (IN5 = 1 ed IN7 = 0) oppure (IN5 = 0 ed IN7 = 1). Altrettanto, old5 ed old7 devono essere differenti l’uno dall’altro. Pagina 182 · Robotica con il Boe-Bot counter = 1 old7 = 0 old5 = 1 Ora arrivate alla sezione Rilevazione Altrnata Consecutiva degli Angoli. La prima cosa che vogliamo è controllare se uno o l’altro baffo è stato premuto. Un modo semplice per farlo è chiedere “è IN7 differente a IN5?” Con il PBASIC, potete usare l’operatore non uguale a <> in un’istruzione IF che dica “IF IN7 <> IN5”. IF (IN7 <> IN5) THEN Se in effetti un baffo è stato premuto, la cosa da controllare è se rispetto alla volta precedente è stato premuto il baffo opposto. In altre parole, è vero che (old7 <> IN7) ed è vero che (old5 <> IN5)? Se una di queste condizioni è vera, allora, bisogna aggiungere uno al contatore che tiene traccia dei contatti alternati dei baffi. Bisogna anche ricordare lo stato attuale dei baffi impostando old7 uguale all’attuale IN7 ed old5 uguale all’attuale IN5. IF (old7 <> IN7) AND (old5 <> IN5) THEN counter = counter + 1 old7 = IN7 old5 = IN5 Dopodichè se emerge che è il quarto contatto consecutivo alternato dei baffi, allora si deve resettare il contatore ad 1 ed eseguire una curva ad U. IF (counter > 4) THEN counter = 1 GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left Questo ENDIF termina il blocco di codice relativo a counter > 4. ENDIF Questa istruzione ELSE è colloegata all’istruzione IF (old7 <> IN7) AND (old5 <> IN5) THEN. L’istruzione ELSE controlla quello che succede se l’istruzione IF non è Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 183 vera. In altre parole, non deve essere premuto un baffo alternato, in questo modo viene resettato il contatore perché il Boe-Bot non è bloccato in un angolo. ELSE counter = 1 Questa istruzione ENDIF termina il processo decisionaledelle istruzioni IF (old7 <> IN7) AND (old5 <> IN5) THEN. ENDIF ENDIF Il resto del programma è lo stesso del programma precedente. Il vostro Turno Una delle istruzioni IF...THEN in EscapingCorners.bs2 controlla per vedere se counter ha raggiunto 4. Provate ad aumentare il valore a 5 ed a 6 ed osservate l’effetto. Provate anche a ridurre il valore e vedere se ha un qualche effetto sulla normale progressione. Pagina 184 · Robotica con il Boe-Bot SOMMARIO In questo capitolo, invece di navigare per effetto di una lista preprogrammata, il Boe-Bot è stato programmato per navigare in base alle informazioni fornite da sensori. I sensori usati in questo capitolo erano baffi, che in questo caso funzionano come interruttori normalmente aperti. Quando correttamente collegati, questi interruttori ai propri contatti presentano una tensione di (5 V) quando sono aperti, ed una diversa tensione di (0 V) quando sono chiusi. Il registo di ingresso del BASIC Stamp memorizza “1” se viene rilevato Vdd (5 V) e “0,” se viene rilevato Vss (0 V). Il BASIC Stamp è stato programmato per analizzare i baffi sensori e visualizzare il risultato tramite due diversi mezzi, il Terminale di Debug ed i LED. Sono stati sviluppati programmi PBASIC per far effettuare controlli al BASIC Stamp tra un impulso e l’altro fornito ai servo. In base allo stato dei baffi, le istuzioni IF…THEN nella routine principale del programma chiamano le subroutine di navigazione, per far uscire il Boe-Bot dagli angoli, simili a quelle sviluppate nel capitolo precedente. Come esempio di intelligenza artificiale, è stata sviluppata una routine aggiuntiva che rende possibile al Boe-Bot capire se è bloccato in un angolo. Questa routine comprende la memorizzazione dello stato precedente dei baffi, il confronto tra lo stato precedente e quello attuale, ed il conteggio del numero di rivelazioni alternate di oggetti. In questo capitolo è stata studiata la navigazione basata su informazioni dall’esterno del Boe-Bot. I prossimi tre capitoli si concentreranno sull’uso di differenti tipi di sensori per dare la visione al Boe-Bot. Sia la visione che il tatto aprono molte opportunità alla navigazione del Boe-Bot in ambienti sempre più complessi. Domande 1. Che genere di connessione elettrica è un baffo? 2. Che cosa fa il formattatore CRSRXY del comando DEBUG? Quali sono i due valori che devono accompagnare questo formattatore? 3. Quando un baffo viene premuto, quale tensione si presenta al pin I/O collegato? Quale valore binario sarà presente nel registro di ingresso? Se per tenere sotto controllo un baffo, viene usato il pin I/O di ingresso P8, quale valore ha IN8 quando il baffo viene premuto, e quale valore avrà se il baffo non viene premuto? Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 185 4. A quale baffo è collegato IN5? Ed IN7? Se IN7 = 1, che cosa significa? Che cosa significa IN7 = 0? E IN5 = 1 ed IN5 = 0? 5. Quale comando si usa per saltare ad una subroutine differente a secondo del valore di una variabile? Quale comando si usa per decidere a quale subroutine saltare? Su cosa si basano queste decisioni? 6. Quali sono le tre tecniche di programmazione PBASIC usate in questo capitolo per tenere traccia degli eventi e prendere decisioni in base a questi eventi? 7. A quale scopo si annodano le istruzioni IF…THEN? Esercizi 1. Scrivete un comando DEBUG per TestWhiskers.bs2 che aggiorni lo stato di ciascun baffo su una nuova linea. Regolate il comando PAUSE in modo che sia 250 invece di 50. 2. Qual’è il nuovo ritmo di campionamento che avete impostato nell’esercizio 1? Suggerimenti: Ritmo di Campionamento è il numero di volte al secondo in cui lo stato dei baffi viene controllato, e la risposta può essere espressa in campioni al secondo. Può essere calcolato dividendo 1 per il tempo impiegato per effettuare un campionamento. In altre parole, ritmo di campionamento = 1/tempo di campionamento. 3. In RoamingWithWhiskers.bs2, determinare il tempo di campionamento quando il Boe-Bot avanza. Determinare anche, il tempo di campionamento mentre il Boe-Bot sta eseguendo manovre. Suggerimento: La parte delle manovre di questo esercizio può essere considerata una “domanda a trabocchetto”. 4. Usando RoamingWithWhiskers.bs2 come riferimento, scrivete una subroutine Turn_Away che chiami una volta la subroutine Back_Up e due volte la subroutine Turn_Left. Scrivete le modifiche che dovreste fare alla Routine Principale di RoamingWithWhiskers.bs2. Progetti 1. Modificate RoamingWithWhiskers.bs2 in modo che il Boe-Bot emetta un tono di 4 kHz che duri 100 ms prima dell’esecuzione delle manovre di uscita dagli angoli. Fatelo suonare due volte se durante lo stesso campionamento viene rivelato il contatto di ambedue i baffi. 2. Modificate RoamingWithWhiskers.bs2 in modo che gli indicatori LED lampeggino mentre il Boe-Bot esegue le sue manovre. 3. l’obbiettivo principale è di far andare il Boe-Bot in più posti nel minor tempo. Modificate RoamingWithWhiskers.bs2 in modo che il Boe-Bot faccia delle Pagina 186 · Robotica con il Boe-Bot curve a 45° quando incontra un ostacolo. Provate le prestazioni in una stanza con muri ed alcuni grossi ostacoli. Ripetete questo procedimento con curve di 30°, 60°, 90°, e 120°. Sperimentate anche con la distanza di retrocessione del BoeBot. 4. Progetto Avanzato - Modificate RoamingWithWhiskers.bs2 in modo che il BoeBot percorra un cerchio di circa una 1 yard (oppure un metro) di diametro. Quando toccate un baffo, ciò deve far compiere al Boe-Bot un cerchio di diametro inferiore. Quando toccate l’altro baffo, ciò farà compiere al Boe-Bot un cerchio di diametro maggiore. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 187 Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze La luce ha molte applicazioni nella robotica e nel controllo industriale. Alcuni esempi includono la rilevazione del bordo dei rotoli di tessuto in una industria tessile, la determinazione dell’ora di accensione dell’illuminazione pubblica nei vari periodi dell’anno, quando scattare una foto o quando irrigare una coltura di piante. Esistono molti sensori di luce differenti per usi diversi. Il sensore di luce usato nel vostro kit del Boe-Bot è progettato per rilevare la luce visibile, e può essere usato per far rilevare al vostro Boe-Bot variazioni nel livello di illuminazione. Co questa abilità, il vostro Boe-Bot può essere programmato per riconoscere aree con zone di luce o di ombra, registrare la luminosità ed il livello di oscuramento che percepisce, ricercare sorgenti di luce come raggi di una torcia elettrica e porte che lascino filtrare luce in una stanza buia. PRESENTAZIONE DELLA FOTORESISTENZA Le Resistenze con cui avete lavorato nei capitoli precedenti avevano valori fissi, come ad esempio 220 Ω e 10 kΩ. La fotoresistenza, d’altro canto, è una resistenza dipendente dalla luce (LDR). Questo significa che il suo valore di resistenza dipende dalla brillantezza, o dalla luminosità, della luce incidente sulla sua superfice sensibile. La Figura 6-1 mostra il simbolo schematico ed il disegno del componente della fotoresistenza che userete per mettere in grado il Boe-Bot di rilevare le variazioni dei livelli di luce. Superfice Sensibile alla Luce Figura 6-1 Simbolo Schematico e Disegno del Componente della Fotoresistenza Pagina 188 · Robotica con il Boe-Bot Una Fotoresistenza è una Resistenza Dipendente dalla Luce (LDR) che ha una sensibilità allo spettro luminoso simile all’occhio umano. In altre parole, il genere di luce che viene percepito dai vostri occhi è dello stesso tipo che influisce sulla resistenza della Fotoresistenza. Gli elementi attivi di queste fotoresistenze sono fatti di Solfuro di Cadmio (CdS). La luce penetra nello strato semiconduttore applicato su un substrato ceramico e produce dei portatori di carica liberi. Viene prodotta una determinata resistenza elettrica che è inversamente proporzionale all’intensità luminosa. In altre parole, l’oscurità causa una resistenza elevata, e la luce causa una bassa resistenza. Luminosità è un nome scienntifico per la misura della luce incidente. Un modo di comprendere la luce incidente è di pensare ad un fascio luminoso proiettato su di un muro. Il raggio focalizzato che vedete brillare sul muro è la luce incidente. L’unità di misura della luminosità è comunemente chiamato “foot-candle” nel sistema inglese oppure “lux” nel sistema metrico. Nell’uso corrente delle fotoresistenze non vi interesserete dei livelli in lux, ma solamente se la luminosità è maggiore o minore in alcune direzioni. Il Boe-Bot può essere programmato per usare l’intensità relativa come informazione per prendere decisioni sulla navigazione. ESERCIZIO #1: MONTAGGIO E COLLAUDO DEI CIRCUITI DELLA FOTORESISTENZA In questo esercizio, assemblerete e collauderete i circuiti con fotoresistenze per rilevare i livelli di luce. I vostri circuiti sensori di livello saranno in grado di rilevare la differenza tra ombra e luce. I comandi PBASIC per la determinazione di una condizione di ombra sulla fotoresistenza saranno molto simili a quelli usati per determinare se un baffo ha toccato un oggetto. Elenco Componenti: (2) (2) (2) (4) (2) (2) (2) (2) Fotoresistenze - CdS Resistenze – 2 kΩ (rosso-nero-rosso) Resistenze – 220 Ω (rosso-rosso-marrone) Ponticelli in filo Resistenze – 470 Ω (giallo-viola-marrone) Resistenze – 1 kΩ (marrone-nero-rosso) Resistenze – 4.7 kΩ (giallo-viola-rosso) Resistenze – 10 kΩ (marrone-nero-arancio) Assemblaggio degli Occhi Fotosensibili La Figura 6-2 mostra lo schema elettrico e la Figura 6-3 mostra lo schema di cablaggio dei circuiti fotoresistenza che userete in questo e nei due prossimi esercizi. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 189 √ √ Scollegate l’alimentazione dalla vostra scheda e dai servo. Assemblate il circuito mostrato in Figura 6-2, usando la Figura 6-3 come riferimento. Vdd Vdd P6 P3 220 Ω 220 Ω 2 kΩ Vss 2 kΩ Vss Figura 6-2 Schema Elettrico del Primo Circuito di Rilevazione della Luce Pagina 190 · Robotica con il Boe-Bot To Servos To Servos 15 14 Vdd 13 12 (916) 624-8333 www.parallax.com www.stampsinclass.com Red Black X4 Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Board of Education © 2000-2003 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Rev C Vdd Rev B + Figura 6-3 Schema di Cablaggio del Primo Circuito di Rilevazione della Luce Board of Education (sinistra) e HomeWork Board (destra). HomeWork Board Come Funziona il Circuito della Fotoresistenza Un pin I/O del BASIC Stamp può funzionare come uscita o come ingresso. Come uscita, il pin I/O può inviare un segnale alto (5 V) o basso (0 V). fino a questo punto, i segnali alti e bassi sono stati usati per accendere o spengere circuiti LED, controllare servo, ed inviare toni ad un cicalino. Un pin I/O del BASIC Stamp può anche funzionare come ingresso. Come ingresso, il pin I/O non applica nessuna tensione ai circuiti a cui è collegato. Invece, ascolta silenziosamente senza alcun effetto sui circuiti. Se il pin I/O sente che la tensione applicata è superiore ad 1.4 V, memorizza un 1 nel suo registro di ingresso. Se invece sente che la tensione applicata è inferiore ad 1.4 V, memorizza uno 0 nel suo registro di ingresso. Nel capitolo precedente, questi registri di ingresso memorizzavano valori che indicavano se un baffo era stato premuto o meno. Per esempio, il registro di ingresso IN7 memorizzava un 1 quando sentiva 5 V (baffo non premuto), oppure uno 0 quando sentiva 0 V (baffo premuto). Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 191 I pin I/O del BASIC Stamp per default sono ingressi. Quando un programma BASIC Stamp inizia, tutti i pin I/O partono come ingressi. Quando usate comandi come HIGH, LOW, PULSOUT o FREQOUT, il pin I/O viene cambiato da ingresso ad uscita in modo che il BASIC Stamp possa inviare i segnali alto o basso. Quando un pin I/O del BASIC Stamp è un ingresso, il circuito si comporta come se non siano presenti ne il pin I/O ne la resistenza da 220 Ω. La Figura 6-4 mostra il circuito equivalente. La resistenza della fotoresistenza viene indicata con la lettera R. può andare da pochi Ω se la luce è molto intensa, fino a circa 50 kΩ nell’oscurità completa. In una stanza ben illuminata da plafoniere fluorescenti sul soffitto, la resistenza può essere dell’ordine di 1 kΩ (piena esposizione alla luce) oppure circa 25 kΩ (ombra proiettata dagli oggetti presenti). Come la resistenza della fotoresistenza cambia con l’esposizione alla luce, così fa la tensione al punto Vo; se la R aumenta, Vo diminuisce, e se R diminuisce, Vo aumenta. Vo è ciò che il pin I/O del BASIC Stamp rileva quando funziona come ingresso. Se questo circuito è collegato a IN6, quando la tensione al punto Vo sale sopra 1.4 V, IN6 memorizzerà un 1. Se Vo scende sotto ad 1.4 V, IN6 memorizzerà uno 0. Vdd R Vo 2 kΩ Vss Figura 6-4 Schema Elettrico del circuito del Partitore di Tensione Pagina 192 · Robotica con il Boe-Bot Quando le resistenze sono collegate terminale con terminale come mostrato nella Figura 64 si dice che sono collegate in serie, e ci si può riferire ad esse come a resistenza serie. Quando due resistenze sono collegate in serie per impostare una tensione al punto Vo, il circuito si chiama Partitore di Tensione. In questo circuito, il valore di Vo può essere qualsiasi tra Vdd e Vss. Il valore esatto di Vo è determinato dal rapporto tra R e 2 kΩ. quando R è maggiore di 2 kΩ, Vo sarà piu vicina a Vss. Quando R è inferiore di 2 kΩ, Vo sarà più vicino a Vdd. Quando R è uguale a 2 kΩ, Vo sarà 2.5 V. Se misurate uno dei due valori (R o Vo), potete calcolare l’altro valore usando una di queste due equazioni. Vo = 5V × 2 000 Ω 2 000 Ω + R 2000 Ω R = 5V × − 2000 Ω Vo 1.4 V viene chiamata tensione di soglia dei pin I/O del BASIC Stamp, conosciuta anche come soglia logica dei pin I/O. Quando la tensione sentita da un pin I/O è superiore a quella soglia, il registro di ingresso dei pin I/O memorizza un 1. Se è inferiore memorizza uno 0. Rivelare Ombre Ombreggiare la Fotoresistenza fa aumentare la sua resistenza (R), che a sua volta rende Vo minore. Le Resistenze da 2 kΩ sono state scelte per rendere il valore di Vo leggermente superiore alla soglia di 1.4 V dei pin I/O del BASIC Stamp in una stanza ben illuminata. Quando con la vostra mano create un’ombra, Vo dovrebbe scendere sotto la soglia di 1.4 V. In una stanza ben illuminata, ambedue IN6 ed IN3 memorizzeranno il valore 1. Se ombreggiate la fotoresistenza del partitore collegato a P6, verrà memorizzato uno 0. Similmente, se ombreggiate la fotoresistenza del partitore collegato a P3, IN3 sarà forzato a memorizzare uno 0. Programma Esempio: TestFotoresistenzeDividers.bs2 Questo programma esempio è TestWhiskers.bs2 adattato ai partitori con fotoresistenza. Invece di tenere sotto controllo P5 e P7 come avate fatto con i baffi, terrete ora sotto controllo P3 e P6, che sono collegati ai circuiti dei partitori con fotoresistenza. Questo programma dovrebbe visualizzare il valore 1 in ambedue i circuiti in una stanza ben illuminata. Quando ombreggiate una o tutte e due le fotoresistenze, i loro valori corrispondenti dovrebbero diventare 0. √ √ Rialimentate la vostra scheda ed i servo. Digitate, Salvate e Lanciate TestFotoresistenzaDividers.bs2. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 193 √ √ √ Verificate che senza ombra, ambedue IN6 ed IN3 memorizzino il valore 1. Verificate che ombreggiando con una mano ciascuna fotoresistenza il registro di ingresso corrispondente cambi da 1 a 0. Se siete in difficoltà, sia nel far cambiare a 0 il registro di ingresso ombreggiando una fotoresistenza, o se i registri di ingresso memorizzano uno 0 senza tener conto dell’effettiva ombreggiatura delle fotoresistenze, vedere la sezione Risoluzione dei Problemi del Partitore con Fotoresistenza. Lavorateci fino a quando l’ombreggiatura creata con la mano non generi una variazione affidabile dello stato da 1 a 0. ' Robotica con il Boe-Bot - TestFotoresistenzaDividers.bs2 ' Visualizza ciò che viene percepito dal pin I/O collegato al partitore ' di tensione con fotoresistenza. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "STATI delle FOTORESISTENZA", CR, " Sinistra Destra ", CR, " --------------" DO DEBUG CRSRXY, 0, 3, "P6 = ", BIN1 IN6, " P3 = ", BIN1 IN3 PAUSE 100 LOOP Pagina 194 · Robotica con il Boe-Bot Risoluzione dei Problemi del Partitore con Fotoresistenza Cose Generali da Verificare: √ √ √ Controllate il cablaggio ed il programma per eventuali errori. Assicuratevi che ciascun componente sia fermamente inserito nel suo connettore. Controllate il codice colori delle resistenze. Le resistenze collegate tra Vss e le fotoresistenze devono essere da 2 kΩ (rosso-nero-rosso). Le resistenze collegate da P6 e P3 alle fotoresistenze devono essere da 220 Ω (rosso-rosso-marrone). Se il registro IN3 ed il registro IN6 non mostrano uno 0 pur ombreggiando le fotoresistenze: √ Può darsi che la stanza non sia illuminata a sufficienza, considerate l’aggiunta di altre lampade. In alternativa, potete sostituire le resistenze da 2 kΩ con resistenze da 4.7 kΩ (Giallo Viola Rosso). Questo darà ai partitori di tensione un rendimento migliore in condizioni di scarsa illuminazione. Per condizioni di illuminazione veramente basse, potete perfino usare resistenze da 10 kΩ (marrone-neroarancio). Se il registro IN3 ed il registro IN6 mostrano un 1 senza reagire all’ombreggiatura: √ Se la stanza è molto luminosa, e vi trovate a dover avvolgere completamente la superfice sensibile delle fotoresistenze per far commutare da 1 a 0, potreste dover sostituire le resistenze da 2 kΩ resistenze di valore più basso. Provate con resistenze da 1 kΩ (marrone-nero-rosso), o anche con resistenze da 470 Ω (giallo-viola-marrone) se siete all’aperto. Il vostro Turno – Sperimentare con Partitori di Tensione Differenti In relazione con le condizioni di illuminazione dell’area robotica in cui operate, maggiori o minori valori di resistenza serie al posto della resistenza da 2 kΩ possono migliorare le prestazioni dei vostri rivelatore di ombra. √ √ √ √ Ricordate di scollegare l’alimentazione della vostra scheda prima di ogni modifica circuitale. Provate a sostituire le resistenze da 2 kΩ (rosso-nero-rosso) con ciascun valore delle resistenze che avete raccolto: 470 Ω, 1 kΩ, 4.7 kΩ, e 10 kΩ. Provate ciascuna combinazione di partitore di tensione con il programma TestFotoresistenzaDividers.bs2 e determinate quali resistenze funzionano meglio con le condizioni di illuminazione del vostro ambiente. La migliore combinazione è quella non ipersensibile ma anche che non vi richiede di schermare completamente la fotoresistenza. Per i prossimi due esercizi usate la combinazione di resistenze che pensate funzioni meglio. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 195 ESERCIZIO #2: IL MOVIMENTO EVITANDO LE OMBRE DEGLI OGGETTI Siccome i partitori con fotoresistenza si comportano in maniera simile ai baffi, è bene esaminare che cosa comporta adattare RoamingWithWhiskers.bs2 in modo che funzioni con i partitori con le fotoresistenze. Adattamento di RoamingWithWhiskers.bs2 per i Partitori con le Fotoresistenze Tutto quello che in realtà dovete fare è aggiustare le istruzioni IF…THEN in modo che controllino IN6 ed IN3, invece di IN7 ed IN5. La Figura 6-5 vi dimostra come fare questi cambiamenti. Figura 6-5: Modifche di RoamingWithWhiskers.bs2 per l’uso con i Partitori con Fotoresistenza ' Da RoamingWithWhiskers.bs2 ' Modifiche per ' RoamingWithFotoresistenza ' Dividers.bs2 IF (IN5 = 0) AND (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN5 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN7 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF IF (IN6 = 0) AND (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN6 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF Programma Esempio– RoamingWithFotoresistenzaDividers.bs2 √ √ √ √ Aprite il programma RoamingWithWhiskers.bs2 della pagina 175, e salvatelo con il nome RoamingWithFotoresistenzaDividers.bs2. Fate le modifiche mostrate nella Figura 6-5. Ricollegate l’alimentazione alla vostra scheda ed ai servo. Lanciate il programma e collaudatelo. Pagina 196 · Robotica con il Boe-Bot Ombreggiare ambedue le Fotoresistenze allo stesso momento può essere difficoltoso. Quando il Boe-Bot sta procedendo in avanti, controlla le fotoresistenze circa 40 volte/secondo. Vi dovrete muovere velocemente per ombreggiare ambedue le fotoresistenze tra un impulso ed un altro. Agitare le vostre mani rapidamente davanti alle fotoresistenze per ombreggiarle può essere un modo. In alternativa, ombreggiate con le mani le fotoresistenze mentre il Boe-Bot stà eseguendo una manovra. Quando ha finito la manovra e controlla di nuovo lo stato delle fotoresistenze, dovrebbe riconoscere che ambedue le fotoresistenze sono in ombra. √ √ ' ' ' ' Verificate che il Boe-Bot eviti le ombre usando le vostre mani per proiettare un ombra sulle fotoresistenze. Provate con le seguenti combinazioni; nessuna ombra, ombra sul partitore a fotoresistenza di destra (circuito collegato a P3), ombra sul partitore a fotoresistenza di sinistra (circuito collegato a P7), ed infine ombra su tutte e due i partitori a fotoresistenza. Aggiornate i commenti in modo che il titolo e le descrizioni della reazione della pressione dei baffi rifletta invece il comportamento dei circuiti con la fotoresistenza. Quando avete finito dovrebbe assomigliare al programma sottostante. -----[ Titolo ]------------------------------------------------------------Robotica con il Boe-Bot - RoamingWithFotoresistenzaDividers.bs2 Il Boe-Bot rileva le ombre con il partitore di tensione a fotoresistenza ed effettua una curva per allontanarsene. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------pulseCount VAR Byte ' Contatore del ciclo FOR...NEXT. ' -----[ Inizializzazione ]---------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale ------- ' Segnale di Start/restart del programma. ]------------------------------------------------ DO IF (IN6 = 0) AND (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ' Rileva ambedue le Fotoresistenze ' Ombra, Retromarcia e curva ad U ' (a sinistra due volte). Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 197 ELSEIF (IN6 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF ' Rileva la Fotoresistenza sinistra ' Ombra, Retromarcia e curva a destra. ' Rileva la Fotoresistenza destra ' Ombra, Retromarcia e curva a sinistra. ' Nessuna Fotoresistenza rilevata ' Ombra, applica un impulso in avanti. LOOP ' -----[ Subroutine ]--------------------------------------------------------Forward_Pulse: PULSOUT 12,650 PULSOUT 13,850 PAUSE 20 RETURN ' Invia un singolo Impulso in Avanti. Turn_Left: FOR pulseCount = 0 TO 20 PULSOUT 12, 650 PULSOUT 13, 650 PAUSE 20 NEXT RETURN ' Curva a Sinistra, circa 90-gradi. Turn_Right: FOR pulseCount = 0 TO 20 PULSOUT 12, 850 PULSOUT 13, 850 PAUSE 20 NEXT RETURN Back_Up: FOR pulseCount = 0 TO 40 PULSOUT 12, 850 PULSOUT 13, 650 PAUSE 20 NEXT RETURN ' Curva a Destra, circa 90-gradi. ' Retromarcia. Il Vostro Turno– Migliorare le Prestazioni Potete migliorare le prestazioni del vostro Boe-Bot commentando (e quindi escludendo dal programma) alcune delle chiamate alle subroutine che erano state progettate per aiutare il Boe-Bot ad evitare gli ostacoli. La Figura 6-6 mostra un esempio dove le due chiamate delle subroutine Turn_Left sono state commentate nell’istruzione IF…THEN Pagina 198 · Robotica con il Boe-Bot quando la condizione è che ambedue le fotoresistenze rilevano un’ombra. Poi, quando una sola fotoresistenza rileva un ombra, è stata commentata la chiamata alla subroutine Back_Up in modo che il Boe-Bot effettui solamente la curva in risposta ad un ombra. Figura 6-6: Modifiche a RoamingWithFotoresistenzaDividers.bs2 ' Estratto Modificato da ' Estratto da ' RoamingWithFotoresistenza ' RoamingWithFotoresistenza ' Dividers.bs2 ' Dividers.bs2 IF (IN6 = 0) AND (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left GOSUB Turn_Left ELSEIF (IN6 = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN3 = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF √ √ IF (IN6 = 0) AND (IN3 = 0) THEN GOSUB Back_Up ' GOSUB Turn_Left ' GOSUB Turn_Left ELSEIF (IN6 = 0) THEN ' GOSUB Back_Up GOSUB Turn_Right ELSEIF (IN3 = 0) THEN ' GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF Modificate RoamingWithFotoresistenzaDividers.bs2 come mostrato nella parte destra della Figura 6-6. Lanciate il programma, e confrontate le prestazioni. ESERCIZIO #3: UNA MIGLIORE REATTIVITÀ PER UN BOE-BOT CONTROLLATO DALLE OMBRE Eliminando i cicli FOR…NEXT nelle subroutine di navigazione, potete rendere il Boe-Bot maggiormente reattivo. Questo non era possibile con i baffi, perché il Boe-Bot doveva retrocedere prima di curvare in quanto aveva già toccato fisicamente l’ostacolo. Quando usate le ombre per guidare il Boe-Bot, si può controllare tra un impulso e l’altro per vedere se l’ombra viene ancora rilevata non importa se si stà muovendo in avanti o se stà effettuando una manovra. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 199 Un Boe-Bot Controllato Semplicemente dalle Ombre Una interessante forma di controllo remoto è di avere il Boe-Bot fermo in normali condizioni di luce, ma che segua l’ombra che voi gli proiettate sulle fotoresistenze. È un modo amichevole di guidare il movimento del Boe-Bot. Programma Esempio– ShadowGuidedBoeBot.bs2 Quando lancerete il prossimo programma esempio, il Boe-Bot dovrebbe stare fermo quando nessuna ombra viene proiettata sulle sue fotoresistenze. Quando invece proiettate un’ombra su tutte e due le fotoresistenze, il Boe-Bot si dovrebbe muovere in avanti. Se proiettate un’ombra su una delle fotoresistenze, il Boe-Bot dovrebbe curvare nella direzione della fotoresistenza ombreggiata. √ Digitate, Salvate e Lanciate ShadowGuidedBoeBot.bs2. √ Usate la vostra mano per proiettare un’ombra sulle fotoresistenze. √ Studiate attentamente questo programma ed assicuratevi di capire come funziona. È molto breve, sebbene sia molto potente. ' Robotica con il Boe-Bot - ShadowGuidedBoeBot.bs2 ' Il Boe-Bot rileva le ombre proiettate con la mano e cerca di seguirle. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" FREQOUT 4, 2000, 3000 ' Segnala lo Start/restart del Programma. DO IF (IN6 = 0) AND (IN3 = 0) THEN PULSOUT 13, 850 PULSOUT 12, 650 ELSEIF (IN6 = 0) THEN PULSOUT 13, 750 PULSOUT 12, 650 ELSEIF (IN3 = 0) THEN PULSOUT 13, 850 PULSOUT 12, 750 ELSE PULSOUT 13, 750 PULSOUT 12, 750 ENDIF ' Ambedue rilevalo Ombra, Avanzamento. PAUSE 20 ' Pausa tra gli impulsi. LOOP ' Ombra rilevata a Sinistra, ' Rotazione a Sinistra. ' Ombra rilevata a destra, ' Rotazione a Destra. ' Nessuna Ombra, Stà Fermo Pagina 200 · Robotica con il Boe-Bot Come Funziona ShadowGuidedBoeBot.bs2 L’istruzione IF…THEN nel ciclo DO…LOOP attende per il verificarsi di una delle quattro condizioni possibili: Ambedue, Sinistra, Destra, Nessuna. In relazione a quale condizione viene rilevata, i comandi PULSOUT inviano impulsi per una delle seguenti manovre: Avanzamento, Rotazione Destra, Rotazione Sinistra, Oppure stà Fermo. A prescindere dalla condizione, verrà inviato uno dei quattro gruppi di impulsi ad ogni iterazione del ciclo DO…LOOP. Dopo l’istruzione IF…THEN, è importante ricordare di includere la PAUSE 20 per assicurare il tempo di pausa tra ciascun paio di impulsi per i servo. Il Vostro Turno– Condensare il Programma Questo programma non necessita della condizione ELSE e dei due comandi PULSOUT che seguono. Se voi non inviate impulsi, il Boe-Bot starà fermo, proprio come se gli inviaste impulsi di PULSOUT con l’argomento Duration di 750. √ Provate a cancellare (o commentare) questo blocco di codice. ELSE PULSOUT 13, 750 PULSOUT 12, 750 √ √ Lanciate il programma modificato. Potete notare qualche differenza nel comportamento del Boe-Bot? ESERCIZIO #4: OTTENERE MAGGIORI INFORMAZIONI DALLE VOSTRE FOTORESISTENZE La sola informazione che il BASIC Stamp è stato in grado di ottenere dal circuito del partitore con la fotoresistenza è se il livello luminoso era sopra o sotto una soglia. Questo esercizio presenta un circuito diverso che il BASIC Stamp può controllare, ottenendo anche sufficienti informazioni per determinare livelli di luminosità relativi. Il valore che il BASIC Stamp ottiene dal circuito spazierà da piccoli numeri che indicano luce brillante, a grandi numeri che indicano bassa luminosità. Questo evita la sostituzione manuale delle resistenze in base al livello di luminosità. Invece, potrete regolare il vostro programma per ovviare a differenti gamme di valori. Presentazione del Condensatore Un condensatore è un dispositivo che immagazzina cariche elettriche, ed è un blocco fondamentale per la costruzione di molti circuiti. La quantità di carica che un condensatore è in grado di immagazzinare si misura in farad (F). Un farad è un valore Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 201 molto grande che non è pratico usare con il Boe-Bot. I condensatori che userete in questo esercizio immagazzinano frazioni di milionesimi di farad. Un milionesimo di farad si chiama microfarad, e si abbrevia con il simbolo µF. Il condensatore ceh userete in questo esercizio immagazzina un centesimo di un milionesimo di farad. Che è 0.01 µF. Le Capacità sono misurate Comunemente in: • • • Microfarad: (milionesimi di Farad ), abbreviato µF Nanofarad: (miliardesimo di Farad), abbreviato nF Picofarad: (millimiliardesimo di Farad ), abbreviato pF -6 1 µF = 1×10 F -9 1 nF = 1×10 F -12 1 pF = 1×10 F Il 103 sul corpo del condensatore da 0.01 µF è la misura in picofarad o (pF). 103 sta per 10, con l’aggiunta di tre zeri, che è 10,000. ecco come si relaziona 103 a 0.01 µF. 3 10,000 is 10 × 10 . 3 -12 -9 (10 × 10 ) × (1 × 10 ) F = 10 × 10 F -6 Che è anche 0.01 × 10 F Che è 0.01 µF. La Figura 6-7 mostra il simbolo schematico del condensatore da 0.01 µF ed il disegno del componente fornito nel vostro kit del Boe-Bot. La scritta 103 sul corpo del condensatore indica il suo valore. Elenco Componenti: (2) Fotoresistenze - CDS (2) Condensatori – 0.01 µF (103) (2) Resistenze - 220 Ω (rosso-rosso-marrone) (2) Jumper wires 0.01 µF 103 Figura 6-7 Simbolo Schematico e disegno del componente Ci possono essere anche condensatori da 0.1 µF marcati 104 nel vostro kit. Non li usate in questi esercizi. √ Per questo esercizio assicuratevi di aver selezionato i condensatori da 0.01 µF (marcati 103). I condensatori da 0.1 µF possono essere usati in zone molto luminose od all’aperto, ma interfreiscono con le prestazioni del Boe-Bot per le attività in condizioni di luce normale e di bassa illuminazione. Pagina 202 · Robotica con il Boe-Bot Riassemblare gli Occhi Fotosensibili Il circuito che il BASIC Stamp può usare per determinare i livelli di luce si chiama circuito a resistenza e condensatore (RC). La Figura 6-8 mostra lo schema elettrico dei circuiti di rilevamento della luce del Boe-Bot e la Figura 6-9 mostra schemi di cablaggio esempio per la Board of Education e per la HomeWork Board. √ √ Scollegate l’alimentazione dalla vostra scheda e dai vostri servo. Assemblate i circuiti RC mostrati in Figura 6-8 usando la Figura 6-9 come riferimento. P6 220 Ω 0.01 µF Figura 6-8 Schema Elettrico – Due Circuiti RC a Fotoresistenza Vss P3 220 Ω 0.01 µF Vss Per la misura di resistenza che varia con la luce. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 203 To Servos To Servos 15 14 Vdd 13 12 (916) 624-8333 www.parallax.com www.stampsinclass.com Red Black X4 Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Board of Education © 2000-2003 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Rev C Vdd Rev B + Figura 6-9 Schema di Cablaggio per i circuiti RC a Fotoresistenza Board of Education (Sinistra) e HomeWork Board (Destra). HomeWork Board sul Tempo di Decadimento del Circuito RC Decay e della Fotoresistenza Pensate ad un condensatore nel circuito mostrato nella Figura 6-10 come ad una minuscola batteria ricaricabile. Quando P6 invia un segnale alto, essenzialmente stà caricando questo condenasatore-batteria aplicandogli 5 V. dopo alcuni ms, il condensatore si è caricato circa a 5 V. se il programma del BASIC Stamp cambia il pin I/O in maniera che si metta in ascolto, il condensatore perde la sua carica attraverso la fotoresistenza. Man mano che il condensatore perde la sua carica, la sua tensione decade, diminuendo man mano che perde carica. La quantità di tempo impiegata perché la tensione sentita da IN6 cada sotto la soglia di 1.4 V dipende da quanto fortemente la fotoresistenza “resiste” al flusso di corrente elettrica fornita dal condensatore. Se la fotoresistenza ha un alto valore di resistenza a causa di condizioni di poca luce, il condnsatore impiega più tempo per scaricarsi. Se la fotoresistenza ha un basso valore di resistenza perché la luce incidente sulla sua superfice è molto intensa, non opporrà molta “resistenza”, ed il condensatore perderà la sua carica molto rapidamente. Pagina 204 · Robotica con il Boe-Bot P6 220 Ω 0.01 µF Figura 6-10 Circuito RC Collegato al Pin I /O Vss Collegamento in Parallelo La fotoresistenza ed il condensatore mostraati nella Figura 6-10 sono collegati in parallelo. Perché due componenti si dicano connessi in parallelo, ciascuno dei suoi terminali devono essere connessi a terminali comuni (anche chiamati nodi). La fotoresistenza ed il condensatore hanno uno dei terminali collegato a Vss. Essi hanno anche l’altro terminale collegato al medesimo terminale della resistenza da 220 Ω. Misurare il Tempo di Decadimento RC con il BASIC Stamp Il BASIC Stamp può essere programmato per caricare il condensatore e quindi per misurare il tempo che impiegato perché la sua tensione scenda ad 1.4 V. La misura di questo tempo di decadimento può essere usata per indicare quanto è realmente intensa la luce rilevata dalla fotoresistenza. Questa misura richiede una combinazione di comandi HIGH e PAUSE insieme con un nuovo comando chiamato RCTIME. Il comando RCTIME è stato progettato per misurare il tempo di decadimento di un circuito RC in un circuito simile a quello mostrato in Figura 6-10. segue la sintassi per il comando RCTIME: RCTIME Pin, State, Duration L’argomento Pin è il numero del pin I/O su cui volete effettuare la misura. Per esempio, se volete fare la misura su P6, l’argomento Pin sarà 6. l’argomento State può essere sia 1 che 0. dovrebbe essere 1 se la tensione ai capi del condensatore è superiore a 1.4 V e diminuisce. Dovrebbe invece essere 0 se la tensione ai capi del condensatore è inferiore ad 1.4 V ed aumenta. Per i circuiti della Figura 6-10, la tensione ai capi del condensatore inizierà vicino ai 5 V e diminuirà verso 1.4 V, detto questo l’argomento State dovrà essere 1. l’argomento Duration deve essere una variabile dove memorizzzare la misura del tempo, ed è espressa in unità di 2 µs. In questo prossimo Programma Esempio, misurerete il tempo di decadimento RC del circuito a fotoresistenza collegato a P6, che è la fotoresistenza sinistra del Boe-Bot. Userete quindi, una variabile chiamata timeLeft. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 205 Per misurare il tempo di decadimento RC, la prima cosa che dovrete fare è assicurarvi di aver dichiarato la variabile per la memorizzazione della misura del tempo: timeLeft VAR Word queste tre righe di codice caricano il condensatore, misurano il tempo di decadimento RC e quindi lo memorizzano nella variabile timeLeft. HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft Per arrivare alla misura, il codice implementa questi tre passi: 1. inizia caricando il condensatore collegando il circuito a 5 V (usando il comando HIGH). 2. Usa PAUSE per dare al comando HIGH tempo sufficiente per la carica del condensatore del circuito RC. 3. Esegue il comando RCTIME, che imposta il pin /IO come ingresso, misura il tempo di decadimento (da circa 5 V ad 1.4 V), e lo memorizza nella variabile timeLeft. Programma Esempio: TestP6Fotoresistenza.bs2 √ √ √ √ Rialimentate la vosta scheda. Digitate, Salvate e Lanciate TestP6Fotoresistenza.bs2. Proiettate un’ombra sulla fotoresistenza collegata a P6 e verificate che la misura del tempo aumenti man mano che l’ambiente della fotoresistenza diviene più buio. Puntare la superfice sensibile della fotoresistenza verso una luce sovrastante, oppure illuminatela con una torcia elettrica. Il tempo misurato dovrebbe divenire molto piccolo. Questo tempo dovrebbe crescere gradualmente man mano che orientate la fotoresistenza lontano dalla fonte luminosa. ' Robotica con il Boe-Bot - TestP6Fotoresistenza.bs2 ' Collauda il circuito della Fotoresistenza del Boe-Bot collegato a P6 ' e visualizza il tempo di decadimento. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. Pagina 206 · Robotica con il Boe-Bot timeLeft VAR Word DO HIGH 6 PAUSE 2 RCTIME 6,1,timeLeft DEBUG HOME, "timeLeft = ", DEC5 timeLeft PAUSE 100 LOOP Il vostro Turno √ √ √ Salvate TestP6Fotoresistenza.bs2 con il nome TestP3Fotoresistenza.bs2. Modificate il programma in modo che effettui la misura del tempo di decadimento RC sulla Fotoresistenza di destra, quella collegata a P3. Ripetete la prova di ombreggiamento ed illuminazione con il circuito RC P3 e verificate che funzioni correttamente. ESERCIZIO #5: UN BOE-BOT CHE SEGUE LA LUCE DI UNA TORCIA In questo esercizio, collauderete e calibrerete i fotosensori del vostro Boe-Bot in modo che riconoscano la differenza tra la luce ambientale ed il raggio di luce diretta di una torcia. Quindi programmerete il Boe-Bot per seguire il raggio della torcia puntato sulla superficie fotosensibile sulla fronte del Boe-Bot. Attrezzatura Aggiuntiva (1) Torcia Elettrica a Pile Regolazione dei Sensori per la ricerca del raggio luminoso Questo esercizio funziona meglio se le superfici fotosensibili delle fotoresistenze vengono posizionate per puntare verso il basso su punti separati circa 2 in (5.1 cm) in sul lato anteriore del Boe-Bot. √ Orientate la superficie fotosensibile delle vostre fotoresistenze verso il pavimento davanti al Boe-Bot come mostrato in Figura 6-11. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 207 Figura 6-11: Orientamento delle Fotoresistenze To Servos 15 14 Vdd 13 12 Red Black X4 Vdd X5 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Board of Education Rev C © 2000-2003 Collaudo della Risposta del Sensore al Raggio di Luce Prima che possiate programmare il Boe-Bot per inseguire il raggio luminoso di una torcia, dovrete conoscere la differenza tra le letture di luminosità del percorso del BoeBot con e senza la luce della torcia. Programma Esempio: TestBothFotoresistenze.bs2 √ √ √ √ Digitate, Salvate e Lanciate TestBothFotoresistenze.bs2. Posizionate il Boe-Bot sulla superficie dove dovrà seguire il raggio luminoso. Assicuratevi che sia ancora collegato con il cavo seriale e che le misure siano visualizzate sul Terminale di Debug. Scrivete i valori di tutte e due le misure di tempo nella prima riga della Table 61. Accendete la vostra torcia, e proiettate il fascio davanti al Boe-Bot. Pagina 208 · Robotica con il Boe-Bot √ Le vostre misure dovrebbero essere significativamente inferiori rispetto alla prima coppia di misure. Scrivete questi nuovi valori di tutte e due le misure di tempo nella seconda riga della Table 6-1. Table 6-1: Misurazioni del tempo RC con e senza il Fascio Luminoso Valori di Duration timeLeft timeRight Descrizione Misure del Tempo senza il fascio luminoso (luce ambiente). Misure del Tempo con il fascio luminoso proiettato davanti al Boe-Bot. ' Robotica con il Boe-Bot - TestBothFotoresistenze.bs2 ' Collaudo dei Circuiti della Fotoresistenza del Boe-Bot RC. ' {$STAMP BS2} ' {$PBASIC 2.5} timeLeft timeRight VAR VAR ' Direttiva Stamp. ' Direttiva PBASIC. Word Word DEBUG "VALORI DELLA FOTORESISTENZA", CR, "timeLeft timeRight", CR, "-------- ---------" DO ' Dichiarazione delle Variabili. ' Inizializzazione. ' Routine Principale . HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft ' Misure Del Tempo RC Sinistra. HIGH 3 PAUSE 3 RCTIME 3,1,timeRight ' Misure Del Tempo RC Destra. DEBUG CRSRXY, 0, 3, DEC5 timeLeft, " ", DEC5 timeRight ' Visualizzazione delle Misure. PAUSE 100 LOOP Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 209 Il vostro Turno √ √ Provate a posizionare il Boe-Bot in differenti direzioni, e ripetete le vostre misurazioni. Per migliori risultati, potete mediare le vostre misure con “torcia accesa” e “torcia spenta” e sostituire i valori della Table 6-1 con i valori mediati. Seguire il Fascio di Luce A questo punto avete già usato la dichiarazione delle variabili. Per esempio, counter VAR Nib assegna il nome counter ad una particolare locazione di memoria nella RAM del BASIC Stamp. Dopo aver dichiarate le variabili, ogni volta che usate counter in un programma PBASIC, usa il valore memorizzzato in quella particolare locazione della RAM del BASIC Stamp. Potete anche dichiarare le costanti. In altre parole, se avete un numero che pensate di usare nel vostro programma, assegnategli un nome adatto. Invece della direttiva VAR, usate la direttiva CON. Le seguenti sono alcune direttive CON tratte dal prossimo programma esempio: LeftAmbient RightAmbient LeftBright RightBright CON CON CON CON 108 114 20 22 Ora, ogni volta che nel programma viene usato il nome LeftAmbient, il BASIC Stamp verrà usato il numero 108. Ognivolta che è usato RightAmbient, il BASIC Stamp userà il valore 114. Similmente, ovunque appare LeftBright, in realtà è il valore 20, e RightBright è 22. Prima di lanciare il programma sostituite a quelli mostrati sopra, i vostri valori dalla Table 6-1. Le costanti possono anche essere usate peer calcolare altre costanti. Il prossimo è un esempio di due costanti, chiamate LeftThreshold e RightThreshold che vengono calcolate usando le quattro costanti appena trattate. Le costanti LeftThreshold e RightThreshold sono usate nel programma per calcolare se è stato rilevato o meno il raggio di luce di una torcia. ' LeftThreshold Mediato CON Fattore di Scala LeftBright + LeftAmbient / 2 * 5 / 8 Pagina 210 · Robotica con il Boe-Bot RightThreshold CON RightBright + RightAmbient / 2 * 5 / 8 Le operazioni matematiche eseguite su queste costanti sono una media, e poi una scalatura. Il calcolo della media per LeftThreshold è LeftBright + LeftAmbient / 2. Questo risultato è moltiplicato per 5 e diviso per 8. Questo significa che LeftThreshold è una costante il cui valore è 5/8 della media di LeftBright e di LeftAmbient. Le espressioni Matematiche in PBASIC sono eseguite da sinistra a destra. Primo, LeftBright è sommato a LeftAmbient. Questo valore poi è diviso per 2. Il risultato è quindi moltiplicato per 5 e diviso per 8. Fate una prova: LeftBright + LeftAmbient = 20 + 108 = 128. 128 / 2 = 64. 64 * 5 = 320 320 / 8 = 40 In una riga di codice PBasic per forzare il calcolo di numeri più a destra che devono essere completati prima, potete usare le parentesi. Per esempio, potreste riscrivere questa linea di codice PBASIC: pulseRight = 2 - distanceRight * 35 + 750 In questo modo: pulseRight = 35 * (2 – distanceRight) + 750 In questa espressione, 35 è moltiplicato per il risultato di (2 – distanceRight), il prodotto quindi è sommato a 750. Programma Esempio: FlashlightControlledBoeBot.bs2 √ √ √ √ √ √ √ Digitate FlashlightControlledBoeBot.bs2 nell’Editor del BASIC Stamp. Sostituite la vostra misura timeLeft senza fascio luminoso (dalla Table 6-1) al posto di 108 nella direttiva CON di LeftAmbient. Sostituite la vostra misura timeRight senza fascio luminoso al posto del valore 114 nella direttiva CON di RightAmbient. Sostituite la vostra misura timeLeft con il fascio luminoso al posto del valore 20 nella direttiva CON di LeftBright. Sostituite la vostra misura timeRight con il fascio luminoso al posto del valore 22 nella direttiva CON di RightBright. Ridate alimentazione alla vostra scheda ed ai servo. Salvate e quindi lanciate FlashlightControlledBoeBot.bs2. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 211 √ √ Sperimentate e calcolate esattamente dove dirigere il raggio luminoso della torcia per far eseguire le manovrre di avanzamento, curva a sinistra, curva a destra. Usate il fascio luminoso per guidare il vostro Boe-Bot intorno a vari ostacoli, percorsi e manovre. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - FlashlightControlledBoeBot.bs2 ' Il Boe-Bot segue il fascio luminoso proiettatogli davanti. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Costanti ]----------------------------------------------------------' SOSTITUITE QUESTI VALORI CON I VALORI DA VOI DETERMINATI ED INSERITI NELLA ' TABELLA 6.1. LeftAmbient RightAmbient LeftBright RightBright CON CON CON CON ' 108 114 20 22 Media LeftThreshold CON RightThreshold CON Fattore di Scala LeftBright + LeftAmbient / 2 * 5 / 8 RightBright + RightAmbient / 2 * 5 / 8 ' -----[ Variabili ]---------------------------------------------------------' Dichiarazione delle Variabili per la memorizzazione dei valori RC misurati ' per le Fotoresistenze sinistra e destra. timeLeft timeRight VAR VAR Word Word ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale DO GOSUB Test_Fotoresistenze GOSUB Navigate ]------------------------------------------------ Pagina 212 · Robotica con il Boe-Bot LOOP ' -----[ Subroutine - Test_Fotoresistenze ]----------------------------------Test_Fotoresistenze: HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft ' Misura del Tempo RC Sinistro. HIGH 3 PAUSE 3 RCTIME 3,1,timeRight ' Misura del Tempo RC Destro. RETURN ' -----[ Subroutine - Navigate ]---------------------------------------------Navigate: IF (timeLeft < LeftThreshold) AND (timeRight < RightThreshold) THEN PULSOUT 13, 850 ' tutte e due rilevano fascio luminoso, PULSOUT 12, 650 ' Marcia Avanti Massima Velocità. ELSEIF (timeLeft < LeftThreshold) THEN ' Sinistra rileva fascio luminoso, PULSOUT 13, 700 ' Rotazione Sinistra. PULSOUT 12, 700 ELSEIF (timeRight < RightThreshold) THEN ' Destra rileva fascio luminoso, PULSOUT 13, 800 ' Rotazione Destra. PULSOUT 12, 800 ELSE PULSOUT 13, 750 ' Nessun fascio luminoso, resta fermo. PULSOUT 12, 750 ENDIF PAUSE 20 ' Pausa tra gli impulsi. RETURN Come Funziona FlashlightControlledBoeBot.bs2 Queste sono le quattro dichiarazioni di costante che avete usato con i vostri valori della Table 6-1. LeftAmbient RightAmbient LeftBright RightBright CON CON CON CON 108 114 20 22 Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 213 Ora che le quattro costanti sono state dichiarate, le prossime due righe effettuano la media e scalano i valori per ottenere i valori di soglia da usare nel programma. Questi valori di soglia possono essere confrontati con le misure correnti di timeLeft e timeRight per determinare se le fotoresistenze stanno rilevando la luce ambientale od un fascio luminoso. ' Media LeftThreshold CON RightThreshold CON Scala LeftBright + LeftAmbient / 2 * 5 / 8 RightBright + RightAmbient / 2 * 5 / 8 Queste variabili sono usate per memorizzare le misure RCTIME. timeLeft timeRight VAR VAR Word Word questo è l’indicatore di reset che è stato usato nella maggior parte dei programmi di questo testo. FREQOUT 4, 2000, 3000 La sezione Routine Principale contiene solamente due chiamate a subroutine. Tutto il lavoro effettivo nel programma viene svolto in queste due subroutine. La subroutine Test_Fotoresistenze effettua la misura RCTIME per tutti e due i circuiti RC delle fotoresistenze, e la subroutine Navigate prende le decisioni ed invia gli impulsi ai servo. DO GOSUB Test_Fotoresistenze GOSUB Navigate LOOP Questa è la subroutine che effettua la misura RCTIME per tutti e due i circuiti RC delle fotoresistenze. La misura del circuito sinistro è memoorizzata nella variabile timeLeft, e la misura del circuito destro è memorizzata nella variabile timeRight. Test_Fotoresistenze: HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft Pagina 214 · Robotica con il Boe-Bot HIGH 3 PAUSE 3 RCTIME 3,1,timeRight RETURN La subroutine Navigate usa un’istruzione IF…THEN per confrontare la variabile timeLeft con la costante LeftThresholde e la variabile timeRight con la costante RightThreshold. Ricordate, quando la misura RCTIME è piccola, significa che è stata rilevata una luce intensa, e quando è grande, significa che la luce non è così intensa. In questo modo, quando una delle variabili che memorizzano una misura RCTIME è minore della costante di soglia, significa che il fascio luminoso è stato rilevato; all’opposto, il fascio luminoso non è stato rilevato. In base a quale condizione è rilevata da questa subroutine (ambedue, sinistra, destra o nessuna), vengono applicati gli impulsi adeguati per la navigazione, seguiti da una PAUSE prima che il comando RETURN esca dalla subroutine. Navigate: IF(timeLeft<LeftThreshold)AND(timeRight<RightThreshold) THEN PULSOUT 13, 850 PULSOUT 12, 650 ELSEIF (timeLeft < LeftThreshold) THEN PULSOUT 13, 700 PULSOUT 12, 700 ELSEIF (timeRight < RightThreshold) THEN PULSOUT 13, 800 PULSOUT 12, 800 ELSE PULSOUT 13, 750 PULSOUT 12, 750 ENDIF PAUSE 20 RETURN Il Vostro Turno– Calibrazione delle Prestazioni e Variazione del Comportamento Potete calibrare le prestazioni del programma regolando il fattore di scala in questa dichiarazione di costante: Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 215 ' Media LeftThreshold CON RightThreshold CON Fattore di Scala LeftBright + LeftAmbient / 2 * 5 / 8 RightBright + RightAmbient / 2 * 5 / 8 Se cambiate il fattore di scala da 5/8 a 1/2, questo renderà il Boe-Bot meno sensibile al fascio luminoso, il chè può (oppure no) portare ad un migliore controllo del fascio luminoso. √ Provate fattori di scala differenti, come 1/4, 1/2, 1/3, 2/3, e 3/4 ed annotate qualsiasi differenza nel modo in cui il Boe-Bot reagiva al fascio luminoso. Modificando l’istruzione IF…THEN nel Programma Esempio, potete cambiare il comportamento del Boe-Bot in modo che, per esempio, tenti di togliersi il fascio luminoso dagli occhi. √ Modificare l’istruzione IF…THEN in modo che il Boe-Bot retroceda quando rileva il fascio luminoso con ambedue i circuiti a fotoresistenza e curvi in direzione opposta se rileva il fascio luminoso con uno soltanto dei suoi circuiti a fotoresistenza. ESERCIZIO #6: MUOVERSI VERSO LA LUCE Il programma esempioin questo esercizio può essere usato per guidare il Boe-Bot da una camera sostanzialmente buia verso una porta che lasci filtrare una luminosità più intensa. Permetterà inoltre un controllo migliore del movimento del Boe-Bot proiettando un’ombra sulle fotoresistenze con la vostra mano. Ricalibrazione delle Fotoresistenze Questo esercizio funziona meglio se la superficie fotosensibile delle fotoresistenze punta verso l’alto e verso l’esterno. √ Orientate le superfici sensibili delle vostre fotoresistenze verso l’alto e verso l’esterno come mostrato nella Figura 6-12. Pagina 216 · Robotica con il Boe-Bot Figura 6-12: Orientamento delle Fotoresistenze Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Programmazione del Comportamento per Procedere verso la Luce La strategia chiave del movimento verso le sorgenti di luce più intensa è di andare avanti se le differenze della misura di intensità luminosa tra le fotoresistenze sono piccole, e girare verso la fotoresistenza con la misura di intensità minore quando c’è una grande differenza tra le due misure. In effetti, questo significa che il Boe-Bot avanzerà verso la luce più intensa. Inizialmente questo sembra un un compito per un programma abbastanza semplice; il ragionamento IF…THEN come nell’esempio sotto riportato dovrebbe funzionare. Il problema è, che non funziona perché il Boe-Bot si blocca nel curvare a sinistra ed a destra di nuovo perché le variazioni di timeLeft e di timeRight sono troppo grandi. Ogni volta che il Boe-Bot curva un pò, le variabili timeRight e timeLeft cambiano in maniera così grande che il Boe-Bot tenta di correggere e curva nell’altro verso. Non tenta mai di inviare qualche impulso in avanti. IF (timeLeft > timeRight) THEN PULSOUT 13, 850 PULSOUT 12, 850 ELSEIF (timeRight > timeLeft) THEN PULSOUT 13, 650 ' Curva a Destra. ' Curva a Sinistra. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 217 PULSOUT 12, 650 ELSE PULSOUT 13, 850 PULSOUT 12, 650 ENDIF ' Avanzamento. Questo è un blocco di codice che funziona un po’ meglio. Questo blocco di codice risolve il problema della curva a destra e sinistra in certe condizioni. La variabile timeLeft deve essere maggiore della variabile timeRight con un margine di 15 prima che il BoeBot applichi un impulso a sinistra. Similmente, timeRight deve essere maggiore di timeLeft di un fattore 15 prima che il Boe-Bot reagisca verso left. Questo dà al Boe-Bot l’opportunità di applicare abbastanza impulsi in avanti prima di correggere con una curva, ma solo se si supera un certo livello di luce. IF (timeLeft > timeRight + 15) THEN PULSOUT 13, 850 PULSOUT 12, 850 ELSEIF (timeRight > timeLeft + 15) THEN PULSOUT 13, 650 PULSOUT 12, 650 ELSE PULSOUT 13, 850 PULSOUT 12, 650 ENDIF ' Curva a Destra. ' Curva a Sinistra. ' Avanzamento. Il problema con il blocco di codice su esposto è che funziona solamente in condizioni di oscurità medie. Se portate il Boe-Bot in un area molto più oscura, ricomincerà a curvare a destra ed a sinistra, e non accennerà ad avanzare. Se al contrario, lo mettete in una zona molto più luminosa, il Boe-Bot andrà solamente in avanti, e non accennerà a nessuna correzione a sinistra od a destra. Perché accade tutto questo? La risposta è: Quando il Boe-Bot è nella zona oscura di una stanza, la misura per ciscuna fotoresistenza sarà grande. Perché il Boe-Bot decida di curvare verso una sorgente di luce, la differenza tra queste due misure di luminosità dovrà essere grande. Quando il Boe-Bot è in una zonoa molto più luminosa, le misure di ogni fotoresistenza saranno minori. Perché il Boe-Bot decida di effettuare una curva, la differenze tra le due misurazioni delle fotoresistenze dovranno anch’esse essere molto più piccole di quando era nella zona più scura. Il modo di rendere questa differenza proporzionale alle condizioni di illuminazione, è di creare una variabile che sia una frazione di della media Pagina 218 · Robotica con il Boe-Bot di timeRight e timeLeft. In questo modo, sarà sempre il valore corretto, senza tener conto se la stanza è oscura o luminosa. average = timeRight + timeLeft / 2 difference = average / 6 Ora, la variabile difference può essere usata in questa istruzione IF…THEN, e sarà un valore grande se la luminosità è bassa, ed un valore piccolo quando la luminosità è alta. IF (timeLeft > timeRight + difference) THEN PULSOUT 13, 850 PULSOUT 12, 850 ' Curva a Destra. ELSEIF (timeRight > timeLeft + difference) THEN ' Curva a Sinistra. PULSOUT PULSOUT ELSE PULSOUT PULSOUT ENDIF 13, 650 12, 650 ' Avanzamento. 13, 850 12, 650 Programma Esempio– RoamingTowardTheLight.bs2 A differenza di RoamingWithFotoresistenzaDividers.bs2 di pagina 196, questo programma sarà molto reattivo alla vostra mano che proietta un’ombra sulla fotoresistenza, senza influenza delle condizioni di illuminazione della stanza. In questo programma non è necessaria la sostituzione delle resistenze per adeguarsi alle condizioni di luminosità. Invece, tiene conto delle condizioni di luminosità e la sensibilità viene regolata via software usando le variabili average e difference. Perché questo programma funzioni bene, le vostre fotoresistenze dovrebbero reagire in modo simile a livelli di luce similari. Se i circuiti RC sono grandemente disallineati, le vostre misurazioni della Table 6-1 saranno molto diverse nelle stesse condizioni di luce. Potete correggere queste misurazioni alterate usando le tecniche discusse nell’ Appendice F: Bilanciamento delle Fotoresistenze. Questo programma misura la media generale di timeLeft e timeRight ed usa questo valore per impostare la difference tra le misure di timeLeft e di timeRight necessarie perché venga inviato un impulso di curva. √ Digitate, Salvate e Lanciate RoamingTowardTheLight.bs2 Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 219 √ √ Posizionate il Boe-Bot in varie zone, lasciatelo girovagare, e verificate che potete cambiare il suo percorso proiettando l’ombra su uno dei circuiti RC a fotoresistenza, senza influenze da parte delle condizioni di illuminazione della stanza. Provate anche a mettere il vostro Boe-Bot in una stanza che sia fiocamente illuminata, ma che abbia una porta che faccia entrare luce da una stanza maggiormente illuminata. Vedere se il Boe-Bot riesce con successo a trovare la sua strada verso la porta. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - RoamingTowardTheLight.bs2 ' Il Boe-Bot vagabonda, evitando le aree scure preferendo zone più luminose. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------' Dichiarazione delle Variabili per la memorizzazione delle misure di tempo RC ' delle Fotoresistenze Sinistra & Destra. timeLeft timeRight average difference VAR VAR VAR VAR Word Word Word Word ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale ]------------------------------------------------ DO GOSUB Test_Fotoresistenze GOSUB Average_And_Difference GOSUB Navigate LOOP ' -----[ Subroutine - Test_Fotoresistenze ]----------------------------------Test_Fotoresistenze: HIGH 6 PAUSE 3 ' Misura del Tempo RC di Sinistra. Pagina 220 · Robotica con il Boe-Bot RCTIME 6,1,timeLeft HIGH 3 PAUSE 3 RCTIME 3,1,timeRight ' Misura del Tempo RC di Destra. RETURN ' -----[ Subroutine - Average_And_Difference ]-------------------------------Average_And_Difference: average = timeRight + timeLeft / 2 difference = average / 6 RETURN ' -----[ Subroutine - Navigate ]---------------------------------------------Navigate: ' Shadow significantly stronger on left detector, turn right. IF (timeLeft > timeRight + difference) THEN PULSOUT 13, 850 PULSOUT 12, 850 ' Shadow significantly stronger on right detector, turn left. ELSEIF (timeRight > timeLeft + difference) THEN PULSOUT 13, 650 PULSOUT 12, 650 ' Shadows in same neighborhood of intensity on both detectors. ELSE PULSOUT 13, 850 PULSOUT 12, 650 ENDIF PAUSE 10 RETURN Perchè PAUSE 10 invece di PAUSE 20? Perché la subroutine Test_Fotoresistenze ha due comandi PAUSE che aggiungono 6 ms di tempo extra per l’esecuzione dei comandi RCTIME. Ambedue questi fattori aumentano il tempo tra gli impulsi servo, per questo la PAUSE nella subroutine Navigate deve essere ridotta. Dopo alcuni esperimenti pratici, è sembrato che PAUSE 10 desse ai servo le prestazioni più attendibili per un’ampia gamma di livelli di luminosità ambientale. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 221 Il Vostro Turno– Regolare la Sensibilità alle Differenze della Luminosità Fino ad ora, la vairabile difference è la media average divisa per 6. Potete dividere average per un valore inferiore se volete che il Boe-Bot sia meno sensibile alle differenze di luminosità o dividerla per un valore maggiore se volete che il Boe-Bot sia più sensibile alle differenze dei livelli di luce. √ √ √ Invece del valore 6, provate a dividere la variabile average per i valori 3, 4, 5, 7, e 9. Lanciate il programma e provate l’abilità del Boe-Bot di uscire da una stanza oscurata coon ciascun valore per il denominatore. Decidete quale valore è quello ottimale. Average_And_Difference: average = timeRight + timeLeft / 2 difference = average / 6 RETURN Potete anche dichiarare il denominatore con una costante come in questo caso: Denominator CON 6 Quindi, nella subroutine Average_And_Difference, potete sostituire 6 (od il valore ottimale che avete determinato) con la costante Denominator, in questo modo: Average_And_Difference: average = timeRight + timeLeft / 2 difference = average / Denominator RETURN √ Digitate i cambiamenti appena discussi, e verificate che il programma funzioni ancora correttamente. In questo programma potete anche fare a meno di una variabile. Notate che la sola volta che la variabile average viene usata è per memorizzare temporaneamente il valore medio, quindi lo divide per il Denominator e lo memorizza nella variabile difference. La variabile difference vi servirà in seguito, non così per la variabile average. Un Pagina 222 · Robotica con il Boe-Bot modo per risolvere questo problema sarebbe di usare semplicemente la variabile difference al posto della variabile average. Funzionerà a meraviglia, e non avreste più bisogno della variabile average. Qui viene mostrato come funziona la subroutine: Average_And_Difference: difference = timeRight + timeLeft / 2 difference = difference / Denominator RETURN Ma c’è un modo migliore. √ Lasciate la routine Average_And_Difference in questo modo: Average_And_Difference: average = timeRight + timeLeft / 2 difference = average / Denominator RETURN √ Poi, digitate queste variazioni nella dichiarazioni di variabili: Figura 6-13: Modificate RoamingTowardTheLight.bs2 per salvare una Word di RAM ' Cambiato per Salvare 1 Word di RAM ' Codice non cambiato average difference VAR VAR Word Word average difference VAR VAR Word average La variabile average in realtà non serve, ma il programma avrà più senso per qualcuno che tenti di capirlo se usiamo la parola average nella prima riga e la parola difference nella seconda riga. Questo è il modo di creare un alias di nome difference per la variabile average. difference VAR average Ora, ambedue average e difference si riferiscono alla stessa word di RAM. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 223 √ Collaudate il vosto programma modificato ed assicuratevi che funzioni ancora correttamente. Pagina 224 · Robotica con il Boe-Bot SOMMARIO Questo capitolo ha focalizzato l’attenzione sulla misura delle differenze dell’intensità di luce e sulla programmazione del Boe-Bot per agire in base a queste differenze. Per misurare le differenze nell’intensità della luce visibile sono state usate un paio di fotoresistenze al sofuro di cadmio (CdS). Le fotoresistenze CdS sono dapprima state collegate alle resistenze per formare un partitore di tensione, ed il BASIC Stamp ha osservato la tensione alla giunzione tra la fotoresistenza e la resistenza. Quando questa tensione scende al disotto oppure sale sopra la soglia di 1.4 V il registro di ingresso del pin I/O collegato al circuito memorizza rispettivamente uno 0 od un 1. Il Boe-Bot è stato programmato per prendere decisioni usando questi valori binari in modo simile ai baffi. La tecnica del partitore a fotoresistenza funziona bene fino a che vengono scelte le giuste resistenze e la luminosità non cambia. Sebbene, un modo più versatile di rilevare i livelli di luminosità con il BASIC Stamp sia l’uso delle fotoresistenze CdS in un circuito RC, caricare un condensatore, e quindi misurare il tempo di decadimento. RC stà per Resistenza Condensatore, ed in questo capitolo è stato studiato il ccondensatore insieme ad un circuito che rende possibile per il BASIC Stamp la misura del tempo di decadimento RC. Questo viene fatto facilmente con il BASIC Stamp usando il comando RCTIME, che è stato pensato appositamente per la misura del tempo di decadimento e di incremento dei circuiti RC. Sono state anche presentate le costanti come modo di sostituire i numeri usati nei programmi PBASIC con nomi significativi. Sono anche stati studiati il calcolo della media e l’uso del fattore di scala. Il calcolo della media è stato usato per impostare un valore di soglia che indicasse se è stato rilevato un fascio luminoso. È stato anche usato per determinare il valore medio dei livelli di luminosità in un’area basandosi sulle misurazioni dei tempi RC dei due circuiti a fotoresistenza. Questi sono stati usati per creare una soglia per regolare automaticamente le condizioni generali di illuminazione, eliminando la necessità di cambiare le resistenze quando cambiano i livelli di luminosità. Domande 1. Che cosa significa la sigla LDR? 2. In quale maniera cambia la resistenza di una Fotoresistenza in risposta alla luce intensa ed alla luce fioca? Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 225 3. Un pin I/O quando è impostato come ingresso quale effetto ha sul circuito ad esso collegato? Quando è impostato come ingresso che cosa causa la memorizzazione di un 1 o di uno 0 nel suo registro di ingresso? 4. Che cosa significa tensione di soglia? Qual è la tensione di soglia di un pin I/O del BASIC Stamp? 5. Che cos’è un partitore di tensione? 6. Riferendosi alla Figura 6-4 di pagina 191, che cosa fa andare Vo sopra o sotto la tensione di soglia di un pin I/O del BASIC Stamp? Che cos’è nel circuito che fa cambiare valore a Vo? 7. Quali variazioni potete fare al circuito di Figura 6-2 per farlo funzionare meglio in un’area più intensamente illuminata? E quali in un’area relativamente scura? 8. Quali sono i cambiamenti minimi che potete fare a RoamingWithWhiskers.bs2 peer farlo funzionare con le fotoresistenze? 9. In che cosa differisce il programma ShadowGuidedBoeBot.bs2 dal programma RoamingWithFotoresistenzaDividers.bs2? Che cosa queste differenze cambiano nelle prestazioni del Boe-Bot? 10. Qual è la differenza tra un farad ed un microfarad? 11. Riferendosi alla Figura 6-10 a pagina 204, che cosa fa il comando HIGH 6 alla tensione ai capi del condensatore? E che cosa fà PAUSE 3? Che cosa fa il comando RCTIME? 12. Che cosa è una dichiarazione di costante? Che cosa fà? Come potete usarne una in un programma? 13. Come vengono valutate le espressioni matematiche nel PBASIC? 14. Qual è la differenza tra usare un numero ed usare una costante in una condizione IF…THEN? Qual è la differenza tra l’uso di una misura RCTIME in un’istruzione IF…THEN e l’uso del valore del registro di ingresso di un pin I/O? 15. Quali sono i due esempi in questo capitolo dove il PBASIC è stato usato per calcolare una media? In che modo sono differenti? In che modo sono uguali? 16. Potete usare questi modificatori: Bit, Nib, Byte, e Word quando dichiarate una variabile, ma potete dichiarare un nome di variabile per riferirvi ad un’altra variabile che è già stata dichiarata? Se si, come funziona? Se no, perché non potete? Esercizi 1. Calcolate Vo per la Figura 6-4 a pagina 191 se R è 10 kΩ. Ripetete il calcolo per R = 30 kΩ. Pagina 226 · Robotica con il Boe-Bot 2. Calcolate Vo per la Figura 6-4 a pagina 191 se R è 20 kΩ. Ripetete questo calcolo, ma sostituite la resistenza da 2 kΩ mostrata nella figura con i seguenti valori: 220 Ω, 470 Ω, 1 kΩ, 4.7 kΩ, 10 kΩ. 3. Se Vo in Figura 6-4 a pagina 191 è 1.4 V, qual è il valore di R? Ripetete il calcolo per Vo = 1 V e per Vo = 3 V. 4. Scrivete un’istruzione IF…THEN che faccia avanzare il Boe-Bot equipaggiato con un circuito partitore di tensione a fotoresistenza se vede una luce intensa e retrocedere se vede una luce fioca. L’istruzione IF…THEN dovrebbe anche far allontanare il Boe-Bot dall’ombra. 5. Scrivete una dichiarazione di costante che possa essere usata con un comando PAUSE per il tempo basso tra gli impulsi ai servo. Riscrivete il comando PAUSE in maniera che usi la costante. 6. Ripetete l’esercizio precedente per i valori 13 e 12 usati per riferirsi ai pin I/O. Scrivete alcuni comandi PULSOUT di esempio che usino le vostre costanti pin. 7. Assumete di avere tre valori di variabile: firstValue, secondValue, e thirdValue. Scrivete un comando che metta la media di questi tre valori in una variabile chiamata myAverage. Scrivete un comando che memorizzi i 7/8 della media in una variabile di nome myScaledAverage. Scrivete le dichiarazioni di variabile necessarie per rendere il vostro comando in grado di funzionare in un programma, prima con myAverage e myScaledAverage come variabili separate, quindi con uno di questi nomi di variabili come alias dell’altra. Progetti 1. Con le fotoresistenze del vostro Boe-Bot orientate verso il basso e davanti, sviluppate un programma che faccia riconoscere al vostro Boe-Bot la differenza tra il nero ed il bianco. Trovate una grande superficie bianca e su di essa mettete dei fogli di carta nera. Sviluppate un programma che faccia evitare al Boe-Bot i fogli di carta nera. Suggerimenti: Assicuratevi di collaudare e di comprendere quello che il Boe-Bot vede quando è focalizzato sul foglio di carta nero e cosa vede quando è focalizzato sul sottofondo bianco. Usate i programmi esempio degli ultimi tre esercizi di questo capitolo. Il circuito per la misura del tempo di decadimento RC ed i programmi relativi saranno molto più utili per far funzionare il programma rispetto alle tecniche del partitore a fotoresistenza. Inoltre, assicuratevi che questo percorso ad ostacoli sia in una area uniformemente illuminata. La luce del sole da una finestra e le ombre proiettate dagli osservatori possono far fallire la dimostrazione. Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 227 2. Se avete avuto successo con il progetto 1, sperimentate confinando il Boe-Bot in modo che possa solo muoversi in uno spazio racchiuso da fogli di carta neri. 3. Sviluppate un percorso ad ostacoli che il Boe-Bot possa rilevare con i baffi e mettete una lampada da tavolo alla fine del percorso. Fate una gara per vedere chi è in grado di scrivere un programma che faccia navigare il Boe-Bot nel modo più efficace dalla partenza scura all’arrivo luminoso. Suggerimenti: dovrete combinare circuiti e programmi del capitolo precedente con circuiti e programmi di questo capitolo. Come con i progetti precedenti, usate elementi dai programmi che raccolgono informazioni di luminosità con i circuiti RC e comandi RCTIME. Evitate i circuiti che usano i partitori a fotoresistenza. I partitori a fotoresistenza hanno il loro uso, ma il loro uso è limitato ai posti dove la luminosità è attentamente controllata dalle sorgenti luminose e dai contenitori. ATTENZIONE: State attenti che i baffi non possano toccare i terminali delle fotoresistenze! Provate con una varietà di collisioni con i circuiti delle fotoresistenze scollegate da Vdd, Vss, e dai pin I/O. Se necessario isolate i terminali delle fotoresistenze con nastro isolante. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 229 Capitolo 7: Navigazione con l’Illuminazione Infrarossa I prodotti odierni di punta sembrano avere una cosa in comune: la comunicazione senza fili. Le agende elettroniche inviano dati ai computer, ed i telecomandi ci permettono di cambiare canale televisivo. Molti telecomandi ed applicazioni usano segnali nella banda infrarossa della luce per comunicare, al disotto dello spettro visibile della luce. Con pochi componenti economici e facilmente reperibili, il BASIC Stamp può ricevere e trasmettere segnali a luce infrarossa. USARE L’ILLUMINAZIONE INFRAROSSA PER VEDERE LA STRADA Rilevare oggetti senza i baffi non richiede niente di sofisticato come la visione artificiale. Alcuni robot usano i RADAR oppure i SONAR (qualche volta chiamati SODAR quando sono usati in aria invece che in acqua). Un sistema molto più semplice è usare la luce infrarossa per illuminare il percorso del robot e determinare quando la luce viene riflessa da un oggetto.grazie alla proliferazione dei telecomandi ad infrarossi (IR), gli illuminatori ed i rivelatori IR sono facilmente reperibili ed economici. Infrarosso: Infra significa sotto, così Infra-rosso è la luce (o la radiazione elettromagnetica) che ha una frequenza inferiore, o una lunghezza d’onda maggiore della luce rossa. I LED IR e rivelatori che userete lavorano a 980 nm (nanometri) che viene considerato infrarosso vicino. Gli apparecchi per la visione notturna ed i termometri a Infrarossi usano le lunghezze d’onda di 2000-10,000 nm definita infrarossso lontano, a seconda dell’applicazione. La Tabella 7-1 mostra le lunghezze d’onda per i colori comuni insieme con lo spettro infrarosso. Tabella 7-1: Colori e lunghezze donda approssimative Colore Lunghezza d’Onda Viola 400 Rosso Blue 470 Infrarosso Vicino Verde 565 Infrarosso Giallo 590 Infrarosso Lontano Arancio 630 Colore Lunghezza d’Onda 780 800-1000 1000-2000 2000-10,000 Pagina 230 · Robotica con il Boe-Bot Illuminazione Infrarossa Il sistema per la rivelazione di oggetti con infrarossi che costruiremo sul Boe-Bot assomiglia ai fari di un’automobile per diversi aspetti. Quando la luce dei fari di un’automobile viene riflessa da un ostacolo, i vostri occhi rivelano l’ostacolo ed il vostro cervello processa l’informazione e fa agire il vostro corpo per adeguare la guida di conseguenza. Il Boe-Bot usa i LED infrarossi per l’illuminazione come mostrato nella Figura 7-1. Essi emettono infrarossi, e nel caso la radiazione infrarossa viene riflessa dagli oggetti in direzione del Boe-Bot. Gli occhi del Boe-Bot sono i rivelatori di infrarossi. I rivelatori di infrarossi inviano segnali al BASIC Stamp indicando se sono stati rilevati o meno infrarossi riflessi da un oggetto. Il cervello del Boe-Bot, il BASIC Stamp, prende le decisioni ed attiva i servo motori in base all’ingresso di questa informazione dai sensori. Figura 7-1 Rivelazione di Oggetti con l’Illuminazione IR I rivelatori di infrarosso hanno un filtro ottico entrocontenuto che non permette il passaggio della luce eccetto che a quella di 980 nm di lunghezza d’onda al suo sensore a fotodiodo interno. Il rivelatore infrarosso ha anche un filtro elettronico che permette il passagio solamente a segnali con una frequenza di 38.5 kHz. In altre parole, è sensibile solamente ad infrarossi con lunghezza d’onda di 980 nm e con una frequenza di 38,500 pulsazioni al secondo. Questo previene le interferenze IR da sorgenti di infrarossi come la luce solare e l’illuminazione domestica. La luce solare è vista come un’interferenza in corrente continua (0 Hz), e l’illuminazione domestica tende a lampeggiare a 100 od a 120 Hz, dipendendo dal tipo di fornitura di energia elettrica della regione. Dal momento che 120 Hz è al difuori della banda passante del filtro elettronico 38.5, tale frequenza viene completamente ignorata dai rivelatori IR. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 231 Alcune lampade fluorescenti generano segnali che possono essere rivelate dai rivelatori IR. Queste lampade possono causare problemi all’illuminazione infrarossa del vostro Boe-Bot. Una delle cose che farete in questo capitolo è di sviluppare un “annusatore” che potrete usare per vedere se le lampade fluorescenti nei pressi del percorso del vostro Boe-Bot emettono infrarossi nella banda interessata. ESERCIZIO #1: MONTAGGIO E COLLAUDO DELLE COPPIE IR In questo esercizio, assemblerete e collauderete le coppie trasmettitore/rivelatore infrarosso. Elenco Componenti: (2) Rivelatori Infrarossi (2) LED infrarossi (corpo trasparente) (2) Assieme degli Schermi per i LED IR (2) Resistenze - 220 Ω (rosso-rosso-marrone) (2) Resistenze – 1 kΩ (marrone-nero-rosso) 1 2 3 + Figura 7-2 Nuovi Componenti Usati in questo Capitolo 1 2 3 Longer lead Rivelatore IR (sopra) + - Flattened edge LED IR centro) (al Schermo del LED IR (in basso) Assemblaggio degli Illuminatori IR Inserite i LED infrarossi nell’assieme di schermo come mostrato nella Figura 7-3. Assicuratevi che il LED si inserisca a fondo nella parte più lunga dello schermo Accoppiare la parte più piccola dello schermo sul corpo del LED e sulla parte più lunga. Pagina 232 · Robotica con il Boe-Bot IR LED will snap in. + Figura 7-3 Inserimento del LED IR nell’assieme dello schermo - Su ciascun lato della scheda prototipi viene montato una coppia IR (LED IR e Rivelatore). La Figura 7-4 mostra lo schema elettrico dei circuiti degli illuminatori IR e dei rivelatori e la Figura 7-5 mostra il relativo schema di cablaggio. Togliete l’alimentazione dalla vostra scheda e dai servo. Assemblate il circuito relativo allo schema elettrico mostrato nella figura Figura 7-4, usando lo schema di cablaggio per la vostra scheda nella Figura 7-5 come riferimento per la disposizione dei componenti. Vdd P2 1 kΩ IR LED P9 220 Ω Vss Vss Vdd P8 1 kΩ IR LED P0 220 Ω Vss Coppia IR Sinistra Vss Coppia IR Destra Figura 7-4 Coppie IR Sinistra e Destra Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 233 To Servos To Servos Figura 7-5 Schema di Cablaggio dei Circuiti delle Coppie infrarossi Emettitore e Ricevitore 15 14 Vdd 13 12 (916) 624-8333 Rev B www.parallax.com www.stampsinclass.com Red Black X4 Vdd X5 Vin Vdd Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Terminale Lungo (Anodo) + Board of Education Rev C © 2000-2003 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Terminale Lungo (Anodo) + Board of Education (sinistra) e HomeWork Board (destra). HomeWork Board Collaudo delle Coppie IR Usando FREQOUT Il comando FREQOUT è stato pensato principalmente per sintetizzare toni audio. La gamma effettiva del comando FREQOUT è da 1 to 32768 Hz. Un fenomeno interessante dei toni sintetizzati digitalmente è che contengono dei segnali chiamati armoniche. Un’armonica è un tono a frequenza più alta miscelato con il tono che volete ascoltare. Questi toni vanno oltre la gamma udibile dagli umani, che normalmente spaziano da 20 Hz a 20 kHz. Le armoniche generate dal comando FREQOUT iniziano da 32769 Hz in poi. Potete controllare direttamente queste armoniche usando l’argomento Freq1 sopra i 32768. In questo esercizio, userete il comando FREQOUT 8, 1, 38500 per emettere un’armonica a 38.5 kHz che dura 1 ms da P8. Che sarà trasmessa dal LED infrarosso collegato a P8. se la luce infrarossa viene riflessa verso il Boe-Bot da un oggetto sul suo percorso, il rivelatore infrarsso invierà al BASIC Stamp un segnale per informarlo che è stata rilevata una luce infrarossa. Pagina 234 · Robotica con il Boe-Bot Il comando FREQOUT - Fondamentali ed Armoniche La frequenza fondamentale è il valore dell’argomento Freq1 quando è pari o inferiore a 32768. Ogni volta che usate il comando FREQOUT per inviare un tono in questa gamma, esso contiene anche quel tono nascosto (armonica). La formula per la frequenza dell’armonica è: frequenza dell’armonica = 65536 – Freq1, Freq1 <= 32678 Ogni volta che usate il comando FREQOUT con un argomento Freq1 superiore a 32768 per inviare un’armonica, essa contiene anche un tono fondamentale. La formula per la frequenza fondamentale è: frequenza fondamentale = 65536 – Freq1, Freq1 > 32768 Il modo per far funzionare una coppia LED IR/Rivelatore è di inviare un tono di 38.5 kHz per 1 ms di armonica FREQOUT, ed immediatamente, memorizzare l’uscita del rivelatore IR in una variabile. Il prossimo è un esempio che invia il segnale di 38.5 kHz al LED IR collegato a P8, quindi memorizza l’uscita del rivelatore, che è collegato a P9, in una variabile bit chiamata irDetectLeft. FREQOUT 8, 1, 38500 irDetectLeft = IN9 Lo stato di uscita del rivelatore IR quando non è presente alcun segnale IR è alto. Quando il rivelatore IR vede l’armonica a 38500 Hz riflessa da un oggetto, il suo stato è basso. L’uscita del rivelatore IR resta bassa solamente per una frazione di millisecondo dopo che il comando FREQOUT ha cessato di inviare l’armonica, è quindi essenziale memorizzare l’uscita del rivelatore IR in una variabile immediatamente dopo l’invio del comando FREQOUT. Il valore memorizzato dalla variabile può quindi essere visualizzato nel Terminale di Debug o usato per le decisioni circa la navigazione del Boe-Bot. Programma Esempio: TestLeftIrPair.bs2 Rialimentate la vostra scheda. Digitate, Salvate e Lanciate TestLeftIrPair.bs2. ' Robotica con il Boe-Bot - TestLeftIrPair.bs2 ' Collauda il circuito IR di sinistra per la rilevazione degli oggetti, ' il LED IR è collegato a P8 ed il rivelatore è collegato a P9. ' {$STAMP BS2} ' {$PBASIC 2.5} Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 235 irDetectLeft VAR Bit DO FREQOUT 8, 1, 38500 irDetectLeft = IN9 DEBUG HOME, "irDetectLeft = ", BIN1 irDetectLeft PAUSE 100 LOOP Lasciate il Boe-Bot collegato al cavo seriale perché per collaudare la coppia IR userete il Terminale di Debug. Posizionate un oggetto, come la vostra mano oppure un foglio di carta, verticalmente a circa un pollice (2,5 cm) davanti alla coppia IR di sinistra, nel modo mostrato nella Figura 7-1 a pagina 230. Verificate che quando ponete un oggetto davanti alla coppia IR il Terminale di Debug visualizzi uno 0, e che quando lo togliete, visualizzi un 1. Se il Terminale di Debug visualizza i valori attesi per oggetto non rilevati (1) e per oggetto rilevato (0), andate alla sezione Il Vostro Turno seguente il Programma Esempio. Se il Terminale di Debug non visualizza i valori attesi, provate le procedure del riquadro Ricerca Guasti. Ricerca Guasti Se il Terminale di Debug non visualizza i valori desiderati, controllate il circuito per errori di cablaggio ed il programma per errori di digitazione. Se ottenete sempre uno 0, anche quando non c’è nessun oggetto davanti al Boe-Bot, ci può essere un oggetto nelle vicinanze che riflette gli infrarossi. Un colpevole comune può essere la superficie del tavolo davanti al Boe-Bot. Muovete il Boe-Bot in modo che non possa essere influenzato da nessun oggetto vicino. Se quando nessun oggetto è presente davanti al Boe-Bot e la lettura è 1 per la maggior parte del tempo con degli 0 occasionali, potrebbe significare che una lampada fluorescente stà interferendo. Spengete tutte le lampade fluorescenti e ripetete i vostri collaudi. Il vostro Turno Salvate TestLeftIrPair.bs2 con il nome TestRightIrPair.bs2. Cambiate l’istruzione DEBUG, il Titolo ed i commenti del programma per riferirvi alla coppia di IR destra. Pagina 236 · Robotica con il Boe-Bot Cambiate il nome della variabile da irDetectLeft in irDetectRight. Questo lo dovrete fare in quattro posti nel programma. Cambiate l’argomento Pin del comando FREQOUT da 8 a 2. Cambiate il registro di ingresso controllato dalla variabile irDetectRight da IN9 ad IN0. Ripetete i passi del collaudo di questo esercizio per la coppia IR di destra; con il circuito del LED IR collegato a P2 ed il rivelatore collegato a P0. ESERCIZIO #2: COLLAUDO SUL CAMPO PER LA RILEVAZIONE DI OGGETTI E LE INTERFERENZE DA INFRAROSSI In questo esercizio, assemblerete e collauderete gli indicatori LED che vi diranno se un oggetto è stato rilevato senza l’aiuto del Terminale di Debug. Questo è utile se non siete vicini ad un PC o laptop, e dovete scoprire dei malfunzionamenti dei vostri circuiti di rivelazione IR. Scriverete anche un programma per “annusare” le interferenze infrarosse delle lampade fluorescenti. Alcune lampade fluorescenti emettono delle interferenze che assomigliano ai segnali inviati dai vostri LED infrarossi. I dispositivi interni alle plafoniere delle lampade fluorescenti che controllano la tensione delle lampade si chiamano ballast. Alcuni ballast operano nella stessa regione di frequenze del vosto rivelatore IR, 38.5 kHz, e questo a sua volta fa emettere alla lampada un segnale a questa frequenza. Quando voi integrate la rilevazione IR di oggetti nella navigazione, queste interferenze possono causare alcuni comportamenti bizzarri del vostro Boe-Bot When! Riassemblaggio dei Circuiti Indicatori a LED Questi sono gli stessi circuiti indicatori a LED che avete usato con i baffi. Elenco Componenti: (2) LED Rossi (2) Resistenze – 220 Ω (rosso-rosso-marrone) Scollegate l’alimentazione dalla vostra scheda e dai servo. Assemblate il circuito mostrato nella Figura 7- 6 usando la figura Figura 7-7 come riferimento. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 237 P1 P10 220 Ω 220 Ω Vss Vss Coppia IR Sinistra Coppia IR Destra To Servos To Servos 15 14 Vdd 13 12 Terminale Lungo (Anodo) Red Black X4 Vdd Vss (916) 624-8333 Rev B www.parallax.com www.stampsinclass.com Vdd Board of Education © 2000-2003 Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 + Rev C Terminale Lungo (Anodo) X5 Vin X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura 7- 6 Indicatori a LED Sinistro e Destro Red LED Red LED + Figura 7-7 Schema di Cablaggio per i LED indicatori Rossi per i circuiti di rilevazione IR degli Oggetti Board of Education (Sinistra) e HomeWork Board (Destra). HomeWork Board Collaudo del Sistema Cominciano ad esserci abbastanza componenti nel sistema, e questo aumenta la possibilità di errori di cablaggio. Per questo è così importante avere un programma di collaudo che vi mostri che cosa stanno rivelando i sensori di infrarossi. Potete usare questo programma per verificare che tutti i circuiti funzionino prima di scollegare il BoeBot dal suo cavo seriale e collaudare altri oggetti. Programma Esempio– TestIrPairsAndIndicators.bs2 Ricollegate l’alimentazione alla vostra scheda. Digitate, Salvate e Lanciate TestIrPairsAndIndicators.bs2. Pagina 238 · Robotica con il Boe-Bot Verificate che il cicalino emetta un tono chiaramente udibile, mentre il Terminale di Debug visualizza “Collaudo del cicalino piezo…”. Usate il Terminale di Debug per verificare che il BASIC Stamp riceva ancora uno zero da ciascun rivelatore IR quando un oggetto gli viene posto davanti. Verificate che il LED vicino a ciascun rivelatore emetta luce quando viene rilevato un oggetto. Se uno o tutti e due i LED sembrano non funzionare, controllate il vostro cablaggio ed il programma. ' Robotica con il Boe-Bot - TestIrPairsAndIndicators.bs2 ' Collaudo dei circuiti IR di rilevazione degli oggetti. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. ' -----[ Variabili ]---------------------------------------------------------irDetectLeft irDetectRight VAR VAR Bit Bit ' -----[ Inizializzazione ]--------------------------------------------------DEBUG "Collaudo del cicalino piezo..." FREQOUT 4, 2000, 3000 DEBUG CLS, "RIVELATORI IR", CR, "Sinistro Destro", CR, "-------- ------" ' -----[ Routine Principale DO FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 2, 1, 38500 irDetectRight = IN0 IF (irDetectLeft = 0) THEN HIGH 10 ELSE LOW 10 ENDIF IF (irDetectRight = 0) THEN HIGH 1 ELSE ]------------------------------------------------ Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 239 LOW 1 ENDIF DEBUG CRSRXY, 2, 3, BIN1 irDetectLeft, CRSRXY, 9, 3, BIN1 irDetectRight PAUSE 100 LOOP Il Vostro Turno– Collaudo Remoto e Collaudo della Portata Potete ora usare i vostri rivelatori LED per far rilevare al vostro Boe-Bot oggetti che sarebbero altrimenti fuori della portata del cavo seriale del vostro computer. Scollegate il vostro Boe-Bot dal cavo seriale, e mettete il Boe-Bot di fronte ad una varietà di oggetti e collaudate la portata dei rivelatori IR. Provate la portata di rilevazione di oggetti di colore differenti. Quale colore viene rilevato alla distanza maggiore? E quale colore viene rilevato alla distanza minore? Annusare le Interferenze IR Se succede che i LED del vostro Boe-Bot vi avvisano di aver rilevato un oggetto anche se nessun oggetto è presente nella portata del rivelatori, potrebbe significare che una lampada nelle vicinanze stà generando della luce infrarossa ad una frequenza vicina a 38.5 kHz. Se state tentando una gara od una dimostrazione con il Boe-Bot in presenza di una di queste lampade, il vostro sistema infrarosso può portare ad una prestazione molto incerta. L’ultima cosa che chiunque vuole è di avere il proprio robot non performante come pubblicizzato durante una dimosstrazione pubblica, così assicuratevi di controllare prima ogni area dimostrativa con questo programma “annusatore” di interferenza IR. Il concetto che stà dietro a questo programma è semplice, non trasmettete nessun segnale infrarosso dai LED IR, controllate solamente per vedere se vengono rivelati segnali infrarossi. Se vengono rivelati infrarossi, il cicalino piezo emetterà un tono di allarme. Potete usare un telecomando qualsiasi per generare interferenze infrarosse. Le TV, i VCR, i lettori CD/DVD, ed i proiettori video usano tutti gli stessi LED IR e rivelatori IR che avete montato sul vostro Boe-Bot. Il telecomando usa lo stesso genere di LED IR che usa il BoeBot per trasmettere messaggi al rivelatore nella TV, VCR, etc. Pagina 240 · Robotica con il Boe-Bot Programma Esempio– IrInterferenceSniffer.bs2 Digitate, Salvate e Lanciate IrInterferenceSniffer.bs2. Fate delle prove per assicurarvi che il Boe-Bot emetta un tono di allarme quando rileva un’interferenza IR. Lo potete fare con un altro Boe-Bot con il programma TestIrPairsAndIndicators.bs2 in funzione. Se non avete un secondo Boe-Bot, potete usare un qualsiasi telecomando per TV, VCR, CD/DVD, o proiettore video. Semplicemente puntate il telecomando verso il Boe-Bot e premete un tasto. Se il Boe-Bot risponde suonando l’allarme, saprete che il vostro “annusatore di interferenze IR funziona. ' Robotica con il Boe-Bot – IrInterferenceSniffer.bs2 ' Per provare le interferenze da lampade fluorescenti, telecomandi ad ' infrarossi, ed altre sorgenti IR a 38.5 kHz. ' {$STAMP BS2} ' {$PBASIC 2.5} counter ' Direttiva Stamp. ' Direttiva PBASIC. VAR Nib DEBUG "Interferenza IR, non ancora rilevata...", CR DO IF (IN0 = 0) OR (IN9 = 0) THEN DEBUG "Interferenza IR RILEVATA!!!", CR FOR counter = 1 TO 5 HIGH 1 HIGH 10 FREQOUT 4, 50, 4000 LOW 1 LOW 10 PAUSE 20 NEXT ENDIF LOOP Il Vostro Turno– Collaudo per l’interferenza da Lampade Fluorescenti Scollegate il vostro Boe-Bot dal suo cavo seriale, ed orientatelo verso una lampada fluorescente vicina alla zona dove pensate di far funzionare il Boe-Bot. Specialmente se avete allarmi frequenti, spengete l’illuminazione fluorescente prima di usare la rilevazione IR degli oggetti. Usate sempre il programma IrInterferenceSniffer.bs2 per assicurarvi che l’area dove intendete usare il Boe-Bot sia esente da interferenze infrarosse. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 241 ESERCIZIO #3: TARATURA DELL’AREA DI RILEVAMENTO DEGLI INFRAROSSI Potete aver notato che quando è buio possono essere usati fari dell’automobile più potenti (o torce più luminose) per vedere oggetti ad una maggiore distanza. Aumentando la luminosità dei LED infrarossi del Boe-Bot, potete incrementare la sua distanza di rilevamento. Resistendo meno al flusso della corrente, una resistenza di valore inferiore permette ad una corrente più alta di scorrere in un LED. L’aumento di corrente che scorre nel LED ne causa l’aumento di luminosità. In questo esercizio, esaminerete l’effetto di resistenze con valori differenti sia con LED rossi che con LED infrarossi. Elenco Componenti: Per questo esercizio vi serviranno alcuni componenti aggiuntivi. (2) Resistenze – 470 Ω (giallo-viola-marrone) (2) Resistenze – 220 Ω (rosso-rosso-marrone) (1) Resistenza – 1 kΩ (marrone-nero-rosso) Resistenze serie e Luminosità del LED Primo, usate un LED rosso per “vedere” la differenza che una resistenza produce sulla luminosità di un LED. Tutto quello che vi serve per collaudare il LED è un programma che invii un segnale alto al LED. Programma Esempio– P1LedHigh.bs2 Digitate, Salvate e Lanciate P1LedHigh.bs2. Verificate che il LED del circuito collegato a P1 emetta luce. ' Robotica con il Boe-Bot - P1LedHigh.bs2 ' Imposta P1 alto per provare la luminosità del LED con ciascuno dei ' valori di resistenza a turno: 220 ohm , 470 ohm, 1 k ohm. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" HIGH 1 STOP Pagina 242 · Robotica con il Boe-Bot Viene qui usato il comando STOP al posto del comando END, dal momento che END avrebbe messo il BASIC Stamp in modalità basso consumo. Il Vostro Turno– Collaudo della Luminosità del LED Ricordatevi di togliere l’alimentazione prima di effettuare cambiamenti al circuito. Ricordate anche che lo stesso programma funzionerà di nuovo quando ridarete alimentazione al circuito, in questo modo non sarà necessario riprogrammare il BASIC Stamp prima di ogni prova. Notate con quanta luminosità si accende il LED nel circuito collegato a P1 con la resistenza da 220 Ω. Sostituite la resistenza da 220 Ω collegata tra P1 ed il catodo del LED destro con una resistenza da 470 Ω. Notate ora la variazione di luminosità del LED rispetto a prima. Ripetete il procedimento con la resistenza da 1 kΩ. Prima di continuare con la parte seguente di questo esercizio, rimettetete la resistenza da 220 Ω. Spiegate con parole vostre la relazione tra la luminosità del LED e la resistenza serie. Resistenza Serie e Distanza IR di Rilevazione Ora che sappiamo che una resistenza serie minore aumenta la luminosità di un LED. Una ipotesi ragionevole sarebbe che un LED IR più luminoso rende possibile la rilevazione di oggetti ad una distanza maggiore. Aprite e Lanciate TestIrPairsAndIndicators.bs2 (da pagina 238). Verificate che ambedue i rivelatori funzionino correttamente. Il Vostro Turno– Collaudo della distanza dei LED IR Con un metro, misurate la distanza massima di rilevazione dal LED IR di un oggetto. Sostituite le resistenze da 1 kΩ che sono collegate da P2 e da P8 agli anodi dei LED IR con resistenze da 470 Ω. Determinate l’aumento della distanza a cui il medesimo oggetto viene rilevato. Ripetete con le resistenza da 220 Ω. Registrate i dati ottenuti nella Table 7-2. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 243 Table 7-2: Rilevamento della Distanza in Funzione della Resistenza Resistenza Serie dei LED IR, (Ω) Massima Distanza di Rilevamento, Barrare uno dei due: in | cm 1000 470 220 Prima di andare al prossimo esercizio, ripristinate le coppie IR alla loro configurazione originale (con resistenze da 1 kΩ in serie a ciascun LED IR). Anche, prima di continuare, assicuratevi di provare con TestIrPairsAndIndicators.bs2 che le ultime variazioni delle coppie di circuiti LED IR/rivelatori funzionino correttamente. ESERCIZIO #4: RILEVAMENTO DEGLI OGGETTI E COME EVITARLI Una cosa interessante circa i rivelatori IR è che la loro uscita è come quella dei baffi. Quando non è rilevato nessun oggetto, l’uscita è alta; quando viene rilevato un oggetto, l’uscita è bassa. In questo esercizio, RoamingWithWhiskers.bs2 di pagina 174 viene modificato in modo che funzioni con i rivelatori IR. Conversione del Programma dei Baffi per la Rilevazione degli Oggetti per Evitarli Il prossimo programma esempio inizia in modo simile a RoamingWithWhiskers.bs2. A parte la modifica del nome e della descrizione, sono state aggiunte due variabili bit per memorizzare gli stati dei rivelatori IR. irDetectLeft VAR irDetectRight VAR Bit Bit È stata aggiunat anche una routine per leggere le coppie IR. FREQOUT 8, 1, 38500 irDetectLeft = IN9 le istruzioni IF…THEN sono state modificate in modo che puntino alle variabili che memorizzano le rilevazioni delle coppie IR invece che gli ingressi dei baffi. IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN GOSUB Back_Up Pagina 244 · Robotica con il Boe-Bot GOSUB Turn_Left GOSUB Turn_Left ELSEIF (irDetectLeft = 0) THEN GOSUB Back_Up GOSUB Turn_Right ELSEIF (irDetectRight = 0) THEN GOSUB Back_Up GOSUB Turn_Left ELSE GOSUB Forward_Pulse ENDIF Programma Esempio– RoamingWithIr.bs2 Aprite RoamingWithWhiskers.bs2 Modificatelo in modo che sia uguale al programma sottoriportato. Rialimentate la vostra scheda ed i servo. Salvate il programma e lanciatelo. Verificate che, a parte il fatto che non c’è bisogno di contatto fisico con gli ostacoli, si comporti come RoamingWithWhiskers.bs2. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - RoamingWithIr.bs2 ' Adattamento di RoamingWithWhiskers.bs2 per l’uso con le coppie IR. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Variabili ]---------------------------------------------------------irDetectLeft VAR irDetectRight VAR pulseCount VAR Bit Bit Byte ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale ' Segnala lo start/reset del programma. ]------------------------------------------------ DO FREQOUT 8, 1, 38500 irDetectLeft = IN9 ' Memorizza i valori IR rilevati nelle ' Variabili bit. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 245 FREQOUT 2, 1, 38500 irDetectRight = IN0 IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN GOSUB Back_Up ' Tutte e 2 le coppie IR rilevano ostacoli GOSUB Turn_Left ' Retromarcia & inversione ad U GOSUB Turn_Left ELSEIF (irDetectLeft = 0) THEN ' La coppia IR sinistra rileva un ostacolo GOSUB Back_Up ' Retromarcia & curva a destra GOSUB Turn_Right ELSEIF (irDetectRight = 0) THEN ' La coppia IR destra rileva un ostacolo GOSUB Back_Up ' Retromarcia & curva a sinistra GOSUB Turn_Left ELSE ' Tutte e 2 le coppie IR=1, nessun ostacolo GOSUB Forward_Pulse ' Applica un impulso in di avanzamento ENDIF ' e controlla di nuovo LOOP ' -----[ Subroutine ]--------------------------------------------------------Forward_Pulse: PULSOUT 13,850 PULSOUT 12,650 PAUSE 20 RETURN ' Invia un singolo impulso in avanti. Turn_Left: FOR pulseCount = 0 TO 20 PULSOUT 13, 650 PULSOUT 12, 650 PAUSE 20 NEXT RETURN ' Curva a sinistra, circa 90-gradi. Turn_Right: FOR pulseCount = 0 TO 20 PULSOUT 13, 850 PULSOUT 12, 850 PAUSE 20 NEXT RETURN Back_Up: FOR pulseCount = 0 TO 40 PULSOUT 13, 650 PULSOUT 12, 850 PAUSE 20 NEXT RETURN ' Curva a destra, circa 90-gradi. ' Retromarcia. Pagina 246 · Robotica con il Boe-Bot Il vostro Turno Modificate RoamingWithIr.bs2 in modo che in una subroutine siano controllate le coppie IR. ESERCIZIO #5: NAVIGAZIONE IR AD ALTE PRESTAZIONI Lo stile delle manovre preprogrammate che sono state usate nell’esercizio precedente era ottimo per i baffi, ma immotivatamente lento quando usato con i LED IR ed i rivelatori. Potete grandemente migliorare le prestazioni di navigazione del Boe-Bot controllando la presenza di ostacoli prima di inviare ciascun insieme di impulsi ai servo. Il programma può usare le informazioni dei sensori per selezionare la manovra migliore per ogni momento della navigazione. In questo modo, il Boe-Bot non curva mai più del necessario, e può trovare il percorso giusto ed effettuare con successo percorsi complessi. Controlli Prima di Ogni Impulso per Evitare Collisioni La cosa notevole della rilevazione degli ostacoli prima i toccarli è che il Boe-Bot ha ancora dello spazio per aggirarli. Il Boe-Bot può emettere un impulso per allontanarsi da un oggetto, ricontrollare se l’oggetto è ancora vicino, ed in caso emettere un altro impulso per evitarlo. Il Boe-Bot può continuare ad applicare impulsi e controllare, fino a che è lontano dall’ostacolo. A quel punto, può riprendere la sua marcia in avanti. Dopo aver sperimentato con il prossimo programma esempio, probabilmente concorderete che questo è un modo molto migliore di procedere per il Boe-Bot. Programma Esempio– FastIrRoaming.bs2 Digitate, Salvate e Lanciate FastIrRoaming.bs2. ' Robotica con il Boe-Bot - FastIrRoaming.bs2 ' Navigazione ad alte prestazioni assistita dalla rilevazione IR degli oggetti ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" irDetectLeft irDetectRight pulseLeft pulseRight VAR VAR VAR VAR FREQOUT 4, 2000, 3000 Bit Bit Word Word ' Dichiarazione delle Variabili ' Segnala lo start/reset del programma. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 247 DO ' Routine Principale FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 2, 1, 38500 irDetectRight = IN0 ' Controlla i Rivelatori IR ' Decide come navigare. IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN pulseLeft = 650 pulseRight = 850 ELSEIF (irDetectLeft = 0) THEN pulseLeft = 850 pulseRight = 850 ELSEIF (irDetectRight = 0) THEN pulseLeft = 650 pulseRight = 650 ELSE pulseLeft = 850 pulseRight = 650 ENDIF PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 15 ' Applica gli impulsi. LOOP ' Ripete la Routine Principale Come unziona FastIrRoaming.bs2 Questo programma usa per l’applicazione degli impulsi un approccio leggermente differente. Oltre ai due bit usati per le uscite dei rivelatori IR, usa due variabili word per impostare la durata degli impulsi inviati dal comando PULSOUT. irDetectLeft irDetectRight pulseLeft pulseRight VAR VAR VAR VAR Bit Bit Word Word All’interno del ciclo DO…LOOP, i comandi FREQOUT vengono usati per inviare i segnali IR a 38.5 kHz a ciascun LED IR. Immediatamente dopo che è stato inviato il treno di impulsi di 1 ms, una variabile bit memorizza lo stato dell’uscita del rivelatore variable IR. Questo è necessario, peerchè se aspettate più a lungo del tempo di esecuzione di un comando, il rivelatore IR ritornerà uno stato di oggetto non rilevato (stato 1), che sia stato rilevato un oggetto o meno. FREQOUT 8, 1, 38500 irDetectLeft = IN9 Pagina 248 · Robotica con il Boe-Bot FREQOUT 2, 1, 38500 irDetectRight = IN0 Nelle istruzioni IF…THEN, invece di inviare impulsi o chiamare routine di navigazione, questo programma imposta dei valori nelle variabili che verranno usati negli argomenti Duration del comando PULSOUT. IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN pulseLeft = 650 pulseRight = 850 ELSEIF (irDetectLeft = 0) THEN pulseLeft = 850 pulseRight = 850 ELSEIF (irDetectRight = 0) THEN pulseLeft = 650 pulseRight = 650 ELSE pulseLeft = 850 pulseRight = 650 ENDIF Prima che il ciclo DO…LOOP si ripeta, l’ultima cosa da fare è inviare impulsi ai servo. Notate che il comando PAUSE non è più lungo 20. È Invece, 15 dal momento che vengono impiegati circa 5 ms nel controllo dei LED IR. PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 15 ' Applica gli impulsi. Il vostro Turno Salvate FastIrRoaming.bs2 con il nome di FastIrRoamingYourTurn.bs2. Modificate il programma in modo che il cicalino piezo emetta toni diversi dopo ciascun impulso. Scegliete i toni per ciascuna delle quattro combinazioni diverse di larghezze di impulso (Marcia Avanti, RetroMarcia, Curva a Sinistra, e Curva a Destra). Riducete il comando PAUSE a 7 ms, ed usate gli altri 7 ms per un comando FREQOUT. Usate i LED per visualizzare la rilevazione di un oggetto da parte del Boe-Bot. Provate a modificare i valori a cui sono impostati pulseLeft e pulseRight in moaniera che il Boe-Bot esegua tutto alla metà della velocità. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 249 ESERCIZIO #6: IL RILEVATORE DI CADUTA Fino ad oraw, il Boe-Bot è stato programmato principalmente per attuare manovre evasive alla rilevazione di un oggetto. Ma ci sono anche applicazioni dove il Boe-Bot deve attuare manovre evasive se un oggetto non viene rilevato. Per esempio, se il BoeBot stà navigando su un tavolo, i suoi rivelatori IR possono essere orientati verso la superficie del tavolo come mostrato nella Figura 7-8. Il programma dovrebbe farlo avanzare fino a che ambedue i rivelatori IR continuano a “vedere” la superficie del tavolo. In altre parole, il Boe-Bot può continuare ad avanzare fino a che viene rilevata la superficie del tavolo su cui stà navigando. Scollegate l’alimentazione dalla vostra scheda e dai servo. Orientate le coppie IR verso il basso e verso l’esterno come mostrato nella Figura 78. X4 Vdd X5 Vin Vss Figura 7-8 Coppie IR Orientate verso il Basso per Rilevare una Caduta + Board of Education Rev C © 2000-2003 Vista Superiore Vista Laterale Materiali Raccomandati: (1) Rotolo di nastro nero da elettricisti – largo ¾” (19 mm). (1) Foglio di cartoncino bianco – dimensioni raccomandate 22 X 28 in (56 X 71 cm). Simulazione di Caduta con il Nastro da Elettricisti Un foglio di cartoncino bianco con il bordo ricoperto di nastro nero da elettricisti è un modo pratico per simulare la caduta rappresentata dal bordo di un tavolo, con molto meno rischio per il vostro Boe-Bot. Pagina 250 · Robotica con il Boe-Bot Costruite un percorso con il nastro da elettricisti simile al percorso mostrato nella Figura 7-9. Usate almeno tree strisce di nastro accostate senza spazi bianchi visibili tra di esse. Assicuratevi di usare le resistenze da 1 kΩ (marrone-nero-rosso) per collegare P2 al suo LED IR e P8 al suo LED IR. È necessario che per questo esercizio il BoeBot abbia la vista “corta”. Ricollegate l’alimentazione alla vostra scheda. Usate TestIrPairsAndIndicators.bs2 (pagina 238) peer assicurarvi che il Boe-Bot rilevi il cartoncino bianco senza “vedere” il nastro da elettricisti. Lanciate il programma IrInterferenceSniffer.bs2 (pagina 240) per assicurarvi che le lampade fluorescenti nelle vicinanze non interferiscano con i rivelatori IR del vostro Boe-Bot. 22” (56 cm) 22” 56cm Figura 7-9 Il Perimetro con Nastro da Elettricisti per Simulare i Bordi del Tavolo Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 251 Se provate il ripiano di un tavolo dopo aver avuto successo con il nastro da elettricisti: State pronti mentre il vostro Boe-Bot gironzola sul tavolo: Assicuratevi di osservare sempre il vostro Boe-Bot. Siate pronti ad afferrare il vostro Boe-Bot dalla parte superiore ogni volta che si avvicina ai bordi del tavolo su cui stà navigando. Se il Boe-Bot tenta di oltrepassare il bordo, afferratelo prima che cada. Altrimenti, il vostro Boe-Bot potrebbe diventare un Non-Bot! Quando osservate il vostro Boe-Bot mentre stà evitando di cadere, siate pronti ad afferrarlo dalla parte superiore. Altrimenti, il Boe-Bot will vedrà la vostra mano invece del bordo e non si comporterà nel modo previsto. Il vostro Boe-Bot può anche rilevare il vostro corpo mentre siete nella sua visuale, per questo cercate di stare defilati dai suoi rivelatori mentre lo tenete d’occhio. Ricordatevi di seguire queste istruzioni prima di lanciare il programma: Assicuratevi di usare le resistenze da 1 kΩ (marrone-nero-rosso) per collegare P2 al suo LED IR e P8 al suo LED IR. È necessario che per questo esercizio il Boe-Bot abbia la vista “corta”. Usate TestIrPairsAndIndicators.bs2 (pagina 238) peer assicurarvi che il Boe-Bot rilevi il cartoncino bianco senza “vedere” il nastro da elettricisti. Lanciate il programma IrInterferenceSniffer.bs2 (pagina 240) per assicurarvi che le lampade fluorescenti nelle vicinanze non interferiscano con i rivelatori IR del vostro Boe-Bot. Programmazione per la Rilevazione di Caduta Per la maggior parte, la programmazione del vostro Boe-Bot per la navigazione sul piano di un tavolo senza cadere dai bordi è una questione di regolazione delle istruzioni IF...THEN del programma FastIrNavigation.bs2. La variazione principale è che i servo devono essere attivati per far avanzare il Boe-Bot quando irDetectLeft e irDetectRight siano ambedue 0, indicndo che un oggetto (la superficie del tavolo) è stata rilevata. Il Boe-Bot inoltre si deve allontanare quando un rivelatore non ha rilevato un oggetto. Per esempio, se irDetectLeft è 1, il Boe-Bot farebbe meglio a curvare a destra. Una seconda funzione del programma per evitare di cadere è la distanza regolabile. Potreste volere che il vostro Boe-Bot in marcia avanti faccia solamente un passo prima di ogni controllo dei rivelatori, ma non appena una situazione di possibile caduta viene rilevata, potreste volere che il vostro Boe-Bot curvi per diversi impulsi prima di ricontrollare i suoi rivelatori. Pagina 252 · Robotica con il Boe-Bot Solamente perché state inviando molti impulsi in una manovra evasiva, non significa che dobbiate ritornare alla navigazione tipo baffi. Invece, potete aggiungere una variabile pulseCount che potete usae per impostare il numero di impulsi da inviare per una manovra. Il comando PULSOUT può essere inserito in un ciclo FOR…NEXT che esegua FOR 1 TO pulseCount impulsi. Per un impulso in marcia avanti, pulseCount può essere 1, per dieci impulsi a sinistra, pulseCount può essere impostato a 10, e così via. Programma Esempio– AvoidTableEdge.bs2 Aprite FastIrNavigation.bs2 e salvatelo come AvoidTableEdge.bs2. Modificate il programma in modo che corrisponda al programma esempio. Questo comporta l’aggiunta delle variabili, la modifica delle istruzioni IF…THEN, e la nidificazione dei comandi PULSOUT in un ciclo FOR…NEXT. State attenti e verificate che tutti i valori delle variabili pulseLeft e pulseRight nelle istruzioni IF…THEN abbiano i valori corretti. I loro valori sono diversi da quelli di FastIrNavigation.bs2 perché le regole del percorso sono differenti. Ricollegate l’alimentazione alla scheda ed ai servo. Provate il programma sul percorso delimitato dal nastro per elettricisti. Se decidete di fare le prove sul piano di un tavolo, ricordate di seguire i suggerimenti sul collaudo ed i consigli su come afferrare il Boe-Bot discussi precedentemente. ' Robotica con il Boe-Bot - AvoidTableEdge.bs2 ' Navigazione per evitare i bordi del piano con la rilevazione IR dei bordi. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Il Programma è in Funzione!" irDetectLeft irDetectRight pulseLeft pulseRight loopCount pulseCount VAR VAR VAR VAR VAR VAR Bit Bit Word Word Byte Byte ' Dichiarazione delle variabili. FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del Programma. DO ' Routine Principale . FREQOUT 8, 1, 38500 irDetectLeft = IN9 FREQOUT 2, 1, 38500 ' Contolla i rivelatori di IR. Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 253 irDetectRight = IN0 ' Decide la navigazione. IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN pulseCount = 1 ' Rilevazione da ambedue i sensori, pulseLeft = 850 ' Un impulso in marcia avanti. pulseRight = 650 ELSEIF (irDetectRight = 1) THEN ' Destra non rilevata, pulseCount = 10 ' 10 impulsi a sinistra. pulseLeft = 650 pulseRight = 650 ELSEIF (irDetectLeft = 1) THEN ' Sinistra non rilevata, pulseCount = 10 ' 10 impulsi a destra. pulseLeft = 850 pulseRight = 850 ELSE ' nessuna rilevazione, pulseCount = 15 ' Retromarcia e prova ancora. pulseLeft = 650 pulseRight = 850 ENDIF FOR loopCount = 1 TO pulseCount PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 20 NEXT ' Invia gli impulsi di pulseCount LOOP Come Funziona AvoidTableEdge.bs2 Dal momento che questo programma è una versione modificata di FastIrRoaming.bs2, verranno qui discusse solamente le differenze del programma. È stato aggiunto un ciclo FOR…NEXT al programma per controllare il numero di impulsi da inviare ad ogni iterazione della routine del ciclo principale (DO…LOOP). Sono state aggiunte due variabili, loopCount che funziona da indice per un ciclo FOR…NEXT e pulseCount che è usato come argomento di EndValue. loopCount pulseCount VAR VAR Byte Byte le istruzioni IF…THEN ora impostano i valori di pulseCount così come di pulseRight e pulseLeft. Se ambedue i rivelatori possono vedere la superficie del tavolo, per prudenza date unsolo impulso in avanti. Pagina 254 · Robotica con il Boe-Bot IF (irDetectLeft = 0) AND (irDetectRight = 0) THEN pulseCount = 1 pulseLeft = 850 pulseRight = 650 Altrimenti, se il rivelatore IR di destra non vede la superficie del tavolo, curvate a sinistra di 10 impulsi. ELSEIF (irDetectRight = 1) THEN pulseCount = 10 pulseLeft = 650 pulseRight = 650 Oppure, se il rivelatore IR di sinistra non vede la superficie del tavolo, curvate a destra di 10 impulsi. ELSEIF (irDetectLeft = 1) THEN pulseCount = 10 pulseLeft = 850 pulseRight = 850 Altrimenti, se nessun rivelatore può vedere la superficie del tavolo, arretrate di 15 impulsi e provate di nuovo, sperando che uno dei rivelatori veda il bordo prima dell’altro. ELSE pulseCount = 15 pulseLeft = 650 pulseRight = 850 ENDIF Ora che il valore di pulseCount, pulseLeft, e pulseRight sono impostati, questo ciclo FOR…NEXT invia il numero specificato di impulsi per la manovra determinata dalle variabili pulseLeft e pulseRight. FOR loopCount = 1 TO pulseCount PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 20 NEXT Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 255 Il vostro Turno Potete sperimentare impostando differenti valori di pulseLeft, pulseRight, e pulseCount all’interno dell’istruzione IF…THEN. Per esempio, se il Boe-Bot non curva abbastanza, può sorpassare il margine delimitato dal nastro. La rotazione su se stesso all’indietro invece della curva sul posto, può portare ad alcuni comportamenti interessanti. Modificate AvoidTableEdge.bs2 in modo che segua il percorso delimitato dal margine del nastro regolando i valori di pulseCount in modo che il Boe-Bot non curvi troppo allontanandosi dal bordo. Sperimentate con la rotazione sul posto come mezzo per far andare il Boe-Bot all’interno del perimetro invece di seguirne i bordi. Pagina 256 · Robotica con il Boe-Bot SOMMARIO In questo capitolo è stata trattata una caratteristica unica della rilevazione degli oggetti tramite infrarossi effettuata con LED ad infrarossi presenti nei comuni telecomandi, ed i rivelatori di infrarossi presenti nelle TV, CD/DVD, ed in altre applicazioni comuni controllate da questo tipo di telecomandi. I circuiti LED Infrarossi sono usati per inviare un segnale a 38.5 kHz con l’aiuto di una proprietà del comando FREQOUT chiamata armonica, inerente i segnali sintetizzati digitalmente. La rilevazione di oggetti può essere ottenuta illuminando con infrarossi il percorso del Boe-Bot e controllando la riflessione degli infrarossi, senza contatto fisico con l’oggetto. È stato trattato un indicatore di rilevamento ad infrarossi per il collaudo remoto (senza la connessione ad un PC) delle coppie LED IR/Rivelatore. È stato anche presentato un programma per aiutare ad “annusare” le interferenze ad infrarossi che possono essere generate da alcuni tipi di plafoniere fluorescenti. Dal momento che i segnali inviati dai rivelatori IR sono molto simili ai segnali inviati dai baffi, è stato adattato il programma RoamingWithWhiskers.bs2 ai rivelatori a infrarossi. È stato presentato anche un programma che controlla i rivelatori IR prima di ogni impulso ai servo per dimostrare un modo più efficace di procedere senza collidere con gli oggetti. Questo programma è stato quindi modificato per evitare il margine di un’area delimitata con nastro da elettricisti. Dal momento che il nastro da elettricisti assorbe gli infrarossi, bordare un foglio di cartoncino simula la caduta di segnale provocata dal bordo di un tavolo senza pericoli reali per il Boe-Bot. Domande 1. Che cosa significa infrarossi? In cosa differisce l’infrarosso dall’infrarosso vicino? 2. Quali sono i due generi di filtro presenti all’interno dei rivelatori IR usati in questo testo? Che cosa fa ciascuno? 3. Qual è la frequenza dell’armonica inviata da FREQOUT 2, 1, 38500? Qual è il valore della fondamentale inviata da quel comando? Per quanto tempo questi segnali vengono inviati? A quale pin I/O deve essere collegato il LED IR perché questo segnale sia emesso? 4. Quale comando deve seguire immediatamente il comando FREQOUT per determinare se un oggetto è stato rilevato? Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 257 5. Che cosa significa se il rivelatore IR invia un segnale basso? Che cosa significa quando il rivelatore invia un segnale alto? 6. Che cosa accade se cambiate il valore di una resistenza in serie ad un LED rosso? E che cosa accade se cambiate il valore di una resistenza in serie ad un LED infrarosso? 7. In cosa si assomigliano RoamingWithIr.bs2 e RoamingWithWhiskers.bs2? Ed in cosa differiscono i due programmi? 8. In cosa differisce RoamingWithIr.bs2 da FastIrRoaming.bs2? e come si raffrontano con AvoidTableEdge.bs2? Esercizi 1. Se voleste inviare un’armonica a 39 kHz al circuito LED IR del Boe-Bot, quale comando usereste? Scrivete un comando che invia il segnale a 39 kHz. 2. Modificate una riga di codice in IrInterferenceSniffer.bs2 in modo che controlli solamente una delle coppie LED IR/Rivelatore. 3. Riscrivete la routine “Applica gli impulsi.” di FastIrRoaming.bs2 in moodo che applichi tre impulsi invece di uno. Spiegate ogni istruzione PBASIC che debba essere richiesta prima nel programma per eseguire la routine di cui sopra. 4. Spiegate la funzione di pulseCount in AvoidTableEdge.bs2. come si relaziona ciò alla vostra risposta all’esercizio n°3? Progetti 1. Progettate un Boe-Bot che stia fermo fino a che non gli agitate davanti la vostra mano, quindi inizi a muoversi. 2. Progettate un Boe-Bot che ruoti lentamente sul posto fino a che rileva un oggetto. Non appena lo rileva, dopo averlo puntato lo insegue. Questo è un classico comportamento da SumoBot. 3. Progettate un Boe-Bot che gironzoli, ma se rileva un’interferenza infrarossa, emetta un breve tono di allarme, quindi continua a girellare. Questo tono di allarme deve essere diverso dal tono che indica la batteria scarica. 4. aggiungete i baffi al voostro Boe-Bot ad infrarossi. Isolate con nastro da elettricisti ogni parte dei baffi che può venire in contatto con un LED IR o con il rivelatore IR. Create un labirinto con diverse stanze delimitate con nastro da elettricisti. Mettete un oggetto nel mezzo di una delle stanze. L’obbiettivo del Boe-Bot è di gironzolare all’interno del percorso delimitato dal nastro da elettricisti fino a che non viene trovato l’oggetto (tramite il contatto dei baffi). Pagina 258 · Robotica con il Boe-Bot 5. Rimuovete i baffi ed aggiungete un circuito rivelatore di luce. Modificate il vostro labirinto in modo che una torcia od una lampada da tavolo illumini una certa area. Il nuovo obbiettivo del Boe-Bot e di gironzolare nel labirinto fino a che non trova l’area illuminata dalla torcia o dalla lampada da tavolo. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 259 Capitolo 8: Controllo del Robot con la Rilevazione della Distanza Nel capitolo 7, avete usato i sensori ad infrarosso per rilevare se un oggetto è sul percorso del Boe-Bot senza toccarlo. Non sarebbe simpatico sapere anche a che distanza si trova quell’oggetto? Normalmente questo è compito per un sonar, che invia un’impulso sonoro e misura quanto tempo passa perché l’eco ritorni indietro. Il tempo impiegato dall’eco per tornare indietro viene quindi usato per calcolare la distanza dell’oggetto. C’è, comunque, un modo di rilevare la distanza proprio con lo stesso circuito che avete usato nel capitolo precedente. Con il vostro Boe-Bot in grado di determinare la distanza di un oggetto, lo si può programmare per inseguire un oggetto mobile senza toccarlo. Il Boe-Bot può anche essere programmato per seguire una traccia nera su un sottofondo bianco. DETERMINAZIONE DELLA DISTANZA CON LO STESSO CIRCUITO A LED IR /RIVELATORE Per rilevare la distanza userete lo stesso circuito del capitolo pecedente. √ √ Se il circuito è ancora assemblato sul vostro Boe-Bot, lasciatelo così com’è. Se avete già disassemblato il circuito del capitolo precedente, ripetete i passi nel Capitolo 7, Esercizio #1 a pagina 231. Materiali ed Equipaggiamenti Raccomandati: (1) Metro (1) foglio di carta ESERCIZIO #1: COLLAUDO DELLA VARIAZIONE DI FREQUENZA La Figura 8-1 mostra un estratto dal datasheet del vostro rivelatore IR (Panasonic PNA4602M). Questo estratto è un grafico che mostra la diminuzione di sensibilità del rivelatore IR se il segnale IR ricevuto lampeggia a frequenze diverse da 38.5 kHz. Per esempio, se inviate un segnale a 40 kHz, la sua sensibilità è del 50% rispetto alla frequenza di 38.5 kHz. Se viene inviata un segnale a 42 kHz, il ricevitore avrà solamente il 20% della sensibilità. Specialmente per le frequenze che rendono il rivelatore meno sensibile, l’oggetto deve essere più vicino perché possa essere rilevato. Pagina 260 · Robotica con il Boe-Bot Figura 8-1 La Sensibilità del Filtro dipende dalla frequenza della Portante Un altro modo di pensare al fenomeno è che la frequenza con la sensibilità più alta permetterà la rilevazione di oggetti ad una distanza maggiore, mentre ovviamente le frequenze meno sensibili potranno essere usate solamente per rilevare oggetti più vicini. Tutto questo rende semplice la rilevazione della distanza. Scegliete 5 frequenze, quindi provatele dalla più sensibile alla meno sensibile. Cominciate dalla frequenza più sensibile per prima. Se un oggetto viene rilevato, controllate e vedete se la frequenza successiva continua a rilevarlo. A secondo di quale frequenza smette di far rilevare l’oggetto dal rivelatore IR, potete dedurre la distanza. Spazzolamento di Frequenza è la tecnica di collaudare l’uscita di un circuito usando una varietà di frequenze di ingresso. Programmazione dello Spazzolamento di Frequenza per la Determinazione della Distanza La Figura 8-2 mostra un esempio di come il Boe-Bot possa determinare la distanza usando la frequenza. In questo esempio, l’oggetto è nella zona 3. Ciò significa che l’oggetto può essere rilevato quando viene emessa una frequenza tra 37500 e 38250 Hz, ma non può essere rilevato con le frequenze di 39500, 40500, e 41500 Hz. Se spostate l’oggetto nella zona 2, allora l’oggetto potrà essere rilevato quando verranno emesse le frequenze di 37500, 38250, e 39500 Hz, ma non quando verranno emesse le frequenze di 40500 e 41500 Hz. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 261 Figura 8-2: Frequenze e Zone per il Boe-Bot Object 15 14 Vd d 13 12 Red Black X4 Vdd X5 Vin Vs s X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Zone 0 41500 Hz + Zone 1 40500 Hz Zone 2 Zone 3 39500 Hz 38250 Hz Zone 4 37500 Hz Boar d of Education © 20 00 -2 00 3 Zone 5 No Detection at any Frequency Potreste meravigliarvi del motivo per cui la frequenza della zona 4 è 37.5 kHz e non 38.5 kHz. La ragione per cui i valori non sono quelli che vi aspettereste basandovi sul grafico di sensibilità % è perché il comando FREQOUT trasmette un segnale (armonica) leggermente più potente a 37.5 kHz che a 38.5 kHz. Le frequenze elencate in Figura 8-2 sono quelle che userete per programmare il BASIC Stamp per determinare la distanza di un oggetto. Queste frequenze sono state determinate usando prove simili a quelle descritte nell’Appendix G: Taratura degli IR per la Rilevazione della Distanza. Per poter testare il rivelatore IR a ciascuna frequenza, dovrete usare FREQOUT per inviare cinque frequenze differenti e provare con ciascuna frequenza se il rivelatore IR riesce a vedere l’oggetto. I passi da compiere per ciascuna frequenza non sono distribuiti in maniera abbastanza uniforme per poter usare l’operatore STEP in un ciclo FOR…NEXT. Potreste usare DATA e READ, ma tutto ciò sarebbe macchinoso. Potreste usare cinque diversi comandi FREQOUT, ma questo sarebbe un vero spreco di spazio per il codice. Invece, il miglior approccio per la memorizzazione di un piccolo elenco di valori che volete usare in sequenza è un comando chiamato LOOKUP. La sintassi del comando LOOKUP è: LOOKUP Index, [Value0, Value1, …ValueN], Variable Se l’argomento Index è 0, Value0 della lista all’interno delle parentesi quadre sarà messo in Variable. Se Index è 1, Value1 della lista verrà messo in Variable. Nella lista ci possono essere fino a 256 valori, ma per il prossimo programma esempio, ve ne serviranno solamente. Di seguito viene mostrato come saranno usati: FOR freqSelect = 0 TO 4 Pagina 262 · Robotica con il Boe-Bot LOOKUP freqSelect,[37500,38250,39500,40500,41500],irFrequency FREQOUT 8,1, irFrequency irDetect = IN9 ' Comandi non mostrati... NEXT Al primo passaggio nel ciclo FOR…NEXT, freqSelect è 0, in questo modo il comando LOOKUP mette il valore 37500 nella variabile irFrequency. Dal momento che irFrequency dopo il comando LOOKUP contiene 37500, il comando FREQOUT invia quella frequenza al LED IR collegato a P8.Come nel capitolo precedente, il valore di IN9 viene quindi salvato nella variabile irDetect. Alla seconda iterazione del ciclo FOR…NEXT, il valore di freqSelect è ora 1, il che significa che il comando LOOKUP mette nella variabile irFrequency il valore 38250, ed il procedimento si ripete per questa frequenza più alta. Alla terza iterazione, si ripete di nuovo con il valore 39500, e così via. Il risultato è rimarchevole, specialmente considerando che state usando componenti progettate per tutt’altro scopo, per rendere possibile la comunicazione tra un telecomando ed un televisore. Programma Esempio– TestLeftFrequencySweep.bs2 TestLeftFrequencySweep.bs2 fa due cose. Primo, contolla le coppie di LED IR/rivelatore (collegate a P8 ed a P9) per assicurarsi che funzionino correttamente per la rilevazione della distanza. Sebbene, esso dimostri anche come viene effettuata la scansione di frequenza illustrata nella figura Figura 8-2. Quando rilanciate il programma, la finestra di ricezione del Terminale di Debug dovrebbe assomigliare alla Figura 8-3. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 263 Figura 8-3 Collaudo della Distanza di Rilevamento Tenete presente che queste misure delle distanze sono relative e non necessariamente precise o spaziate uniformemente. Sebbene, queste misurazion diano al Boe-Bot una sensazione abbastanza buona della distanza di un oggetto per l’inseguimento, la tracciatura ed altre attività. √ √ √ √ Digitate, Salvate e Lanciate TestLeftFrequencySweep.bs2. Usate un foglio di carta o cartone di fronte alla coppia LED IR/rivelatore per provare la distanza di rilevazione. Iniziate con il foglio molto vicino al LED IR, distante circa ¼ in (o 1 cm) dal LED IR. La vostra Zona nel Terminale di Debug potrà essere sia 0 che 1. Gradualmente allontanate il foglio di carta dal LED IR ed annotate ogni distanza che farà aumentare la zona. Pagina 264 · Robotica con il Boe-Bot Le Zone 1-4 rientrano tipicamente nelle distanze da 6 a 12 in (da 15 a 30 cm) per i LED schermati e con le resistenze da 1 kΩ. Le distanze saranno minori con i vecchi LED schermati con la guaina termorestringente. Anche se gli oggetti possono essere rilevati fino a distanze di 4 in (10 cm), gli esperimenti di questo capitolo funzioneranno. Se le distanze di rilevazione sono inferiori, il che è possibile con i LED IR schermati con la guaina termorestringente, provate a ridurre le resistenze in serie da 1 kΩ a 470 Ω od anche a 220 Ω. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - TestLeftFrequencySweep.bs2 ' Prova la risposta del rilevatore IR alla scansione di frequenza. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. ' -----[ Variabili ]---------------------------------------------------------freqSelect irFrequency irDetect distance VAR VAR VAR VAR Nib Word Bit Nib ' -----[ Inizializzazione ]--------------------------------------------------DEBUG CLS, " "FREQUENZA "--------- OGGETTO ", CR, RILEVATO", CR, --------" ' -----[ Routine Principale ]------------------------------------------------ DO distance = 0 FOR freqSelect = 0 TO 4 LOOKUP freqSelect,[37500,38250,39500,40500,41500], irFrequency FREQOUT 8,1, irFrequency irDetect = IN9 distance = distance + irDetect DEBUG CRSRXY, 4, (freqSelect + 3), DEC5 irFrequency DEBUG CRSRXY, 11, freqSelect + 3 IF (irDetect = 0) THEN DEBUG "Si " ELSE DEBUG "No " PAUSE 100 NEXT Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 265 DEBUG CR, "--------"Zona LOOP --------", CR, ", DEC1 distance Il Vostro Turno– Collaudo della Coppia Destra LED IR/Rivelatore Sebbene ci siano alcune etichette, potete modificare questo programma per provare il LED IR ed il rivelatore di destra cambiando queste due righe: FREQOUT 8,1, irFrequency irDetect = IN9 in modo che siano: FREQOUT 2,1, irFrequency irDetect = IN0 √ √ Modificate TestLeftFrequencySweep.bs2 per il collaudo della misurazione della distanza della coppia LED IR/rivelatore di desta. Lanciate il programma e verificate che questa coppia riesca a misurare delle distanze similari all’altra coppia. Visualizzare Anbedue le Distanze A volte è utile avere un programma “svelto” che potete lanciare per provare tutti e due i rivelatori di distanza del Boe-Bot nello stesso momento. Questo programma è organizzato in subroutine, il chè può essere utile per il copia ed incolla in altri programmi che richiedono la rivelazione della distanza. Programma Esempio– DisplayBothDistances.bs2 √ √ ' ' ' ' Digitate, Salvate e Lanciate DisplayBothDistances.bs2. Ripetete l’esercizio della misura della distanza con un foglio di carta per ciascun LED, quindi su tutti e due i LED insieme. -----[ Titolo ]------------------------------------------------------------Robotica con il Boe-Bot - DisplayBothDistances.bs2 Prova la risposta di tutti e due le coppie di LED IR/rivelatore alla scansione di frequenza. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. Pagina 266 · Robotica con il Boe-Bot ' -----[ Variabili ]---------------------------------------------------------freqSelect irFrequency irDetectLeft irDetectRight distanceLeft distanceRight VAR VAR VAR VAR VAR VAR Nib Word Bit Bit Nib Nib ' -----[ Inizializzazione ]--------------------------------------------------DEBUG CLS, "ZONA IR DELL’OGGETTO", CR, "Sinistra Destra", CR, "-------------" ' -----[ Routine Principale ]------------------------------------------------ DO GOSUB Get_Distances GOSUB Display_Distances LOOP ' -----[ Subroutine – Get_Distances ]----------------------------------------Get_Distances: distanceLeft = 0 distanceRight = 0 FOR freqSelect = 0 TO 4 LOOKUP freqSelect,[37500,38250,39500,40500,41500], irFrequency FREQOUT 8,1,irFrequency irDetectLeft = IN9 distanceLeft = distanceLeft + irDetectLeft FREQOUT 2,1,irFrequency irDetectRight = IN0 distanceRight = distanceRight + irDetectRight PAUSE 100 NEXT RETURN Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 267 ' -----[ Subroutine – Display_Distances ]------------------------------------Display_Distances: DEBUG CRSRXY,2,3, DEC1 distanceLeft, CRSRXY,16,3, DEC1 distanceRight RETURN Il Vostro Turno– Altre Prove di Distanza √ Provate a misurare la distanza di oggetti differenti e vedete il colore e/o il tipo di superficie comportano delle differenze sulla distanza misurata. ESERCIZIO #2: IL BOE-BOT VEICOLO OMBRA Perché un Boe-Bot ne segua un’altro, il Boe-Bot inseguitore, comunemente chiamato veicolo ombra, deve sapere a che distanza si trova i veicolo seguito. Se il veicolo ombra viene distanziato, se ne deve accorgere ed accelerare. Se gli si avvicina troppo, anche in questo caso se ne deve accorgere e deve di conseguenza rallentare. Se invece è alla giusta distanza, deve continuare così fino a che le misurazioni gli indichino di nuovo che è troppo vicino o troppo lontano. La distanza è solamente uno dei valori di cui i robot ed altri macchinari automatizzati devono tener conto. Quando una macchina è progettata per mantenere automaticamente un valore, come la distanza, la pressione od un livello di fluidi, generalmente coinvolge un sistema di controllo. Questi sistemi spesso consistono di sensori e valvole, o di sensori e motori oppure come nel caso del Boe-Bot, sensori e servo a rotazione continua. C’è anche un qualche tipo di processore che prende le misurazioni dei sensori e le converte in azioni meccaniche. Il processore deve essere programmato per prendere decisioni in base all’ingresso dei sensori, e quindi controllare di conseguenza la meccanica di uscita. Nel caso del Boe-Bot, il processore è il BASIC Stamp 2. Il controllo a ciclo chiuso è un metodo comune peer il mantenimento dei livelli, e funziona molto bene nell’aiutare il Boe-Bot a mantenere la giusta distanza da un oggetto. Esiste una moltitudine di tipi diversi di controlli a ciclo chiuso. Alcuni dei più comuni sono l’isteresi, il controllo proporzionale, integrale e derivato. Tutti questi tipi di controllo vengono spiegati dettagliatamente nel testo Stamps in Class Industrial Control, elencato nella prefazione. La maggior parte delle tecniche di controllo possono essere implementate con appena poche righe di codice PBASIC. In fatti, la maggior parte del ciclo di controllo Pagina 268 · Robotica con il Boe-Bot proporzionale mostrato nella Figura 8-4 si riduce ad appena una riga di codice PBASIC. Questo diagramma viene chiamato diagramma a blocchi, e descrive i passi del processo di controllo proporzionale che il Boe-Bot userà per misurare la distanza con la sua coppia destra LED IR e rivelatore e regolare la posizione per mantenere la distanza con il suo servo destro. Center pulse width 750 Error = -2 + - Kp X error 35 X -2 Output adjust -70 + + Right servo output 680 Measured right distance = 4 Figura 8-4 Diagramma a Blocchi del Controllo Proporzionale per il Servo Destro e la coppia LED IR e Rivelatore System Per apprendere come funziona il controllo proporzionale osservate attentamente le cifre della Figura 8-4. Questo esempio in particolare è per la coppia LED IR/rivelatore e servo destri. Il punto di taratura è 2, il che significa che volete che il Boe-Bot mantenga una distanza di 2 tra se stesso e qualsiasi oggetto che rilevi. La distanza misurata è 4, significa che è troppo lontano. L’errore è uguale al punto di taratura meno la distanza misurata, cioè 2 – 4 = –2. Questo è indicato dai simboli nel cerchio a sinistra. Questo cerchio si chiama giunzione sommatoria. Segue, l’errore che viene inserito in un blocco operatore. Questo blocco mostra che quell’errore verrà moltiplicato per un valore chiamato costante proporzionale (Kp). Il valore di Kp è 35. L’uscita del blocco visualizza il risultato dell’operazione –2 × 35 = –70, che viene chiamata regolazione di uscita. Questa regolazione di uscita entra in un’altra giunzione sommatoria, e questa volta viene sommata all’impulso di centratura del servo che è 750. Il risultato è una larghezza d’impulso di 680 che farà girare il servo a circa ¾ della velocità massima in senso orario. Ciò fa ruotare la ruota destra del Boe-Bot in avanti, verso l’oggetto. Questa correzione agisce sul sistema complessivo che consiste nel Boe-Bot, e nell’oggetto, che era ad una distanza misurata di 4. Alla prossima iterazione del ciclo, la distanza misurata potrebbe cambiare, ma tutto questo è ininfluente visto che a prescindere dalla distanza misurata, questo ciclo di Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 269 controllo calcolerà un valore che farà muovere il servo per correggere qualsiasi errore. La correzione è sempre proporzionale all’errore, che è la differenza tra il punto di taratura e la distanza misurata. Un ciclo di controllo ha sempre un insieme di equazioni che governano il sistema. Il diagramma a blocchi della Figura 8-4 è un modo grafico di descrivere questo insieme di equazioni. Queste sono le equazioni che possono essere tratte dal diagramma a blocchi, insieme con le soluzioni. Errore = Punto di Taratura della Distanza Destra – Distanza Destra Misurata = 2–4 Regolazione di Uscita = errore × Kp = –2 × 35 = – 70 Uscita del Servo Destro = Regolazione di Uscita + Larghezza dell’Impulso Destro = – 70 + 750 = 680 Effettuando alcune sostituzioni, le tre equazioni di cui sopra possono essere ridotte ad una, che vi darà lo stesso risultato. Uscita del Servo Destro = (Punto di Taratura della Distanza Destra – Distanza Destra Misurata) × Kp + Larghezza dell’Impulso Destro Sostituendo i valori dell’esempio, potete vedere che l’equazione porta allo stesso risultato: = = (2 – 4) × 35 + 750 680 Il servo sinistro e la coppia IR pair hanno un algoritmo simile mostrato nella Figura 8-5. la differenza è che Kp è –35 invece di +35. Assumendo lo stesso valore misurato della coppia IR destra, la regolazione di uscita è una larghezza d’impulso di 820. Questi sono l’equazione ed i calcoli per questo diagramma a blocchi: Uscita del Servo Sinistro = (Punto di Taratura della Distanza Sinistra – Distanza Sinistra Misurata) × Kp + Larghezza dell’Impulso Sinistro = ((2 – 4) × -35) + 750 = 820 Pagina 270 · Robotica con il Boe-Bot Il risultato di questo ciclo di controllo è una larghezza d’impulso che fa girare il servo sinistro a circa ¾ della velocità massima in senso antiorario. Anche questo è un impulso in avanti per la ruota sinistra. L’idea della controreazione è che l’uscita del sistema viene ricontrollata, dal Boe-Bot prendendo un’altra misura della distanza. Quindi il ciclo di controllo si ripete ancora ed ancora ed ancora…circa 40 volte al secondo. Center pulse width 750 Error = -2 + - Kp X error -35 X -2 Output adjust +70 + + Left servo output 820 Measured left distance = 4 Figura 8-5 Diagramma a Blocchi del Controllo Proporzionale per il Servo Sinistro e la coppia LED IR e Rivelatore System Programmazione del Boe-Bot Veicolo Ombra Ricordate che l’equazione per l’uscita per il servo destro era: Uscita del Servo Destro = (Punto di Taratura della Distanza Destra – Distanza Destra Misurata) × Kp + Larghezza dell’Impulso Destro Di seguito viene mostrato un esempio di soluzione di questa stessa equazione in PBASIC. Il punto di taratura della distanza destra è 2, la distanza misurata è una variabile di nome distanceRight che memorizzerà la misura IR della distanza, Kp è 35, e la larghezza dell’impulso di centratura è 750: pulseRight = 2 - distanceRight * 35 + 750 Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 271 Ricordate che in PBASIC le espressioni matematiche vengono eseguite da sinistra a destra. primo, distanceRight viene sottratta da 2. Il risultato di questa sottrazione è poi moltiplicato per Kp, dopodichè, il prodotto viene sommato alla larghezza dell’impulso di centratura. In una riga di codice PBASIC per forzare il calcolo di elementi che devono essere eseguiti prima, potete usare le parentesi. Riprendete questo esempio: potete riscrivere questa riga di codice PBASIC: pulseRight = 2 - distanceRight * 35 + 750 In questo modo: pulseRight = 35 * (2 – distanceRight) + 750 In questa espressione, 35 viene moltiplicato per il risultato di (2 – distanceRight), il prodotto viene sommato a 750. Il servo sinistro è differente perché Kp peer quel sistema è -35 pulseLeft = 2 - distanceLeft * (-35) + 750 Dal momento che i valori -35, 35, 2, e 750 hanno tutti un significato, è veramente un buon motivo fare delle dichiarazioni di costanti per assegnargli un nome. Kpl Kpr SetPoint CenterPulse CON CON CON CON -35 35 2 750 Nel programma con queste dichiarazioni di costanti, al posto di -35 potete mettere Kpl, Kpr al posto di 35, SetPoint al posto di 2, and CenterPulse al posto di 750. Dopo queste dichiarazioni di costante, il calcolo del controllo proporzionale ora appare così: pulseLeft = SetPoint - distanceLeft * Kpl + CenterPulse pulseRight = SetPoint - distanceRight * Kpr + CenterPulse La cosa conveniente circa la dichiarazione di costanti per questi valori è che potete cambiare il loro valore in un posto solo, all’inizio del programma. I cambiamenti che farete all’inizio del programma saranno effettuati in tutte le occasioni in cui vengono usate queste costanti. Per esempio, cambiando la direttiva Kpl CON da -35 a -40, nel programma ogni volta che è presente Kpl verrà usato il valore -40 invece di -35. questo è enormemente utile nella sperimentazione e nella regolazione dei cicli di controllo proporzionali destro e sinistro. Pagina 272 · Robotica con il Boe-Bot Programma Esempio– FollowingBoeBot.bs2 FollowingBoeBot.bs2 effettua il ciclo di controllo proporzionale appena discusso per ogni impulso ai servo. In altre parole, prima di ciascun impulso, viene misurata la distanza e determinato il segnale di errore. Quindi l’errore viene moltiplicato per Kp, ed il valore risultante viene sommato/sottratto alle/dalle larghezze degli impulsi dei servo sinistro/destro. √ √ √ √ √ ' ' ' ' Digitate, Salvate e Lanciate FollowingBoeBot.bs2. Orientate il Boe-Bot verso un foglio di carta A4 verticale come se fosse un muro. Il Boe-Bot dovrebbe mantenere una distanza fissa rispetto al foglio di carta. Provate a ruotare leggermente il foglio, il Boe-Bot dovrebbe ruotare altrettanto. Provate ad usare il foglio per guidare il Boe-Bot. Il Boe-Bot lo dovrebbe seguire. Muovete il foglio verso il Boe-Bot, e lui dovrebbe retrocedere, allontanandosi dal foglio. -----[ Titolo ]------------------------------------------------------------Robotica con il Boe-Bot - FollowingBoeBot.bs2 Il Boe-Bot regola la sua posizione per mantenere gli oggetti che rileva nella zona 2. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Costanti ]---------------------------------------------------------Kpl Kpr SetPoint CenterPulse CON CON CON CON -35 35 2 750 ' -----[ Variabili ]---------------------------------------------------------freqSelect irFrequency irDetectLeft irDetectRight distanceLeft distanceRight pulseLeft pulseRight VAR VAR VAR VAR VAR VAR VAR VAR Nib Word Bit Bit Nib Nib Word Word ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 273 ' -----[ Routine Principale ]------------------------------------------------ DO GOSUB Get_Ir_Distances ' Calcola l’uscita proporzionale. pulseLeft = SetPoint - distanceLeft * Kpl + CenterPulse pulseRight = SetPoint - distanceRight * Kpr + CenterPulse GOSUB Send_Pulse LOOP ' -----[ Subroutine - Get IR Distances ]-------------------------------------Get_Ir_Distances: distanceLeft = 0 distanceRight = 0 FOR freqSelect = 0 TO 4 LOOKUP freqSelect,[37500,38250,39500,40500,41500], irFrequency FREQOUT 8,1,irFrequency irDetectLeft = IN9 distanceLeft = distanceLeft + irDetectLeft FREQOUT 2,1,irFrequency irDetectRight = IN0 distanceRight = distanceRight + irDetectRight NEXT RETURN ' -----[ Subroutine – Get Pulse ]--------------------------------------------Send_Pulse: PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 5 RETURN Come Funziona FollowingBoeBot.bs2 FollowingBoeBot.bs2 dichiara quattro costanti, Kpr, Kpl, SetPoint, e CenterPulse usando la direttiva CON. Dovunque vedete scritto SetPoint, in realtà è il numero 2 (una costante). Similmente, dovunque vedete Kpl, in relatà è il numero -35. Kpr è in realtà 35, e CenterPulse è 750. Pagina 274 · Robotica con il Boe-Bot Kpl Kpr SetPoint CenterPulse La prima cosa che CON CON CON CON la -35 35 2 750 Routine Principale fa è chiamare la subroutine Get_Ir_Distances. Dopo che la subroutine Get_Ir_Distances è terminata, distanceLeft e distanceRight ciascuna contiene un numero corrispondente alla zona in cui è stato rilevato un oggetto per ambedue le coppie IR sinistra e destra. DO GOSUB Get_Ir_Distances Le due righe di codice seguenti implementano il calcolo per il controllo proporzionale per ciascun servo. ' Calcola l’uscita proporzionale. pulseLeft = SetPoint - distanceLeft * Kpl + CenterPulse pulseRight = SetPoint - distanceRight * Kpr + CenterPulse Ora che i calcoli per pulseLeft e pulseRight sono terminati, può essere chiamata la subroutine Send_Pulse. GOSUB Send_Pulse La parte LOOP del ciclo DO…LOOP invia il programma indietro al comando immediatamente seguente il DO all’inizio del ciclo principale. LOOP Il vostro Turno La Figura 8-6 mostra un Boe-Bot trainante seguito da un Boe-Bot Ombra. Il Boe-Bot trainante funziona con una versione modificata di FastIrRoaming.bs2, ed il Boe-Bot ombra funziona con FollowingBoeBot.bs2. Il controllo proporzionale rende il Boe-Bot ombra un segugio affidabile. Un Boe-Bot trainante può farsi seguire anche da una catena di 6 o 7 Boe-Bot ombra. Semplicemente mettete dei pannelli sui fianchi e sul retro di ciascun Boe-Bot della catena. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 275 Figura 8-6 Boe-Bot trainante (sinistra) e Boe-Bot ombra (destra) √ √ √ √ √ √ √ Se fate parte di una classe, montate dei pannelli sul retro e sui lati del Boe-Bot trainante come mostrato in Figura 8-6. Se non fate parte di una classe (ed avete solamente un Boe-Bot) il veicolo ombra seguirà un pezzo di carta o la vostra mano esattamente nello stesso modo in cui segue il Boe-Bot. Sostituite le resistenze da 1 kΩ che collegano P2 e P8 ai IR LED del Boe-Bot trainante con resistenze da 470 Ω o da 220 Ω. Programate il Boe-Bot trainante per evitare gli oggetti usando una versione modificata di FastIrRoaming.bs2. Aprite FastIrRoaming.bs2, e rinominatelo SlowerIrRoamingForLeadBoeBot.bs2. Digitate queste modifiche sul programma SlowerIrRoamingForLeadBoeBot.bs2: √ Aumentate tutti gli argomenti Duration di PULSOUT che ora sono 650 a 710. √ Diminuite gli argomenti Duration di PULSOUT che ora sono 850 a 790. Il Boe-Bot ombra dovrebbe funzionare con il programma FollowingBoeBot.bs2 senza alcuna modifica. Con tutti i Boe-Bots in funzione con i rispettivi programmi, posizionate il BoeBot ombra dietro il Boe-Bot trainante e gli altri a seguire. I Boe-Bot ombra dovrebbero seguire il Boe-Bot trainante ad una distanza fissa, fino a che non Pagina 276 · Robotica con il Boe-Bot vengano distratti da un altro oggetto come protrebbe essere una mano od un muro nelle vicinanze. Potete cambiare il punto di taratura e le costanti di proporzionalità per cambiare il comportamento del Boe-Bot. Mentre effettuate questi esercizi usate le vostre mani od un pezzo di carta per guidare il Boe-Bot ombra: √ Provate a far funzionare FollowingBoeBot.bs2 usando valori per le costanti Kpr e Kpl, variabili da 15 a 50. Notate la differenza di reattività del Boe-Bot quando stà seguendo un oggetto. Provate a variare il valore della costante SetPoint. Provate valori da 0 a 4. √ ESERCIZIO #3: SEGUIRE UNA LINEA La Figura 8-7 mostra un esempio di percorso che potete costruire e programmare il vostro Boe-Bot per seguirla. Ciascuna striscia di questo percorso è composta da tre lunghi pezzi di nastro ¾ in (19 mm) da elettricisti messo accostato su un foglio di cartoncino bianco. Tra le striscie di nastro nero non deve essere visibile alcuna zona bianca. 15 1 4 V dd 13 1 2 6- 9VD C 9 V dc B a t t ery R ed Bl ack X4 X5 V dd V ni VVssss X3 V ss P1 P 3 P 15 P 5 P 14 P 7 P 13 P 9 P 12 P 11 P 11 P 13 P 10 P 15 P 9 V ni P 8 P7 P6 P5 P4 P3 + R eset P2 P1 P0 X2 0 1 2 B o a rd o f E d uc a t i o n Pw r S TA n MPS i C LAS S TM 1 S out Vn i Sn i V ss AT N R st V ss P0 V dd P 15 P1 P2 P3 P4 U1 P 14 P 13 P 12 P5 P 11 P 10 P6 P9 P7 P8 w w w . st a mp si nc al ss .c om V ss P0 P2 P4 P6 P8 P 10 P 12 P 14 V dd X1 R ev C © 2 000 -2 003 22” (56 cm) Start Figura 8-7 Linea del Percorso da Seguire w w w .s t am ps ni cl a ss. c om P9 P8 P5 P 10 P4 P 11 P3 U1 P 14 P 13 P 15 P0 V dd R st ATN Vn i V ss 1 TM ST AMP in S C LA SS X3 X3 V ss P1 P 155 P 3 P1 P 144 P 5 P1 P 133 P 7 P1 P 122 P 9 P1 P 111 P 11 P1 P 100 P 1 3 P1 P99 P1 5 P P8 V i n P8 P7 P7 P6 P6 P5 P5 P4 P4 P3 P3 P2 P2 P1 P1 P0 P0 X2 R ese t P 12 P1 P2 S out Sn i © 200 0- 200 3 R ev C 0 1 2 P6 P7 V ss Vs s P0 P2 P4 P6 P8 P1 0 P1 2 P1 4 Vd d X1 Pw r B o a rd o f E d u ca t i o n + Vd d V ni X4 V ss X5 Ba lc k 9 Vd c B a t e ry R ed 6- 9V DC 1514 V dd 1312 Finish 28” (71 cm) Montaggio e Collaudo del Percorso Per una esecuzione corretta di questo percorso, saranno necessari alcuni collaudi e regolazioni del Boe-Bot. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 277 Materiali Necessari (1) Foglio di cartoncino – Dimensioni approssimative: 22 X 28 in (56 X 71 cm) (1) Rotolo di nastro nero da elettricisti – Largo ¾” (19 mm). √ Usate il vostro foglio di cartoncino ed il nastro elettrico per costruire il percorso mostrato in Figura 8-7. Collaudo del Percorso √ Puntate le vostre coppie IR verso il basso e verso l’esterno come mostrato nella Figura 8-8 (Figura 7-8 di pagina 249 qui ripetuta per comodità). X4 Vdd X5 Vin Vss Figura 8-8 Coppie IR Oeientate verso il Basso per Vedere la Linea + Board of Education Rev C © 2000-2003 Vista Superiore √ √ √ √ Vista Laterale Assicuratevi che l’ambiente dove si trova il percorso sia esente da interferenze provocate da illuminazione fluorescente. Vedere la sezione Annusare le Interferenze (pagina 239). Lanciate DisplayBothDistances.bs2 di pagina 265. Lasciate il vostro Boe-Bot collegato al cavo seriale in modo che possiate vedere le distanze visualizzate nella finestra di ricezione del Terminale di Debug. Iniziate mettendo il vostro Boe-Bot in modo tale che punti direttamente sul sottofondo bianco del cartoncino come mostrato nella Figura 8-9. Verificate le letture di zona indichino che un oggetto è stato rilevato in una zona molto vicina. Ambedue i sensori dovrebbero darvi una lettura 1 o 0. Pagina 278 · Robotica con il Boe-Bot 15 1 4 6- 9VD C V dd R ed Bl ack X4 Pw r S TA i n MPS C LAS S TM 1 S out Vn i Sn i AT N V ss V ss R st V dd P 15 P0 P1 P2 P3 P4 P5 P6 P7 U1 √ √ V ss P0 P2 P4 P6 P8 P 10 P 12 P 14 V dd X1 P9 P8 V dd X5 V ni V ss V ss X3 P1 P 3 P 15 P 5 P 14 P 7 P 13 P 9 P 12 P 11 P 11 P 13 P 10 P 15 P 9 V ni P 8 P7 P 14 P 13 P 12 P 11 P 10 w w w . st a mps i nc al ss .c om √ Figura 8-9 Prova per un basso numero di Zona – Vista superiore 13 1 2 9 V dc B a t t ery R eset 0 1 2 P6 P5 P4 P3 P2 P1 P0 + X2 B o a rd o f E d uc a t i o n R ev C © 2 000 -2 003 Mettete il vostro Boe-Bot in modo che ambedue le coppie LED IR/rivelatori siano focalizzati esattamente al centro della striscia di nastro per elettricisti (vedere la Figura 8-10 e la Figura 8-11). Quindi, regolate la posizione del vostro Boe-Bot (allontanandolo od avvicinandolo dal/al nastro) fino a che ambedue i valori di zona raggiungono il livello 4 o 5 indicando che è stato rilevato un oggetto lontano oppure nessun oggetto. Se avete difficoltà ad ottenere letture alte con il percorso di nastro da elettricisti, vedere la sezione Risoluzione dei Problemi con il Percorso di Nastro da Elettricisti a pagina 279. 15 1 4 6- 9VD C V dd 13 1 2 9 V dc B a t t ery R ed Bl ack S TA i n MPS C LAS S TM 1 Vn i V ss R st V dd P 15 S out Sn i AT N V ss P0 P1 P2 P3 P4 P5 P6 P7 U1 P 14 P 13 P 12 P 11 P 10 P9 P8 w w w . st a mps i nc al ss .c om X4 X5 Pw r V dd V ni V ss X3 V ss P1 P 3 P 15 P 5 P 14 P 7 P 13 P 9 P 12 P 11 P 11 P 13 P 10 P 15 P 9 V ni P 8 P7 P6 P5 P4 P3 + R eset P2 P1 P0 X2 0 1 2 B o a rd o f E d uc a t i o n V ss P0 P2 P4 P6 P8 P 10 P 12 P 14 V dd X1 R ev C © 2 000 -2 003 Figura 8-10 Prova per un alto numero di Zona – Vista superiore Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 279 Figura 8-11 Prova per un alto numero di Zona – Vista laterale Electrical Tape Risoluzione dei Problemi con il Percorso di Nastro da Elettricisti Se non riuscite ad ottenere valori di zona alti quando i rivelatori IR sono puntati sul nastro da elettricisti, prendete un altro pezzo di cartoncino, e fate una linea con quattro striscie invece che con tre. Se il numero di zona è ancora basso, assicuratevi che stiate usando le resistenze da 1 kΩ (marrone-nero-rosso) in serie con i LED IR. Se nessuno di questi sistemi funziona, provate con una marca diversa di nastro. Un altro aiuto può venire anche regolando le coppie LED IR/rilevatore in modo che sia puntato più vicino o più lontano dal bordo anteriore del Boe-Bot (vedere la Figura 8-11). Se state usando i vecchi LED IR schermati con guaina termorestringente invece dei nuovi con lo schermo plastico, potreste avere dei problemi ad avere dei valori bassi sul sottofondo bianco. A questi LED può necessitare la resistenza in serie da 470 Ω (giallo- viola-marrone) oppure da 220 Ω (rosso-rosso-marrone). Assicuratevi anche, che i terminali dei LED IR non si tocchino tra di loro. √ Ora, mettete il vostro Boe-Bot sul percorso in modo che le sue ruote siano a cavallo della linea nera. I rivelatori IR dovrebbero guardare leggermente all’esterno. Vedere il particolare in Figura 8-12. Verificate che la distanza di lettura sia nuovamente 0 o 1 per tutte e due le coppie. Se le letture sono maggiori, ciò significa che devono essere orientati ancora più verso l’esterno, fuori dai bordi della striscia di nastro da elettricisti. Quando muovete il Boe-Bot in ciascuna direzione indicata dalla doppia freccia, l’una o l’altra delle coppie IR vedrà il nastro nero. Quando lo fate, la lettura della coppia che ora è sul nastro dovrebbe salire a 4 o 5. Ricordate che se muovete il Boe-Bot verso la sua Pagina 280 · Robotica con il Boe-Bot sinistra, il rivelatore dovrebbe aumentare di valore, e se lo muovete verso la sua destra, il rivelatore di sinistra dovrebbe mostrare il valore maggiore. √ Regolate le coppie LED IR/rivelatore fino a che il Boe-Bot non passa questo ultimo test. Quindi sarete pronti per provare a seguire la linea. X4 X5 15 1 4 6- 9VD C V dd 13 1 2 9 V dc B a t t ery R ed Bl ack X4 X5 V dd Vin V ss X3 V ss P1 P 3 P15 P 5 P14 P 7 P13 P 9 P12 P 11 P11 P 13 P10 P 15 P9 V ni P8 P7 P6 P5 P4 P3 + R eset P2 P1 P1 P0 X2 0 1 2 B o a rd o f E d uc a t i o n Pw r Vdd Vin Vss S n i TAM PS C LAS S TM 1 Vn i S out V ss Sn i Rst V dd AT N V ss P 15 P0 P1 P2 U1 P 14 P 13 P3 P4 P5 P 12 P 11 P 10 P6 P7 P9 P8 w ww . st a mps i nc al ss .c om V ss P0 P2 P4 P6 P8 P 10 P 12 P 14 V dd X1 R ev C © 2 000 -2 003 Figura 8-12 Prova della Scansione della Linea + Board of Education Rev C © 2000-2003 Particolare delle Coppie IR Vista Superiore del Boe-Bot a cavallo della linea Programmazione per Seguire la Linea Per far seguire la linea al vostro Boe-Bot dovrete apportare solamente alcune piccole modifiche a FollowingBoeBot.bs2. di pagina 272. Primo, il Boe-Bot dovrebbe avvicinarsi agli oggetti più dell’impostazione di SetPoint ed allontanarsi dagli oggetti di più di SetPoint. Questo è esattamente il contrario di come si comportava FollowingBoeBot.bs2. Per invertire la direzione verso cui si muove il Boe-Bot quando rileva che un oggetto non è alla distanza di SetPoint, semplicemente invertite il segno di Kpl e di Kpr. In altre parole, cambiate Kpl da -35 a 35, e Kpr da 35 a -35. Dovrete fare un po’ di esperimenti con il vostro SetPoint. I Valori da 2 a 4 tendono a funzionare meglio. Il prossimo programma esempio userà un SetPoint di 3. Programma Esempio: StripeFollowingBoeBot.bs2 √ √ √ √ Aprite FollowingBoeBot.bs2 e salvatelo come StripeFollowingBoeBot.bs2. Cambiate la dichiarazione SetPoint da SetPoint CON 2 a SetPoint CON 3. Cambiate Kpl da -35 a 35. Cambiate Kpr da 35 a -35. Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 281 √ √ Lanciate il programma (mostrato sotto). Mettete il vostro Boe-Bot nella posizione “Start” mostrata in Figura 8-13. Il BoeBot deve attendere fino a che non gli mettete davanti alle coppie IR la vostra mano. Deve quindi avanzare. Quando ha sorpassato la striscia di inizio, togliete la mano, ed il Boe-Bot comincerà a seguire la linea. Quando arriverà alla striscia “Finish”, si dovrà fermare ed attendere. Assumendo che otteniate una lettura di 5 sulla striscia di nastro e 0 sul cartoncino bianco, valori di costante SetPoint di 2, 3, e 4 dovrebbero andare bene. Provate con valori differenti di SetPoint e notate le prestazioni del vostro Boe-Bot sul percorso. √ 15 1 4 V dd 13 1 2 6- 9VD C 9 V dc B a t t ery R ed Bl ack X4 X5 V dd V ni VVssss X3 V ss P1 P 3 P 15 P 5 P 14 P 7 P 13 P 9 P 12 P 11 P 11 P 13 P 10 P 15 P 9 V ni P 8 P7 X1 P6 P5 P4 P3 + R eset P2 P1 P0 X2 0 1 2 B o a rd o f E d uc a t i o n Pw r S TA n i M PS C LAS S TM 1 S out Vn i Sn i V ss AT N V ss P0 P1 R st V dd P 15 P 14 P2 P3 P4 P5 U1 P 13 P 12 P 11 P 10 P6 P9 P7 P8 w w w . st a mp si nc al ss .c om V ss P0 P2 P4 P6 P8 P 10 P 12 P 14 V dd R ev C © 2 000 -2 003 22” (56 cm) Start Figura 8-13 Percorso della Linea da Seguire w w w .s t am ps ni cl a ss. c om P9 P8 P5 P 10 P4 P 11 P3 U1 P 14 P 13 P 15 P0 V dd R st ATN Vn i V ss 1 TM ST AMP in S C LA SS X3 X3 V ss P1 P 155 P 3 P1 P 144 P 5 P1 P 133 P 7 P1 P 122 P 9 P1 P 111 P 11 P1 P 100 P 1 3 P1 P99 P1 5 P P8 V i n P8 P7 P7 P6 P6 P5 P5 P4 P4 P3 P3 P2 P2 P1 P1 P0 P0 X2 R ese t P 12 P1 P2 S out Sn i © 200 0- 200 3 R ev C 0 1 2 P6 P7 V ss Vs s P0 P2 P4 P6 P8 P1 0 P1 2 P1 4 Vd d X1 Pw r B o a rd o f E d u ca t i o n + Vd d V ni X4 V ss X5 Ba lc k 9 Vd c B a t e ry R ed 6- 9V DC 1514 V dd 1312 Finish 28” (71 cm) ' ' ' ' ' -----[ Titolo ]------------------------------------------------------------Robotica con il Boe-Bot - StripeFollowingBoeBot.bs2 Il Boe-Bot regola la sua posizione muovendosi verso oggetti più vicini della zona 3 ed allontanadosi dagli oggetti più lontani della zona 3. Utile per seguire una striscia di circa 6 cm di nastro da elettricisti. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. DEBUG "Il Programma è in Funzione!" ' -----[ Costanti ]----------------------------------------------------------Kpl Kpr CON CON 35 -35 ' Cambiare da -35 a 35 ' Cambiare da 35 a -35 Pagina 282 · Robotica con il Boe-Bot SetPoint CenterPulse CON CON 3 750 ' Cambiare da 2 a 3. ' -----[ Variabili ]---------------------------------------------------------freqSelect irFrequency irDetectLeft irDetectRight distanceLeft distanceRight pulseLeft pulseRight VAR VAR VAR VAR VAR VAR VAR VAR Nib Word Bit Bit Nib Nib Word Word ' -----[ Inizializzazione ]--------------------------------------------------FREQOUT 4, 2000, 3000 ' -----[ Routine Principale ]------------------------------------------------ DO GOSUB Get_Ir_Distances ' Calcola l’uscita proporzionale. pulseLeft = SetPoint - distanceLeft * Kpl + CenterPulse pulseRight = SetPoint - distanceRight * Kpr + CenterPulse GOSUB Send_Pulse LOOP ' -----[ Subroutine - Get IR Distances ]-------------------------------------Get_Ir_Distances: distanceLeft = 0 distanceRight = 0 FOR freqSelect = 0 TO 4 LOOKUP freqSelect,[37500,38250,39500,40500,41500], irFrequency FREQOUT 8,1,irFrequency irDetectLeft = IN9 distanceLeft = distanceLeft + irDetectLeft FREQOUT 2,1,irFrequency irDetectRight = IN0 distanceRight = distanceRight + irDetectRight NEXT RETURN Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 283 ' -----[ Subroutine - Get Pulse ]--------------------------------------------Send_Pulse: PULSOUT 13,pulseLeft PULSOUT 12,pulseRight PAUSE 5 RETURN Il Vostro Turno– Gara di Percorso su una Linea Potete trasformare questo esercizio in una gara, vince chi effettua il percorso nel tempo più breve, premesso che il Boe-Bot si posizioni con precisione alle striscie “Start” e “Finish”. Potete anche ideare altri percorsi. Per le migliori prestazioni, sperimentate con valori diversi di SetPoint, Kpl, e Kpr. Pagina 284 · Robotica con il Boe-Bot SOMMARIO La scansione di frequenza è stata studiata come metodo per determinare la distanza usando le coppie di LED IR/rivelatori del Boe-Bot. Per inviare segnali IR con frequenze da 37.5 kHz (più sensibile) a 41.5 kHz (meno sensibile) è stato utilizzato il comando FREQOUT. La distanza è stata determinata trovando la frequenza che veniva rilevata dai rivelatori IR come oggetto rilevato e quella che risultava come oggetto non rilevato. Dal momento che, le frequenze non erano spaziate regolarmente è stato usato il comando LOOKUP come maniera semplice di usare la sequenza di conteggio fornita da un ciclo FOR…NEXT per indicizzare liste sequenziali di numeri. Sono stati anche studiati i sistemi di controllo insieme con i controlli a circuito chiuso. Il controllo proporzionale in un sistema a circuito chiuso è un algoritmo dove un errore viene moltiplicato per una costante proporzionale per determinare l’uscita del sistema. L’errore è la misura dell’uscita del sistema sottratta dal punto di taratura. Per il Boe-Bot, l’uscita di sistema ed il punto di taratura erano espressi in termine di distanza. Il BASIC stamp è stato programmato con il PBASIC per operare i cicli di controllo per i servo sinistro e destro e per i rilevatori di distanza. Ricampionando la distanza e regolando l’uscita prima di inviarla ai servo, il ciclo di controllo ha reso il Boe-Bot reattivo agli oggetti in movimento. Il Boe-Bot è stato in grado di usare il controllo proporzionale per agganciare e seguire oggetti, ed è stato anche in grado di tracciare e seguire un percorso marcato con nastro nero da elettricisti. Domande 1. Quale sarebbe la sensibilità relativa del rivelatore IR se usaste FREQOUT per inviare un’armonica di 35 kHz? E qual è la sensibilità relativa con un’armonica di 36 kHz? 2. se ponete un oggetto nella Zona 1, quale frequenza può essere usata per rilevare l’oggetto e quale no? E con la Zona 4? 3. Considerate il pezzettino di codice sottoriportato. Se la variabile index è 4, quale numero sarà inserito nella variabile prime in questo comando LOOKUP? Quale valore conterrà prime quando index è 0, 1, 2, e 7? LOOKUP index, [2, 3, 5, 7, 11, 13, 17, 19], prime 4. Che cosa fa il comando irDetect = IN9 nei programmi esempio in questo capitolo? Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 285 5. Nella Figura 8-4, quale sarebbe l’errore se il punto di taratura è 4 e la distanza misurata è 1? Quale sarebbe la regolazione dell’uscita? E cosa direste circa l’uscita del servo destro? 6. In quale ordine vengono risolte le espressioni matematiche con il PBASIC? Come potete alterare quell’ordine? 7. Quale direttiva PBASIC potete usare per dichiarare una costante? Come dareste al numero 100 il nome “Punto di Ebollizione”? 8. In cosa differisce StripeFollowingBoeBot.bs2 da FollowingBoeBot.bs2? in quale modo le differenze rendono possibile al Boe-Bot seguire una linea? Che cosa accade alla distanza rilevata se il Boe-Bot devia dalla linea? In che modo il calcolo proporzionale riporta il Boe-Bot sul percorso? Esercizi 1. Elencate la sensibilità dei rivelatori IR per ciascuna frequenza espressa in kHz mostrata nella Figura 8-1. 2. Elencate la tabella di valori Si/No che TestLeftFrequencySweep.bs2 visualizza quando l’oggetto viene messo in ciascuna zona come mostrato in Figura 8-2. 3. Scrivete un segmento di codice che effettui la spazzolata di frequenze solamente per quattro frequenze invece che cinque. 4. Effettuare i calcoli del controllo proporzionale per il servo destro (Figura 8-4) per ciascuna possibile distanza misurata (0 to 5). Ripetete per la Figura 8-5. 5. Create un piccolo elenco di controlli per le prove da effettuare per assicurare una corretta esecuzione del percorso. Progetti 1. Modificate TestLeftFrequencySweep.bs2 di pagina 264 in modo che usi il cicalino piezo per indicare la distanza rilevata dal sensore. Ci sono due modalità su cui vale la pena investigare. Una modalità consiste nell’usare un bip dello stesso tono, ma accelerandolo man mano che l’oggetto si avvicina. La seconda modalità èconsiste nell’emettere i bip sempre allo stesso ritmo ma aumentandone il tono man mano che l’oggetto si avvicina e diminuendolo se si allontana. 2. Progettate un sistema dove ambedue i rivelatori IR indicano la distanza rilevata facendo lampeggiare i LED rossi sinistro e destro a ritmi che corrispondono alla distanza dell’oggetto rilevato. Suggerimenti: Partite dallo schema e dal cablaggio mostrati nelle Figura 7-4 e Figura 7-5 (pagina 232) e DisplayBothDistances.bs2 (pagina 265). Pagina 286 · Robotica con il Boe-Bot Questo progetto non è così semplice come potrebbe sembrare. Implica la creazione di un contatore libero che aumenti man mano all’interno di un ciclo DO…LOOP. Il ciclo DO…LOOP dovrebbe anche avere un comando PAUSE con una durata che corrisponda al ritmo on/off minimo da voi scelto. Ad ogni iterazione del ciclo, usate IF…THEN per confrontare il contatore con il valore che avrà il contatore la prossima volta che il LED dovrà cambiare stato. Ogni volta che il LED cambia effettivamente stato, dovrete controllare di nuovo la distanza, e decidere quante ulteriori unità di conteggio attendere fino al prossimo cambio di stato del LED. State comunque attenti al fatto che una variabile di tipo word non può accettare valori maggiori di 65535. Potrebbe rivelasi utile azzerare il vostro contatore prima che arrivi a quel valore, altrimenti potreste incorrere in risultati inaspettati. 3. Mentre il Boe-Bot stà eseguendo FollowingBoeBot.bs2, potete posizionarlo davanti ad un oggetto fermo, ed il Boe-Bot dopo essersi posizionato alla distanza corretta attenderà che si muova, ma non è per nulla eccitante osservare il BoeBot mentre se ne stà fermo ad aspettare! L’obbiettivo potrebbbe essere di avere un Boe-Bot che si accorga di star fermo senza far niente ed interrompa il controllo proporzionale per effettuare, diciamo, una curva di 120°, quindi tornare al controllo proporzionale. Suggerimenti: Potete farlo creando due contatori, uno che si incrementi di 1 ad ogni iterazione del ciclo DO…LOOP, e l’altro che si incrementi solamente quando il Boe-Bot effettua un passo in avanti. Quando il contatore che si incrementa ad ogni iterazione del ciclo DO…LOOP giunge a 60, usate IF…THEN per controllare quanti impulsi in avanti sono stati inviati ai servo. Se sono stati inviati meno di 20 impulsi, può darsi che il Boe-Bot stia fermo in attesa di un movimento dell’oggetto, a questo punto chiamare una routine che esegua una curva (senza l’aiuto del controllo proporzionale). Ricordatevi di azzerare ambedue i contatori ogni volta che il contatore dei cicli giunge a 60. 4. ProgettoAvanzato - Sul percorso create incroci di tipo diverso con il nastro nero da elettricisti e programmate il Boe-Bot per rilevare di quale tipo di incrocio si tratta. Gli incroci possono essere a 90° a sinistra, 90° a destra, a T ed a croce. Suggerimenti: Questo implicherà che il Boe-Bot li riconosca come incroci, il che è simile al Progetto 3. Dopo che il Boe-Bot ha riconosciuto che si tratta di un incrocio, deve usare un movimento preprogrammato per arrivare al centro dell’incrocio e capire se ancora vede il nastro nero oppure il cartoncino bianco Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 287 sia a sinistra che a destra. Deve quindi avanzare ancora un poco, e magari ruotare leggermente per vedere se la striscia continua oppure no. 5. ProgettoAvanzato – Se siete riusciti con il Progetto 4, aggiungete movimenti preporgrammati per navigare in questi incroci. Create un labirinto di striscie di nastro da elettricista. Cercate il comando RANDOM nel BASIC Stamp Manual, ed usatelo per navigare attraverso gli incroci a T e quelli a croce. L’obbiettivo e di fare in modo che il Boe-Bot non percorra mai nello stesso modo il percorso degli incroci. 6. ProgettoAvanzato – Progettate una gara di vostra fantasia per la soluzione di labirinti, e programmate il Boe-Bot per riuscire a compiere il percorso! Appendice A: Ricerca Guasti nella Comunicazione dal PC al BASIC Stamp · Pagina 289 Appendice A: Ricerca Guasti nella Comunicazione dal PC al BASIC Stamp Segue un elenco di cose da fare per risolvere rapidamente ogni difficoltà nella comunicazione tra l’Editor del BASIC Stamp ed il vostro BASIC Stamp: √ √ √ √ √ Se state usando la Board of Education Rev C, assicuratevi di aver messo l’interruttore a tre posizioni nella posizione -1. Scartate le pile scariche e verificate la funzionalità degli alimentatori poco affidabili usando una pila da 9 V nuova. Assicuratevi che il cavo seriale sia fermamente inserito sia nel connettore della porta COM del computer sia nel connettore della Board of Education o della BASIC Stamp HomeWork Board. Assicuratevi che il vosto cavo seriale sia un cavo seriale “diritto”. NON USATE UN CAVO SERIALE NULL MODEM. La maggior parte dei cavi null modem sono etichettati NULL oppure Null Modem; ispezionate visivamente per trovare queste etichette (magari possono essere stampate sui connettori). Se trovate questa etichetta non cercate di usare questo cavo per programmare il BASIC Stamp. Disabilitare qualsiasi software per computer palmari. Se state usando il BASIC Stamp e la Board of Education, controllate anche le cose seguenti: √ √ √ Assicuratevi che il BASIC Stamp sia stato inserito nel suo zoccolo nella maniera corretta come mostrato nella Figura 1-24 a pagina 18. Assicuratevi che il BASIC Stamp sia inserito a fondo nel suo zoccolo. Prima scollegate l’alimentazione, controllate che la tacca di riferimento sia correttamente orientata e che i piedini siano dritti, premete a fondo il BASIC Stamp con il pollice. Ispezionate visivamente il BASIC Stamp per contollare che nessun piedino fuoriesca dal suo alloggiamento nello zoccolo nella Board of Education. Se state usando un alimentatore da rete, assicuratevi che sia correttamente inserito nella presa, che la presa fornisca tensione e che lo spinotto sia correttamente inserito nel connettore della Board of Education. Verificate che il LED verde marcato Pwr sulla Board of Education sia acceso quando l’alimentatore è in funzione. Pagina 290 · Robotica con il Boe-Bot Se la vostra finestra di Identificazione è simile a quella mostrata nella Figura A-1, significa che l’Editor del BASIC Stamp non può trovare il vostro BASIC Stamp su nessuna porta COM. Se avete questo problema, provate le seguenti azioni: Figura A-1 Finestra di Identificazione Esempio: BASIC Stamp 2 non trovato su nessuna porta COM. √ √ √ √ √ √ √ Chiudete la finestra di Identificazione. Assicuratevi che il cavo seriale sia correttamente collegato. Provate il test Run → Identify di nuovo. Se conoscete il numero della porta COM, ma non appare nella finestra di identificazione, usate il pulsante Edit Port List per aggiungere quella porta COM, quindi riprovate il test Run → Identify. Se avete più di una porta COM, provate a collegare la vostra Board of Education o la BASIC Stamp HomeWork Board ad un’altra porta COM e vedete se Run → Identify ora funziona. Se avete un altro computer, provate la vostra Board of Education o la BASIC Stamp HomeWork Board con quest’ultimo. Se nessuno dii questi tentativi funziona, andate al sito www.parallax.com e seguite il link Support. Se ricevete il messaggio di errore “No BASIC Stamp Found” ma il test Run → Identify mostra “Yes” in tutte e due le colonne di una porta COM, potreste dover cambiare le impostazioni dei buffer FIFO. Questo succede occasionalmente con Microsoft Windows® 98 ed XP. Annotate su quale porta COM compare il messaggio “Yes”, e provate a: Windows® 98 & Windows® 2000: √ √ Clickate sul pulsante Start del vostro desktop. Selezionate Settings→ Control Panel → System → Device Manager → Ports (COM & LPT). Appendice A: Ricerca Guasti nella Comunicazione dal PC al BASIC Stamp · Pagina 291 √ √ √ √ √ Selezionate la porta COM che avevate annotato con il test Run → Identify. Selezionate Properties → Port Settings → Advanced. Deselezionate la casella marcata “Use FIFO Buffers” quindi clickate OK. Clickate OK fino a chiudere tutte le finestre e tornate all’Editor del BASIC Stamp. Provate di nuovo a scaricare al BASIC Stamp un programma. Windows® XP: √ √ √ √ √ √ √ √ √ Clickate sul pulsante Start del vostro desktop. Selezionate Control Panel → Printers and Other Hardware. Nel Riquadro “See Also” selezionate System. Seleezionate Hardware → Device Manager → Ports. Inserite il numero della porta COM annotata dal test Run→ Identify. Selezionate Port Settings → Advanced. Deselezionate la casella marcata “Use FIFO Buffers” quindi clickate OK. Clickate OK fino a chiudere tutte le finestre e tornate all’Editor del BASIC Stamp. Provate di nuovo a scaricare al BASIC Stamp un programma. Windows® XP Pro: √ √ √ √ √ √ √ Clickate sul pulsante Start del vostro desktop. Selezionate Control Panel → System → Hardware → Device Manager → Ports(COM & LPT1). Selezionate il numero della porta COM annotata dal test Run→ Identify. Selezionate Properties → Port Settings → Advanced. Deselezionate la casella marcata “Use FIFO Buffers” quindi clickate OK. Clickate OK fino a chiudere tutte le finestre e tornate all’Editor del BASIC Stamp. Provate di nuovo a scaricare al BASIC Stamp un programma. Se nessuna di queste soluzioni funziona, potete andare al sito www.parallax.com e seguire il link Support. O inviare, un’email a [email protected] o chiamare il numero verde del Supporto Tecnico al 1-888-99-STAMP (solamente per gli Stati Uniti). Appendice B: BASIC Stamp e Scheda Madre Componenti e Prestazioni · Pagina 293 Appendice B: BASIC Stamp e Scheda Madre Componenti e Prestazioni Il Modulo del Microcontrollore BASIC STAMP® 2 La Figura B-1 mostra un ingrandimento del modulo del Microcontrollore BASIC Stamp® 2. I suoi componenti più importanti e le loro funzioni sono indicate da etichette. Figura B-1: Componenti e Funzioni del Modulo del Microcontrollore BASIC Stamp® 2 Pagina 294 · Robotica con il Boe-Bot La Scheda Madre Board of Education® Rev C La Scheda Madre Board of Education® Rev C per i moduli a microcontrollore a 24 pin BASIC Stamp® viene mostrato nella Figura B-2. I suoi componenti più importanti e le loro funzioni sono indicate da etichette . Figura B-2: Scheda Madre Board of Education® Rev C Appendice B: BASIC Stamp e Scheda Madre Componenti e Prestazioni · Pagina 295 The BASIC Stamp® HomeWork Board™ Project Platform La Piattaforma di Progetto BASIC Stamp® HomeWork Board™ è mostrata nella Figura B-3. I suoi componenti più importanti e le loro funzioni sono indicate da etichette Figura B-3: Piattaforma di Progetto BASIC Stamp® HomeWork Board™ Pagina 296 · Robotica con il Boe-Bot La Scheda Madre Board of Education® Rev B La Figura B-4 mostra la Scheda Madre Board of Education® Rev B per i Moduli a microcontrollore a 24 pin BASIC Stamp® 24-pin. I suoi componenti più importanti e le loro funzioni sono indicate da etichette. Figura B-4: Scheda Madre Board of Education® Rev B Appendice C: Codice Colori delle Resistenze · Pagina 297 Appendice C: Codice Colori delle Resistenze Le resistenze come quelle che avete usato in questa guida per studenti hanno strisce colorate che vi indicano di quale valore sono quelle resistenze. Per ogni valore di resistenza c’è una diversa combinazione di colore. Per esempio, il codice colori per la resistenza da 470 Ω è giallo-viola-marrone. Ci può essere una quarta striscia che indica la tolleranza della resistenza. La tolleranza viene indicata in percentuale, e vi indica di quanto può differire il valore reale della resistenza dal valore nominale. La quarta striscia può essere; oro (5%), argento (10%), o assente (20%). Per gli esercizi di questo libro, la tolleranza della resistenza non è importante, lo è invece il suo valore. Ciascuna striscia di colore che vi indica il valore della resistenza corrisponde ad una cifra, e questi colori/cifre sono elencate nella Tabella C-1. La Figura C-1 mostra come usare ciascuna fascia colorata con la tabella per determinare il valore di una resistenza. Tabella C-1: Valori e Codice Colori delle Resistenze Cifra 0 1 2 3 4 5 6 7 8 9 Colore Nero Marrone Rosso Arancio Giallo Verde Blu Viola Grigio Bianco Tolerance Code First Digit Number of Zeros Figura C-1 Codice Colori delle Resistenze Second Digit Questo è un esempio che mostra come possono essere usate la Tabella C-1 e la Figura C1 per trovare il valore di una resitenza constatando che giallo-viola-marrone significa realmente 470 Ω: Pagina 298 · Robotica con il Boe-Bot • • • La prima fascia è giallo, che significa che la cifra più a sinistra è un 4. La seconda fascia è viola, che significa che la cifra successiva è un 7. La terza fascia è marrone. Dal momento che marrone è 1, significa che dovrete aggiungere uno zero alla destra delle vostre prime due cifre. Giallo-Viola-Marrone = 4-7-0. Appendice D: Regole di Esecuzione dei Prototipi · Pagina 299 Appendice D: Regole di Esecuzione dei Prototipi Guardate la vostra Board of Education o la HomeWork Board. Il quadrato bianco con centinaia di fori, o morsetti, viene chiamata area prototipale senza saldature. Quest’area, insieme con le striscie di connettori neri intorno a due dei suoi lati, costituisce l’area dove verranno assemblati i vostri prototipi (mostrata nella Figura D-1). I circuiti esempio di questo testo sono assemblati inserendo i terminali dei componenti come le resistenze, i LED, i cicalini, e dei sensori in questi piccoli connettori. I componenti sono collegati tra di loro tramite i connettori dell’area prototipale. Fornirete alimentazione ai vostri circuiti con i terminali di alimentazione, che sono nella striscia di connettori neri lungo la parte superiore e che sono marcati Vdd, Vin, e Vss. La striscia di connettori neri lungo il lato sono marcati P0, P1, fino a P15. Questi connettori vi permettono di collegare il vostro circuito ai pin Ingresso/Uscita del BASIC Stamp. Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura D-1 Area Prototipale Terminali di Alimentazione (Connettore nero superiore), accesso dei pin I/O (Connettorre nero Laterale), e Area Prototipale (Connettori Bianchi) L’area prototipale ha 17 righe di fori separate in due colonne da un solco. Il solco divide ciascuna delle diciassette righe in due righe di cinque fori. In ciascuna riga i cinque fori sono elettricamente collegati all’interno dell’ara prototipi. Potete usare queste righe di connettori per collegare insieme i componenti come indicato dagli schemi elettrici. Se inserite due fili nei fori della stessa riga, essi saranno elettricamente collegati tra di loro. Lo schema elettrico di un circuito è come un a carta stradale che mostra come collegare insieme i componenti. Lo schema elettrico usa simboli unici ciascuno rappresentante un diverso componente. I simboli di questi componenti sono collegati insieme da linee che Pagina 300 · Robotica con il Boe-Bot stanno ad indicare delle connessioni elettriche. Quando due simboli del circuito sono collegati da una linea sullo schema, la linea indica che tra i due componenti c’è una connesssione elettrica. Le linee possono anche essere usate per collegare i componenti alle sorgenti di alimentazione. Vdd, Vin, e Vss hanno tutti dei simboli. Vss corrisponde al terminale negativo dell’alimentazione a pile per la Board of Education o per la BASIC Stamp HomeWork Board. Vin è il pterminale positivo della pila, e Vdd è l’uscita dal regolatore dei +5 volt. Date un’occhiata ad un esempio che usa uno schema per collegare i componenti mostrati nella Figura D-2. Per ciascuno di questi componenti, il disegno del componente è mostrato sopra al simbolo schematico. Gold Silver or Blank Yellow Violet Brown Figura D-2 Disegno dei Componenti e Simboli Schematici LED(sinistra) e Resistenza da 470 Ω (destra) + 470 Ω LED La Figura D-3 mostra un esempio di uno schema circuitale sulla sinistra ed il disegno di come può essere assemblato sulla destra. Notate come lo schema mostri che un estremo della linea a zig zag che identifica la resistenza sia collegato al simbolo di Vdd. Nel disegno, uno dei due terminali della resistenza è inserito nel connettore marcato Vdd. Nello schema, l’alto terminale del simbolo della resistenza è collegato da una linea al terminale positivo del simbolo del LED. Ricordsate, la linea indica che i due componenti sono collegati elettricamente. Nel disegno, questo è ottenuto inserendo l’altro terminale della resistenza nella stessa riga di cinque connettori dove è inserito il terminale positivo del LED. Questo fa sì che i due terminali siano collegati elettricamente. L’altro terminale Appendice D: Regole di Esecuzione dei Prototipi · Pagina 301 del LED è collegato al simbolo Vss. Nel disegno, l’altro terminale del LED è mostrato inserito in uno dei connettori marcati Vss. Vdd X3 Vdd 470 Ω LED Vss P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Vin Vss + Figura D-3 Schema Elettrico Esempio e Schema di Cablaggio Schema Elettrico (sinistra) e schema di cablaggio (destra) La Figura D-4 mostra un secondo esempio di schema elettrico e schema di cablaggio. Questo schema mostra P14 collegato all’estremo di una resistenza, con l’altro estremo connesso al terminale positivo di un LED, ed il terminale negativo del LED collegato a Vss. Lo schema è diverso dal precedente solamente per un collegamento. Il terminale della resistenza che era collegato a Vdd è ora collegato al pin I/O P14 del BASIC Stamp. Lo schema può sembrare diverso dal precedente, prinicplamente perché la resistenza è disegnata orizzontalmente invece che in verticale. Ma in termini di collegamento, la differenza è solamente nel collegamento, P14 al posto di Vdd. Lo schema di cablaggio mostra come viene risolta questa differenza con il terminale della resistenza prima collegato a Vdd, ora inserito in P14. Pagina 302 · Robotica con il Boe-Bot Vdd X3 P14 470 Ω LED Vss P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Vin Vss + Figura D-4 Schema Elettrico Esempio e Schema di Cablaggio Schema Elettrico (sinistra) e schema di cablaggio (destra) Questo è un esempio più complesso che coinvolge altri due componenti, una Fotoresistenza ed un condensatore. I somboli schematici ed i disegni dei componenti sono mostrati nella Figura D-5. Figura D-5 Simboli Schematici e Disegno dei Componenti 0.01 µF Fotoresistenza (superiore) e Condensatore non polarizzato (basso) Dal momento che lo schema mostrato nella Figura D-6 richiede una resistenza da 220 Ω, la prima cosa da fare è consultare l’Appendice C: Codice Colori delle Resistenze per determinare il codice colori della resistenza da 220 Ω. Il codice colori è Rosso, Rosso, Marrone. Questa resistenza nello schema è collegata a P6, che corrisponde al terminale della resistenza inserito nel connettore marcato P6 nell’area prototipi (Figura D-7). Nello Appendice D: Regole di Esecuzione dei Prototipi · Pagina 303 schema, l’altro capo della resistenza è collegato non ad uno, ma a due altri terminali di componenti. Un terminale della fotoresistenza e del condensatore condividono questo collegamento. Sull’area prototipi, l’altro terminale della resistenza è inserito in una delle righe a cinque connettori. Questa riga ha inseriti anche i terminali del condensatore e della fotoresistenza. Nello schema, gli altri terminali della fotoresistenza e del condensatore sono collegati a Vss. Questo è un trucco da ricordarsi mentre si assembla un circuito sull’area prototipi. Potete usare un filo per collegare una riga ad un’altra riga, od anche ai pin I/O od ai terminali di alimentazione come Vdd o Vss. In questo caso, è stato usato un filo per collegare Vss ad una riga sull’area prototipi. Quindi, i terminali del condensatore e della fotoresistenza sono stati inseriti nella stessa riga, completando il circuito. P6 220 Ω 0.1 µF Vss Figura D-6 Schema Elettrico della Resistenza, Fotoresistenza, e Condensatore Pagina 304 · Robotica con il Boe-Bot Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura D-7 Schema di Cablaggio della Resistenza, Fotoresistenza, e Condensatore Ricordate che gli schemi di cablaggio presentati fino ad ora come soluzione agli schemi elettrici NON sono le uniche soluzioni per quegli schemi. Per esempio, la Figura D-8 mostra un’altra soluzione per lo schema appena visto. Seguite i collegamenti e convincetevi che aderisce ugualmente allo schema elettrico. Vdd Vin Vss X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2 Figura D-8 Schema di Cablaggio della Resistenza, Fotoresistenza, e Condensatore Notate la diversa disposizione dei Componenti. Appendice E: Elenco Componenti del Boe-Bot · Pagina 305 Appendice E: Elenco Componenti del Boe-Bot Per completare gli esercizi di questo testo, dovrete avere un Boe-Bot completo ed i componenti necessari per l’assemblaggio dei circuiti esempio. Per ordinare queste parti alla Parallax ci sono diversi modi, che sono descritti nelle pagine seguenti. Tutte le informazioni di questa Appendice erano giuste al momento della stampa. La Parallax può sostituire dei componenti a sua discrezione, ciò può essere dovuto alla necessità di migliorare la qualità dei propri prodotti. Per informazioni aggiornate del vostro Boe-Bot e per scaricare gratuitamente le guide per studenti Robotica con il BoeBot, controllare sulle pagine specifiche al sito www.parallax.com. Kit del Boe-Bot Robot (conosciuto anche come Boe-Bot Full Kit) A parte il PC con una porta seriale ed alcuni attrezzi casalinghi, il kit del Boe-Bot Robot contiene tutte le parti e le documentazioni necessarie per l’esecuzione di tutti gli esperimenti di questo testo. Table E-1: Boe-Bot Full Kit (#28132) I componenti e le quantità sono soggette a variazioni senza avviso Codice Parallax Descrizione Quantità BS2-IC Modulo Microcontrollore BASIC Stamp 2 1 27000 CD Parallax con software e documentazione 1 27218 BASIC Stamp Programming Manual Version 2.0 1 28124 Kit Componenti per Robotica con il Boe-Bot 1 28125 Robotica con il Boe-Bot Student Guide Version 2.0 1 28150 Board of Education Rev C 1 700-00064 Giravite Parallax 1 800-00003 Cavo Seriale 1 Tutte queste parti possono anche essere ordinate separatamente, usando i codici individuali. Potete contattare l’ufficio vendite della Parallax Sales al numero verde 1-888512-1024 (solo dagli Stati Uniti) oppure con ordine online al sito www.parallax.com. Per domande tecniche o per assistenza chiamate il nostro Technical Support team al numero 1-888-99-STAMP. Pagina 306 · Robotica con il Boe-Bot Robotica con il Boe Bot Parts Kit Se avete già una Board of Education ed un BASIC Stamp, potete acquistare il kit di componenti Robotica con il Boe-Bot, con o senza il testo stampato Robotics with the Boe-Bot Student Guide v2.0 (solo in lingua inglese). Table E-2: Robotica con il Boe-Bot Componenti e Testo, #28154 Robotica con il Boe-Bot senza Testo, #28124 I componenti e le quantità sono soggette a variazioni senza avviso Codice Parallax Descrizione Quantità 150-01020 1 kΩ Resistenza 2 150-01030 10 kΩ Resistenza 2 150-02020 2 kΩ Resistenza 2 150-02210 220 Ω Resistenza 8 150-04710 470 Ω Resistenza 4 150-04720 4.7 kΩ Resistenza 2 200-01031 0.01 µF condensatore 2 200-01040 0.1 µF condensatore 2 350-00003 LED Infrarosso 2 350-00006 LED Rosso 2 350-00009 Fotoresistenze (EG&G Vactec VT935G group B) 2 350-00014 Ricevitore Infrarosso (Panasonic PNA4602M o equivalente) 2 350-90000 Supporto per LED infrarosso 2 350-00001 Schermo per LED infrarosso 2 451-00303 Spinotto a 3-Pin maschio/maschio 2 700-00056 Baffi in Filo di ferro 2 700-00015 Rondella in nylon per le viti #4 2 710-00007 Viti a testa tonda 7/8” 4-40, Phillips 2 713-00007 Distanziali ½” #4, rotondi in alluminio 2 800-00016 Ponticelli in filo (busta di 10) 2 900-00001 Cicalino Piezo 1 28133 Parti Meccaniche del Boe-Bot 1 Appendice E: Elenco Componenti del Boe-Bot · Pagina 307 Assemblaggio di un Boe-Bot con la HomeWork Board Se già avete una BASIC Stamp HomeWork Board che vorreste usare con un Boe Bot, vi servirà il kit di componenti Robotica con il Boe-Bot e questi elementi addizionali: (2) Spinotto a 3-pin maschio/maschio, #451-00303 (1) Pacco Porta Pile con l’estremità dei cavi stagnata, #753-00001 Parti Meccaniche del Boe-Bot Tutte le parti meccaniche del Boe-Bot possono essere acquistate separatamente, come descritto nel nostro negozio on-line per componenti Robotici se vi accorgete di aver bisogno di un ricambio. Vogliate notare che l’insieme delle parti meccaniche non viene venduto separatamente dal Boe-Bot Robot (Full) Kit o dal Boe-Bot Parts Kit. Table E-3: Parti Meccaniche del Boe-Bot (#28133) I componenti e le quantità sono soggette a variazioni senza avviso Codice Parallax Descrizione Quantità 700-00002 Viti a testa tonda 4-40 x 3/8”, Phillips 8 700-00003 Dadi 4-40 zincati 10 700-00009 Sfera d 1" (25,4 mm) in polietilene, forata 1 700-00016 Viti a testa svasata 4-40 x 3/8”, Phillips 2 700-00022 Telaio in alluminio del Boe-Bot 1 700-00023 Coppiglia lunga 1/16" x 1.5” 1 700-00025 Passacavi in gomma 13/32" 2 700-00028 Viti a testa svasata 4-40 x 1/ 4”, Phillips 8 700-00038 Pacco porta pile con cavo e spinotto cilindrico 1 700-00060 Distanziali, filettati in alluminio, cilindrici 4-40 4 721-00001 Ruote Parallax in plastica 2 721-00002 Elastici con funzioni di copertoni 4 900-00008 Servo Parallax a rotazione Continua 2 Pagina 308 · Robotica con il Boe-Bot Kit della Board of Education Quasi tutti i corsi Stamps in Class hanno materiali e componenti diversi ma che come nucleo hanno il BASIC Stamp e la Board of Education. La Board of Education può essere acquistata separatamente o con il proprio kit, come elencato sotto nella Tabella E-4. Table E-4: Board of Education – Full Kit (#28102) I componenti e le quantità sono soggette a variazioni senza avviso Codice Parallax Descrizione Quantità 28150 Board of Education Rev C 1 800-00016 Ponticelli di filo – busta di 10 1 BS2-IC modulo microcontrollore BASIC Stamp 2 1 750-00008 Alimentatore 300 mA 9 VDC 1 800-00003 Cavo Seriale 1 Appendice F: Bilanciamento delle Fotoresistenze · Pagina 309 Appendice F: Bilanciamento delle Fotoresistenze In questa appendice, proverete le fotoresistenze per trovare se reagiscono in modo simile agli stessi livelli di luce incidente. Se le misure che esse riportano per la stessa luce incidente sono differenti, potete modificare i vostri programmi per scalare i valori riportati dalle vostre fotoresistenze. I valori saranno quindi simili per livelli di luce incidente simili, e questo può aiutare il Boe-Bot a riconoscere in modo più preciso differenti livelli di luce incidente. Questa tecnica può a sua volta aiutare il Boe-Bot ad uscire da stanze buie, anche con circuiti a fotoresistenze discordanti. I circuiti RC con le fotoresistenze possono riportare valori differenti con lo stesso livello di luce per molti motivi: Il valore nominale dei condensatori è 0.01 µF, ma il valore reale dei condensatori può essere molto diverso. Molti condensatori ceramici comuni sono classificati con la tolleranza di +80/-20%, il chè significa che il valore reale può essere fino al 80% maggiore o il 20% minore di 0.01 µF. Questo a sua volta significa che anche il tempo di decadimento può essere del 80% maggiore o del 20% minore. Anche le stesse fotoresistenze possono comportarsi diversamente se sono state acquistate da fornitori diversi o da lotti differenti oppure ancora se hanno la superficie sensibile alla luce sbavata o scheggiata. Prova per circuiti di Fotoresistenze ben Accoppiate Il prossimo programma esempio visualizza nel terminale di debug il tempo di decadimento per tutte e due le fotoresistenze. E questo facilita la valutazione delle differenze tra le due letture per livelli di luce similari. Per migliori risultati, eliminate le sorgenti di luce solare diretta: In generale, le condizioni di illuminazione uniformi migliorano le prestazioni del Boe-Bot con le fotoresistenze. Chiudete le serrande per eliminare la luce solare diretta. Le stanze con illuminazione soffusa come ad esempio l’illuminazione fluorescente o le plafoniere a soffitto funzionano meglio. Programma Esempio: TestPhotoresistors.bs2 √ √ √ Digitate, salvate, e Lanciate TestPhotoresistors.bs2. Proiettate un’ombra sulle fotoresistenze del Boe-Bot con un foglio di carta bianco. Trovate un livello di ombreggiatura che vi dia una lettura tra 20 e 100. Scrivete i valori per le due misure di tempo nella prima riga della Tabella F-1. Pagina 310 · Robotica con il Boe-Bot √ √ Con le mani a coppa sulle due fotoresistenze, cercate di creare un’ombra uguale su tutte e due. Per i migliori risultati le letture dovrebbero essere nella gamma da 200 a 400. Scrivete i valori per le due misure di tempo nella seconda riga della Tabella F-1. Tabella F-1: Misure RC-Time in luce ambiente ed a bassa luminosità Valori di Duration timeLeft timeRight Descrizione Fotoresistenze con illuminazione ambientale uniforme Fotoresistenze con illuminazione uniformemente bassa ' Robotica con il Boe-Bot - TestPhotoresistors.bs2 ' Prova dei circuiti a fotoresistenza del Boe-Bot. ' {$STAMP BS2} ' {$PBASIC 2.5} timeLeft VAR declarations. timeRight VAR ' Direttiva Stamp. ' Direttiva PBASIC. Word ' Dichiarazione di Variabile Word DEBUG "VALORI delle FOTORESISTENZE", CR, "timeLeft timeRight", CR, "-------- ---------" ' Inizializzazione. DO ' Routine Principale. HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft ' Misura RC time sinistra. HIGH 3 PAUSE 3 RCTIME 3,1,timeRight ' Misura RC time destra. DEBUG CRSRXY, 0, 3, DEC5 timeLeft, " ", DEC5 timeRight ' Visualizzazione delle misure. PAUSE 200 LOOP Appendice F: Bilanciamento delle Fotoresistenze · Pagina 311 Calibrazione con l’Approssimazione Lineare La fotoresistenza è ritenuta un dispositivo non lineare. In altre parole, se dà una lettura ad un certo livello di luminosità, non significa che darà una lettura cinque volte maggiore quando la luminosità sarà cinque volte di più. La matematica di questo fenomeno è molto più complicata ed implica l’uso dei logaritmi. Anche se, nei casi dove le misurazioni sono limitate ad una gamma ristretta rispetto alle capacità di rilevazione del sensore, tale sensore può essere considerato come se fosse un dispositivo lineare. Potete prendere due misure, e quindi predire come reagirà il dispositivo se altre misure intermedie possono essere tracciate su una retta. Questa tecnica si chiama approssimazione lineare. Un’altra cosa che potete fare con un dispositivo lineare è presumere che anche la differenza tra due linee può essere tracciata come linea. In fatti, se avete un dispositivo lineare che restituisce una misura maggiore di un altro per luce ambientale di bassa intensità, potete usare l’approssimazione lineare per far sì che i sensori restituiscano approssimativamente gli stessi valori per identici livelli luminosi. Per ogni lettura di un sensore, (chiameremo questo sensore x), potete moltiplicarlo per un fattore di scala (m), ed aggiungerlo ad una costante (b) per ottenere un valore della stessa grandezza dell’altro sensore (y). y = mx + b Il seguente è un esempio di come ottenere i valori di m e b per eguagliare la fotoresistenza del circuito di sinistra a quello di destra. Primo, assegnate X1 ed X2 ai valori della fotoresistenza di sinistra e Y1 e Y2 ai valori della fotoresistenza di destra. La Tabella F-2) mostra i valori per alcuni esempi di fotoresistenze dissimili. I vostri valori saranno diversi. Tabella F-2: Misure RC-Time in luce ambiente ed a bassa luminosità Valori di Duration timeLeft timeRight Descrizione X1 = 36 Y1 = 56 Fotoresistenze con illuminazione ambientale uniforme X2 = 152 Y2 = 215 Fotoresistenze con illuminazione uniformemente bassa Ora, risolvete per trovare m e b usando due equazioni a due incognite. Una delle soluzioni più semplici è di scrivere due equazioni y = mx + b, una con i valori per X1 e Pagina 312 · Robotica con il Boe-Bot Y1 e l’altra per i valori di X2 e Y2. Quindi, sottraete l’uno dall’altro per eliminare b. Poi, risolvete per trovare m. y2 = mx2 + b − ( y1 = mx1 + b ) −−−−−−−−−−−−− ( y2 − y1 ) = m( x2 − x1 ) m= ( y2 − y1 ) ( x2 − x1 ) Quando avete risolto per m, potete reinserire m in ciascuna delle due equazioni y = mx + b di partenza per ottenere b. y 2 = mx2 + b b = y 2 − mx2 In questo modo, le due equazioni per la risoluzione di m e b si trasformano in: m= ( y 2 − y1 ) ( x2 − x1 ) and b = y 2 − mx2 Inserite ora i valori della Tabella F-2 nelle equazioni per vedere quali saranno i valori per il fattore di scala (m) e per la costante di offset (b) della fotoresistenza di sinistra. Primo, calcolate m: m= ( y 2 − y1 ) ( x2 − x1 ) ( 215 − 56 ) ( 152 − 36 ) 159 m= = 1.37 116 m= Quindi, usate m, y2, ed x2 per calcolare b: Appendice F: Bilanciamento delle Fotoresistenze · Pagina 313 b = 215 − ( 1.37 × 152 ) b = 6.76 b ≈7 Ora, sapete come correggere la variabile timeLeft in modo che restituisca dei valori simili a quelli della variabile timeRight in questa gamma ristretta di livelli luminosi: y = mx + b y = 1.37 x + 7 timeLeft( adjusted ) = 1.37 × timeLeft + 7 Una Equazione Lineare in PBASIC Nella maggior parte dei linguaggi di programmazione per PC, questa equazione potrebbe essere inserita così com’è. Il BASIC Stamp confrontato con i PC è un processore molto semplice. Per questo motivo, ci vuole un passo in più per moltiplicare per un valore frazionale. Dovete usare l’operatore */ . Per l’equazione timeLeft, il codice PBASIC per calibrare la variabile timeLeft può essere fatta in questo modo: timeLeft = (timeLeft */ 351) + 7 Il valore calibrato di timeLeft dopo l’esecuzione diquesta riga di codice è 1,37 volte la vecchia timeLeft, più 7. Come ha fatto 1.37 a diventare 351? Per il modo in cui lavora l’operatore */ dovete moltiplicare il vostro valore frazionale per 256, e metterlo alla destra dell’operatore */. Dal momento che 1.37 X 256 = 350.72 ≈ 351, il valore 351 viene posto a desta dell’operatore */. Per saperne di più sull’operatore */ nell’Editor del BASIC Stamp consultate l’help in linea clickando Help e selezionando Index. Digitate */ nel campo etichettato “Type in keyword to find”. Potete anche cercare */ nella sezione degli operatori Binari del BASIC Stamp Manual. Il Vostro Turno – Bilanciamento delle vostre Fotoresistenze con m e b √ Nella Tabella F-1, etichettate il primo valore timeLeft X1 ed il secondo valore timeLeft X2. √ √ Etichettate il primo valore timeRight Y1 ed il secondo valore timeRight Y2. Usate queste equazioni ed i vostri valori X1, X2, Y1, ed Y2 per trovare la soluzione per m e b. Pagina 314 · Robotica con il Boe-Bot m= √ √ ( y 2 − y1 ) ( x2 − x1 ) and b = y 2 − mx2 Calcolate i valori di m che userete con l’operatore */ moltiplicando m peer 256. Nella seguente riga di codice tratta da BalancePhtoresistors.bs2 sostituite con i vostri valori m e b: timeLeft = (timeLeft */ 351) + 7 √ √ √ √ √ Digitate, Salvate, e Lanciate la versione calibrata di BalancePhotoresistors.bs2. Esponete ambedue le fotoresistenze allo stesso livello luminoso. Verificate che i valori “dopo” siano simili e con le differenze dei valori “prima” corrette. Scegliete un diverso livello luminoso ed esponete nuovamente ambedue le fotoresistenze. Controllate che anche questa volta i valori “dopo” siano simili. ' Robotica con il Boe-Bot - BalancePhotoresistors.bs2 ' Prova della calibrazione dei circuiti a fotoresistenza del Boe-Bot. ' {$STAMP BS2} ' {$PBASIC 2.5} timeLeft timeRight VAR VAR ' Direttiva Stamp. ' Direttiva PBASIC. Word Word ' Dichiarazione delle Variabili. DEBUG "VALORI delle FOTORESISTENZE", CR, "timeLeft timeRight", CR, "----------------" ' Inizializzazione. DO ' Routine Principale. HIGH 6 PAUSE 3 RCTIME 6,1,timeLeft ' Misura RC time di Sinistra. HIGH 3 PAUSE 3 RCTIME 3,1,timeRight ' Misura RC time di Destra. DEBUG CRSRXY, 0, 3, DEC5 timeLeft, ' Visualizzazione delle Misure. Appendice F: Bilanciamento delle Fotoresistenze · Pagina 315 " ", DEC5 timeRight, " Prima" timeLeft = (timeLeft */ 351) + 7 DEBUG CRSRXY, 0, 5, DEC5 timeLeft, " ", DEC5 timeRight, " Dopo" PAUSE 200 LOOP ' Visualizzazione delle Misure. Appendix G: Taratura degli IR per la Rilevazione della Distanza · Pagina 317 Appendix G: Taratura degli IR per la Rilevazione della Distanza Ricerca dei Valori Corretti di Scansione delle Frequenze La regolazione fine della rilevazione delle distanze del Boe-Bot implica la determinazione delle frequenze più adatte per ciascuna zona della coppia IR. Nota: Questa appendice presenta un metodo per la determinazione delle frequenze migliori tramite l’uso dei fogli di calcolo. Per questo esercizio occorrono tempo e pazienza, ed è raccomandato solamente se la rilevazione delle distanze del vostro Boe-Bot è molto fuori calibrazione. Bisogna raccogliere i dati della scansione di frequenza ed usarli per determinare i valori più adatti per la rilevazione di quelle particolari distanze. √ √ √ Puntate tutti e due i LED IR ed i rivelatori direttamente in avanti. Piazzate il Boe-Bot davanti ad un muro su cui è attaccato un foglio di carta bianco come bersaglio per gli IR. Mettete il Boe-Bot in modo che i suoi LED IR siano a 2.5 cm dal bersaglio di carta. Assicuratevi che il lato anteriore del Boe-Bot sia parallelo al foglio di carta. E che ambedue i LED IR ed i rivelatori siano puntati verso il foglio di carta. Programma per la Regolazione Fine degli IR FrequencySweep.bs2 effettua la scansione della frequenza per i rivelatori IR e visualizza i dati. Sebbene le tecniche usate sono simili ad altri programmi, ha una caratteristica unica. Il BASIC Stamp è programmato per attendere che voi premiate il tasto Enter. √ Digitate e Lanciate FrequencySweep.bs2, senza scollegare il Boe-Bot dal cavo seriale. ' -----[ Titolo ]------------------------------------------------------------' Robotica con il Boe-Bot - FrequencySweep.bs2 ' Prova della risposta alla scansione di frequenza dei LED IR/rivelatore. ' {$STAMP BS2} ' {$PBASIC 2.5} ' Direttiva Stamp. ' Direttiva PBASIC. ' -----[ Variabili ]---------------------------------------------------------crsrPosRow VAR Byte Pagina 318 · Robotica con il Boe-Bot irFrequency irDetect distance dummy VAR VAR VAR VAR Word Bit Nib crsrPosRow ' -----[ Inizializzazione ]--------------------------------------------------DEBUG CLS, "Clickate nella finestra di trasmissione,", CR, "Quindi per iniziare premere Enter", CR, "Scansione di frequenza...........", CR, CR, " "FREQUENZA "--------- OGGETTO ", CR, RILEVATO", CR, --------", CR ' -----[ Routine Principale ]------------------------------------------------DO DEBUGIN dummy crsrPosRow = 6 FOR irFrequency = 30500 TO 46500 STEP 1000 crsrPosRow = crsrPosRow + 1 FREQOUT 8,1, irFrequency irDetect = IN9 DEBUG CRSRXY, 4, crsrPosRow, DEC5 irFrequency DEBUG CRSRXY, 11, crsrPosRow IF (irDetect = 0) THEN DEBUG "Si " ELSE DEBUG "No " PAUSE 100 NEXT LOOP √ √ Clickate nella finestra superiore come mostrato nella Figura G-1. Premete il tasto Enter. Appariranno i dati della risposta in frequenza come mostrato nella figura. Appendix G: Taratura degli IR per la Rilevazione della Distanza · Pagina 319 Figura G-1 Debug di Dati di Frequenza Il BASIC Stamp è stato programmato per far visualizzare nel Terminale di Debug “Si “ se è stato rilevato un oggetto e “No” se l’oggetto non è stato rilevato. La Figura G-1 Pagina 320 · Robotica con il Boe-Bot dimostra che per il sensore di sinistra la gamma con una buona risposta al segnale sta tra 36500 e 42500. √ Modificate il ciclo FOR...NEXT nel listato del programma FrequencySweep.bs2 in modo che aumenti la frequenza a passi di 250 ed includa i limiti inferiore e superiore di ambedue i rivelatori. In base ai dati dell’esempio mostrato nella Figura G-1, i valori di start, end, e step del ciclo FOR...NEXT verranno modificati come segue: FOR irFrequency = 36500 to 42500 STEP 250 √ √ √ √ √ √ √ √ Ri-Lanciate il programma FrequencySweep.bs2 modificato, e premete di nuovo il tasto Enter. Riportate i dati per il lato sinistro e destro in fogli di calcolo diversi. Premete di nuovo il tasto Enter key ed annotate il prossimo insieme di dati. Ripetete questo procedimento altre tre volte. Quando avrete finito, avrete cinque insiemi di dati per ciascun sensore in fogli di calcolo diversi per questa frequenza. Arretrate il Boe-Bot di 2.5 cm. Ora i rivelatori IR del vostro Boe-Bot saranno a 5 cm dal foglio di carta. Riportate altri cinque insiemi di dati per questa distanza. Continuate ad arretrare il Boe-Bot di 2.5 cm alla volta ed a registare i dati delle scansioni di frequenza per ogni distanza. Quando il Boe-Bot è stato arretrato di 20 cm, la scansione della frequenza visualizzarà per la maggior parte, se non del tutto dei ”No “. Quando la scansione di frequenza riporta tutti “No “, significa che nessun oggetto viene rilevato a qualsiasi frequenza della scansione. Tramite un processo di attenta valutazione ed eliminazione dei dati del foglio di calcolo, potrete determinare le frequenze ottimali di ciascuna coppia IR per ciascuna zona. Senza alcuna modifica delle routine di navigazione del Boe-Bot possono essere personalizzate fino ad otto zone. Se volete effettuare la personalizzazione per 15 zone, ciò comporterà 30 comandi FREQOUT di 1 millisecondo ciascuno. E questi non potranno essere inseriti facilmente tra gli impulsi ai servo. Una soluzione potrebbe essere di effettuare 15 misurazioni un impulso si ed uno no. Viene qui spiegato come determinare le migliori frequenze per il sensore sinistro. Ricordatevi comunque che dovrete ripetere questo procedimento per il sensore destro. Appendix G: Taratura degli IR per la Rilevazione della Distanza · Pagina 321 Questo esempio presume che stiate cercando le frequenze ottimali per sei zone (da zero a cinque). √ √ Iniziate esaminando i dati presi con il Boe-Bot alla distanza più grande dal foglio di carta. Probabilmente non ci saranno insiemi di dati che abbiano la lettura “Si “ con la stessa frequenza. Controllate i dati della distanza precedente di 2.5 cm verso il foglio di carta. Presumibilmente, avrete un insieme di quattro o cinque letture “Si “ ad una frequenza particolare. Annotate questa frequenza come misura affidabile per la marcatura del confine tra la zona 0 e la zona 1. A ciascuna delle cinque distanze rimanenti, trovate una frequenza i valori di uscita siano appena divenuti stabili. Per esempio, a 15 cm, tre differenti frequenze possono mostrare cinque letture “Si “. Se guardate alla distanza 17.5 cm, solamente due di queste frequenze erano stabili. Per questa distanza scegliete le frequenze che non erano stabili a 17.5 cm ma lo erano a 15 cm come riferimenti affidabili. Ora, questo esempio ha determinato le frequenze che possono essere usate per separare le Zone 5 e 4 e le Zone 4 e 3. Ripetete questo procedimento per i confini delle zone rimanenti. Il Vostro Turno √ Se avete avuto successo nella regolazione fine delle cinque zone ed avete del tempo a disposizione, provate ad aumentare la risoluzione ad otto zone di misura. Salvate i vostri dati per tutti e due i modi. Appendice H: Gare di Navigazione con il Boe-Bot · Pagina 323 Appendice H: Gare di Navigazione con il Boe-Bot Se state pensando di fare una gara per robot autonomi, le seguenti regole sono cortesemente fornite dalla Seattle Robotics Society. GARA #1: ESERCIZIO A PAVIMENTO DEL ROBOT Scopo La gara dell’esercizio a pavimento è stata pensata per dare agli inventori dei robot l’opportunità di mostrare i propri robot od altri aggeggi tecnici. Regole Le regole di questa competizione sono abbastanza semplici. Viene stabilita un’area piana di circa 3 mt x 3 mt, preferibilmente con una sorta di confini fisici ad esempio dei muretti. A ciascun concorrente verrà concesso un massimo di cinque minuti in quest’area per mostrare quello che i propri robot sono in grado di fare. Il proprietario del robot può parlare delle varie capacità e prestazioni del proprio robot. Come sempre, qualsiasi robot che possa danneggiare l’area o mettere a rischio l’incolumità del pubblico non sarà ammesso. Non necessariamente i robot devono essere autonomi, ma ciò è incoraggiato. Il giudizio sarà determinato dagli spettatori, sia tramite gli applausi (il più fragoroso sarà deciso dal giudice), o tramite qualsiasi altro meccanismo di voto. GARA #2: SEGUIRE LA LINEA Obbiettivo La costruzione di un robot autonomo che iniziando dall’area “A” (nella posizione “S”), navighi fino all’area “B” (esclusivamente lungo la linea), quindi fino all’area “C” (sempre lungo la linea),per tornare all’area “A” (nella posizione “F”). Il robot che compie il percorso nel tempo minore (compresi eventuali bonus) vince. Il robot deve entrare nelle aree "B" e "C" per qualificarsi. Lo schema esatto del percorso non sarà reso noto fino al giorno della gara, ma dovrà avere le tre aree descritte in precedenza. Abilità Provate Riconoscere un aiuto alla navigazione ed usarlo per raggiungere l’obbiettivo. Pagina 324 · Robotica con il Boe-Bot Tempo Massimo per Completare il Percorso Quattro Minuti. Percorso Esempio Tutte le misure nel percorso esempio sono approssimative. C’è una linea continua a separare l’Area "A" dall’Area "T" nella posizione "F.” questa indica la fine del percorso. La linea è nera, larga circa 2,25 inches (6 cm.) e distante circa due piedi (60 cm.) dalle pareti. Tutte le curve hanno un raggio di almeno un piede (30 cm.) ed al massimo tre piedi (90 cm.). le pareti sono alte 3 1/2 inches (9 cm.) e circondano il percorso. Il pavimento è bianco ed è fatto di carta ma anche di un materiale della Dupont il Tyvek®. Il Tyvek è una plastica molto robusta usata nelle buste per lettere e nell’edilizia. Le posizioni "S" ed "F" sono esclusivamente per chiarezza e non sono locazioni precise. Un concorrente alla partenza può posizionare il robot ovunque nell’Area "A,” orientato in qualsiasi direzione. Il robot deve stare completamente all’interno dell’Area "A.”. Le Aree "A,” "B" e "C" nel percorso reale non sono colorate. Figure H-1 Esempio di Percorso di Gara Appendice H: Gare di Navigazione con il Boe-Bot · Pagina 325 Punteggio Il punteggio di ciascun concorrente viene calcolato prendendo il tempo impiegato per completare il percorso (in secondi) meno il 10% per ciascun “risultato”. Vince il concorrente con il punteggio più basso. Tabella H-1: Punteggio della Gara Seguire la Linea Risultato Percentuale Dedotta Si ferma nell’area A dopo aver raggiunto B e C 10% Non tocca nessun muro 10% Parte al comando 10% ("Parte al comando" significa che il robot parte con un comando esterno, non tattile. Questo potrebbe essere, ad esempio, un suono od una luce) GARA #3: ATTRAVERSARE UN LABIRINTO Scopo Il labirinto è pensato per fornire una prova delle capacità di navigazione di un robot autonomo. Il punteggio è fatto in modo di favorire sia i robot molto veloci sia quelli che imparano il percorso ad ogni passo. Lo scopo per un robot, posizionato davanti all’entrata del labirinto, è trovare il percorso nel labirinto fino a raggiungere l’uscita nel minor tempo possibile. Caratteristiche Fisiche Il labirinto è costruito di compensato da 3/4" (18 mm.). le pareti sono alte circa 24 inches (60 cm.), e sono verniciate in un colore primario con vernice sintetica. Le pareti sono disposte su una griglia spaziata di 24-inch (60 cm.). a causa dello spessore delle pareti e delle limitazioni nell’accuratezza, i passaggi possono essere larghi non meno di 22 inches (55 cm). Il labirinto può essere grande fino a 20-piedi per lato (6 mt. Per lato), ma può essere più piccola, in base allo spazio disponibile per l’evento. Il labirinto potrà essere posizionato sia su una moquette industriale che su un pavimento duro (dipende da dove si tiene l’evento). Il labirinto dovrà essere posizionato al coperto, Pagina 326 · Robotica con il Boe-Bot in questo modo i vostri robot non dovranno essere impermeabilizzati; sebbene, possano essere soggetti a temperature variabili, vento, e condizioni di illuminazione varie. Il labirinto è un vero e proprio labirinto classico a due dimensioni: esiste un unico percorso dall’inizio alla fine e non ci sono isole. Sia l’entrata che l’uscita sono disposte su pareti esterne. Il labirinto vero e proprio può essere percorso sia seguendo la parete sinistra che la destra. Il labirinto deve essere disegnato attentamente perché non ci sia vantaggio se seguite la parete destra piuttosto che la sinistra. Limitazioni del Robot Il limite principale del robot è che sia autonomo: una volta azionato dal proprietario o dal conduttore, nessuna interazione è permessa fino a che il robot non esca dal labirinto, o fino a che non sia chiaro che il robot è bloccato senza speranza. Ovviamente il robot deve essere sufficientemente piccolo da passare nel labirinto. Può toccare le pareti, ma non le può spostare a suo vantaggio, niente bulldozer. Il giudice può squalificare un robot che sembri muovere le pareti in maniera eccessiva. Il robot non deve danneggiare le pareti o il pavimento. È permessa qualsiasi forma di energizzazione sempre che le autorità locali le permettano o non richiedano protezioni acustiche o dettino ulteriori limitazioni. Punteggio Ciascun robot deve attraversare il labirinto tre volte. Vince il robot con il singolo tempo più basso. Il tempo massimo concesso per ciascun attraversamento è 10 minuti. Se un robot non riesce a finire entro questo tempo, la prova viene interrotta ed al robot viene attribuito un tempo di 10 minuti. Se nessun robot riesce a completare il percorso, sarà dichiarato vincitore dai giudici di gara il robot che avrà compiuto il percorso più lungo. Logistica Ciascun robot effettuerà un passaggio, e si procederà fino a che tutti i robot avranno tentato il primo passaggio del labirinto. Ciascun robot quindi effettuerà il secondo passsaggio nel labirinto, e quindi tutti i robot tenteranno il terzo passaggio. Il giudice a sua discrezione permetterà ad un concorrente di ritardare un passaggio a causa di difficoltà tecniche. Un robot può ricordare il percorso fatto nel passaggio precedente per cercare di migliorare il suo tempo (mappatura del labirinto durante il primo passaggio), e può usare queste informazioni nei passaggi successivi ma solamente se lo fa da se. Non è permesso “configurare” manualmente, circa la configurazione del labirinto, il robot sia via hardware che via software. Ind · Page 327 Indice -*- */, 305 -<- <>, 178 -…- …, 51 -1- 1.4 V threshold, 186 -3- 3-position switch, 16 3-position switch, 35 -9- 90° turns, 128 -A- alarm circuit, 105 American Standard Code for Information Interchange, 33, 147 amps, 49 anode, 46 artificial intelligence, 174 ASCII, 33, 147 -B- backwards motion, 123 ballast, 228 band pass frequency, 222 Basic Analog and Digital, 55 BASIC Stamp components, 283 insertion, 17 low power mode, 28 preventing damage, 36 BASIC Stamp Editor Identification window, 22 Identify, 280, 281 installation, 10 Software, 4 Trouble-Shooting, 279 BASIC Stamp Editor’s Help, 30 BASIC Stamp HomeWork Board, 3 BASIC Stamp HomeWork Board, 4 BASIC Stamp HomeWork Board connecting power, 20 BASIC Stamp HomeWork Board disconnect power, 36 BASIC Stamp HomeWork Board components, 286 BASIC Stamp Manual, 32 batteries, 60 battery pack, 94 battery pack with tinned leads, 63 BIN1, 163 binary numbers, 22 Bit, 70 block diagram, 257 Board of Education, 3, 4 components, 285 servo header, 59 Page 328 · Robotics with the Boe-Bot Board of Education Rev A, 59 Board of Education Rev A or B disconnect power, 36 Board of Education Rev B, 59 components, 287 Board of Education Rev C connecting power, 16 disconnect power, 35 breadboard. See prototyping area brownout, 103, 107 brownout detector, 103 Byte, 70 -C- Cadmium Sulfide, 184 capacitor, 195 part drawing, 196 schematic symbol, 196 carriage return, 28 carrier board, 3 cathode, 46 CdS, 184 centering the servos, 66 chassis, 90 closed loop control, 257 code block, 136 color code, 289 COM port, 279 COM Port, 13 command, 28 comment, 27 Compiler directives, 24 components BASIC Stamp, 283 BASIC Stamp HomeWork Board, 286 Board of Education, 285 Board of Education Rev B, 287 computer system requirements, 5 CON, 203 condensed EEPROM Map, 142 constants, 203 control character CR, 28 control system, 257 cotter pin, 95 CR, 28 CRSRXY, 165 crystal, 105 current, 45, 49 -D- DATA, 143 Word modifier, 149 DATA directive, 147 data storage, 142 DC interference, 222 DC power supply, 279 dead reckoning, 128 DEBUG, 28 DEBUG formatters ?, 72 BIN, 163 DEC, 28 SDEC, 72 Debug Terminal, 26 DEBUGIN, 109 DEC, 28 declare, 71, 203 Ind · Page 329 decrement, 74, 133 derivative control, 257 Detailed EEPROM Map, 147 disconnect power, 35 distance calculation, 129 DO WHILE, 145 DO...LOOP, 44 DO...LOOP UNTIL, 144 Download Progress window, 26 Duration argument, 53, 54, 107 maximum value, 54 -E- EEPROM, 142 electrical tape, 241, 266 electrically erasable programmable read only memory, 142 electromagnetic radiation, 221 electronic filter, 222 ELSE, 170 ELSEIF, 170 END, 28 ENDIF, 170 EndValue, 73 -F- F, 195 farad, 195 feedback, 259 filter sensitivity, 250 flashlight, 200 fluorescent light, 228 fluorescent light interference, 267 fluorescent lights, 222 foot-candle, 184 FOR…NEXT, 73 counting backward, 74 decrement, 74 EndValue, 73 StartValue, 73 STEP StepValue, 74 forward motion, 120 Freq1 argument, 107 FREQOUT, 107 Duration argument, 107 Freq1 argument, 107 Pin argument, 107 frequency, 105 frequency sweep, 250 fundamental frequency, 226 -G- GOSUB, 136 -H- hardware adjustment, 125 harmonic frequency, 226 hertz, 107 hexadecimal, 147 HIGH, 49 PIN argument, 49 hysteresis, 257 -I- I/O pins as inputs or outputs, 186 default to input, 164 Identification window, 22, 279 Identify, 280, 281 IF…THEN, 170 Page 330 · Robotics with the Boe-Bot nesting statements, 174 illuminance, 183, 184 incident light, 184 Index argument, 251 Industrial Control, 257 infrared detector, 223 infrared interference, 228 infrared led, 223 infrared spectrum, 221 initialize, 71 input register, 163, 186 integral control, 257 IR interference, 222 -J- jumper, 59 -K- kilohertz, 107 Kp, 258 -L- label subroutine, 136 LDR, 184 lead vehicle, 257 LED, 46 LED light shield assembly, 223 light dependent resistor, 183 light emitting diode, 46 anode, 46 cathode, 46 schematic symbol, 46 terminals, 46 linear approximation, 303 logic threshold, 187 LOOKUP, 251 Index argument, 251 ValueN argument, 251 Variable argument, 251 LOW, 49 PIN argument, 49 low power mode, 28 lux, 184 -M- math order of operations, 204, 260 measuring distance, 129 Memory Map, 142 microfarad, 195, 196 milliamps, 49 millisecond, 42 -N- nanofarad, 196 negative numbers, 72 Nib, 70 nodes, 198 null modem cable, 279 nylon washer, 159 -O- ohm, 46 omega, 46 operator, 71 operator block, 258 output adjust, 258 -P- Parallax Continuous Rotation servos, 41 part drawing Ind · Page 331 capacitor, 196 RCTIME, 198 LED, 46 READ, 143 photoresistor, 183 RETURN, 136 piezoelectric speaker, 104 SELECT...CASE...ENDSELECT, 144 resistor, 46 STOP, 233 PAUSE, 42 Duration argument, 42 PBASIC, 1 variables, 70 PBASIC commands DEBUG, 28 DEBUGIN, 109 DO WHILE, 145 DO...LOOP, 44 DO...LOOP UNTIL, 144 PBASIC directive, 28 PBASIC directives CON, 203 DATA, 143 PBASIC, 28 Stamp, 28 PBASIC operators */, 305 <>, 178 photoresistor, 183, 184 ELSE, 170 calibration, 303 ELSEIF, 170 part drawing, 183 END, 28 schematic symbol, 183 ENDIF, 170 FOR…NEXT, 73 FREQOUT, 107 GOSUB, 136 HIGH, 49 photoresistor voltage divider troubleshooting, 189 picofarad, 196 piezoelectric crystal, 105 piezoelectric element, 105 piezoelectric speaker, 104 IF…THEN, 170 part drawing, 104 LOOKUP, 251 schematic symbol, 104 LOW, 49 PAUSE, 42 PULSOUT, 53 piezospeaker, 104 alarm circuit, 105 Pin argument, 49, 107 Page 332 · Robotics with the Boe-Bot pivoting motion, 124 plastic wheel, 96 poster board, 241 potentiometer, 69 program storage, 142 programs saving, 26, 27 proportional constant, 258 proportional control, 257 prototyping area input/output pins, 291 prototyping areas socket, 291 PULSOUT, 53 Duration argument, 53 -R- RADAR, 221 RAM, 142 ramping, 133 random access memory, 142 RC decay time, 198 RCTIME, 198 Duration argument, 199 Pin argument, 199 State argument, 199 READ, 143 reference notch, 17 Reset button, 28 Reset button, 26 resistor, 45 color code, 289 leads, 46 light dependent resistor, 183 series resistors, 187 tolerance, 289 voltage divider, 187 RETURN, 136 rotational velocity, 112 RPM, 112 rubber band tire, 95 rubber grommet, 90, 94 -S- saving programs, 26, 27 schematic symbol capacitor, 196 LED, 46 photoresistor, 183 piezoelectric speaker, 104 resistor, 46 screwdriver, 66, 89 screws, 7/8", 159 SDEC, 72 second, 42 SELECT...CASE...ENDSELECT, 144 serial cable, 13 servo header, 59 output shafts, 96 servos avoiding damage, 60, 68 labeling, 92 troubleshooting, 102 shadow vehicle, 257 Ind · Page 333 SODAR, 221 software adjustment, 125 SONAR, 221 spacer, 159 Stamp Directive, 28 standoffs, 90, 98, 159 start/reset indicator, 104 StartValue, 73 STEP StepValue, 74 stepValue, 74 STOP, 233 straightening the trajectory, 126 subroutine call, 136 subroutine label, 136 subroutines, 136 summing junction, 258 -T- tactile switches, 157 tail wheel, 95 threshold voltage, 187 timing diagram, 51, 55 tokens, 142 tolerance, 289 tones, 104 tools required, 89 transfer curve, 112 Transmit windowpane, 109 troubleshooting BASIC Stamp to PC communication, 279 electrical tape course, 269 IR detectors, 227 photoresistor voltage divider, 189 servos, 100, 102, 103 Tyvek, 316 -U- US232B, 14 USB to Serial Adapter, 13, 14 USB to Serial Adaptor, 5 -V- VAR, 70 variable, 70 declare, 71 default value, 70 initialize, 71 VAR, 70 variable sizes, 70 Vbp, 64 Vdd, 48, 291 Vin, 291 voltage, 49 voltage divider, 187 Vss, 291 -W- What’s a Microcontroller? Student Guide, 2 whisker wires, 159 Word, 70 Word modifier, 149 -µ- µF, 195 I componenti e le quantità dei vari kit di Robot Boe-Bot® sono soggetti a variazioni senza preavviso. I componenti possono differire da quelli mostrati in questa illustrazione. Se avete eventuali domande circa il vostro kit vi preghiamo di contattare il sito [email protected].