Sei sulla pagina 1di 354

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 on-
line 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 editor@parallax.com. 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: stampsinclass@parallax.com 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: sales@parallax.com 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: support@parallax.com 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 stampsinclass@parallax.com). 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 Ellizard@interfree.it 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 stampsinclass@parallax.com. 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 doppio-


click 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

6-9VDC 15 14 Vdd 13 12

9 Vdc
Red
Battery
Black

X4 X5

3 Vss
Pwr

Vss X3
Vdd Vin Vss Figura 1-24
STA
in
CLA
MPS
SS
P0
P2
P1
P3 P15 Board of
TM
P4
P6
P5
P7
P14
P13
P12
Education,
P8 P9
Sout
1
Vin
P10
P12
P11
P13
P11
P10
BASIC
Sin
ATN
Vss
Rst
P14
Vdd
P15
Vin
P9
P8 Stamp, Cavi
Vss Vdd P7
P0
P1
P15
P14
X1
P6
P5
delle Pile e
U1
P2
P3
P13
P12
P4
P3
Seriale
P4 P11 Reset P2
P5 P10 P1
P6 P9 P0
P7 P8
0 1 2
X2
Board of Education
Collegate i
www.stampsinclass.com © 2000-2003 componenti
2 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 Figura 1-29
HomeWork Board, Pila e Cavo
STAM (916) 624-8333
Seriale
in PS
CL ASS www.parallaxinc.com Rev A
www.stampsinclass.com

X3
Vdd Vin Vss
Inserite il Cavo Seriale e la Pila da
P15
P14
9 V nella HomeWork Board.
P13
2 P12
P11
P10
P9
P8
P7
P6
P5
P4
Power P3
P2
P1
Alkaline Battery
Powercell

P0
X2
Reset
© 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

1000 0100
01 10 0
10 11
00 0
10

0
1

10101001
0

10
6-9VDC

9 Vdc Figura 1-34

1
0
0 0 Battery
Messaggi dal BASIC Stamp
1 10
100 al vostro Computer
00 000
1 001 STA
in MPS

11
CL A
SS

0 TM
101

1
Sout Vin
Sin Vss
ATN Rst
1

Vss Vdd
0 P0 P15
P1 P14
10 P2
U1
P13
P3 P12
P4 P11
P5 P10
P6 P9
P7 P8

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 Figura 1-36


Icona BS2 Icona PBASIC 2.5

Clickando su questo pulsante inserirà Clickando su questo pulsante inserirà


automaticamente “ ‘ {$STAMP BS2}” automaticamente “ ‘ {$PBASIC 2.5}”
all’inizio del vostro programma. 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
graffe{ }. Se cercate di digitare questi caratteri potreste erroneamente usare le parentesi
tonde ( ) o le parentesi quadre [ ]. Se lo fate, il vostro programma non funzionerà.

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 1-


38).

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 Help, quindi selezionate Index come
mostrato in Figura 1-46.
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

P10 P11
Sout Vin P12 P13 P10
Sin Vss P14 P15 P9
ATN Rst Vdd Vin P8
Vss Vdd X1 P7
P0 P15 P6
P1
P2
U1 P14
P13
P5
P4
Figura 1-50
P3
P4
P12
P11 Reset
P3
P2
Scollegare l’alimentazione della
Board of Education Rev C
P5 P10 P1
P6 P9 P0
P7 P8 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

P15
P14
P13
P12
P11
P10
P9
P8
Figura 1-51
P7
P6 Scollegare la pila dalla
Power
P5
P4
P3
HomeWork Board
P2
P1
Alkaline Battery
Powercell

P0
X2
Reset
© 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 "Ciao!"
DEBUG 32, 32, 32, 32
DEBUG "Di nuovo Ciao!"
DEBUG 13
DEBUG "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 Boe-
Bot è 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 Mounting
horn Flange

Access hole
Phillips
for center
screw
adjusting
feedback
Cable potentiometer
Label should for
read power
“Continuous and
Rotation” control
signal

Mounting Plug for RC servo


Flange connection ports on
Case contains Board of Education
motor, circuits,
and gears

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 Figura 2-2


Silver
or Componente Resistenza da 470
Blank Ω
470 Ω
Yellow Brown
Violet 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 Vin Vss


X3 +
+ Figura 2-4
P15
P13 P14 Due LED Collegati ai
470 Ω P13 pin I/O del BASIC
P12
P12 P11 Stamp P13 e P12
470 Ω P10
P9
P8 Schema elettrico
LED LED
P7
P6
(sinistra) e schema di
P5 cablaggio (destra).
Vss Vss P4
P3
P2
P1
P0
X2

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

-
- -
Figura 2-5
Vdd + - Vdd +
N
- - N N N
Interruzione del BASIC
N N
+ Stamp
+++ + - +++
5V +++ = N - - 5V +++
+++ +++
--- - --- Il BASIC Stamp può essere
- - -N - - --- programmato per collegare
--N -N - NN internamente il circuito del
Vss _ N
- Vss _ -
- - 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 24 VIN SOUT 1 24 VIN Figura 2-6


SIN VSS SIN VSS
Interruzione del
2 23 2 23

ATN 3
BS2 22 RES ATN 3
BS2 22 RES
VSS 4 21 VDD (+5V) VSS 4 21 VDD (+5V) BASIC Stamp
P0 5 Vdd 20 P15 P0 5 Vdd 20 P15
P1 6 19 P14 P1 6 19 P14
P2 7 Vss 18 P13 P2 7 Vss 18 P13
P3 8 17 P12 P3 8 17 P12
Il BASIC Stamp può
P4 9 16 P11 P4 9 16 P11 essere programmato
P5 10 15 P10 P5 10 15 P10 per collegare
P6 11 14 P9 P6 11 14 P9
internamente il
P7 12 13 P8 P7 12 13 P8
circuito del LED a
BS2-IC BS2-IC
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
In alto sopra il
Vdd (5 V) … diagramma di
temporizzazione
vengono indicati gli
Vss (0 V) 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
Figura 2-8
Vdd (5 V) 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
Figura 2-9
Diagramma di
Temporizzazione per
PulseBothLeds.bs2
0.13 s 0.13 s
i LED emettono luce per
0.13 secondi mentre il
P12 segnale è alto.

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

P3
P2
P1
(916) 624-8333
P0
www.parallaxinc.com Rev B
www.stampsinclass.com
X2
Vdd Vin Vss Board of Education
X3 Rev C © 2000-2003 Figura 2-10
Esempi delle
BASIC Stamp Board of Education Rev C
etichette di
HomeWork Board Rev B
revisione sulla
Rev A
BASIC Stamp
15 14 13 12 HomeWork Board e
STA
in C MPS
LASS
sulle Board of
Red Education
Black VR1 Vdd Vss
X4 X5 X3 nc
Rev B
Vdd Vin Vss X2
X3 5
Board of Education Rev B 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 → Board of Education Rev C


Pagina 63 → 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 Figura 2-11


Togliere
l’alimentazione
0 1 2

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
Selezionate Vdd se state usando
un alimentatore DC da rete
(220 V 50 Hz). Figura 2-12
Red
Black Selezione
X4 X5 15 14 Vdd 13 12 dell’alimentazione
Vin
dei vostri servo sulla
Red Board of Education
Selezionate Vin se state usando il Black Rev C
portapile che viene fornito con il kit X4 X5
del Boe-Bot. 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
P13 Red White White
Red Red
Black Black Black Figura 2-13
Schema
15 14 Vdd 13 12
elettrico
Vss delle
Red
Black connessioni
Vin X4 X5 dei Servo e
White
schema di
P12 Red cablaggio
Black per la Board
of Education
Rev C
Vss

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 Vss


X3 +
+
P15
P13 P14 Figura 2-15
470 Ω P13 Circuito di
P12
P12 P11 controllo
470 Ω P10 dello stato
P9
P8 dei Servo a
LED LED
P7
P6
LED
P5
Vss Vss P4
P3
P2
P1
P0
X2

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
P13 Red
Black

Figura 2-17
Vss
Schema dei Collegamenti dei
Servo sulla BASIC Stamp
Vbp
HomeWork Board.
White
P12 Red
Black

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

Figura 2-18
Schema di
Collegamento
dei Servo per
la BASIC
Stamp
Filo Nero
HomeWork
Filo Nero con Board
(916) 624-8333
striscia bianca (916) 624-8333 Rev B
Rev B www.parallaxinc.com
www.parallaxinc.com
www.stampsinclass.com www.stampsinclass.com Sinistra
Vdd Vin Vss Vdd Vin Vss (costruzione
X3 X3 delle porte
P15 P15 servo).
P14 Å P13 P14 Å
P13 P13 Bianco
P12
Å Vbp
P12
Destra
Å Vss Å
P11
Å Vbp
P11 Rosso (connessione
P10 P10 Å Nero dei servo).
Å P12 P9
P9
P8 P8
Collegamento dei Servo con colori dei
Collegamento delle Porte
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
Rev B
www.parallaxinc.com
www.stampsinclass.com
Vdd Vin Vss
Vss
X3 +
P13 +
470 Ω P15 Figura 2-20
P14 Circuito di
P12 P13
470 Ω P12 controllo dei
P11 Servo a
P10
P9 LED
LED LED P8
P7
Vss Vss P6
P5
P4
P3
P2
P1
P0
X2
© 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.

Figura 2-22
Diagramma di
1.5 ms 1.5 ms Temporizzazione per
la centratura dei
Servo P12.bs2
P12
Gli impulsi di 1.5 ms
indicano ai servo di
20 ms 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.

Figura 2-23
Mettete l’interruttore a 3-Posizioni in
0 1 2 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 Ruotate delicatamente per


Phillips nel foro del potenziometro 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 – Contiene
Bit – da 0 a 1
Nib – da 0 a 15
Byte – da 0 a 255
Word – da 0 a 65535
Oppure da -32768 a + 32767

Il prossimo Programma Esempio impiega solamente due variabili word:


value VAR Word
anotherValue VAR 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 VAR Word ' Dichiara le variabili


anotherValue VAR Word

value = 500 ' Inizializza le variabili


anotherValue = 2000

DEBUG ? value ' Visualizza i valori


DEBUG ? anotherValue

value = 10 * anotherValue ' Esegue le operazioni

DEBUG ? value ' Visualizza di nuovo i valori


DEBUG ? anotherValue

END

Come Funziona VariablesAndSimpleMath.bs2


Questo codice dichiara due variabili word, value ed anotherValue.
value VAR Word ' Dichiara le variabili
anotherValue VAR Word

I seguenti comandi sono esempi di inizializzazione di variabili con un valore determinato


da voi.
value = 500 ' Inizializza le variabili
anotherValue = 2000

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 ' Visualizza i valori


DEBUG ? anotherValue

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 ' Visualizza di nuovo i valori


DEBUG ? anotherValue

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 ' Visualizza di nuovo i valori


DEBUG ? anotherValue

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 Figura 2-25


Un treno di impulsi di
Vdd (5 V) 1.3 ms fa girare il
standard servo

servo alla massima


www.parallax.com

velocità in senso
Vss (0 V) 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.
Figura 2-26
Un treno di
1.7 ms 1.7 ms
impulsi di 1.7
Vdd (5 V) ms fa girare il
standard servo
www.parallax.com
servo alla
massima
Vss (0 V) velocità in
senso
20 ms 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 Comportamento
Massima velocità, servo P13
850 650
antiorario, servo P12 orario.

650 850

850 850

650 650

750 850

650 750

Ambedue i servo devono stare


750 750 fermi a causa della centratura
eseguita nell’Esercizio #4.

760 740

770 730

850 700

800 650
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 – Servo collegato a P13
1.3 ms – Servo collegato a P12
20 ms – durata della Pausa
1.6 ms – Durata del Ciclo di Iterazione
--------- ------------------------------
24.6 ms – 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. Per cosa sono comunemente usati i servo standard?
2. In cosa differiscono i servo Parallax a Rotazione Continua dai servo standard?
3. Che cosa fa il comando PAUSE? Che cosa fa PAUSE 3000? E PAUSE 20?
4. Quanto dura un millisecondo? Come lo abbreviate?
5. 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 Sommario
1 Costruire il Boe-Bot
2 Ricollaudare i servo per essere sicuri che siano collegati correttamente
3 Collegare e clooaudare un altoparlante che vi avvisi quando le pile del Boe-
Bot sono scariche
4 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: Istruzioni:


Vedere la Figura 3-2. Inserite il passacavo in gomma 13/32” nel foro
centrale del telaio del Boe-Bot.
(1) Telaio del Boe-Bot Assicuratevi che il solco del passacavo sia
(4) Supporti da 1” correttamente inserito nel bordo del foro.
(4) Viti a testa tonda, 1/4” 4-40 Usate le quattro viti da 1/4” 4-40 per applicare i
(1) Passacavo in gomma, 13/32” 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: Istruzioni:


Vedere la Figura 3-3. Usate il giravite Phillips per togliere le viti che
fermano le crociere sull’asse del servo.
(2) Servo a rotazione continua Tirate delicatamente ciascuna crociera per estrarla
della Parallax, preventivamente dall’asse.
centrati Conservate le viti; saranno usate in un passo
successivo.
Pagina 92 · Robotica con il Boe-Bot

Figura 3-3
Rimozione delle
Crociere dei Servo

Componenti
(sinistra);
dopo avere
seguito le
vite Crociera Asse
a croce 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: Istruzioni:


Vedere la Figura 3-4. attaccate i servo al telaio usando le viti ed i dadi.
Notate che per una prestazione migliore
(1) Tealio del Boe-Bot dovrete inserire nella finestra rettangolare i
(parzialmente assemblato) servo dall’interno del telaio piuttosto che
(2) Servo Parallax a Rotazione dall’esterno.
Continua Usate dei pezzetti di scotch per etichettare i
(8) Viti a testa tonda, 3/8” 4-40 servo sinistro (S) e destro (D).
(8) Dadi, 4-40
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 Elenco Componenti per il Boe-Bot


con la Board of Education Rev C: con la HomeWork Board:
Vedere la Figura 3-5 (lato sinistro). Vedere la Figura 3-5 (lato destro).

(1) Telaio del Boe-Bot (parzialmente (1) Telaio del Boe-Bot (parzialmente
assemblato) assemblato)
(2) Viti a testa svasata, 3/8” 4-40 (2) Viti a testa svasata, 3/8” 4-40
(2) Dadi, 4-40 (2) Dadi, 4-40
(1) Pacco Porta Pile con Spinotto a (1) Pacco Porta Pile con fili stagnati
positivo Centrale
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)
Figura 3-7
(1) Coppiglia 1/16” Componenti
(1) Sfera di Polietilene da 1” delle Ruote
(2) Elastici di Gomma
(2) Ruote in Plastica
(2) Viti che erano avanzate dalla
rimozione delle crociere

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 Elenco Componenti per il Boe-Bot


con la Board of Education: 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 (1) Telaio del Boe-Bot (parzialmente
assemblato) assemblato)
(4) Viti a testa tonda, 1/4” 4-40 (4) Viti a testa tonda, 1/4” 4-40
(1) Board of Education con il BASIC (1) BASIC Stamp HomeWork Board
Stamp 2
Capitolo 3: Assemblare e Collaudare il Boe-Bot · Pagina 97

Figura 3-9
Telaio del Boe-
Bot 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

Bianco
White White
Red Red
Black Black
Nero
Figura 3-10
(916) 624-8333 Rev B Le Porte Servo
www.parallaxinc.com
15 14 Vdd 13 12
www.stampsinclass.com Ricollegate
Vdd Vin Vss
Red
Black
X3 Board of
X4 X5 P15 Education Rev
P14 Å P13 - Bianco C (sinistra)
P13 Å Vbp - Rosso HomeWork
P12
Å Vss - Nero Board (destra).
P11
Å Vbp - Rosso
P10
Å P12 - Bianco
P9
P8

Sulla Board of Education Rev C 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

Figura 3-13
Il Fronte, Retro, Sinistra e
Retro Fronte Destra del vostro robot Boe-
Bot

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
Figura 3-14
Fermo 1 secondo Collaudo della
Ruota Destra
Antiorario 3 secondi

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 ' Orario appena meno di 3 secondi.


PULSOUT 12, 650
PAUSE 20
NEXT

FOR counter = 1 TO 40 ' Fermo per 1 secondo.


PULSOUT 12, 750
PAUSE 20
NEXT

FOR counter = 1 TO 122 ' Antiorario per 3 secondi.


PULSOUT 12, 850
PAUSE 20
NEXT

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 3-
posizioni 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

Figura 3-15
Fermo 1 secondo
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
Red www.parallax.com Rev B
Black www.stampsinclass.com
X4 X5
Vdd Vin Vss Figura 3-18
Vdd Vin Vss X3 Schema di cablaggio
X3 del Circuito
P15
P15 P14 Indicatore di
P14 P13 Start/Reset del
P13 P12
P12 P11
Programma
P11 P10
P10 P9 Board of Education
P9 P8
P8 P7 (sinistra) and
P7 P6 HomeWork Board
P6 P5
P5 P4 (destra).
P4 P3
P3 P2
+
P2
+ P1
P1 P0
P0 X2
X2
Board of Education
Rev C © 2000-2003 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-al-
secondo, 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG CLS, "Beep!!!" ' Visualizzazione mentre il cicalino suona.


FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.

DO ' DO...LOOP
DEBUG CR, "In attesa del Reset…" ' Visualizza il messaggio
PAUSE 500 ' ogni 0.5 secondi
LOOP ' 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
Finestra di Debug
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 Word


pulseWidth VAR Word
pulseWidthComp VAR 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 Word
pulseWidth VAR Word
pulseWidthComp VAR 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

40
Rotational Velocity, RPM

20
Figura 3-20
0 Esempio di curva
di trasferimento
-20 per un servo
Parallax
-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 Velocità Larghezza Velocità Larghezza Velocità Larghezza Velocità
Impulso Rotazione Impulso Rotazione Impulso Rotazione Impulso Rotazione
(ms) (RPM) (ms) (RPM) (ms) (RPM) (ms) (RPM)
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
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 Duration = 655 × 2 µs Duration = 660 × 2 µs


= 650 × 0.000002 s = 655 × 0.000002 s = 660 × 0.000002 s
= 0.0013 s = 0.00131 s = 0.00132 s
= 1.3 m s = 1.31 m 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 Boe-
Bot. 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. Che cosa è una condizione di brownout?
2. Quali sono sul Boe-Bot alcuni dei sintomi di una condizione di brownout?
3. Come può essere usato un cicalino piezo per rilevare un brownout?
4. Che cosa è un Reset?
5. 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
40
Curve di
Orario 3 secondi
Trasferimento
20
Rotational Velocity, RPM

Queste
0
possono
Fermo 1 secondo essere usate
per calcolare
Antiorario 3 secondi
-20 le durate
degli impulsi
-40
di sinistra e di
destra.
-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 ' 1.44 X 500 = 720
PULSOUT 12, 795 ' 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 Sommario
1 Programmazione del Boe-Bot per eseguire le manovre base: avanti, indietro,
curva a sinistra, curva a destra, e rotazioni sul proprio asse.
2 Messa a punto delle manovre dell’Esercizio 1 in modo che siano più precise.
3 Uso della matematica per il calcolo del numero di impulsi da inviare per far
percorrere al Boe-Bot una distanza predefinita.
4 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.
5 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

Figura 4-1
Il Vostro Boe-Bot e le
Direzioni di Marcia
Indietro 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.

Figura 4-2
Rotazione
delle Ruote
per
Counterclockwise Clockwise
l’avanzament
o

Forward Forward

Lato Sinistro 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 Word

FREQOUT 4, 2000, 3000 ' 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 ' Servo sinistro max velocità antiorario.


PULSOUT 12, 650 ' Servo destro max velocità orario.
PAUSE 20

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.

distance
time =
speed
Pagina 132 · Robotica con il Boe-Bot

Esempio – Tempo per la Distanza in Esempio – Tempo per la Distanza


Miglia Metrica
Se distate 140 miglia dalla vostra Se distate 200 chilometri dalla vostra
destinazione, e state viaggiando a 70 miglia destinazione, e state viaggiando a 100
orarie, ci vorranno 2 ore per arrivarci. km/ora, ci vorranno 2 ore per arrivarci.

140 miles 200 kilometers


time = time =
70 miles/hour 100 kilometers/hour
1 hour 1 hour
= 140 miles × = 200 km ×
70 miles 100 km
= 2 hours = 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:

Boe - Bot distance


servo run time =
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
Red
Battery
Black

X4 X5
Pwr
Vdd Vin Vss
Vss Vss X3
ST P0 P1
in AMPS
CLA
SS P2 P3 P1 5
P4 P5 P1 4
P6 P7 P1 3
TM P1 2
P8 P9
1 P11 P11
P1 0
Sout Vin P1 2 P1 3 P1 0
Sin Vss P1 4 P1 5 P9
ATN Rst Vd d Vin P8
Vss Vdd X1 P7
P0 P15 P6
P1 P14 P5
U1
P2 P13 P4
P3 P12 P3
P4 P11 Reset P2
P5 P10 P1
P6 P9 P0
P7 P8 X2
0 1 2 Board of Education
www.stampsinclass.com Rev C © 2000-2003

Measured Distance
inch
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
cm

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 Word

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.

FOR counter = 1 TO 41

PULSOUT 13, 850


PULSOUT 12, 650
PAUSE 20

NEXT

END
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 A 23 cm/s, il vostro Boe-Bot dovrà
per 2.22 s per percorrere 20 pollici. viaggiare per 2.22 s per percorrere 51 cm.

20 in 51 cm
time = time =
9 in/s 23 cm/s
1s 1s
= 20 in × = 51 cm ×
9 in 23 cm
= 2.22 s = 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
pulses = 2.22 s ×
s
= 90.24... pulses
≈ 90 pulses

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.

Boe − Bot dis tan ce 40.65 pulses


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à A 23 cm/s, il vostro Boe-Bot dovrà
funzionare per 2.22 s per percorrere 20 in. funzionare per 2.22 s per percorrere 51 cm.

20 in 40.65 pulses 51 cm 40.65 pulses


pulses = × pulses = ×
9 in/s s 23 cm/s s
1 s 40.65 pulses 1s 40.65 pulses
= 20 in × × = 51 cm × ×
9 in 1s 23 cm 1s
= 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:
Boe − Bot dis tan ce 40.65 pulses
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 1, 2, 3, Figura 4-4


PULSOUT 12, 750 - pulseCount …100 Esempio di
PAUSE 20 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 ' Segnala lo start/reset del programma.

' -----[ Routine Principale ]------------------------------------------------


-------

' Accelerazione in marcia avanti.

FOR pulseCount = 1 TO 100 ' Ciclo in Accelerazione per 100 impulsi.


PULSOUT 13, 750 + pulseCount ' Pulse = 1.5 ms + pulseCount.
PULSOUT 12, 750 - pulseCount ' Pulse = 1.5 ms – pulseCount.
PAUSE 20 ' Pausa per 20 ms.

NEXT

' Continua in marcia avanti per 75 impulsi.

FOR pulseCount = 1 TO 75 ' Il Ciclo invia 75 impulsi in Avanti.


PULSOUT 13, 850 ' impulsi di 1.7 ms al servo sinistro.
PULSOUT 12, 650 ' impulsi di 1.3 ms al servo destro.
PAUSE 20 ' Pausa per 20 ms.
NEXT

' Decelerazione dalla massima velocità avanti fino a fermarsi.

FOR pulseCount = 100 TO 1 ' Ciclo in decelerazione per 100 impulsi.


PULSOUT 13, 750 + pulseCount ' Pulse = 1.5 ms + pulseCount.
PULSOUT 12, 750 - pulseCount ' Pulse = 1.5 ms - pulseCount.
PAUSE 20 ' Pausa per 20 ms.
NEXT

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 "Before subroutine",CR
PAUSE 1000
GOSUB My_Subroutine
DEBUG "After subroutine", CR 1
PAUSE 1000 Figura 4-5
LOOP Basilari delle
Subroutine

My_Subroutine:
DEBUG "Command in subroutine", CR
2
PAUSE 1000
RETURN

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 "Prima della subroutine",CR


PAUSE 1000
GOSUB My_Subroutine
DEBUG "Dopo la subroutine", CR
END

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 High_Pitch
DEBUG "Programma Principale", CR
PAUSE 1000
GOSUB Low_Pitch
DEBUG "Di Nuovo nel Programma Principale ", CR
PAUSE 1000
DEBUG "Ripetizione...",CR,CR
LOOP

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 Word

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.

GOSUB Forward
GOSUB Left
GOSUB Right
GOSUB 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, 850 PULSOUT 13, 750 - pulseCount


PULSOUT 12, 650 PULSOUT 12, 750 + pulseCount
PAUSE 20 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 VAR Word


pulseLeft VAR Word
pulseRight VAR Word
pulseCount VAR 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG " Il Programma è in Funzione!"

' -----[ Variabili ]----------------------------------------------------------

pulseCount VAR Word ' Memorizza il numero di impulsi.


address VAR Byte ' Memorizza l’indirizzo EEPROM.
instruction VAR Byte ' Memorizza l’istruzione in EEPROM.

' -----[ EEPROM Data ]--------------------------------------------------------

' Address: 0123456789 ' Queste due righe commentate mostrano


' |||||||||| ' L’indirizzo EEPROM di ciascun dato.
DATA "FLFFRBLBBQ" ' 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 ' Il Dato dell’indirizzo nell’istruzione.


address = address + 1 ' +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: ' Subroutine di Marcia Avanti.


FOR pulseCount = 1 TO 64 ' Invio di 64 impulsi di avanzamento.
PULSOUT 13, 850 ' Impulsi di 1.7 ms al servo sinistro.
PULSOUT 12, 650 ' Impulsi di 1.3 ms al servo destro.
PAUSE 20 ' Pausa per 20 ms..
NEXT
RETURN ' Ritorno al ciclo della routine principale.

' -----[ Subroutine – RetroMarcia ]-------------------------------------------

Backward: ' Subroutine di RetroMarcia.


FOR pulseCount = 1 TO 64 ' Invio di 64 impulsi di retromarcia.
PULSOUT 13, 650 ' Impulsi di 1.3 ms al servo sinistro.
PULSOUT 12, 850 ' Impulsi di 1.7 ms al servo destro.
PAUSE 20 ' Pausa per 20 ms..
NEXT
RETURN ' Ritorno al ciclo della routine principale.

' -----[ Subroutine – Curva a Sinistra ]--------------------------------------

Left_Turn: ' Subroutine di Curva a Sinistra.


FOR pulseCount = 1 TO 24 ' Invio di 24 Impulsi di Curva a Sinistra.
PULSOUT 13, 650 ' Impulsi di 1.3 ms al servo sinistro.
PULSOUT 12, 650 ' Impulsi di 1.3 ms al servo destro.
PAUSE 20 ' Pausa per 20 ms.
NEXT
RETURN ' Ritorno al ciclo della routine principale.
Pagina 150 · Robotica con il Boe-Bot

' -----[ Subroutine – Curva a Destra ]----------------------------------------

Right_Turn: ' Subroutine di Curva a Destra.


FOR pulseCount = 1 TO 24 ' Invio di 24 Impulsi di Curva a Destra.
PULSOUT 13, 850 ' Impulsi di 1.7 ms al servo sinistro.
PULSOUT 12, 850 ' Impulsi di 1.7 ms al servo destro.
PAUSE 20 ' Pausa per 20 ms..
NEXT
RETURN ' 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 0 2 4 6 8
Pulses_Count DATA Word 64, Word 24, Word 24, Word 64, Word 0
Pulses_Left DATA Word 850, Word 650, Word 850, Word 650
Pulses_Right DATA Word 650, Word 650, Word 850, 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 FOR counter = 1 TO 64
PULSOUT 13, pulseLeft PULSOUT 13, 850
PULSOUT 12, pulseRight PULSOUT 12, 650
PAUSE 20 diventa PAUSE 20
NEXT 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG " Il Programma è in Funzione!"


Pagina 154 · Robotica con il Boe-Bot

' -----[ Variabili ]----------------------------------------------------------

counter VAR Word


pulseCount VAR Word ' Memorizza il Numero di Impulsi.
addressOffset VAR Byte ' Memorizza l’offset dall’etichetta.
instruction VAR Byte ' Memorizza le istruzioni in EEPROM
instruction.
pulseRight VAR Word ' Memorizza le larghezze di impulsi dei servo.
pulseLeft VAR Word

' -----[ EEPROM Data ]--------------------------------------------------------

' addressOffset 0 2 4 6 8
Pulses_Count DATA Word 64, Word 24, Word 24, Word 64, Word 0
Pulses_Left DATA Word 850, Word 650, Word 850, Word 650
Pulses_Right DATA Word 650, Word 650, Word 850, 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 60, Word 80, Word 100, Word 110,
Word 110, Word 100, Word 80, Word 60, Word 0
Pulses_Left DATA Word 850, Word 800, Word 785, Word 760, Word 750,
Word 740, Word 715, Word 700, Word 650, Word 750
Pulses_Right DATA Word 650, Word 700, Word 715, Word 740, Word 750,
Word 760, Word 785, Word 800, Word 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 ½” Figura 5-2
(2) Rondelle in Nylon Hardware
dei Baffi
(2) Spinotti 3-pin m/m
(2) Resistenze, 220 Ω
(rosso-rosso-marrone)
(2) Resistenze, 10 kΩ
(marrone-nero-arancio)

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 Ω Figura 5-4
P5 Schema
220 Ω elettrico dei
Right Left Baffi
Whisker Whisker

Vss Vss
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 X5
Vdd 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
www.parallax.com Rev B
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 Figura 5-7
220 Ω Schema
P5 Elettrico dei
220 Ω Baffi–
Right Left Osservate
Whisker Whisker Accuratamente

Vss 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 24 VIN SOUT 1 24 VIN


SIN 2 23 VSS SIN 2 23 VSS
ATN 3
BS2 22 RES ATN 3
BS2 22 RES
VSS 4 21 VDD (+5V) VSS 4 21 VDD (+5V)
P0 P15 P0 P15
Vdd Vdd
5 20 5 20

P1 6 19 P14 P1 6 19 P14
P2 7 1 18 P13 P2 7 1 18 P13
P3 8 17 P12 P3 8 17 P12
10 kΩ P4 9 0 16 P11 10 kΩ P4 9 0 16 P11
Figura 5-8
P5 10 15 P10 P5 10 15 P10
P6 11 14 P9 P6 11 14 P9 Rilevazione di
P7 12 13 P8 P7 12 13 P8
Contatti Elettrici
220 Ω BS2-IC 220 Ω BS2-IC

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' 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
220 Ω LED Whisker
P1
Collaudo
220 Ω Schematic

LED LED Add this LED


circuit.
Vss Vss
Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 171

Figura 5-10: Schema di Cablaggio dei Baffi più Led per la Board of Education

Left
Il terminale
Whisker
To Servos lungo indica
l’anodo
15 14 Vdd 13 12

Red
Black
La smussatura sul
X4 X5 corpo indica il
Vdd Vin Vss 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


Left
Il terminale Whisker
To Servos lungo indica
l’anodo

(916) 624-8333
www.parallax.com Rev B
www.stampsinclass.com

Vdd Vin Vss


X3
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
+ La smussatura
P1 sul corpo indica
P0
X2 il catodo

HomeWork Board
Il terminale
lungo indica Right
l’anodo 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' 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 ' 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

LOOP

' -----[ Subroutine ]--------------------------------------------------------

Forward_Pulse: ' Invia un singolo impulso in avanti.


PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
RETURN

Turn_Left: ' Curva a Sinistra, circa 90-gradi.


FOR pulseCount = 0 TO 20
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
Pagina 176 · Robotica con il Boe-Bot

RETURN

Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850

PAUSE 20
NEXT
RETURN

Back_Up: ' Retromarcia.


FOR pulseCount = 0 TO 40
PULSOUT 13, 650
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

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 2 THEN
Comandi per la condizione 2 ed anche per la condizione 1
ELSE
Comandi per la condizione 1 ma non per la condizione 2
ENDIF
ELSE
Comandi per la condizione 1 falsa
ENDIF

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Variabili ]----------------------------------------------------------

pulseCount VAR Byte ' Conatore del ciclo For...next.


counter VAR Nib ' Conteggio dei contatti alternati.
old7 VAR Bit ' Memorizza il precedente IN7.
old5 VAR Bit ' Memorizza il precedente IN5.

' -----[ Inizializzazione ]---------------------------------------------------

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.


counter = 1 ' Conteggio alternato degli Angoli.
old7 = 0 ' Costituzione dei Vecchi Valori.
old5 = 1

' -----[ Routine Principale ]------------------------------------------------

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 ' I 2 Baffi Rivelano Ostacoli


GOSUB Back_Up ' Retromarcia & Curva ad U
GOSUB Turn_Left
GOSUB Turn_Left
ELSEIF (IN5 = 0) THEN ' Left whisker contacts
GOSUB Back_Up ' Back up & turn right
GOSUB Turn_Right
ELSEIF (IN7 = 0) THEN ' Right whisker contacts
GOSUB Back_Up ' Back up & turn left
GOSUB Turn_Left
ELSE ' Both whiskers 1, no contacts
GOSUB Forward_Pulse ' Apply a forward pulse
ENDIF ' and check again

LOOP

' -----[ Subroutine ]---------------------------------------------------------

Forward_Pulse: ' Invia un singolo impulso avanti.


PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
RETURN

Turn_Left: ' Curva a Sinistra, circa 90 gradi.


FOR pulseCount = 0 TO 20
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
RETURN
Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 181

Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

Back_Up: ' Retromarcia.


FOR pulseCount = 0 TO 40
PULSOUT 13, 650
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

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 VAR Nib


old7 VAR Bit
old5 VAR 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 Boe-
Bot.
4. Progetto Avanzato - Modificate RoamingWithWhiskers.bs2 in modo che il Boe-
Bot 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) Fotoresistenze - CdS
(2) Resistenze – 2 kΩ (rosso-nero-rosso)
(2) Resistenze – 220 Ω (rosso-rosso-marrone)
(4) Ponticelli in filo
(2) Resistenze – 470 Ω (giallo-viola-marrone)
(2) Resistenze – 1 kΩ (marrone-nero-rosso)
(2) Resistenze – 4.7 kΩ (giallo-viola-rosso)
(2) 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

Figura 6-2
Schema
Elettrico del
P6 P3
Primo
220 Ω 220 Ω Circuito di
Rilevazione
2 kΩ 2 kΩ della Luce

Vss Vss
Pagina 190 · Robotica con il Boe-Bot

To Servos
To Servos

15 14 Vdd 13 12

(916) 624-8333
Red www.parallax.com Rev B Figura 6-3
Black www.stampsinclass.com
Schema di
X4 X5
Vdd Vin Vss Cablaggio
Vdd Vin Vss X3 del Primo
X3
P15 Circuito di
P15 P14 Rilevazione
P14 P13
P13 P12 della Luce
P12 P11
P11 P10
P10 P9 Board of
P9 P8 Education
P8 P7
P7 P6
(sinistra) e
P6 P5 HomeWork
P5 P4 Board
P4 P3
P3 P2
+ (destra).
P2
+ P1
P1 P0
P0 X2
X2
Board of Education
Rev C © 2000-2003 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

Figura 6-4
Schema Elettrico
Vo
del circuito del
Partitore di
Tensione
2 kΩ

Vss
Pagina 192 · Robotica con il Boe-Bot

Quando le resistenze sono collegate terminale con terminale come mostrato nella Figura 6-
4 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.

2 000 Ω  2000 Ω 
Vo = 5V × R =  5V ×  − 2000 Ω
2 000 Ω + R  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-nero-
arancio).
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

' Modifiche per


' RoamingWithFotoresistenza
' Da RoamingWithWhiskers.bs2 ' Dividers.bs2

IF (IN5 = 0) AND (IN7 = 0) THEN IF (IN6 = 0) AND (IN3 = 0) THEN


GOSUB Back_Up GOSUB Back_Up
GOSUB Turn_Left GOSUB Turn_Left
GOSUB Turn_Left GOSUB Turn_Left
ELSEIF (IN5 = 0) THEN ELSEIF (IN6 = 0) THEN
GOSUB Back_Up GOSUB Back_Up
GOSUB Turn_Right GOSUB Turn_Right
ELSEIF (IN7 = 0) THEN ELSEIF (IN3 = 0) THEN
GOSUB Back_Up GOSUB Back_Up
GOSUB Turn_Left GOSUB Turn_Left
ELSE ELSE
GOSUB Forward_Pulse GOSUB Forward_Pulse
ENDIF 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Variabili ]----------------------------------------------------------

pulseCount VAR Byte ' Contatore del ciclo FOR...NEXT.

' -----[ Inizializzazione ]---------------------------------------------------


--

FREQOUT 4, 2000, 3000 ' Segnale di Start/restart del programma.

' -----[ Routine Principale ]------------------------------------------------


-------

DO
IF (IN6 = 0) AND (IN3 = 0) THEN ' Rileva ambedue le Fotoresistenze
GOSUB Back_Up ' Ombra, Retromarcia e curva ad U
GOSUB Turn_Left ' (a sinistra due volte).
GOSUB Turn_Left
Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 197

ELSEIF (IN6 = 0) THEN ' Rileva la Fotoresistenza sinistra


GOSUB Back_Up ' Ombra, Retromarcia e curva a destra.
GOSUB Turn_Right
ELSEIF (IN3 = 0) THEN ' Rileva la Fotoresistenza destra
GOSUB Back_Up ' Ombra, Retromarcia e curva a sinistra.
GOSUB Turn_Left
ELSE ' Nessuna Fotoresistenza rilevata
GOSUB Forward_Pulse ' Ombra, applica un impulso in avanti.
ENDIF

LOOP

' -----[ Subroutine ]---------------------------------------------------------

Forward_Pulse: ' Invia un singolo Impulso in Avanti.


PULSOUT 12,650
PULSOUT 13,850
PAUSE 20
RETURN

Turn_Left: ' Curva a Sinistra, circa 90-gradi.


FOR pulseCount = 0 TO 20
PULSOUT 12, 650
PULSOUT 13, 650
PAUSE 20
NEXT
RETURN

Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 12, 850
PULSOUT 13, 850
PAUSE 20
NEXT
RETURN

Back_Up: ' Retromarcia.


FOR pulseCount = 0 TO 40
PULSOUT 12, 850
PULSOUT 13, 650
PAUSE 20
NEXT
RETURN

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 da ' Estratto Modificato da
' RoamingWithFotoresistenza ' RoamingWithFotoresistenza
' Dividers.bs2 ' Dividers.bs2

IF (IN6 = 0) AND (IN3 = 0) THEN IF (IN6 = 0) AND (IN3 = 0) THEN


GOSUB Back_Up GOSUB Back_Up
GOSUB Turn_Left ' GOSUB Turn_Left
GOSUB Turn_Left ' GOSUB Turn_Left
ELSEIF (IN6 = 0) THEN ELSEIF (IN6 = 0) THEN
GOSUB Back_Up ' GOSUB Back_Up
GOSUB Turn_Right GOSUB Turn_Right
ELSEIF (IN3 = 0) THEN ELSEIF (IN3 = 0) THEN
GOSUB Back_Up ' GOSUB Back_Up
GOSUB Turn_Left GOSUB Turn_Left
ELSE ELSE
GOSUB Forward_Pulse GOSUB Forward_Pulse
ENDIF 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' 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 ' Ambedue rilevalo Ombra, Avanzamento.


PULSOUT 13, 850
PULSOUT 12, 650
ELSEIF (IN6 = 0) THEN ' Ombra rilevata a Sinistra,
PULSOUT 13, 750 ' Rotazione a Sinistra.
PULSOUT 12, 650
ELSEIF (IN3 = 0) THEN ' Ombra rilevata a destra,
PULSOUT 13, 850 ' Rotazione a Destra.
PULSOUT 12, 750
ELSE
PULSOUT 13, 750 ' Nessuna Ombra, Stà Fermo
PULSOUT 12, 750
ENDIF

PAUSE 20 ' Pausa tra gli impulsi.

LOOP
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:


-6
• Microfarad: (milionesimi di Farad ), abbreviato µF 1 µF = 1×10 F
-9
• Nanofarad: (miliardesimo di Farad), abbreviato nF 1 nF = 1×10 F
-12
• Picofarad: (millimiliardesimo di Farad ), abbreviato pF 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:
Figura 6-7
(2) Fotoresistenze - CDS 103 Simbolo
(2) Condensatori – 0.01 µF 0.01 µF Schematico e
(103) disegno del
(2) Resistenze - 220 Ω componente
(rosso-rosso-marrone)
(2) Jumper wires

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
Vss
Fotoresistenza

P3 Per la misura di
220 Ω resistenza che varia
con la luce.
0.01 µF

Vss
Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 203

To Servos
To Servos

15 14 Vdd 13 12

(916) 624-8333
Red www.parallax.com Rev B
Black www.stampsinclass.com
Figura 6-9
X4 X5
Vdd Vin Vss
Vdd Vin Vss Schema di
X3
X3 Cablaggio per i
P15
P15 circuiti RC a
P14
P14 P13 Fotoresistenza
P13 P12
P12 P11
P11 P10 Board of
P10 P9
P9 P8 Education
P8 P7 (Sinistra) e
P7 P6
P6 P5 HomeWork
P5 P4
P4 P3
Board (Destra).
P3 P2
+
P2
+ P1
P1 P0
P0 X2
X2
Board of Education
Rev C © 2000-2003 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' 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 X5
Vdd 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 Boe-
Bot 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 6-
1.
√ 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

timeLeft VAR Word ' Dichiarazione delle Variabili.


timeRight VAR Word

DEBUG "VALORI DELLA FOTORESISTENZA", CR, ' Inizializzazione.


"timeLeft timeRight", CR,
"-------- ---------"

DO ' Routine Principale .

HIGH 6 ' Misure Del Tempo RC Sinistra.


PAUSE 3
RCTIME 6,1,timeLeft

HIGH 3 ' Misure Del Tempo RC Destra.


PAUSE 3
RCTIME 3,1,timeRight

DEBUG CRSRXY, 0, 3, ' Visualizzazione delle Misure.


DEC5 timeLeft,
" ",
DEC5 timeRight

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 CON 108
RightAmbient CON 114
LeftBright CON 20
RightBright CON 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.

' Mediato Fattore di Scala

LeftThreshold CON 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Costanti ]-----------------------------------------------------------

' SOSTITUITE QUESTI VALORI CON I VALORI DA VOI DETERMINATI ED INSERITI NELLA
' TABELLA 6.1.

LeftAmbient CON 108


RightAmbient CON 114
LeftBright CON 20
RightBright CON 22

' Media Fattore di Scala

LeftThreshold CON LeftBright + LeftAmbient / 2 * 5 / 8


RightThreshold CON RightBright + RightAmbient / 2 * 5 / 8

' -----[ Variabili ]----------------------------------------------------------

' Dichiarazione delle Variabili per la memorizzazione dei valori RC misurati


' per le Fotoresistenze sinistra e destra.

timeLeft VAR Word


timeRight VAR 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 ' Misura del Tempo RC Sinistro.


PAUSE 3
RCTIME 6,1,timeLeft

HIGH 3 ' Misura del Tempo RC Destro.


PAUSE 3
RCTIME 3,1,timeRight

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 CON 108
RightAmbient CON 114
LeftBright CON 20
RightBright CON 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 Scala

LeftThreshold CON LeftBright + LeftAmbient / 2 * 5 / 8


RightThreshold CON RightBright + RightAmbient / 2 * 5 / 8

Queste variabili sono usate per memorizzare le misure RCTIME.

timeLeft VAR Word


timeRight VAR 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 Fattore di Scala

LeftThreshold CON LeftBright + LeftAmbient / 2 * 5 / 8


RightThreshold CON 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 ' Curva a Destra.


PULSOUT 13, 850
PULSOUT 12, 850
ELSEIF (timeRight > timeLeft) THEN ' Curva a Sinistra.
PULSOUT 13, 650
Capitolo 6: Navigazione Sensibile alla Luce con le Fotoresistenze · Pagina 217

PULSOUT 12, 650


ELSE ' Avanzamento.
PULSOUT 13, 850
PULSOUT 12, 650
ENDIF

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 Boe-
Bot 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 ' Curva a Destra.
PULSOUT 13, 850
PULSOUT 12, 850
ELSEIF (timeRight > timeLeft + 15) THEN ' Curva a Sinistra.
PULSOUT 13, 650
PULSOUT 12, 650
ELSE ' Avanzamento.
PULSOUT 13, 850
PULSOUT 12, 650
ENDIF

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 ' Curva a Destra.


PULSOUT 13, 850
PULSOUT 12, 850
ELSEIF (timeRight > timeLeft + difference) THEN ' Curva a Sinistra.
PULSOUT 13, 650
PULSOUT 12, 650
ELSE ' Avanzamento.
PULSOUT 13, 850
PULSOUT 12, 650
ENDIF

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Variabili ]----------------------------------------------------------

' Dichiarazione delle Variabili per la memorizzazione delle misure di tempo RC


' delle Fotoresistenze Sinistra & Destra.

timeLeft VAR Word


timeRight VAR Word
average VAR Word
difference VAR 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 ' Misura del Tempo RC di Sinistra.


PAUSE 3
Pagina 220 · Robotica con il Boe-Bot

RCTIME 6,1,timeLeft

HIGH 3 ' Misura del Tempo RC di Destra.


PAUSE 3
RCTIME 3,1,timeRight

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

' Codice non cambiato ' Cambiato per Salvare 1 Word di RAM

average VAR Word average VAR Word


difference VAR Word difference VAR 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


Lunghezza Lunghezza
Colore Colore
d’Onda d’Onda
Viola 400 Rosso 780
Blue 470 Infrarosso Vicino 800-1000
Verde 565 Infrarosso 1000-2000
Giallo 590 Infrarosso Lontano 2000-10,000
Arancio 630
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: 1 Figura 7-2


2 1 Nuovi
(2) Rivelatori Infrarossi 3 2
3 Componenti
(2) LED infrarossi Usati in
(corpo trasparente) questo
(2) Assieme degli Schermi per i Longer lead Capitolo
+
LED IR
(2) Resistenze - 220 Ω Rivelatore IR
+
- (sopra)
(rosso-rosso-marrone)
(2) Resistenze – 1 kΩ - LED IR (al
(marrone-nero-rosso) Flattened centro)
edge
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
P9 LED
220 Ω

Vss Vss Figura 7-4


Coppie IR Sinistra
P8
Vdd e Destra
1 kΩ
IR
LED P0
220 Ω

Vss Vss
Coppia IR Sinistra Coppia IR Destra
Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 233

To Servos
To Servos

15 14 Vdd 13 12 Figura 7-5


(916) 624-8333 Schema di
Red www.parallax.com Rev B
Black www.stampsinclass.com Cablaggio dei
X4 X5
Vdd Vin Vss Circuiti delle
Vdd Vin Vss X3 Coppie
X3
P15 infrarossi
P15 P14
P14 P13 Emettitore e
P13
P12
P12
P11 Ricevitore
P11 P10
P10 P9
Terminale
Terminale
P9 Lungo P8 Lungo
(Anodo)
Board of
P8 P7
P7
(Anodo) P6 Education
P6 P5
P5 P4 (sinistra) e
P4
P3
P3
P2
+ HomeWork
+
P2
P1
P1
P0
Board
P0 X2 (destra).
X2
Board of Education
Rev C © 2000-2003 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 Ω
Red Figura 7- 6
Red
LED
LED Indicatori a LED
Sinistro e Destro

Vss
Vss
Coppia IR Sinistra Coppia IR Destra

To Servos
To Servos

Figura 7-7
15 14 Vdd 13 12
Terminale Schema di
Terminale Lungo (916) 624-8333
Lungo Red (Anodo) www.parallax.com Rev B Cablaggio per
Black
(Anodo)
www.stampsinclass.com
i LED
X4 X5
Vdd Vin Vss
Vdd Vin Vss
indicatori
X3
X3 Rossi per i
P15
P15 P14 circuiti di
P14 P13
P13 P12 rilevazione IR
P12
P11
P11
P10
degli Oggetti
P10 P9
P9 P8
P8 P7 Board of
P7 P6
P6 P5 Education
P5 P4
P4 P3 (Sinistra) e
+
P3
P2
+ P2
P1
HomeWork
P1 P0
X2
Board
P0
X2 (Destra).
Board of Education
Rev C © 2000-2003 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 Boe-
Bot 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

' -----[ Variabili ]----------------------------------------------------------

irDetectLeft VAR Bit


irDetectRight VAR 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 Boe-
Bot 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

counter 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 Massima Distanza di Rilevamento,
dei LED IR, (Ω) 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 Bit
irDetectRight VAR 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Variabili ]----------------------------------------------------------

irDetectLeft VAR Bit


irDetectRight VAR Bit
pulseCount VAR Byte

' -----[ Inizializzazione ]---------------------------------------------------

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.

' -----[ Routine Principale ]------------------------------------------------

DO

FREQOUT 8, 1, 38500 ' Memorizza i valori IR rilevati nelle


irDetectLeft = IN9 ' 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: ' Invia un singolo impulso in avanti.


PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
RETURN

Turn_Left: ' Curva a sinistra, circa 90-gradi.


FOR pulseCount = 0 TO 20
PULSOUT 13, 650
PULSOUT 12, 650
PAUSE 20
NEXT
RETURN

Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN

Back_Up: ' Retromarcia.


FOR pulseCount = 0 TO 40
PULSOUT 13, 650
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
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 VAR Bit ' Dichiarazione delle Variabili


irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR Word

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del programma.


Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 247

DO ' Routine Principale

FREQOUT 8, 1, 38500 ' Controlla i Rivelatori IR


irDetectLeft = IN9
FREQOUT 2, 1, 38500
irDetectRight = IN0
' 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 ' Applica gli impulsi.


PULSOUT 12,pulseRight
PAUSE 15

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 VAR Bit
irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR 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 ' Applica gli impulsi.
PULSOUT 12,pulseRight
PAUSE 15

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 Boe-
Bot 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 7-
8.

X4 X5
Vdd 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 Boe-
Bot 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)

Figura 7-9
22” Il Perimetro con Nastro da
56cm 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 VAR Bit ' Dichiarazione delle variabili.


irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR Word
loopCount VAR Byte
pulseCount VAR Byte

FREQOUT 4, 2000, 3000 ' Segnala lo start/reset del Programma.

DO ' Routine Principale .

FREQOUT 8, 1, 38500 ' Contolla i rivelatori di IR.


irDetectLeft = IN9
FREQOUT 2, 1, 38500
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 ' Invia gli impulsi di pulseCount


PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 20
NEXT

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 VAR Byte


pulseCount VAR 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 X5
Vdd Vin Vs s
X3
P15
P14
P13
P12

Zone 0 Zone 1 Zone 2 Zone 3 Zone 4 Zone 5


P11
P10
P9
P8
P7
P6
P5

41500 Hz 40500 Hz 39500 Hz 38250 Hz 37500 Hz No Detection


P4
P3 +
P2
P1
P0
X2

at any
Boar d of Education
© 20 00 -2 00 3

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

' -----[ Variabili ]----------------------------------------------------------

freqSelect VAR Nib


irFrequency VAR Word
irDetect VAR Bit
distance VAR Nib

' -----[ Inizializzazione ]---------------------------------------------------

DEBUG CLS,
" OGGETTO ", CR,
"FREQUENZA 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,
"--------- --------", CR,
"Zona ", DEC1 distance
LOOP

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.
Pagina 266 · Robotica con il Boe-Bot

' -----[ Variabili ]----------------------------------------------------------

freqSelect VAR Nib


irFrequency VAR Word
irDetectLeft VAR Bit
irDetectRight VAR Bit
distanceLeft VAR Nib
distanceRight VAR 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

Output
Figura 8-4
adjust Diagramma a
Error = -2 +
Kp X error -70 Blocchi del
+ +
35 X -2 Controllo
-
Proporzionale
per il Servo
Measured right Right servo Destro e la
distance = 4 output coppia LED IR
680
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

Output Figura 8-5


adjust Diagramma a
Error = -2 +
Kp X error
+70 Blocchi del
+ +
-35 X -2 Controllo
-
Proporzionale
per il Servo
Measured left Left servo Sinistro e la
distance = 4 output coppia LED IR
820
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 CON -35
Kpr CON 35
SetPoint CON 2
CenterPulse CON 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Costanti ]----------------------------------------------------------

Kpl CON -35


Kpr CON 35
SetPoint CON 2
CenterPulse CON 750

' -----[ Variabili ]----------------------------------------------------------

freqSelect VAR Nib


irFrequency VAR Word
irDetectLeft VAR Bit
irDetectRight VAR Bit
distanceLeft VAR Nib
distanceRight VAR Nib
pulseLeft VAR Word
pulseRight VAR 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 CON -35


Kpr CON 35
SetPoint CON 2
CenterPulse CON 750

La prima cosa che la 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 Boe-
Bot 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.

6- 9VD C 15 1 4 V dd 13 1 2

9 V dc
R ed
B a t t ery
Bl ack

X4 X5
Pw r
V dd V ni VVssss
V ss V ss X3
S TA
n
i MPS
P0 P1
C
LAS
S
P2 P 3 P 15
P4 P 5 P 14
P6 P 7 P 13
TM
P8 P 9 P 12
1 P 10 P 11 P 11
S out Vn
i
P 12 P 13 P 10
Sn
i V ss
P 14 P 15 P 9
AT N R st
V dd V ni P 8
V ss V dd X1 P7
P0 P 15
P6
P1
U1 P 14 P5
P2 P 13 P4
P3 P 12 P3 +
P4
P 11 R eset P2
P5 P 10
P1
P6 P9 P0
P7 P8 X2
0 1 2 B o a rd o f E d uc a t i o n
w w w . st a mp si nc al ss .c om R ev C © 2 000 -2 003

Start

22” (56 cm)


Figura 8-7
Linea del
Percorso da
Seguire
© 200 0- 200 3
R ev C w w w .s t am ps ni cl a ss. c om
B o a rd o f E d u ca t i o n 0 1 2
X2 P8 P7
P0
P0 P9 P6
P1
P1 P 10 P5

+ P2
P2 R ese t P 11 P4
P3
P3 P 12 P3
P4
P4 P 13 P2
P5
P5 P 14
U1 P1
P6
P6 P 15 P0
P7
P7 X1 V dd V ss
V i n P8
P8 Vd d R st ATN
P1 5 PP99 P1 4 V ss Sni
P 1 3 P1
P 100 P1 2 Vni S out
P 11 P1
P 111 P1 0
P 9 P1 P8 1
P 122 TM
P 7 P1P 133 P6
P 5 P1P 144 P4
SS
P 3 P1P 155 P2 in
C LA
S
P1 P0 ST
AMP
V ss X3
X3 Vs s
V ss V ni Vd d Pw r
X5 X4
lc k
Ba
B a t e ry
R ed
9 Vd c
1312 V dd 1514 6- 9V DC

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 X5
Vdd 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

9 V dc
6- 9VD C 15 1 4 V dd 13 1 2
Figura 8-9
Prova per un basso
R ed
B a t t ery
Bl ack

X4 X5
Pw r
V dd V ni V ss
V ss V ss X3
S
TA
i n MPS
P0 P1
C
LAS
S
P2 P 3 P 15
P4 P 5 P 14
P6 P 7 P 13
TM P8 P 9 P 12
1 P 10 P 11 P 11
S out Vn
i P 12 P 13 P 10
Sni V ss P 14 P 15 P 9
AT N R st V dd V ni P 8
V ss X1 P7

numero di Zona –
V dd
P0 P 15 P6
P1 U1 P 14 P5
P2 P 13 P4
P3 P 12 P3 +
P4 P 11 R eset P2
P5 P 10 P1
P6 P9 P0
P7 P8 X2
0 1 2 B o a rd o f E d uc a t i o n
w w w . st a mps i nc al ss .c om R ev C © 2 000 -2 003

Vista superiore

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

9 V dc
6- 9VD C 15 1 4 V dd 13 1 2
Figura 8-10
Prova per un alto
R ed
B a t t ery
Bl ack
X4 X5
Pw r
V dd V ni V ss
V ss V ss X3
S
TA
i n MPS
P0 P1
C
LAS
S P2 P 3 P 15
P4 P 5 P 14
P6 P 7 P 13
TM P8 P 9 P 12
1 P 10 P 11 P 11
S out Vni
P 12 P 13 P 10
Sni V ss
P 14 P 15 P 9
AT N R st
V dd V ni P 8
V ss X1 P7

numero di Zona –
V dd
P0 P 15 P6
P1 U1 P 14 P5
P2 P 13 P4
P3 P 12 P3 +
P4 P 11
R eset P2
P5 P 10
P1
P6 P9 P0
P7 P8 X2
0 1 2 B o a rd o f E d uc a t i o n
w w w . st a mps i nc al ss .c om R ev C © 2 000 -2 003

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 9 V dc
B a t t ery
6- 9VD C 15 1 4 V dd 13 1 2

R ed
Bl ack
X4 X5
Pw r V dd Vin V ss

Vdd Vin Vss


V ss V ss X3
S
i TAM PS
n P0 P1
C
LAS
S
P2 P 3 P15
P4 P 5 P14
P6 P 7 P13
TM
P8 P 9 P12
1 P 10 P 11 P11
S out Vn
i
P 12 P 13 P10
Sn
i V ss
P 14 P 15 P9
AT N Rst
V dd V ni P8
V ss V dd
X1 P7
P0 P 15 P6
P1
U1 P 14 P5
P2 P 13 P4
P3 P 12 P3 +
P4 P 11 R eset P2
P5 P 10 P1
P1
P6 P9 P0
P7 P8 X2
0 1 2 B o a rd o f E d uc a t i o n
w ww . st a mps i nc al ss .c om 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 Boe-
Bot 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.

6- 9VD C 15 1 4 V dd 13 1 2
9 V dc
R ed
B a t t ery
Bl ack

X4 X5
Pw r V dd V ni VVssss
V ss V ss X3
S TA
n
i M PS
P0 P1
C
LAS
S
P2 P 3 P 15
P4 P 5 P 14
P6 P 7 P 13
TM
P8 P 9 P 12
1 P 10 P 11 P 11
S out Vn
i
P 12 P 13 P 10
Sn
i V ss
P 14 P 15 P 9
AT N R st
V dd V ni P 8
V ss V dd X1 P7
P0 P 15 P6
P1 U1 P 14 P5
P2 P 13 P4
P3 P 12 P3 +
P4
P 11 R eset P2
P5 P 10 P1
P6 P9 P0
P7 P8 X2
0 1 2 B o a rd o f E d uc a t i o n
w w w . st a mp si nc al ss .c om R ev C © 2 000 -2 003

Start

22” (56 cm)


Figura 8-13
Percorso della
Linea da
Seguire
© 200 0- 200 3
R ev C w w w .s t am ps ni cl a ss. c om
B o a rd o f E d u ca t i o n 0 1 2
X2 P8 P7
P0
P0 P9 P6
P1
P1 P 10 P5

+ P2
P2 R ese t P 11 P4
P3
P3 P 12 P3
P4
P4 P 13 P2
P5
P5 P 14
U1 P1
P6
P6 P 15 P0
P7
P7 X1 V dd V ss
V i n P8
P8 Vd d R st ATN
P1 5 PP99 P1 4 V ss Sni
P 1 3 P1
P 100 P1 2 Vni S out
P 11 P1
P 111 P1 0
P 9 P1 P8 1
P 122 TM
P 7 P1P 133 P6
P 5 P1P 144 P4
SS
P 3 P1P 155 P2 in
C LA
S
P1 P0 ST
AMP
V ss X3
X3 Vs s
V ss V ni Vd d Pw r
X5 X4
lc k
Ba
B a t e ry
R ed
9 Vd c
1312 V dd 1514 6- 9V DC

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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

DEBUG "Il Programma è in Funzione!"

' -----[ Costanti ]-----------------------------------------------------------

Kpl CON 35 ' Cambiare da -35 a 35


Kpr CON -35 ' Cambiare da 35 a -35
Pagina 282 · Robotica con il Boe-Bot

SetPoint CON 3 ' Cambiare da 2 a 3.


CenterPulse CON 750

' -----[ Variabili ]----------------------------------------------------------

freqSelect VAR Nib


irFrequency VAR Word
irDetectLeft VAR Bit
irDetectRight VAR Bit
distanceLeft VAR Nib
distanceRight VAR Nib
pulseLeft VAR Word
pulseRight VAR 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 Boe-
Bot 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 support@parallax.com 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 Colore
Tolerance
0 Nero Code
1 Marrone
Figura C-1
2 Rosso Codice Colori
3 Arancio delle Resistenze
First Digit Number of Zeros
4 Giallo
Second Digit
5 Verde
6 Blu
7 Viola
8 Grigio
9 Bianco

Questo è un esempio che mostra come possono essere usate la Tabella C-1 e la Figura C-
1 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 Figura D-1
P13 Area Prototipale
P12
P11
P10 Terminali di Alimentazione
P9
P8 (Connettore nero superiore),
P7 accesso dei pin I/O
P6
P5
(Connettorre nero Laterale),
P4 e Area Prototipale
P3 (Connettori Bianchi)
P2
P1
P0
X2

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 Figura D-2
Blank Disegno dei Componenti e
Simboli Schematici
Yellow Brown
Violet
+ 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 Vin Vss


X3
Vdd +
P15
P14 Figura D-3
P13 Schema Elettrico Esempio e
P12
470 Ω P11 Schema di Cablaggio
P10
P9
P8 Schema Elettrico (sinistra) e
LED
P7 schema di cablaggio (destra)
P6
P5
P4
P3
P2
Vss P1
P0
X2

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 Vin Vss


X3
+
P15 Figura D-4
P14
P13
Schema Elettrico Esempio e
P14 P12 Schema di Cablaggio
P11
470 Ω P10
LED P9 Schema Elettrico (sinistra)
P8
P7
e schema di cablaggio
P6 (destra)
P5
Vss P4
P3
P2
P1
P0
X2

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

Fotoresistenza (superiore) e
0.01 µF 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 Ω
Figura D-6
0.1 µF Schema Elettrico della
Resistenza,
Fotoresistenza, e
Condensatore

Vss
Pagina 304 · Robotica con il Boe-Bot

Vdd Vin Vss


X3
P15
P14
P13
P12 Figura D-7
P11 Schema di Cablaggio della
P10
P9 Resistenza,
P8 Fotoresistenza, e
P7
P6 Condensatore
P5
P4
P3
P2
P1
P0
X2

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 Figura D-8
P13
P12 Schema di Cablaggio della
P11 Resistenza, Fotoresistenza,
P10
P9 e Condensatore
P8
P7
P6 Notate la diversa
P5 disposizione dei
P4 Componenti.
P3
P2
P1
P0
X2
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 Boe-
Bot, 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
Descrizione Quantità
Parallax
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-888-
512-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
Descrizione Quantità
Parallax
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
Descrizione Quantità
Parallax
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
Descrizione Quantità
Parallax
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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

timeLeft VAR Word ' Dichiarazione di Variabile


declarations.
timeRight VAR Word

DEBUG "VALORI delle FOTORESISTENZE", CR, ' Inizializzazione.


"timeLeft timeRight", CR,
"-------- ---------"

DO ' Routine Principale.

HIGH 6 ' Misura RC time sinistra.


PAUSE 3
RCTIME 6,1,timeLeft

HIGH 3 ' Misura RC time destra.


PAUSE 3
RCTIME 3,1,timeRight

DEBUG CRSRXY, 0, 3, ' Visualizzazione delle misure.


DEC5 timeLeft,
" ",
DEC5 timeRight

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 )

( y2 − y1 )
m=
( 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:

( y 2 − y1 )
m=
( x2 − x1 ) b = y 2 − mx2
and

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:

( y 2 − y1 )
m=
( x2 − x1 )
( 215 − 56 )
m=
( 152 − 36 )
159
m= = 1.37
116

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

( y 2 − y1 )
m=
( x2 − x1 ) b = y 2 − mx2
and

√ 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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

timeLeft VAR Word ' Dichiarazione delle Variabili.


timeRight VAR Word

DEBUG "VALORI delle FOTORESISTENZE", CR, ' Inizializzazione.


"timeLeft timeRight", CR,
"-------- ---------"

DO ' Routine Principale.

HIGH 6 ' Misura RC time di Sinistra.


PAUSE 3
RCTIME 6,1,timeLeft

HIGH 3 ' Misura RC time di Destra.


PAUSE 3
RCTIME 3,1,timeRight

DEBUG CRSRXY, 0, 3, ' Visualizzazione delle Misure.


DEC5 timeLeft,
Appendice F: Bilanciamento delle Fotoresistenze · Pagina 315

" ",
DEC5 timeRight,
" Prima"

timeLeft = (timeLeft */ 351) + 7

DEBUG CRSRXY, 0, 5, ' Visualizzazione delle Misure.


DEC5 timeLeft,
" ",
DEC5 timeRight,
" Dopo"

PAUSE 200

LOOP
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} ' Direttiva Stamp.


' {$PBASIC 2.5} ' Direttiva PBASIC.

' -----[ Variabili ]----------------------------------------------------------

crsrPosRow VAR Byte


Pagina 318 · Robotica con il Boe-Bot

irFrequency VAR Word


irDetect VAR Bit
distance VAR Nib
dummy VAR crsrPosRow

' -----[ Inizializzazione ]---------------------------------------------------

DEBUG CLS,
"Clickate nella finestra di trasmissione,", CR,
"Quindi per iniziare premere Enter", CR,
"Scansione di frequenza...........", CR, CR,

" OGGETTO ", CR,


"FREQUENZA 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
-*- insertion, 17

*/, 305 low power mode, 28

-<- preventing damage, 36

<>, 178 BASIC Stamp Editor


Identification window, 22
-…-
Identify, 280, 281
…, 51
installation, 10
-1-
Software, 4
1.4 V threshold, 186
Trouble-Shooting, 279
-3-
BASIC Stamp Editor’s Help, 30
3-position switch, 16 BASIC Stamp HomeWork Board, 3
3-position switch, 35 BASIC Stamp HomeWork Board, 4
-9- BASIC Stamp HomeWork Board
connecting power, 20
90° turns, 128
BASIC Stamp HomeWork Board
-A-
disconnect power, 36
alarm circuit, 105
American Standard Code for BASIC Stamp HomeWork Board
Information Interchange, 33, 147 components, 286
amps, 49
anode, 46 BASIC Stamp Manual, 32
artificial intelligence, 174 batteries, 60
ASCII, 33, 147 battery pack, 94
battery pack with tinned leads, 63
-B- BIN1, 163
backwards motion, 123 binary numbers, 22
ballast, 228 Bit, 70
band pass frequency, 222 block diagram, 257
Basic Analog and Digital, 55 Board of Education, 3, 4
BASIC Stamp components, 285
components, 283 servo header, 59
Page 328 · Robotics with the Boe-Bot

Board of Education Rev A, 59 BASIC Stamp HomeWork Board, 286


Board of Education Rev A or B Board of Education, 285
disconnect power, 36 Board of Education Rev B, 287
Board of Education Rev B, 59 computer system requirements, 5
components, 287 CON, 203
condensed EEPROM Map, 142
Board of Education Rev C constants, 203
connecting power, 16 control character
disconnect power, 35 CR, 28
breadboard. See prototyping area control system, 257
brownout, 103, 107 cotter pin, 95
brownout detector, 103 CR, 28
Byte, 70 CRSRXY, 165
crystal, 105
-C-
current, 45, 49
Cadmium Sulfide, 184
-D-
capacitor, 195
part drawing, 196
DATA, 143
schematic symbol, 196 Word modifier, 149

carriage return, 28 DATA directive, 147


carrier board, 3 data storage, 142
cathode, 46 DC interference, 222
CdS, 184 DC power supply, 279
centering the servos, 66 dead reckoning, 128
chassis, 90 DEBUG, 28
closed loop control, 257 DEBUG formatters
code block, 136 ?, 72
color code, 289 BIN, 163
COM port, 279
COM Port, 13 DEC, 28
command, 28 SDEC, 72
comment, 27
Debug Terminal, 26
Compiler directives, 24
components DEBUGIN, 109
DEC, 28
BASIC Stamp, 283 declare, 71, 203
Ind · Page 329

decrement, 74, 133 decrement, 74


derivative control, 257 EndValue, 73
Detailed EEPROM Map, 147
StartValue, 73
disconnect power, 35
distance calculation, 129 STEP StepValue, 74
DO WHILE, 145 forward motion, 120
DO...LOOP, 44 Freq1 argument, 107
DO...LOOP UNTIL, 144 FREQOUT, 107
Download Progress window, 26
Duration argument, 53, 54, 107 Duration argument, 107

maximum value, 54 Freq1 argument, 107

-E- Pin argument, 107

EEPROM, 142 frequency, 105


electrical tape, 241, 266 frequency sweep, 250
electrically erasable programmable read fundamental frequency, 226
only memory, 142 -G-
electromagnetic radiation, 221
electronic filter, 222 GOSUB, 136
ELSE, 170 -H-
ELSEIF, 170
END, 28 hardware adjustment, 125
ENDIF, 170 harmonic frequency, 226
EndValue, 73 hertz, 107
hexadecimal, 147
-F- HIGH, 49
F, 195 PIN argument, 49
farad, 195
hysteresis, 257
feedback, 259
filter sensitivity, 250 -I-
flashlight, 200 I/O pins
fluorescent light, 228
fluorescent light interference, 267 as inputs or outputs, 186
fluorescent lights, 222 default to input, 164
foot-candle, 184
FOR…NEXT, 73 Identification window, 22, 279
Identify, 280, 281
counting backward, 74 IF…THEN, 170
Page 330 · Robotics with the Boe-Bot

nesting statements, 174 logic threshold, 187


illuminance, 183, 184 LOOKUP, 251
incident light, 184 Index argument, 251
Index argument, 251 ValueN argument, 251
Industrial Control, 257
infrared detector, 223 Variable argument, 251
infrared interference, 228 LOW, 49
infrared led, 223
PIN argument, 49
infrared spectrum, 221
initialize, 71 low power mode, 28
input register, 163, 186 lux, 184
integral control, 257
-M-
IR interference, 222
math order of operations, 204, 260
-J-
measuring distance, 129
jumper, 59 Memory Map, 142
-K- microfarad, 195, 196
milliamps, 49
kilohertz, 107 millisecond, 42
Kp, 258
-N-
-L-
nanofarad, 196
label negative numbers, 72
subroutine, 136 Nib, 70
nodes, 198
LDR, 184 null modem cable, 279
lead vehicle, 257 nylon washer, 159
LED, 46
LED light shield assembly, 223 -O-
light dependent resistor, 183 ohm, 46
light emitting diode, 46 omega, 46
anode, 46 operator, 71
operator block, 258
cathode, 46
output adjust, 258
schematic symbol, 46
-P-
terminals, 46
Parallax Continuous Rotation servos, 41
linear approximation, 303 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 PBASIC directive, 28
Duration argument, 42
PBASIC directives
CON, 203
PBASIC, 1
DATA, 143
variables, 70
PBASIC, 28
PBASIC commands
Stamp, 28
DEBUG, 28
PBASIC operators
DEBUGIN, 109
*/, 305
DO WHILE, 145
<>, 178
DO...LOOP, 44
DO...LOOP UNTIL, 144
photoresistor, 183, 184
ELSE, 170 calibration, 303

ELSEIF, 170 part drawing, 183

END, 28 schematic symbol, 183

ENDIF, 170 photoresistor voltage divider


FOR…NEXT, 73 troubleshooting, 189

FREQOUT, 107 picofarad, 196


piezoelectric crystal, 105
GOSUB, 136
piezoelectric element, 105
HIGH, 49 piezoelectric speaker, 104
IF…THEN, 170 part drawing, 104
LOOKUP, 251 schematic symbol, 104
LOW, 49 piezospeaker, 104
PAUSE, 42 alarm circuit, 105
PULSOUT, 53
Pin argument, 49, 107
Page 332 · Robotics with the Boe-Bot

pivoting motion, 124 light dependent resistor, 183


plastic wheel, 96 series resistors, 187
poster board, 241
tolerance, 289
potentiometer, 69
program storage, 142 voltage divider, 187
programs RETURN, 136
saving, 26, 27 rotational velocity, 112
RPM, 112
proportional constant, 258
proportional control, 257 rubber band tire, 95
prototyping area rubber grommet, 90, 94

input/output pins, 291 -S-

prototyping areas saving programs, 26, 27


schematic symbol
socket, 291
capacitor, 196
PULSOUT, 53
LED, 46
Duration argument, 53
photoresistor, 183
-R-
piezoelectric speaker, 104
RADAR, 221 resistor, 46
RAM, 142
ramping, 133 screwdriver, 66, 89
random access memory, 142 screws, 7/8", 159
RC decay time, 198 SDEC, 72
RCTIME, 198 second, 42
SELECT...CASE...ENDSELECT, 144
Duration argument, 199
serial cable, 13
Pin argument, 199 servo
State argument, 199 header, 59
READ, 143 output shafts, 96
reference notch, 17 servos
Reset button, 28
Reset button, 26 avoiding damage, 60, 68
resistor, 45 labeling, 92
color code, 289 troubleshooting, 102
leads, 46 shadow vehicle, 257
Ind · Page 333

SODAR, 221 servos, 100, 102, 103


software adjustment, 125 Tyvek, 316
SONAR, 221
spacer, 159 -U-
Stamp Directive, 28 US232B, 14
standoffs, 90, 98, 159 USB to Serial Adapter, 13, 14
start/reset indicator, 104 USB to Serial Adaptor, 5
StartValue, 73
STEP StepValue, 74 -V-
stepValue, 74 VAR, 70
STOP, 233 variable, 70
straightening the trajectory, 126
declare, 71
subroutine call, 136
subroutine label, 136 default value, 70
subroutines, 136 initialize, 71
summing junction, 258
VAR, 70
-T-
variable sizes, 70
tactile switches, 157 Vbp, 64
tail wheel, 95 Vdd, 48, 291
threshold voltage, 187 Vin, 291
timing diagram, 51, 55 voltage, 49
tokens, 142 voltage divider, 187
tolerance, 289 Vss, 291
tones, 104
tools required, 89 -W-
transfer curve, 112 What’s a Microcontroller? Student
Transmit windowpane, 109 Guide, 2
troubleshooting whisker wires, 159
BASIC Stamp to PC communication, 279 Word, 70
Word modifier, 149
electrical tape course, 269
-µ-
IR detectors, 227
photoresistor voltage divider, 189 µ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
stampsinclsss@parallax.com.