banner.jpg (7109 byte)

Programmi per il Robot
ultimo aggiornamento 20 ottobre 2008


 

Questi programmi come i testi sono stati tratti dal sito originale della DeAgostini dedicato al robot, il sito ora non è più in rete.
Queste risalgono al momento della pubblicazione dell'opera e le informazioni possono non essere aggiornate, provvederò prossimamente al loro aggiornamento
Se qualcuno vuole partecipare alla revisione può contattarmi tramite tramite e-mail all'indirizzo adrirobot@yahoo.it

Programmi disponibili

Programma 1
Questo programma di movimento rileva ostacoli con i baffi e li evita. È strutturato in modo tale da avere un metodo euristico (basato su regole empiriche) per evitare di restare bloccato in un angolo. Il programma è eseguibile a partire dal fascicolo 16.
Scarica Programma1.bs2

 

Programma 2
Questo programma utilizza un'algoritmo di navigazione realtime (il microcontrollore verifica continuamente lo stato dei sensori a infrarossi e reagisce facendo compiere al robot piccole variazioni di traiettoria) evitando gli ostacoli rilevati dagli infrarossi. Il programma è eseguibile a partire dal fascicolo 18.
Scarica Programma2.bs2

homotix

PCBONLINE

Navigazione back-front
Il programma '
navigazione-back-front.bs2' permette al robot di navigare utilizzando sia i sensori anteriori (baffi e IR) che quelli posteriori (baffi e IR montati sulla scheda DeA back sensors).
Quindi perché il robot possa eseguire il programma è necessario che al posto della pinza del manipolatore sia montata la scheda DeA back sensors completa di baffi e IR.
I collegamenti dello slot S3 della scheda DeA back sensors con gli slot X1 e X2 della scheda madre del robot devono essere effettuati seguendo le indicazioni riportate all'interno del programma.
In particolare ricordiamo le corrispondenze tra i seguenti socket:

Bsx

di

S3 a

P11

di

X1

Rsx

di

S3 a

P14

di

X1

Tsx

di

S3 a

P15

di

X1

Vdd

di

S3 a

Vdd

di

X2

Vss

di

S3 a

Vss

di

X2

Rdx

di

S3 a

P5

di

X1

Rdx

di

S3 a

P3

di

X1

Bdx di S3 a P10 di X1

Scarica il programma navigazione-back-front.bs2
(Programma eseguibile correttamente dal fascicolo 52 in poi.)

 

Come calibrare i sensori IR monoblocco
In questo articolo sono presenti dei programmi che servono per calibrare i sensori IR monoblocco montati sul DeA Line Follower e per la navigazione del robot lungo circuiti disegnati per terra.

- Il primo programma (calibrazioneLF3sensori.bs2) è dedicato alla calibrazione dei tre sensori centrali della scheda DeA line Follower (Sx1, Line e Dx1).
- Il secondo programma (calibrazioneLF5sensori.bs2) permette la calibrazione di tutti e cinque i sensori della scheda (Sx2 e Dx2) quest'ultima configurazione della scheda si realizza grazie al montaggio del quarto e del quinto sensore IR (allegati ai fascicoli 56 e 57).
- Gli altri tre programmi permettono la navigazione del robot con l'impiego del DeA Line Follower lungo circuiti aperti o chiusi.
In particolare due programmi (LFnavigazionecircuitiaperti3sensori.bs2 e LFnavigazionecircuitichiusi3sensori.bs2) sono stati sviluppati per la l'uso della scheda con tre sensori e uno (LFnavigazionecircuitichiusi5sensori.bs2) per il DeA Line Follower completo di tutti e cinque i sensori.
Alla calibrazione e alla programmazione del DeA Line Follower sono dedicate le pagine da 173 a 184 della sezione LAB.

 

Le gare di line following e la scheda DeA Line Follower
Grazie alla scheda DeA Line Follower ci si potrà cimentare in entusiasmanti gare di Line Following. Nella comunità robotica mondiale questo tipo di competizioni sono molto frequenti e numerose.
Ogni partecipante gareggia con un proprio robot, a volte progettato ex-novo altre volte utilizzando i 'kit robotici' disponibili sul mercato a cui sono apportate personali modifiche ed elaborazioni volte a potenziarne le capacità. In ogni gara si possono quindi osservare robot dalle forme più svariate e costruiti con tecnologie anche molto diverse tra loro.

Queste sfide tra robot mobili si svolgono su circuiti solitamente contrassegnati da una linea che i robot devono seguire per portare a termine la prova (vedi figura 1).
Viene premiato il robot che termina la gara nel minor tempo possibile e sono previste penalizzazioni per i robot che escono dal tracciato costringendo l'operatore al riposizionamento manuale del robot sul tracciato (così come possono essere riconosciuti dei 'bonus' per il superamento di prove intermedie durante il tragitto).
Spesso i robot devono affrontare più circuiti con caratteristiche diverse, appositamente studiati per mettere in difficoltà i robot o esaltarne le potenzialità: più brevi ma via a via maggiormente complessi, con particolari raccordi curvilinei oppure con linee spezzate e incroci che richiedono un maggior controllo di traiettoria da parte del robot.
Alcune volte lungo il percorso vengono posizionati ostacoli e diversivi per 'confondere' i sensori del robot.

Prova anche tu a costruire un circuito di line following e mettere alla prova il tuo robot.
Per realizzare il circuito puoi utilizzare del comune nastro isolante da elettricista e tracciare la linea del percorso su una superficie liscia, per esempio su un foglio di cartone o direttamente sul pavimento (è importante che tra la superficie e il tracciato ci sia un deciso contrasto: superficie chiara/nastro nero, superficie scura/nastro bianco).
Qui trovi due esempi di programmi di navigazione con la scheda DeA Line Follower (LFcircuitichiusi.bs2 e LFcircuitiaperti.bs2): il primo consente la navigazione del robot su circuiti chiusi (figura 2) mentre il secondo può essere utilizzato per circuiti in cui occorre riconoscere le posizioni di partenza e di arrivo contrassegnate da un nastro trasversale al tracciato (figura 3).
Ricorda che i componenti del kit DeA Line Follower sono forniti con i fascicoli 45, 46, 47, 48, 49 e 50 mentre le fasi di montaggio e di test del kit DeA Line Follower sono illustrate nella sezione LAB del fascicolo 50.

Scarica i programmi LFcircuitichiusi.bs2 e LFcircuitiaperti.bs2
Infine ecco una serie di link a siti dedicati alle competizioni di line following:
Robotics.nasa.gov
Robotroom.com
www.dprg.org
www.chibots.org

Il kit microfono
In questo articolo presentiamo un programma che permette di usare il kit microfono (che è stato fornito con i fascicoli 38 e 39) come rilevatore di rumore.
Per prima cosa è però necessario realizzare sulla breadboard il circuito illustrato nelle figura 1.
A tal proposito una possibile implementazione del circuito sulla breadboard è raffigurata nella figura 2 (in cui la disposizione dei componenti risulta particolarmente 'ordinata').
Segnaliamo che l'area colorata in azzurro nella figura 1 racchiude la riproduzione del circuito interno del chip LM 358 e i numeri da 1 a 8 rappresentano i piedini del chip stesso.
I componenti che sono stati impiegati per riprodurre il circuito sulla breadboard sono i seguenti:
· Il chip LM358 (visibile in basso a destra nella figura 2)
· 7 resistori da 4.7 KΩ
· 1 resistore da 47 KΩ
· 1 resistore a resistenza variabile (o Trimmer) da 1 MΩ (che serve a variare la sensibilità del sistema)
· 1 capacitore da 100 nF
· 1 capsula microfonica
· 1 transistor Q1 BC 337



Figura 1

Il programma microRandom.bs2 che abbiamo sviluppato è una semplice applicazione del circuito costruito sulla breadboard.
Una volta caricato il programma in memoria e premuto il tasto start/stop della scheda madre, il robot risponderà alle sollecitazioni sonore eseguendo movimenti casuali.
In particolare, il programma prevede quattro movimenti principali, avanzamento, rotazione oraria e antioraria e inversione di marcia; non appena il robot percepisce un rumore sceglie a caso uno di questi movimenti e lo esegue.
Nel programma è previsto anche l'utilizzo dei baffi come apparato sensoriale.
Per eseguire la scelta casuale del movimento è stata utilizzata la funzione PBasic random che agisce su una variabile settandola a un valore casuale.


Figura 2

Scarica il programma microRandom.bs2

 

La pinza robotica

La pinza robotica che ti è stata fornita e che hai installato nella parte posteriore del robot utilizza i motori a spazzola per azionare i componenti meccanici che generano il movimento della pinza.
Già sappiamo come gestire via software i motori a spazzola, lo abbiamo fatto quando questi erano utilizzati come apparato di locomozione del robot.
Anche in questa nuova configurazione i motori vengono sempre comandati attraverso le due istruzioni PBasic high e low applicate alle relative porte del microcontrollore.
Inoltre i motori sono ancora collegati alla scheda di controllo motori (DeA DC motor board), in particolare il motore collegato al morsetto X2 agisce sui becchi della pinza mentre il motore collegato al morsetto X3 aziona la slitta verticale a cremagliera che consente il movimento di salita e discesa della pinza.

Dunque quando i motori a spazzola sono utilizzati per muovere la pinza la gestione via software non cambia. Occorre tuttavia risolvere un problema legato ai 'limiti meccanici' propri della pinza.
Infatti i movimenti consentiti ai due motori sono vincolati dalla struttura della pinza (non sono liberi come quando azionavano le ruote): i becchi della pinza per esempio, sono limitati nella loro corsa dalla posizione di massima apertura e dalla posizione di chiusura o di presa.
Oltre queste posizioni 'critiche' il motore incontra una resistenza che lo porta a una condizione di sforzo (dannosa per il componente stesso, per gli ingranaggi della pinza e per la durata delle batterie); pertanto è opportuno realizzare dei 'fine corsa', un sistema che consenta di arrestare automaticamente il movimento dei motori quando si giunge nelle posizioni critiche e estreme.
Ecco due programmi completi (
Pinza con FineCorsa.bs2 e Pinza con FineCorsa Variante.bs2) che consentono di comandare il robot attraverso il telecomando.
Entrambi i programmi permettono di muovere il robot attraverso i servomotori e implementano la parte sensoriale relativa ai baffi.

Il primo programma consente di azionare a distanza la pinza e utilizza dei fine corsa, realizzati attraverso apposite istruzioni software, per evitare che i due motori siano sottoposti a pericolosi sforzi quando vengono a trovarsi nelle cosiddette posizioni estreme o critiche.
Il programma consente di comandare la pinza attraverso i tasti del telecomando
e per i movimenti di salita e discesa e  e per la chiusura e l'apertura dei becchi della pinza.

Il secondo programma è una semplice variante del primo che prevede la chiusura automatica dei becchi della pinza premendo una sola volta il pulsante del telecomando; quando la pinza fa presa su un oggetto (o i due becchi vengono a contatto) il motore che li aziona si ferma automaticamente.
 

Per far eseguire correttamente i due programmi è necessario implementare sulla breadboard il circuito proposto in figura 1.
Si tratta di un circuito RC, simile a quello già visto per l'impiego dei fotoresistori ma che presenta un resistore di resistenza fissa e nota al posto del fotoresistore.
Sono necessari un capacitore da 100nF, un resistore da 10KΩ e uno da 220Ω da collegare a una delle porte libere del microcontrollore (in questo caso la P11).

Attraverso questo semplice circuito è possibile monitorare il livello di tensione delle batterie durante il funzionamento dei motori a spazzola.
Quando un motore si trova in una delle posizioni estreme e comincia a 'forzare' il livello di tensione delle batterie diminuisce.
Rilevando questo calo di tensione è quindi possibile sapere quando deve intervenire il fine corsa software. Se il fine corsa è attivo, il motore viene spento e il tasto di movimento del telecomando viene disabilitato fino quando il fine corsa non verrà sbloccato da un movimento che allontani il componente (i becchi o la slitta) dalla posizione estrema.

Scarica i programmi
Pinza con FineCorsa.bs2
Pinza con FineCorsa Variante.bs2

 

Il piezo speaker (cicalino) come segnalatore delle batterie scariche
Quando le batterie che alimentano il robot si scaricano, la tensione applicata alla scheda madre diminuisce fino a scendere al di sotto di un valore di soglia che non permette al microcontrollore di lavorare in modo corretto.
Dato che ogni elemento elettrico collegato al robot sottrae un po' della potenza erogata dalle pile e di conseguenza, anche se queste non sono ancora del tutto scariche, può accadere che durante l'utilizzo di componenti quali i servomotori (che sfruttano intensamente la potenza delle pile) il microcontrollore non venga alimentato in modo appropriato per alcuni istanti.
Ciò si verifica perché all'interno dell'area circuitale che include il microcontrollore e la memoria esiste un sistema di protezione che interrompe automaticamente il funzionamento del microcontrollore quando la tensione che lo alimenta scende pericolosamente al di sotto di un determinato valore di soglia.
Nel momento in cui la tensione torna a valori validi, il microcontrollore si 'riaccende' e l'effetto risultante complessivo è quello di una azione di reset (come quella provocata dalla pressione del tasto di reset presente sulla scheda madre del robot) che, durante l'esecuzione di un programma, può causare comportamenti scorretti e imprevisti del robot.
Questi comportamenti insoliti possono essere erroneamente interpretati come un difetto di programmazione, occorre quindi trovare il modo di riconoscere quando sono in realtà causati da un calo di tensione che, possiamo affermare, provoca un fenomeno di 'azione di reset non voluta'.
Una soluzione è quella di sfruttare il piezo speaker che vi è stato fornito con il fascicolo 35, facendo semplicemente in modo che a ogni avvio del microcontrollore il piezo speaker emetta un segnale acustico, consentendo così di evidenziare un reset dovuto a un calo di tensione.
Ecco il circuito che possiamo realizzare sulla breadboard per impiegare il piezo speaker come segnalatore della fastidiosa 'azione di reset non voluta:

Una volta fatto ciò si esegua il seguente programma: Cicalino.bs2
È un programma molto semplice: il suo compito è quello di produrre un segnale sonoro, visualizzando nel contempo nella finestra di debug la scritta "Beep!!!", per poi porsi all'interno di un ciclo infinito in cui attende la pressione del tasto di reset presente sulla scheda madre (che abbiamo chiamato anche pulsante start/stop).
Focalizziamo l'attenzione su due istruzioni in particolare:

output 2
freqout 2, 2000, 3000
 

La prima istruzione si occupa di settare la porta 'p2' come output, quindi come porta di uscita.
L'istruzione che segue presenta invece la seguente sintassi:
freqout PORTA, TEMPO, FREQUENZA
dove TEMPO è espresso in millisecondi (2000) e FREQUENZA in Hertz (3000) L'istruzione presente nel listato ha quindi il seguente significato: invia sulla porta 'p2' per 2 secondi un segnale di frequenza 3 KHz (3000 Hz).
In seguito a queste due istruzioni viene quindi inviato al piezo speaker un segnale di frequenza 3KHz e durata 2 secondi che induce il piezo speaker a produrre un suono.
La porta P2, precedentemente settata come uscita per gestire lo speaker, viene adesso settata come ingresso (input) tramite l'istruzione "input 2" per gestire il tasto di reset presente sulla scheda madre del robot, il programma prosegue con un ciclo infinito che contiene le seguenti istruzioni: invia alla finestra di debug il messaggio "attendere il reset", inteso qui come un 'reset intenzionale' operato tramite il tasto di reset, e in seguito controlla se il pulsante viene premuto verificando il valore del registro "in2" associato in fase dichiarativa alla variabile PBin.
Quando questo vale 0 allora il tasto è stato premuto per cui il programma simula con un suono l'avvenuto reset. Inserendo queste istruzioni all'inizio di qualsiasi programma (a patto di avere riprodotto il circuito presentato sulla breadboard!), sarà dunque possibile accorgersi di una 'azione di reset non voluta' durante l'esecuzione di un programma: quando il robot emette il 'beep' e non è stato premuto fisicamente il tasto di reset significa che siamo in presenza della cosidetta 'azione di reset non voluta' provocata da un eccessivo calo di tensione.
È il momento di sostituire le batterie del robot!
Nota: Si è deciso di usare la porta p2 sia come input per la gestione del pulsante start/stop che come output per la gestione del piezo speaker per evitare di utilizzare più porte del necessario: il programma sopra descritto è molto semplice e sfrutta poco le risorse del robot proprio perché, come avrete già notato, nei programmi più complessi il numero di porte da gestire aumenta e conviene quindi ottimizzare il più possibile l'uso delle porte. Un buon metodo è proprio quello di sfruttare la stessa porta per due risorse (tipicamente un sensore e un attuatore) operando in modo che non vengano mai utilizzate contemporaneamente ma che una risorsa utilizzi la porta come input e l'altra come output.

Scarica il programma
Cicalino.bs2

 

Un nuovo software per i servomotori

Sostituendo i motori a spazzola con i servomotori la parte di programmazione relativa ai movimenti del robot è completamente diversa.
Come sappiamo i motori a spazzola hanno un tipo di funzionamento 'on/off', ottenuto attraverso le istruzioni high e low applicate alle rispettive porte logiche.
I servomotori invece vengono comandati attraverso un particolare segnale digitale generato dal comando PBasic pulsout.
Ciò consente un maggiore controllo sul motore e la possibilità di avere velocità di rotazione diverse, ma comporta anche un diverso tipo di gestione dal punto di vista software.
È quindi è necessario riadattare tutti i programmi che per far muovere il robot si servivano dei motori a spazzola: per esempio ecco la nuova versione del programma di navigazione (ora con i servomotori) abbinato all'uso del telecomando.
La struttura generale del programma non è cambiata ma è stato ovviamente necessario riscrivere le parti di codice relative ai movimenti del robot.
Come nella versione precedente del programma il robot è in grado di eseguire 6 tipi di movimenti in base al tasto premuto sul telecomando.
Sono previsti i movimenti in avanti e indietro, la rotazione verso destra e verso sinistra e il movimento all'indietro abbinato alla rotazione verso destra e verso sinistra.
Inoltre sono state implementate delle funzioni sensoriali per rilevare eventuali ostacoli attraverso i baffi.
Per quanto riguarda infine la gestione specifica dei servomotori sono state inserite anche le quattro costanti ANTIORARIO_DX, ORARIO_DX, ANTIORARIO_SX e ORARIO_SX utili per ottenere movimenti calibrati in base alle caratteristiche dei tuoi servo.
Le costanti sono state inizializzate ai valori di default 500 e 1000: puoi sostituire a ognuna delle costanti i valori che hai ricavato dalla calibrazione dei servomotori in tuo possesso.

Scarica la nuova versione del programma
Telcomando-servomotori.bs2

 

Come calibrare i servomotori

Grazie ai due servomotori allegati ai fascicoli 28 e 30 puoi far compiere al tuo robot movimenti molto più precisi rispetto a quanto visto con i motori a spazzola, poiché la conformazione e il funzionamento dei servomotori permettono un maggior controllo sulle ruote del robot.
Tuttavia, come la maggior parte dei componenti servo-meccanici, anche i servomotori devono essere calibrati quando lavorano in coppia. Infatti mentre ogni servomotore, se impiegato singolarmente, offre un buon grado di precisione, quando i due servomotori sono utilizzati insieme per azionare le ruote del robot difficilmente rispondono in maniera identica ai medesimi input, generando così nel robot comportamenti asincroni involontari.
Mandando in esecuzione il programma di avanzamento del robot (calibratura1.bs2), noterai facilmente come il robot non segua una traiettoria perfettamente rettilinea nei suoi spostamenti, ma tenda a deviare verso sinistra o verso destra.
Tale anomalia è dovuta al fatto che, pur imprimendo a entrambi i servomotori la velocità massima, i due dispositivi girano a velocità leggermente differenti, perché la velocità massima è generalmente diversa per ciascuno di essi.
Nel caso in esame, l'avanzamento del robot si realizza applicando un impulso di 1ms al motore destro (P13), facendolo ruotare in senso orario, e un impulso di 2ms al motore sinistro (P12), facendolo ruotare in senso antiorario.
In questo modo, però, i due servomotori non girano alla medesima velocità, ma ciascuno alla propria velocità massima.
Per ovviare a questo problema si rende necessaria una calibratura via software (tramite il linguaggio PBasic), che consiste nel modificare la durata dell'impulso di uno dei due servomotori finché entrambi non assumano la medesima velocità e, di conseguenza, il movimento del robot sia corretto.
Se ad esempio il robot tende a deviare verso sinistra, significa che il motore destro gira più velocemente.
Per ridurne la velocità è dunque necessario incrementare la durata dell'impulso oltre 500 (valore di default), portandolo ad esempio a 530.
A questo punto verifica il comportamento del robot: se continua a deviare verso sinistra è necessario aumentare ancora il valore dell'impulso, se invece devia verso destra significa che la velocità è stata ridotta troppo e quindi occorre diminuire il valore dell'impulso.
Ripeti quest'operazione fino a quando la traiettoria del robot non sia perfettamente diritta: il valore dell'impulso definitivo deve consentire una perfetta calibratura dei servomotori.
Nel caso invece di deviazione del robot verso destra, occorre diminuire, seguendo la stessa procedura, il valore dell'impulso del motore sinistro, diminuendolo progressivamente a partire da 1000 (valore di default).
La medesima sequenza di operazioni va ripetuta anche nel caso opposto, quando cioè si vuole che il robot indietreggi.
Si ottengono in questo modo due valori numerici, equivalenti alla durata dell'impulso applicato al servomotore con velocità maggiore, uno per l'avanzamento e uno per il movimento all'indietro.
In ogni programma che richieda uno dei due movimenti puoi settare due costanti PBasic che contengano la differenza tra il valore di default (500 o 1000) e il valore calibrato che hai trovato, al fine di rendere più leggibile e facilmente modificabile il programma stesso.
Prendi spunto dal seguente programma (calibratura2.bs2), che fa eseguire al robot entrambi i movimenti.

Scarica i programmi calibratura1.bs2 e calibratura2.bs2

 

Giochi di luce

Con il kit di led fornito insieme al fascicolo 25, si possono sperimentare sulla breadboard nuovi tipi di circuiti e aggiungere un tocco di colore al tuo robot.
Puoi utilizzare infatti i led per realizzare simpatiche coreografie e giochi di luce oppure per segnalare 'visivamente' le azioni svolte dal robot: è possibile, ad esempio, impiegare due led, la cui accensione è legata allo stato dei baffi, in modo da segnalare attraverso la luce la presenza di un ostacolo.
Proviamo a realizzare un semplice circuito e il relativo programma per simulare un effetto luminoso molto simile a quello di cui era dotata la macchina Kitt del telefilm Supercar: sul suo frontalino (posto sulla parte anteriore dell'auto) scorreva infatti una scia luminosa che si muoveva da un estremo all'altro del frontalino stesso.
Ecco allora come dotare il tuo robot di questo particolare effetto visivo: nella figura A è rappresentato il circuito che devi realizzare sulla breadbord.
Sono necessari quattro led colorati, quattro resistenze da 390 Ohm e quattro cavetti per i collegamenti. In questa implementazione, i led sono collegati alle porte logiche P9, P10, P11 e P12; l'accensione del led avviene impostando la rispettiva porta al valore logico basso, mentre lo spegnimento prevede l'impostazione della stessa porta al valore logico alto.


Figura A

Il programma Kitt.bs2 consente di realizzare l'effetto scia luminosa nei quattro led allineati. Questo programma permette di accendere i led in sequenza, da destra verso sinistra e viceversa: ogni led viene spento solo dopo l'accensione del successivo, in modo da realizzare anche l'effetto della scia luminosa che si sposta da un capo all'altro della serie di led.
Il valore della costante DELAY esprime il ritardo in millisecondi che intercorre tra l'accensione e lo spegnimento di led successivi; modificando questo valore è possibile velocizzare o rallentare l'effetto visivo.
Per l'accensione sequenziale dei led sono stati utilizzati due cicli FOR uno per il movimento destra-sinistra e uno per il movimento inverso.
Per apprezzare maggiormente l'effetto visivo, puoi procurarti altri led dello stesso colore ed estendere la serie dei led stessi, modificando in modo opportuno anche il programma con le nuove porte a cui collegherai i led aggiuntivi.
Per mantenere semplice la struttura del programma, è però necessario utilizzare porte consecutive: devi quindi considerare quali sono già occupate da altri dispositivi ed eventualmente, se possibile, disinserirli onde evitare di danneggiarli.
La porta P13, ad esempio, dovrebbe essere libera, mentre la P14 e la P15 sono collegate ai motori, la P7 e la P8 sono invece utilizzate per sensori IR. Se vuoi avvalerti anche di queste porte, devi prima disconnettere i componenti che vi sono collegati (ad esempio scollegare i cavi di alimentazione dei motori e togliere i dispositivi IR).
Scarica il programma Kitt.bs2

 

Il termistore

Abbiamo visto che il tuo Robot può essere equipaggiato con diversi tipi di sensori: sensori di contatto (baffi), sensori a infrarosso e sensori di luce (fotoresistori).
È possibile implementare anche un sensore di calore (termistore) in grado di far 'percepire' al robot le variazioni di temperatura che si verificano nell'ambiente circostante.
Il termistore (fornito con il fascicolo 26 unitamente a un condensatore ceramico da 100nF) è un componente elettronico sensibile al calore che varia la propria caratteristica elettrica (la resistività) in funzione della temperatura ambientale.
In particolare all'aumentare della temperatura il valore della resistenza diminuisce e viceversa; di fatto il comportamento di un termistore è, da un punto di vista fisico, molto simile a quello di un fotoresistore: entrambi i componenti, infatti, sono caratterizzati da un valore di resistenza inversamente proporzionale a determinate grandezze fisiche (calore e luce).
Questa similitudine si riflette anche nella modalità di utilizzo sulla bread-board: la configurazione circuitale che si adotta per il termistore è uguale a quella già vista per il fotoresistore, sostituendo semplicemente il fotoresistore con il termistore.
L'informazione riguardante il calore viene ancora calcolata misurando la costante di tempo RC attraverso il comando PBasic rctime, ottenendo così un indicatore della quantità di calore 'percepita' dal termistore.

Proviamo allora ad allestire un semplice rivelatore di calore utilizzando il termistore e dei LED che ci consentiranno di 'visualizzare' le variazione di temperatura (all'aumentare della temperatura si illumineranno un numero crescente di LED).
Per realizzare il circuito riportato in figura 1 sono necessari il termistore, un condensatore da 100nF, un resistore da 220Ω, 4 resistori da 390Ω e 4 LED colorati (meglio se dello stesso colore).
Nel circuito risultano utilizzate 5 porte logiche, da P9 a P13: le prime 4 porte (da P9 a P12) sono destinate ai LED mentre l'ultima (P13) è collegata al circuito RC formato da termistore e condensatore.
Il rivelatore di calore che si ottiene misura attraverso il termistore un indicatore dalla temperatura ambientale (la costante di tempo RC) e in base a tale valore accende un determinato numero di LED.
Il programma Termistore.bs2 qui disponibile consente di far funzionare tale rivelatore.
La struttura del programma si articola in due fasi: prima si calcola attraverso il comando rctime il valore approssimato della costante di tempo RC, quindi si confronta il valore ottenuto con altri quattro valori numerici (soglie), per stabilire quanti e quali LED devono essere accesi.
Altre informazioni e descrizioni specifiche della struttura e del funzionamento del programma Termistore.bs2 sono contenute nel listato del programma stesso.

Scarica il programma Termistore.bs2

 

Inseguire la luce

Tra gli allegati forniti con il fascicolo 22 ci sono due fotoresistori.
I fotoresistori sono dei componenti optoelettronici che variano la propria caratteristica elettrica, la resistività, in base all'intensità della luce che li colpisce.
Possiamo sfruttare questa peculiarità per realizzare un programma in PBASIC (InsegueLuce.bs2) che consenta al robot di 'inseguire' una fonte luminosa (naturale o artificiale).
 

Prima di far funzionare il programma è necessario realizzare sulla breadboard il circuito riportato nello schema A.
Così facendo i due fotoresistori risultano collegati alle porte logiche del microcontrollore.
In particolare il fotoresistore destro è collegato alla porta P9 e il fotoresistore sinistro alla P10.
Per costruire il circuito mostrato nello schema A hai bisogno dei componenti presentati nella Foto 1.
I condensatori, i resistori e i fotoresistori sono allegati al fascicolo 22 mentre i cavetti sono forniti con il fascicolo 23.
I cavetti, appositamente realizzati per la costruzione di circuiti sulla breadboard del robot, possono essere momentaneamente sostituiti con altri cavi perché abbiano una sezione di 0,6/0,7 mm (diametro della sezione) e siano in materiale conduttore (per esempio quello dei contatti metallici dei resistori, i reofori).

La struttura del programma InsegueLuce.bs2 (commentata e descritta anche nel listato) è del tutto simile a quella già vista per altri programmi di navigazione realizzati per il funzionamento dei baffi o dei sensori a infrarossi.
Il programma è costituito da una parte dichiarativa iniziale (variabili e costanti), dalla verifica del tasto start/stop (chiamato anche pulsante restart o tasto di reset) della scheda madre e infine dal ciclo infinito all'interno del quale si svolge l'algoritmo di navigazione.
Per quanto riguarda quest'ultimo aspetto si è stabilito che il robot cambierà la direzione di marcia in funzione dell'intensità luminosa percipita dai due fotoresistori: il robot si muoverà nella direzione corrispondente al fotoresistore (destro o sinistro) che ha ricevuto la maggior quantità di radiazione luminosa.
Per avere un indicatore della luce rilevata occorre far riferimento a un parametro caratteristico del circuito formato da condensatore e fotoresistore, la costante di tempo.
Il valore di tale parametro risulta essere (per ragioni fisiche) inversamente proporzionale all'intensità luminosa rilevata.
Attraverso l'istruzione PBasic rctime è possibile stimarne il valore e memorizzarlo in un'opportuna variabile.
Confrontando i valori delle costanti di tempo dei due fotoresistori è quindi possibile stabilire in quale direzione debba ruotare il robot: il valore più piccolo indica la direzione da seguire.
È opportuno definire un valore di soglia tra i due valori delle costanti di tempo, al di sotto del quale il robot non modifica la direzione di marcia. In questo modo è possibile rendere il robot più o meno sensibile alla diversa intensità luminosa percepita dai fotoresistori.
Invertendo il confronto tra le due costanti di tempo, decidendo cioè che il robot si muova nella direzione corrispondente al fotoresistore con costante di tempo maggiore, si otterrà un comportamento opposto da parte del robot che, anziché inseguire la luce, cercherà di evitarla.
Il programma d'esempio qui descritto (InsegueLuce.bs2) è molto semplice; puoi divertirti a modificarlo variandone i parametri o aggiungendo altre funzionalità. Per esempio puoi:
1. modificare il valore della soglia rendendo il robot più o meno sensibile alla differenze di luminosità.
2. integrare il programma di navigazione con fotoresistori con quello di navigazione con i baffi per 'difendere' il robot da eventuali ostacoli.
Scarica il programma InsegueLuce.bs2

 

Utilizzo del telecomando

Il programma DEA_DCMOTOR_Baffi_con Reomote_Rev1.0 permette, tramite la pressione di alcuni tasti del telecomando, di muovere il robot nelle varie direzioni (avanti, indietro, avanti destra, indietro destra, avanti sinistra, indietro sinistra). Agendo (singolarmente o contemporaneamente) sui due motori DC del robot si farà muovere il robot nella direzione indicata dalla/e frecce presenti sui tasti.
Nella figura 1 sono evidenziate le funzioni attribuite nel programma ai pulsanti del telecomando. È importante rimarcare alcune particolarità delle funzioni attribuite ai tasti M, ms, md e al tasto stop:


Figura 1

Per altre informazioni vedere la pagina del telecomando.

 

 

Programma1.bs2
Questo programma di movimento rileva ostacoli con i baffi e li evita. È strutturato in modo tale da avere un metodo euristico (basato su regole empiriche) per evitare di restare bloccato in un angolo

Programma2.bs2
Questo programma utilizza un'algoritmo di navigazione realtime (il microcontrollore verifica continuamente lo stato dei sensori a infrarossi e reagisce facendo compiere al robot piccole variazioni di traiettoria) evitando gli ostacoli rilevati dagli infrarossi


 navigazione-back-front.bs2

Navigazione back-front: permette al robot di navigare utilizzando sia i sensori anteriori (baffi e IR) che quelli posteriori (baffi e IR montati sulla scheda DeA back sensors).
 
calibratura1.bs2
Calibrazione servomotori: Programma di test per i servomotori: Facendo avanzare il robot in avanti occorre calibrare il valore dell'impulso in modo che il robot avanzi correttamente.

calibratura2.bs2
Calibrazione servomotori: Programma di test per i servo motori: Fa avanzare e successivamente indietreggiare il robot con valori degli impulsi calibrati,
Sostituisci i valori trovati per il tuo robot nelle due costanti
CAL_AVANTI e CAL_INDIETRO. Controlla poi che vangano applicate al
fosse più veloce
 
calibrazioneLF3sensori.bs2
Calibrazione line follower: Programma di test per la calibrazione dei sensori IR del DeA LineFollower.
Utilizza solo 3 sensori, disposti nei 3 alloggi centrali, Sx1 Line Dx1
 
calibrazioneLF5sensori.bs2
Calibrazione line follower: Programma di test per la calibrazione dei sensori IR del DeA LineFollower.
Utilizza tutti i 5 sensori disponibili

LFnavigazionecircuitiaperti3sensori.bs2
LFnavigazionecircuitichiusi3sensori.bs2
LFnavigazionecircuitichiusi5sensori.bs2
LFcircuitichiusi.bs2
LFcircuitiaperti.bs2
I programmi permettono la navigazione del robot con l'impiego del DeA Line Follower lungo circuiti aperti o chiusi.

microRandom.bs2
Microfono: programma per l'utilizzo del kit microfonico

Pinza con FineCorsa.bs2
Pinza con FineCorsa Variante.bs2
Pinza: programmi per la gestione della pinza

Cicalino.bs2
Collaudo cicalino: Collaudo cicalino


Termistore.bs2

Il programma realizza un semplice rivelatore di calore con NTC

DEA_DCMOTOR_Baffi_con Reomote_Rev1.0
Programma con utilizzo del telecomando

 

Elenco revisioni:
20/10/2008 Emissione preliminare