Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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
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
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.
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
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.
“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)
“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.
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.
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.
Figura 1-1
modulo BASIC
Stamp® 2 su un
robot Boe-Bot™.
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
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:
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
Figura 1-2
Modulo BASIC Stamp® 2
(sinistra)
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
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.
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
Figura 1-8
Finestra di Progresso del Download
Figura 1-9
Finestra di termine del Download
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!
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
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
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.
Figura 1-12
Finestra di Download Completato
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
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
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
Figura 1-17
InstallShield Wizard Completed
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
Figura 1-19
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
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)
Figura 1-22
Interruttore a 3-posizioni
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
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
Hardware Richiesto
Radunate i seguenti componenti dal vostro kit Figura 1-27
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
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
Figura 1-31
Icona dell’ Editor del BASIC Stamp
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
1000 0100
01 10 0
10 11
00 0
10
0
1
10101001
0
10
6-9VDC
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
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”.
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-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
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
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 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à.
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:
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
Il vostro programma dovrebbe ora essere simile a quello mostrato in Figura 1-43.
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).
Figura 1-45
Uscita del programma
HelloBoeBot.bs2
modificato
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.
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.
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.
'{$STAMP BS2}
'{$PBASIC 2.5}
DEBUG 66,65,83,73,67,32,83,116,97,109,112,32,50
END
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.
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.
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:
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!
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
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:
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 è: "
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
DEBUG DEC 65, DEC 66, DEC 67, DEC 68, DEC 69, DEC 70
Capitolo 1: Il Cervello del vostro Boe-Bot · Pagina 39
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".
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).
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
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.
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
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
PAUSE 1000
DEBUG CR, " Trascorso Un secondo..."
PAUSE 2000
DEBUG CR, " Trascorsi Tre secondi..."
END
Da ora in poi, le tre istruzioni che vengono prima di questo programma saranno
riassunte come:
Digitate, salvate e lanciate TimedMessages.bs2.
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
PAUSE 5000
DEBUG CR, "Trascorsi cinque secondi..."
PAUSE 10000
DEBUG CR, " Trascorsi quindici secondi..."
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
DO
DEBUG "Ciao!", CR
PAUSE 1000
LOOP
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
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
LED
Assicuratevi che i terminali lunghi (gli anodi, marcati con un ⊕ nello schema di
cablaggio) siano collegati nei fori dell’area prototipi esattamente come mostrato.
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.
LOW Pin
Dice al BASIC Stamp di collegare il pin I/O P13 a Vdd, che accende il LED.
Pagina 50 · Robotica con il Boe-Bot
Dice al BASIC Stamp di collegare il pin I/O P13 a Vss, che spenge il LED. Provate.
DO
HIGH 13
PAUSE 500
LOW 13
PAUSE 500
LOOP
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.
√ Aprite HighLowLed.bs2.
√ Cancellate interamente l’istruzione DEBUG.
√ Lanciate il programma modificato osservando il LED.
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:
funzionare tutti gli altri programmi anche se il vostro computer non ha la porta seriale
standard.
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
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!
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
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.
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
0.13 s 0.13 s
Figura 2-8
Vdd (5 V) Diagramma di
Temporizzazione per
PulseP13Led.bs2
Vss (0 V)
2.0 s
DO
PULSOUT 13, 65000
PAUSE 2000
LOOP
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
DO
PULSOUT 13, 65000
PULSOUT 12, 65000
PAUSE 2000
LOOP
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à.
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
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
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
Quando avete finito, andate all’Esercizio #4: Centratura dei Servo a pagina 66.
Pagina 60 · Robotica con il Boe-Bot
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.
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.
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
Figura 2-13 mostra lo schema del circuito che assemblerete sulla Board of Education Rev
C. Il ponticello è posizionato su Vin.
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.
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
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
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.
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à.
Figura 2-21
Giravite Parallax
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
Figura 2-23
Mettete l’interruttore a 3-Posizioni in
0 1 2 posizione-2
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
DO
PULSOUT 13, 750
PAUSE 20
LOOP
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.
dopo aver dichiarato una variabile, potete anche inizializzalre, che significa assegnargli
un valore di partenza, o valore iniziale.
value = 500
anotherValue = 2000
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
END
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”.
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
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
FOR myCounter = 1 TO 10
DEBUG ? myCounter
PAUSE 500
NEXT
END
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:
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.
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.
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.
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.
DO
PULSOUT 12, 650
PAUSE 20
LOOP
Pagina 78 · Robotica con il Boe-Bot
DO
PULSOUT 12, 850
PAUSE 20
LOOP
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:
650 850
850 850
650 650
750 850
650 750
760 740
770 730
850 700
800 650
Capitolo 2: I Servo Motori del vostro Boe-Bot · Pagina 81
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.
Dal momento che il ciclo viene eseguito 100 volte, è uguale a 23.0 ms volte 100.
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:
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
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?
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
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
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
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
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
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 .
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
Figura 3-4
Montagggio
dei Servo sul
Telaio
Componenti
(Sinistra);
Assemblati
(Destra).
(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).
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
Figura 3-8
Montaggio
delle ruote
Ruotino di
Coda
(sinistra);
Ruote Motrici
(destra).
(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
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).
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
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
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
Sinistra
Figura 3-13
Il Fronte, Retro, Sinistra e
Retro Fronte Destra del vostro robot Boe-
Bot
Destra
Orario 3 secondi
Figura 3-14
Fermo 1 secondo Collaudo della
Ruota Destra
Antiorario 3 secondi
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.
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.
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
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.
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
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.
Questa è l’impostazione del comando FREQOUT usato nel prossimo Programma Esempio.
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.
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.
DO ' DO...LOOP
DEBUG CR, "In attesa del Reset…" ' Visualizza il messaggio
PAUSE 500 ' ogni 0.5 secondi
LOOP ' fino al reset hardware.
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
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:
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
'{$STAMP BS2}
'{$PBASIC 2.5}
DO
LOOP
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: "
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
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
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
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
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
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
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à.
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
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
NEXT
END
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.
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.
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.
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.
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.
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.
NEXT
PAUSE 200
NEXT
PAUSE 200
NEXT
PAUSE 200
NEXT
END
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
NEXT
END
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.
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.
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.
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
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
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:
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).
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
FOR counter = 1 TO 41
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.
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.
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
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.
NEXT
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.
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
NEXT
FOR pulseCount = 30 TO 0
NEXT
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
My_Subroutine:
DEBUG "Commandi nella subroutine", CR
PAUSE 1000
RETURN
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
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
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.
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
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.
' Avanzamento
' Retromarcia
END
Navigate:
FOR counter = 1 TO pulseCount
PULSOUT 13, pulseLeft
PULSOUT 12, pulseRight
PAUSE 20
NEXT
PAUSE 200
RETURN
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
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.
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
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"
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.
DO
' in questo punto viene omesso il blocco di codice PBASIC.
LOOP UNTIL instruction = "Q"
DO
SELECT instruction
CASE "F": GOSUB Forward
CASE "B": GOSUB Backward
CASE "L": GOSUB Left_Turn
CASE "R": GOSUB Right_Turn
ENDSELECT
Il vostro Turno
Con EepromNavigation.bs2 aperto nell’Editor del BASIC Stamp, clickate Run e
selezionate Memory Map.
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
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.
' 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
addressOffset = addressOffset + 2
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
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?
' 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
DO
addressOffset = addressOffset + 2
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.
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.
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
Figura 4-9
Semplici Percorsi
ad Ostacoli
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
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)
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
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
(916) 624-8333
www.parallax.com Rev B
www.stampsinclass.com
HomeWork Board
Right
Whisker
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
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
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.
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.
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.
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
P10
Figura 5-9
220 Ω LED Whisker
P1
Collaudo
220 Ω Schematic
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
(916) 624-8333
www.parallax.com Rev B
www.stampsinclass.com
HomeWork Board
Il terminale
lungo indica Right
l’anodo Whisker
Capitolo 5: Navigazione Tattile con i “Baffi” · Pagina 173
IF (IN7 = 0) THEN
HIGH 1
ELSE
LOW 1
ENDIF
IF (IN5 = 0) THEN
HIGH 10
ELSE
LOW 10
ENDIF
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.
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 è:
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.
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
RETURN
Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
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.
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.
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
DO
LOOP
Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
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.
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”.
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.
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
ENDIF
ENDIF
Il vostro Turno
Una delle istruzioni IF...THEN in EscapingCorners.bs2 controlla per vedere se counter
ha raggiunto 4.
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).
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
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.
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.
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)
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.
DO
DEBUG CRSRXY, 0, 3,
"P6 = ", BIN1 IN6,
" P3 = ", BIN1 IN3
PAUSE 100
LOOP
Pagina 194 · Robotica con il Boe-Bot
Figura 6-5: Modifche di RoamingWithWhiskers.bs2 per l’uso con i Partitori con Fotoresistenza
√ 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.
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
LOOP
Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a Destra, circa 90-gradi.
PULSOUT 12, 850
PULSOUT 13, 850
PAUSE 20
NEXT
RETURN
DO
LOOP
Pagina 200 · Robotica con il Boe-Bot
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.
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
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
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 Ω.
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:
HIGH 6
PAUSE 3
RCTIME 6,1,timeLeft
DO
HIGH 6
PAUSE 2
RCTIME 6,1,timeLeft
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.
Attrezzatura Aggiuntiva
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
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.
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.
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.
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.
' SOSTITUITE QUESTI VALORI CON I VALORI DA VOI DETERMINATI ED INSERITI NELLA
' TABELLA 6.1.
DO
GOSUB Test_Fotoresistenze
GOSUB Navigate
Pagina 212 · Robotica con il Boe-Bot
LOOP
Test_Fotoresistenze:
RETURN
Navigate:
RETURN
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.
questo è l’indicatore di reset che è stato usato nella maggior parte dei programmi di
questo testo.
FREQOUT 4, 2000, 3000
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
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
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.
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
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.
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.
DO
GOSUB Test_Fotoresistenze
GOSUB Average_And_Difference
GOSUB Navigate
LOOP
Test_Fotoresistenze:
RCTIME 6,1,timeLeft
RETURN
Average_And_Difference:
RETURN
Navigate:
PAUSE 10
RETURN
Average_And_Difference:
RETURN
Potete anche dichiarare il denominatore con una costante come in questo caso:
Denominator CON 6
Average_And_Difference:
RETURN
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
Average_And_Difference:
RETURN
Average_And_Difference:
RETURN
' Codice non cambiato ' Cambiato per Salvare 1 Word di RAM
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.
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
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
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
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
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.
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.
Vdd
P2
1 kΩ
IR
P9 LED
220 Ω
Vss Vss
Coppia IR Sinistra Coppia IR Destra
Capitolo 7: Navigazione con l’Illuminazione Infrarossa · Pagina 233
To Servos
To Servos
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.
DO
FREQOUT 8, 1, 38500
irDetectLeft = IN9
LOOP
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
Elenco Componenti:
(2) LED Rossi
(2) Resistenze – 220 Ω (rosso-rosso-marrone)
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
DEBUG CLS,
"RIVELATORI IR", CR,
"Sinistro Destro", CR,
"-------- ------"
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
PAUSE 100
LOOP
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
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
Elenco Componenti:
Per questo esercizio vi serviranno alcuni componenti aggiuntivi.
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.
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.
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
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
DO
FREQOUT 2, 1, 38500
irDetectRight = IN0
LOOP
Turn_Right:
FOR pulseCount = 0 TO 20 ' Curva a destra, circa 90-gradi.
PULSOUT 13, 850
PULSOUT 12, 850
PAUSE 20
NEXT
RETURN
Il vostro Turno
Modificate RoamingWithIr.bs2 in modo che in una subroutine siano controllate le
coppie IR.
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
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
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
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).
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
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.
irDetectRight = IN0
' Decide la navigazione.
LOOP
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.
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.
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
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.
Object
15 14 Vd d 13 12
Red
Black
X4 X5
Vdd Vin Vs s
X3
P15
P14
P13
P12
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
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à.
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 Ω.
DEBUG CLS,
" OGGETTO ", CR,
"FREQUENZA RILEVATO", CR,
"--------- --------"
DO
distance = 0
FOR freqSelect = 0 TO 4
PAUSE 100
NEXT
Capitolo 8: Controllo del Robot con la Rilevazione della Distanza · Pagina 265
DEBUG CR,
"--------- --------", CR,
"Zona ", DEC1 distance
LOOP
DEBUG CLS,
"ZONA IR DELL’OGGETTO", CR,
"Sinistra Destra", CR,
"-------- ------"
DO
GOSUB Get_Distances
GOSUB Display_Distances
LOOP
Get_Distances:
distanceLeft = 0
distanceRight = 0
FOR freqSelect = 0 TO 4
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
Display_Distances:
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.
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
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.
Effettuando alcune sostituzioni, le tre equazioni di cui sopra possono essere ridotte ad
una, che vi darà lo stesso risultato.
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:
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
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
DO
GOSUB Get_Ir_Distances
GOSUB Send_Pulse
LOOP
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
Send_Pulse:
PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 5
RETURN
GOSUB Get_Ir_Distances
Le due righe di codice seguenti implementano il calcolo per il controllo proporzionale per
ciascun servo.
' Calcola l’uscita proporzionale.
Ora che i calcoli per pulseLeft e pulseRight sono terminati, può essere chiamata la
subroutine Send_Pulse.
GOSUB Send_Pulse
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
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
+ 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
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).
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
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
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
√ 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
√ 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
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
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
+ 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
DO
GOSUB Get_Ir_Distances
GOSUB Send_Pulse
LOOP
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
Send_Pulse:
PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 5
RETURN
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
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.
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.
√ 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
Figura A-1
Finestra di Identificazione
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:
√ 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:
Windows® XP Pro:
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.
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.
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
Giallo-Viola-Marrone = 4-7-0.
Appendice D: Regole di Esecuzione dei Prototipi · Pagina 299
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.
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
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.
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.
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
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.
√ 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.
PAUSE 200
LOOP
Appendice F: Bilanciamento delle Fotoresistenze · Pagina 311
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
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
( 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
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
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.
( y 2 − y1 )
m=
( x2 − x1 ) b = y 2 − mx2
and
" ",
DEC5 timeRight,
" Prima"
PAUSE 200
LOOP
Appendix G: Taratura degli IR per la Rilevazione della Distanza · Pagina 317
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.
DEBUG CLS,
"Clickate nella finestra di trasmissione,", CR,
"Quindi per iniziare premere Enter", CR,
"Scansione di frequenza...........", CR, CR,
DO
DEBUGIN dummy
crsrPosRow = 6
crsrPosRow = crsrPosRow + 1
PAUSE 100
NEXT
LOOP
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.
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
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.
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
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.
("Parte al comando" significa che il robot parte con un comando esterno, non tattile.
Questo potrebbe essere, ad esempio, un suono od una luce)
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.
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