1 di 25 Dopo avar appreso le basi sull`elettronica e sulla robotica, ho

Transcript

1 di 25 Dopo avar appreso le basi sull`elettronica e sulla robotica, ho
1 di 25
Dopo avar appreso le basi sull'elettronica e sulla robotica, ho realizzato un piccolo
robot, in grado di interagire autonomamente con l'ambiente che lo circonda, e di
ubbidire agli ordini impartitigli. Questo progetto è l'evoluzione di un semplice robot
proposto dalla DeAgostini in collaborazione con PARALAX, in un corso di
apprendimento, costruzione e programmazione alla portata di tutti per imparare i
principi della robotica divertendosi. Ciò che il robot può fare dipende dalla dotazione
hardware e dal software scritto in base alle esigenze e fantasia dell'utente.
Il robot può rispondere a stimoli esterni: muovendosi, accendendo luci, emettendo
suoni; può elaborare: interpretando i dati acquisiti ed applicandovi formule
matematiche ottenendo risultati; comunicare dati: inviando segnali elettrici
direttamente via cavo, o attraverso l'etere tramite onde elettromagnetiche.
Con la robotica ho imparato che è possibile convogliare in un'unica disciplina le più
svariate materie didattiche, infatti si possono applicare tutti i concetti di fisica come
la meccanica, l'ottica, la termologia e l'elettromagnetismo; la matematica logica,
aritmetica e geometrica; l'inglese, come lingua di riferimento, è utilizzata anche in
tutti i dati tecnici, e linguaggi di programmazione; tutto ciò che riguarda l'elettronica
analogica e digitale. Non dimentichiamo che un robot è una macchina che per
diventare attiva ha bisogno di una scopo, e quindi bisogna progettare il software su
misura alle sue capacità, inserendo così anche l'informatica; ed infine anche un po' di
scienze in quanto occorre prima avere un'idea di come sono fatti gli esseri viventi da
cui prendere eventualmente spunto, ed osservare gli ostacoli che la natura oppone
all'uomo nell'esplorazione di luoghi o mondi resi inaccessibili… ma la cosa più
importante è la passione, tanta voglia di fare e molta fantasia.
Un robot è un'automa complesso e flessibile, in quanto il centro di elaborazione è
costituito da un'elettronica programmabile, basata su microprocessore, cioè un vero
e proprio computer che riceve input in forma digitale, li elabora, e fornisce degli
output. Le applicazioni di queste macchine ormai ricoprono tutti i settori:
- Medicina
- Industria
- Arma
- Sicurezza
- Esplorazione
- Soccorso
e tanti altri, in cui serve precisione, ripetitività, forza, accesso in ambienti particolari
e sensi di cui l'uomo non dispone.
Entrando subito nella descrizione del mio primo robot, cominciamo a descrivere
essenzialmente la parte elettronica hardware e software.
2 di 25
- HARDWARE
Il cuore di questo robot è una scheda programmabile chiamata BASIC STAMP, mi è
stata molto utile in quanto mi ha permesso, grazie alla sua semplicità d'uso, di
ottenere ottimi risultati quando (4 anni fa) ancora di MICONTROLLORI e memorie
EEPROM ne sapevo ben poco. Di BASIC STAMP ne esistono molte versioni, alcune
sono state utilizzate addirittura dalla NASA per l'apertura dei deflettori dei satelliti
(organi che deviano il propellente per il mantenimento dell'orbita); la versione che ho
avuto sotto mano è il BASIC STAMP 2 che utilizza: un microcontrollore PIC16c57
che lavora su dati ad 8bit con istruzioni da 12, ed una eeprom seriale 24LC16 dalla
capacità di 16Kbit (entrambi i chip sono costruiti da MICROCHIP, che offre
supporto tecnico anche in Italia); inoltre sulla scheda programmabile sono presenti
l'interfaccia per la programmazione seriale (adattando i livelli RS232 a TTL), lo
stabilizzatore di tensione e l'oscillatore ceramico per il clock a 20Mhz.
È importante saper che questo tipo di microcontrollore è un po' vecchiotto, tanto che
appartiene alla generazione dei µC con memoria EPROM (cioè quelli con finestrella
per la cancellazione tramite raggi UV, mentre gli ultimi PIC usano memoria FLASH
modificabile elettricamente), in questa memoria non vi risiede il programma
sviluppato dall'utente, ma un interprete che consente di scrivere sul chip di memoria
24LC16 il software progettato con linguaggio PBASIC (linguaggio di
programmazione in stile basic, realizzato apposta dalla PARALLAX per i basic
stamp). Sia il software Pbasic che gli schemi elettrici dei BasicStamp sono reperibili
gratuitamente in internet, per cui chiunque esperto di elettronica può realizzarsi il
proprio sistema di sviluppo anche personalizzato (robot, automi, sistemi di
acquisizione dati, giochi elettronici, calcolatori acc), ma da quanto detto sopra non
basta realizzare l'hardware, poiché i PIC che troveremo in commercio sono vergini, e
prima di poterli programmare in PBASIC occorre scaricare l'interprete su EPROM,
o copiandolo da un altro PIC o scaricandolo da internet [ST2.HEX] (naturalmente
tutto ciò a scopo personale). Di fatti i PIC senza questo interprete possono essere
programmati solo a basso livello con istruzioni basilari, questo modo di
programmare permette di gestire i minimi dettagli ma risulta particolarmente
elaborioso. Con Pbasic invece si programma con facilità, le semplici istruzioni sono
davvero molto utili ed intuitive, senza negare la gestione dei singoli bit sulle variabili,
o di scrivere un certo dato in una locazione di memoria.
3 di 25
Ecco di seguito lo schema del BasicStamp2:
P12 e P13 sono destinati ai servomotori
Questa scheda mette a disposizione un microcontrollore con architettura a 8bit,
esternamente presenta 20 linee I\O (relativi alla porte A-B-C)di cui 16 sono gestibili
dall'utente, mentre le altre 4 (relative alla porta A) sono dedicate all'interfacciamento
con la memoria e con il computer; gli altri 8 pin sono dedicati all'alimentazione (Vdd
e GND), al reset, e 2 per l'oscillatore, il pin T0CKI per l'ingresso della periferica
TIMER, siccome quest'ultima non viene sfruttata dall'esterno l'ingresso T0CKI
viene collegato a massa. Accennando un po' qualche dettaglio su microcontrollore,
esso ha:
un'unità ALU che lavora su due registri, uno è il registro "W" di lavoro (work) e
l'altro è il registro STATUS ovvero di stato; il program counter con due soli livelli di
STACK; una memoria ROM da 2k x 12bit , il registro istruzioni e decoder istruzioni;
poi abbiamo una locazione a parte in cui memorizzare una parola di configurazione
contenente impostazioni come la protezione del codice e l'abilitazione di periferiche
interne; abbiamo anche il circuito interno per l'oscillatore di clock che richiede solo il
componente oscillante; fra le periferiche interne si individuano gli immancabili
WATCH DOG\TIMER e PRESCALER (quest'ultimo è controllato dall'option
register), tanto per rinfrescarci le idee il WATCH DOG serve a resettare il pic
quando si entra in un loop non previsto, mentre il timer viene utilizzato per generare
ritardi nel software e nel campionamento di ingressi; abbiamo poi una SRAM a 72
byte di cui col Pbasic se ne possono utilizzare soli 32; ed in conclusione abbiamo i
registri per le porte I\O.
4 di 25
qui di seguito esponiamo il package del micro con le indicazioni delle connessioni, e la
configurazione circuitale dei registri delle porte di I\O. Da notare che in output
abbiano uno stadio pusch-pull utile per riuscire a
pilotare in corrente dei led, ma funge anche da
buffer, portandosi in alta impedenza quando la or da
1_logico e la and da 0_logico.
il set di istruzioni assembler lo esponiamo solo a titolo informativo visto che, grazie
all'interprete, il micro viene programmato ad alto livello in Basic:
5 di 25
Ed ecco lo schema a blocchi del microcontrollore PIC16C57:
per quanto riguarda la memoria EEPROM seriale 24LC16, essa si
presenta in un package ridottissimo ma offre 16 Kbit con accesso
(indirizzamento, lettura e scrittura) seriale sincrono e quindi con
protocollo I2C.
24LC16
6 di 25
anche questa piccola EEPROM è un gioiellino di tecnologia in quanto il
chip integra al suo interno tutto ciò che necessita per l'indirizzamento,
la lettura e la scrittura. Descriviamo ora il funzionamento dei pin :
- pin1-2-3 (relativamente A0-A1-A2): servono per l'indirizzamento
parallelo delle 8 mappe di memoria (da 4Kbit) costituenti l'array
conmplessivo.
- Pin4 (GND): 0 volt rispetto all'alimentazione.
- Pin5 (SDA): questo è un pin bidirezionale su cui confluiscono
serialmente indirizzi dati e parole di riconoscimento; allo scopo di
scrivere e leggere.
- Pin6 (SCL): pin d'input per il sincronismo dei dati.
- Pin7 (WP): pin d'input che consente di proteggere il dispositivo dalle
scritture ponendolo a Vcc, altrimenti lo poniamo a GND.
- Pin8 (Vcc): positivo di alimentazione (5V---)
In questa memoria è possibile scrivere un solo byte o una pagina
intera, si possono leggere locazioni a caso (random) oppure
sequenzialmente. Vedimo adesso alcuni grafici che indicano come
effettuare queste operazioni:
7 di 25
vediamo adesso il set di istruzioni ad alto livello che offre il pbasic:
Test e salto
IF...THEN
BRANCH
GOTO
GOSUB
RETURN
RUN
POLLRUN
Esegue un test ed effettua un salto ad una riga del programma.
Effettua un salto ad una riga del programma in base ad un indice.
Effettua un salto incondizionato ad una riga del programma.
Effettua un richiamo di una procedura.
Ritorna da una procedura.
Esegue un altro programma.
Esegue un altro programma fino al ricevimento di un interrupt.
Cicli di esecuzione
FOR..NEXT
Esegue un ciclo delle istruzioni un certo numero di volte.
Accesso alla EEPROM
EEPROM
DATA
READ
WRITE
Memorizza dei dati nella EEPROM prima di scaricare il programma.
Memorizza dei dati nella EEPROM prima di scaricare il programma.
Copia un byte dalla EEPROM ad una variabile.
Scrive un byte nella EEPROM.
Accesso alla RAM
GET
PUT
Copia un byte dalla RAM in una variabile.
Scrive un byte nella RAM.
Numerici
LOOKUP
LOOKDOWN
RANDOM
Legge un dato all’interno di un elenco.
Cerca un dato all’interno di un elenco.
Genera un numero pseudo-casuale.
I/O Digitale
INPUT
OUTPUT
REVERSE
LOW
HIGH
TOGGLE
PULSIN
PULSOUT
BUTTON
COUNT
XOUT
Setta un pin in modalità di inpu.t
Setta un pin in modalità di output.
Inverte la direzione di un pin .
Mette a 0 logico un pin settato in output.
Mette a 1 logico un pin settato in oupu.t
Setta un pin in output ed inverte lo stato logico .
Misura un inpulso in ingresso.
Genera un impulso invertendo lo stato di un pin.
Legge lo stato di un pulsante e salta ad una riga del programma.
Conta i cicli (1-0 e 0-1) su di un pin in un lasso di tempo.
Genera il codice di controllo della linea X-10.
I/O Seriale asincrona
SERIN
SEROUT
Legge un dato da linea seriale asincrona.
Scrive un dato su di una linea seriale asincrona.
I/O Seriale sincrona
SHIFTIN
SHIFTOUT
Legge un dato da una linea seriale sincrona.
Scrive un dato su una linea seriale sincrona.
I/O Analogico
PWM
RCTIME
Genera una tensione di uscita variabile 0-5V utilizzando un circuito RC (Al termine
setta il pin in input)
Misura il tempo di carica/scarica di un circuito RC.
Attesa
PAUSE
Esegue una pausa da 0 a 65535 millisecondi.
Suono
FREQOUT
DTMFOUT
Genera una o due onde sinusuoidali di una data frequenza.
Genera un tono telefonico DTMF.
Consumi
NAP
SLEEP
END
Sospende l’esecuzione del programma per un piccolissimo periodo.
Si ferma per un periodo da 1 a 65535 secondi.
Si ferma fino a quando non si resetta l’alimentazioni.
Analisi dei problemi
DEBUG
Invia informazioni al PC per il debugging.
enza soffermarci a descrivere la sintassi per ogni istruzione, andiamo avanti nella
descrizione sintetica del progetto. Anche perché il linguaggio PBASIC e
semplicissimo e i manuali d'uso si trovano anch'essi in internet.
8 di 25
Oltre al BASICSTAMP, ai servomotori ed alcuni sensori acquisiti col corso di
robotica, ho voluto personalizzare il mio robot progettando utilissimi moduli per
espandere le potenzialità offerte dal microcontrollore. Quindi cominciando dai più
semplici fino ai più complessi, andremo a parlare dei circuiti funzionali aggiuntivi.
SRACCIO MECCANICO
ANTENNA
M
+V
ACCUMULATORE
6_BATTERIE
RICARICABILI PER
UN APPORTO
TOTALE DI
MODULO RADIO HALF
DUPLEX 433.92MHZ
7,2V x 2A
DRIVER BRACCIO
MECCANICO
CONTROLLATO CON
TRASDUTTORE DI
POSIZIONE
(POTENZIONETRO)
AUREL RF_SAW
STABILIZZATORI
A:
PENNARELLO
5v--RTX_ENABLE
DRIVER MODULO RADIO
PULSANTE
SENSORI DI
PROSSIMITA'
(BAFFI)
DRIVER
BILED
COLOR_BILED
16
OUTPUTS
RISUONATORE
CERAMICO
EEPROM
SERIALE
16Kbit
I2C
24LC16
LINEA SINCRONA
E PIN DI
CONTROLLO
PIC16C57
INTERFACCIA
I/O
16
INPUTS
LINEA ASINCRONA A 9600BIT/S
PROTEZIONE CON CONTROLLO
DI PARITA'
LINEA SINCRONA
8BIT
INTERFACCIA RS232
PER LA
PROGRAMMAZIONE
SENSORI AD INFRAROSSI
PER RILEVARE OGGETTI A
DISTANZA(DUE FRONTALI
ED UNO POSTERIORE)
ADC_804
SENSORI AD
EFFETTO HALL
PER IL
CONTROLLO
DELLA
VELOCOTA'
DELLE RUOTE
A
SENSORE DI
TEMPERATURA
LM35CZ
SERVO SX
TRASDUTTORE DI
LUMINOSITA' /
DRIVER LED BLU
SERVO DX
ANTENNA
MODULO RADIO HALF
DUPLEX 433.92MHZ
OSCAR_TEK
AUREL RF_SAW
DRIVER MODULO RADIO
RS232
COMPUTER: STAZIONE DI CONTROLLO
CARICA BATTERIA TEMPORIZZATO
9 di 25
I blocchi gialli fanno parte dellla dotazione BasicStamp, di cui abbiamo gia parlato.
Invece adesso andremo ad esaminare quelli blu ovvero quelli aggiuntivi che ho
progettato e realizzato nel corso di questa avventura.
- "A", amplificatore audio:
7,2V
si tratta di un amplificatore audio in
classe "B" da 1,2Watt realizzato in un
TBA820
C1
C4
unico chip, il TBA820; questo integrato
6
100uF
470uF
7
3
può essere alimentato con una tensione
P15
5 +
+
massima di 16v, e può dare in uscita una
8
2
4
corrente max di 1,5A. Ottimo per
R1
1k
applicazioni portatili, reazionato per
+ C3
eliminare la distorsione di cross over, ed è
100uF
+ C2
una buona soluzione per i casi in cui si
100uF
vuole dissipare poco calore occupando
spazi ridotti. All'ingresso di questo
circuito in realtà applico l'uscita digitale
P15 del basicstamp, facendo quindi lavorare l'amplificatore in classe "D" (la classe
"D" è una delle migliori soluzioni digitali audio, poiché consente di risparmiare
potenza, spazio e denaro, infatti invece di convertire in analogico un segnale
numerico, si preferisce avere un'uscita PWM cioè un'onda quadra rappresentante
l'andamento medio di un valore attraverso la durata degli impulsi, in questo caso
precalcolati; questo segnale può trasformarsi in un valore di tensione solo se la si
applica ad un carico R-C o induttivo come un motorino DC od un'altoparlante).
- "driver biled":
circuito che riceve in ingresso un livello logico C-MOS e determina il colore di un led
bicolore (verde con 0, rosso con 1): questa semplice soluzione la ho ottenuta con
l'integra LM358 che contiene al suo interno due
operazionali, che possono pilotare carichi fino a
60mA, e quindi si prestano volentieri per
pilotare dei led. Entrambi gli operazionali sono
configurati come comparatori, uno invertente e
Lm358
l'altro non invertente, con tensione di soglia
pari a Vcc/2 ovvero 2,5v; questo circuito quindi
è in grado di riconoscere i livelli logici: quando
ci si presenta un bit_1 l'operazionale superiore
porterà l'uscita a Vcc attivando il led rosso
(mentre l'operazionale inferiore manterrà l'uscita a 0v), se invece il bit è a 0 allora si
verifica il caso contrario illuminando la capsula di verde.
Nota bene che la virtual_out_14 proviene da una scheda di espansione di cui
parleremo successivamente.
SPK1
8Ω
10 di 25
- fototrasduttore \ driver led blu
si tratta di una variante del trigger di shmit (comparatore con isteresi con soglia
variabile) che mi consente di interpretare il valore homico di una fotoresistenza per
rilevare quando viene a mancare la luce,
inoltre attraverso il trimmer e possibile
regolare la finestra d'isteresi in modo da
decidere a quale intensità luminosa
accendere o spegnere il led blu ad alta
efficienza (cioè che emette un fascio
BC337
luminoso d'intensità superiore ai comuni
led). Ho scelto la comparazione con isteresi
per diminuire la sensibilità, in modo che
quando s'accende il led illumenante il
percorso, non si abbia una retroazione
positiva, con conseguente lampeggiamento automatico del led. Quindi in conclusione
il circuito opera su due soglie di luminosità distinte, quella inferiore interpretata
come buio e quella superiore (grado di luminosità più intenso di quella prodotta dal
led) come ritorno della luce.
- sensori di prossimità e di distanza
Vcc
i sensori di prossimità sono degli switch che si chiudono
quando il robot urta un'ostacolo, questi sensori si
interfacciano con la scheda d'espansione I\O. Mentre quelli
di distanza son realizzati con sensori IR (infrared, a raggi
infrarossi), questi sensori son realizzati tramite un diodo infrarosso pilotato con
impulsi, ed un fototransistor che si interfaccia direttamente con i circuiti digitali, e
quindi direttamente col basic stamp. Il funzionamento dei sensori a infrarossi si basa
sul principio della riflessione che avviene quando un'onda elettromagnetica incontra
la superficie di separazione fra due materiali differenti (in altre parole quando il
raggio IR incontra un'ostacolo ritorna parzialmente indietro per il fenomeno della
riflessione). Nel caso un cui c'è l'ostacolo, quindi, il fototransistor rileva il raggio che
ri torna in dietro; ma la luce infrarossa, come tutte le onde elettromagnetiche, non
viene riflessa allo stesso modo con tutti gli oggetti, infatti oggetti più scuri riflettono
meno rispetto a quelli più chiari, quindi è difficile che il robot riesca ad individuare
in tempo gli ostacoli neri, ed è in questi casi che intervengono i sensori di prossimità.
Un importantissimo concetto ricavato dalla fisica è che: un'onda elettromagnetica in
un periodo percorre un determinato spazio, definito da:
λ(m) = v / f
con
v=c/n
(λ = lunghezza d'onda in metri, v = velocità di propagazione in m/s, c = velocità di
propagazione delle onde EM nel vuoto, n = indice di rifrazione che rappresenta il
rapporto fra "v" ed "n")
fatte queste considerazioni possiamo affermare che se emetto un impulso luminoso di
durata T, e vado subito a testare il fotodetector, posso farmi un'idea della distanza di
un eventuale ostacolo se il raggio risulta riflesso: cioè irradiando il raggio IR per 2
ms, esso avrà percorso una determinata distanza, e se c'è un'oggetto entro tale
distanza lo stesso raggio tornerà in indietro (mettendoci lo stesso tempo che ha
Baffo SX
Virtual_I_4
Baffo DX
Virtual_I_3
11 di 25
impiegato a raggiungere l'ostacolo), in questo caso posso
giudicare che l'ostacolo sta entro un certa distanza.
Applicando questo concetto a diversi periodi d'irradiazione
si ottiene una approssimabile valutazione di distanza. Dopo
tentativi e varie formule ho ricavato una formula accettabile
che permette al microcontrollore di poterla elaborare
(sapendo che il microcontrollore non può lavorare su
numeri con virgola): innanzitutto emetto un set di frequenze
comprese fra 10Khz e 60Khz con uno step di 5Khz;
naturalmente minore è lo step e maggiore sarà la
risoluzione, ma il robot deve aver tempo anche per muoversi
ed effettuare tanti calcoli, e quindi spesso si sceglie di
scendere a compromessi; ad ogni frquenza erogata vado a
testare l'ingresso relativo al fototransistor e controllo se il
raggio è stato riflesso, in caso affermativo allora vado a
sommare il valore della frequenza in un'apposita variabile,
successivamente si passa alla frequenza maggiore facendo lo
stesso controllo; in fine se ho davanti un'ostacolo allora la
mia variabile contiene un determinato coefficiente
inversamente proporzionale alla distanza, per questo motivo
ho associato la seguente formula approssimata [DISTANZA
(cm) = 10000/(5*contenuto variabile)] (siccome quando non
rilevo ostacoli la distanza risulta pari a zero la converto, per
via if..then, in 99).
Vcc
IR_SX
detect
P8
Vcc
IR_DX
detect
P9
P7
Vcc
IR_DWN
detect
P10
- MODULI RADIO HALF DUPLEX 433.92MHz
Modulo SAW a basso costo per la ricetrasmissione di dati [richiede una sola antenna].
Consente una ricetrasmissione half-duplex con breve tempo di commutazione fra modo
Tx e modo Rx. L'elevata banda passante BF consente in ricezione 2400 baud (max)
utilizzando codifica Manchester, 9600bit/s mandando in modulazione direttamente i dati
digitali. Di fatti nel mio progetto di robotica li faccio lavorare a questa velocità; per
tranquillizzare gli interessati, dimostro di seguito che la velocita massima da me scelta
va benissimo.
-
attraverso una proporzione andremo a vedere quanto vale il tempo di bit:
9600bit : 1s = 1bit : Tbit
Tbit = 1bit*s / 9600 = 104,17us
Tbit
-
quindi la frequenza massima che può essere assunta dai bit (quando non vi sono bit
consecutivi allo stesso valore, ma alternativamente 1 e 0) equivale all'inverso del
periodo completo:
T = 2*Tbit = 2*104,17 = 208,34us
T
12 di 25
F = 1/T = 1/ 208,34 = 4,8KHz
Sapenndo che la frequenza massima supportata dalla banda BF del modulo radio vale
5KHz, possiamo tranquillamente lavorare a 9600bit/s (occupando una banda fino a
4800KHz)
IL TRASMETTITORE si basa su di un modulatore d'ampiezza on-off, in cui la modulante è
costituita dai livelli logici TTL, mentre la portante a 433.92Mhz è generata da un
oscillatore SAW. Il pin 8 serve ad abilitare la trasmissione, mentre il pin 2 è l'ingresso
dati da trasmettere. si ha una banda complessiva di 5Kha , di cui abbiamo parlato prima;
la trasmissione può avvenire ponendo il pin8 a 5v. IL RICEVITORE invece si abilita
ponendo il pin 25 a 5v. sia lo stadio RX che TX vanno abilitati uno per volta, poiché
questa è la filosofia half duplex. I dati ricevuti escono dal pin25. L'antenna è unica e
viene commutata da uno stadio all'altro in base alle condizione RX o TX. Il ricevitore si
basa sul principio super eterodina, in quanto può usufruire della portante generata
localmente dallo stadio TX: quindi il segnale captato viene mixato con la portante, e poi
viene estratta la banda nell'intorno della fraquenza intermedia con filtro passa basso
attivo (che amplifica anche il segnale) tale segnale (analogico) amplificato e ripulito (ma
ancora distorto) può essere accessibile dall'esterno sul pin22 per poterlo analizzare con
oscilloscopio, mentre sul pin25 abbiamo l'uscita digitale ottenuta tramite un
comparatore.
13 di 25
DATI TECNICI
ANTENNA
Fw = 433MHz
Z0 = 50Ω
Pmax = 2W
Top. = -20 +80°C
Antenna STILO omnidirezionale flessibile in gomma tarata
sulla frequenza di 433.92 Mhz. Fornita in Kit per il
montaggio diretto a parete sui contenitori metallici o
plastici in cui alloggia la circuiteria RF. Indicata per
apparecchiature
palmari,
con
caratteristiche
antinfortunistiche, e doti di resistenza alle sollecitazioni
meccaniche ed avverse condizioni climatiche. Possono
sostituire una antenna in quarto d' onda.
14 di 25
INTERFACCE
PC - MODULO RADIO
Siccome i livelli logici della porta seriale del PC (RS232) transitano da -12v (1_logico) a
+12v (0_logico), occorre convertirli in livelli TTL (0|5v) che sono adatti ad alimentare
direttamente il modulo radio RTX (inoltre il livello di riposo della RS232 viene anch'esso
interpretato come livello logico 0). Il modulo radio assorbe rispettivamente 2,5 mA in RX
e 4,5 mA in TX, quindi il modulo radio dal lato del pc non richiederà alimentazione
esterna, poiché scriverò un programma adatto a portare a +12v almeno due terminali
[pin 4(DTR) e 7(RTS)] cosicché raddrizzando con diodi e stabilizzando con gli
stabilizzatori LM78L05, otterrò la corrente desiderata con %v---. Dallo schema elettrico si
notare che il modulo radio è abilitato sia a trasmettere che a ricevere, ma la
comunicazione non può avvenire nei due sensi contemporaneamente: sia perché il
modulo radio, sfruttando solo il canale a 433.92 MHz, opera in modalità half duplex, sia
perché la stessa porta seriale del pc di per se lavora in un'unica direzione per volta (è
quindi il computer stesso a lavorare in half duplex, trasmettendo e ricevendo in tempi
distinti).
D1
1N4148
DTR_4
RX_EN_25
D2
1N4148
RTS_7
U1
78L05
IN
TX_EN_8
OUT
78L05
COM
D3
1N4148
TX_D_3
U2
78L05
IN
TX_D_2
OUT
U_M_E
COM
COMM_FEMMINA
5
9
1
R1
4.7k
SIP_25
D4
1N4148
6
RX_D_2
RX_D_23
GND_5
GND_TOT
9
TX_DATA
2
23
RX_DATA
25
RX_ENABLE
Digital Data RF SAW
Transceiver
TX_ENABLE
8
1
6
10 11 12 13 14 16 20
15 di 25
Vediamo adesso alcune specifiche tecniche della porta COMM del computer:
5
4
3
2
1
9
8
7
6
Spina maschio, lato connessione
1
2
3
4
5
6
7
8
9
Spina femmina, lato connessione
la descrizione dei piedine è la seguente:
- 1 = DCD (data carrier detect, pin i\o per comunicare se la trasmissione continua ho ha
avuto fine)
- 2 = RX (pin d'input dedito alla ricezione dati)
- 3 = TX (pin d'output dedito alla trasmissione dati)
- 4 = DTR (data terminal ready, pin d'out su cui si invia un livello logico alto quando il
computer è pronto a trasmettere)
- 5 = GND (massa comune)
- 6 = DSR (data set ready, pin d'input da collegare al DTR di un altro computer,in
questo modo ricevendo un livello logico alto, ci si pone in ricezione)
Quindi il DTR serve a far richiesta di trasmissione dati, tramite il DSR invece si ricevere
l'eventuale richiesta, ed in caso affermativo il computer si pone in ricezione.
- 7 = RTS (request to send, pin d'out che indica con livello logico alto, che il computer
è attivo)
- 8 = CTS (clear to send, pin d'input che serve ad identificare la presenza attiva di un
altro computer o la presenza fisica di una periferica)
mentre DTR e DSR servono ad instaurare il colloquio (orientati ai dati), RTS e CTS
servono ad identificare la presenza di una stazione, che sia periferica o computer: in
pratica connettendo i due sistemi, essi portano a livello alto RTS, riconoscendosi a
vicenda leggendo il valore di tensione sui rispettivi CTS; nel caso di una comune
periferica basta collegare i due pin per raggirare il segnale, indicando l'avvenuta
connessione fisica.
- 9 = RI (ring indicator…)
la linea di trasmissione seriale COMM si presta volentieri a comunicazioni in half duplex
(cioè che i versi di comunicazione possono avvenire uno per volta: se trasmetto non
posso ricevere, se ricevo non posso trasmettere), con protocolli asincroni orientati al
carattere, sino a velocità di 9600bit/s.
Di fatti sono proprio queste le caratteristiche di cui si avvale la comunicazione fra robot
e PC, seguendo la seguente regola per il riconoscimento dei caratteri:
START_BIT
1
CARATTERE A 7_BIT
PARITY
BIT
STOP_BIT
0
16 di 25
ROBOT - MODULO RADIO
L'interfacciamento fra robot e modulo radio avviene in modo strategico: gli ingressi di
abilitazione TX ed RX del modulo sono pilotati da due comparatori (contenuti
nell'integrato LM358); proprio besendosi sul principio adoperato con il led
bicolore,posso scegliere attraverso un singolo bit se trasmettere o ricevere. La figura
seguente rappresenta l'interfecciamento al modulo radio dal lato robot.
9
TX_DATA=P5
2
23
RX_DATA=P6
Digital Data RF SAW
Transceiver
25
8
1
TX_ENABLE
TRX_MODE=1
6
10 11 12 13 14 16 20
RX_ENABLE
RTX_MODE=0
Gli operazionali
son alimentati
con la tensione
diretta della
batteria
RTX_MODE
INTERFACCIA
- DRIVER BRACCIO MECCANICO CONTROLATO IN TENSIONE
Si tratta di un circuito analogico che riceve in ingresso un valore binario, ed
in base alla posizione del braccio meccanico decide se azionare o meno il
motorino DC, il BIT d'ingresso serve solo a decidere il verso dello
spostamento angolare complessivo, equindi la marcia del motore.
Ic1 è l'LM324 che contiene 4 A.O; il DNE293 è un driver a mosfet_push-pull
per piccoli motori DC. IC1_1/2 sono due comparatori, con relative soglie di
riferimento (tarabili attraverso trimmers), in funzione della posizione del
braccio meccanico (rilevata dal potenziometro RM). Il primo comparatore è
configurato in modo invertente, viceversa l'altro in modo non invertente.
Quando si raggiunge la posizione inferiore (braccio abbassato) l'uscita del
primo comparatore commuta da 0v a 8Vdd (accendendo la spia verde);
17 di 25
invece quando si raggiunge la posizione superiore (braccio alzato) è il
secondo A.O a commutare da 0v a 8Vdd (accendendo la spia rossa). Nel
range compreso fra braccio abbassato ed alzato (quindi nessuna spia
accesa), entrambi gli operazionali danno in uscita una tensione di 0v, che
attraverso 2diodi al silicio la faccio diventare 1,4v. Proprio questa tensione
che è maggiore dello 0logico, ma minore dell'1logico, viene comparata
ulteriormente con i livelli logici di controllo forniti dal microprocessore. Si
nota c'è bisogno di una sola porta del micro, la quale opera direttamente
sull'AO3, e negata sull'AO4.
+Vdd
12
4
Ic1_1
14
10
9 Ic1_3
13
8
1
2
7
8
4
5
12
16
3
13
6
3
Ic1_2
2
1
5
Ic1_4
6
7
11
NOT
Sapendo che per un comparatore se [ V+ > V- ] allora [ Vout = +Vs ], mentre
se [ V+ < V- ] allora [ Vuot = GND ], andremo a realizzare delle tabelle relative
agli operazionali 3 - 4 per descrivere in che modo viene pilotato il motore:
Motore
fermo
18 di 25
- SENSORI AD EFFETTO HALL
Si tratta di sensori che rilevano il campo magnetico
di una certa intensità entro i 2mm. Questi li sfrutto
per controllare la velocità delle ruote (a cui ho
applicato un piccolo magnete), allo scopo di far
andare il ROBOT a velocità equa per entrambe le
ruote e quindi diritto.
Quando il magnete passa nelle prossimità del sensore
questo da in uscita 0volt, altrimenti non avremo
niente e quindi la resistenza di pull'UP porta l'uscita
a Vcc. (il fatto che questo trasduttore dia un livello
logico alto tramite una resistenza, non va trascurato quando lo si interfaccia con la
scheda d'acquisizione dati, di cui presto parleremo, perché essa per ogni ingresso
pone una resistenza di pull-DWN; quindi per gli ingressi dediti ai due sensori ad
effetto hall tale resistenza risulta assente).
- SCHEDA ESPANSIONE 16_I \ 16_O - ADC + SENSORE DI TEMPERATURA
Si tratta dell'ultima grande risorsa hardware che ho donato al robot. E' una scheda
eccezionale che mi permette di ottenere 16 linee d'input ed altre 16 d'output (ma
volendo si possono ampliare ulteriormente utilizzando sempre gli stessi pin
d'interfacciamento col basic stamp). Inoltre vi è anche un'ingresso analogico
realizzato con convertitore ADC804 a 8bit di risoluzione, il cui scopo attuale e la
quantizzazione del segnale proveniente da un sensore di temperatura di precisione: si
tratta dell'LM35CZ che da in uscita una tensione direttamente proporzionale alla
temperatura acquisita (10mV al °C). Il tutto s'interfaccia col micro tramite linee
seriali sincrone ed alcuni pin per il caricamento dei dati nei registri.
Entrando nei dettagli circuitali, questa scheda si avvale dei favolosi chip C-MOS a
media scala di integrazione (MSI):
- il CD4014, che contiene un registro a scorrimento PISO
sincrono a 8bit, utile per la serializzazione dei dati senza
ricorrere a due chip: MUX e COUNTER, risparmiando
sullo spazio, costo e complessità di progettazione.
INGRESSI PARALLELI
CARICAMENTO DEGLI INGRESSI
TRAMITE IMPULSO A LIVELLO
LOGICO 1
INGRESSO SERIALE, DA
UN ALTRO REGISTRO O
DISPOSITIVO SINCRONO
LINEA DI SINCRONISMO
CLOCK
USCITA
SERIALE
19 di 25
- Il CD4094 che contiene un SIPO a 8bit, per lo scorrimento
parallelo dei dati, ed un PIPO, anch'esso a 8bit per il
caricamento sulle uscite.
INGRESSO DATI SERIALI
LINEA DI SINCRONISMO (CK)
USCITA SERIALE DA COLLEGARE
AD UN ALTRO REGISTRO PER
ALLARGARE LA CAPACITA', E
QUINDI IL NUMERO DI USCITE
CARICAMENTO DATI PARALLELI IN
LATCH (8BIT PIPO TAMPONE) DOPO
LO SCORRIMENTO
ABILITAZIONE USCITE
TREESTATE
Grazie a questi chip si ottiene una delle migliori soluzioni per l'acquisizione seriale di
ingressi paralleli e la messa in parallelo di dati seriali, risparmiando sui costi e sullo
spazio occupato.
Nella pagina seguente è riportato lo schema elettrico del modulo di espansione.
20 di 25
Nello schema sono assenti i pin lasciati disconnessi, ed i pin d'alimentazione dei
registri (che per tutti i registri son il pin16 a Vcc ed il pin8 a GND), d'altronde cone
in tutti gli schemi ho voluto riservare le numerazioni degli stessi pin, per renderne
più semplice lo studio.
PORT_EN
DATA_IN
D
STORE
STR
EO
4094
D
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
CP
5V
STR
EO
5V
LM35cz
VS
OUT
Q7
PE
DS
CP
4014
Q7
5V
Vcc
Vin
WR
+
4014
5V
Vref
ADC808
CKA
D7
D6
D5
D4
D3
D2
D1
D0
EOC
CS'
C1
150pF
P7
P6
P5
P4
P3
P2
P1
P0
PE
DS
CP
CKIN
10k
P7
P6
P5
P4
P3
P2
P1
P0
PE
DS
CP
GND
Vcc/2
P7
P6
P5
P4
P3
P2
P1
P0
RD'
Vin
-
AGND
DGND
Q7
PARALLEL INPUTS
CP
QS
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
PARALLEL OUTPUTS
CLOCK
4014
DATA_OUT
4094
21 di 25
SOFTWARE
Per quanto riguarda il software espongo rapidamente il semplice protocollo relativo
alla gestione della comunicazione fra robot e computer, ed il diagramma di flusso,
anch'esso semplificato, riguardo le routine svolte dal robot quando interagisce con
l'ambiente.
- Generalità sul Protocollo progettato per mettere in comunicazione il robot col PC:
azione
Codici vari per il tele-controllo
comando
Richiesta esplorazione
Robot irraggiungibile
o spento
Robot ha ricevuto
comando per
l'esplorazione e quindi
invia la conferma "O"
maiuscolo in ASCII, per
10 in modo da garantire il
raggiungimento dello
scopo (porre il PC in
ricezione dei dati acquisiti
in ambiente aperto)
Interruzione da parte
dell'utente pigiando il
pulsante rosso
"77a" in ASCII, 10 volte ogni 200ms
"77a" in ASCII, 10 volte ogni 200ms
"O " in ASCII, 10 volte consecutive
INFO VARIE PRECEDUTE DA CARATTERI DI RICONOSCIMENTO
"S" maiuscola, che indica lo stop
ed attesa conferma, se il
PC non riceve conferma
entro 2s allora evidenzia la
mancata connessione e
chiede se si vuole ritentare
In caso affermativo il
PC si pone in ricezione
per acquisire dati ed
elaborarli
Rielabora tutti i dati che
arrivano preceduti da
campo di riconoscimento,
realizzato tramite caratteri
prestabiliti
Il programma si riporta
nelle condizioni iniziali
in cui si controllavano i
movimenti del robot
22 di 25
- tabella delle sequenze di caratteri impiegati nei comandi di telecontrollo:
La "a" minuscola
indica al robot che
il comando
numerico è
terminato e che lo
può interpretare
queste sequenze sono state scelte appositamente per evitare, negli errori di
trasmissione, che un comando venga interpretato diversamente, e ciò grazie alla
duplicità dei caratteri (11..22..33…), e quindi alla distanza impiegata fra in codice e
l'altro (pari a 11): infatti è molto improbabile che una sequenza di due
caratteriuguali sia alterata a tal punto da riprodurre altri due caratteri identici;
questo risultato lo ho ottenuto facendo esperienza con i moduli radio che qualche
volta, per effetto del rumore presente nell'etere, sbagliavano l'interpretazione dei dati
di uno o due bit: quando l'errore è di un bit allora ci pensa il controllo di parità a
scartare la sequenza, ma quando vi sono due bit alterati si possono creare problemi.
Quindi con la strategia adoperata due caratteri un comando alterato non provoca
nessun effetto.
Il comando "77a" è l'unico che rispetta una regola più complessa: infatti come
abbiamo accennato precedentemente, questo comando è destinato alla richiesta di
esplorazione automatica, ed una volta il robot lo interpreta invia verso il computer
un carattere di conferma "O" maiuscola; questa comunicazione indica al
programma sul PC che deve leggere tutto ciò che arriva via radio, e quindi sulla
COMM1, ed interpretare i dati.
- tabella sequenze dati inviati dal
robot:
il computer riceve questi dati, che che
possono essere semplici indicatori o
dei veri epropri pacchetti, e grazie al
programma che ho progettato riesce a
gestirli ed a presentarmi le info
estratte e rielaborate.
23 di 25
DIAGRAMMA DI FLUSSO sintetico lato robot
Nella EEPROM del robot ci sta un programma davvero complesso che occupa soli
12Kbit e richiede quasi tutta la RAM del micro (251bit su 256bit, ricordando che
256bit equivalgono a 32byte).
accensione
Settaggi iniziali ed inizializzazione
di alcune variabili
Va nella routine di acquisizione
ponendo il modulo radio in
stato RX
no
esegui
si
RX
comando
?
no
RX
richiesta
explo?
si
Commuta in stato TX,
trasmetti conferma e parti
all'avventura
Inizializza alcune variabili,
tra cui la velocità delle
ruote stimata equivalente
Avanza nell'ambiente e
tramite sensori hall,
acquisisci sincronismo con
le ruote, quindi tieni sotto
controllo la velocità per
andare diritto
no
si
Qualcuno
ha pigiato il
pulsante
rosso?
Scannerizza tutti i sensori,
rielabora ed eventualmente
reagisci con suoni, luci e
movimenti. Trasmetti ad
ogni evento le relative info
(in real time)
24 di 25
Software PC
Questo programma, realizzato grazie alla semplicità di visual basic, a scuola, è
costituito da una futuristica interfaccia grafica in cui sullo sfondo del programma
possiamo apprezzare una bellissima immagine di un pianeta immaginario ed alcuni
effetti grafici calcolati applicati a vari satelliti in movimento, fra cui palle da basebal
e pupazzetti vari… ma analizzando l'utilità di questo programma possiamo disporre
di un joystik direzionale virtuale realizzato con degli spin button incrociati (le stesse
funzioni sono ottenibili tramite tasti direzionali su tastiera, ma l'effetto è più lento, si
consiglia di aumentare la velocità di ripetizione dei caratteri da pannello di controllo)
ed alcuni pulsanti di facile interpretazione e riconoscimento (visto che su ogni
pulsante è indicata la funzione che svolge): questi pulsanti servono ad abilitare o
disabilitare i suoni emessi dal robot, abbassare od alzare il braccio meccanico,
compiere degli spostamenti in avanti e dietro, fare richiesta di esplorazione ed in caso
di mancata connessione appaiono altri due pulsanti per ritentare [ok] o meno
[annulla]. Inoltre vi sono: sopra e sotto i pulsanti direzionali due grafici temporali su
cui vengono indicate le trasmissioni effettuate, in alto a destra una picture box su cui
visualizzo il cursore indicante gli spostamenti del robot in un area (attraverso calcoli
trigonometrici), in basso alla finestra c'è una barra di stato indicante l'angolazione,
la posizione le coordinate ed il tempo di connessione necessario quando si fa richiesta
di esplorazione. Abbiamo anche una casella di testo in alto nera, che indica i caratteri
dalle sequenze in output.
Durante l'esplorazione i programma è predisposto per acquisire i dati rielaborarli e
presentarli, in questo caso l'interfaccia muta facendomi visualizzare i dati ma il
ancora non è completo… lavori in corso…
25 di 25