Calabritto,
Mercoledì 13 Agosto 2003
Minisumo
Beam Programmabile
(
Domenco
Mancini d.mancini@tiscali.it
)
1.Schema
elettrico 2
2.
Descrizione 3
3.
Programmazione sinaptica 4
3.1 La
matrice
di
programmazione 4
3.2 Il
neurone
temporizzatore 8
3.3 Varianti 9
4.
Appendice 10
5.
Copyright under GNU Free Documentations
License 11
Prefazione
Non
ho niente da dire a
mia discolpa. Anche questo secondo attimo di pazzia (come il
superneurone) è stato deliberatamente voluto.
Buon lavoro e
buon divertimento.
Domenico
-
Schema
elettrico
fig.1
Schema elettrico del minisumo beam con programmazione sinaptica.
2.
Descrizione
Il
minisumo di cui si vede sopra lo
schema elettrico è stato progettato secondo i dettami della
filosofia beam,
cercando di innovare questa con una concezione meno
“spinale” e più “cerebrale”.
Cosa
intendo con questo ?
Un
classico robot beam è il
walker. Il walker è formato da due o più motori montati
sul corpo e collegati
meccanicamente alle gambe. Questi motori
vengono comandati da un microcore, formato da quattro
neuroni Nv
collegati ad anello in cui circola un impulso. Questo impulso fa si
che i motori vengano comandati
alternativamente ed in sequenza
così
da far avere al walker l'andamento tipico di un insetto.
Il
microcore può essere quindi
considerato come un midollo spinale dove viaggia un impulso nervoso.
L'impulso nervoso dà ai motori il comando del movimento
secondo dei canoni prestabiliti e non modificabili
senza una pesante
modifica a livello hardware. Non c'è quindi un potere
decisionale che governa il robot.
Anche nel walker con sensori di
contatto che permettono allo stesso di evitare gli ostacoli con cui
viene in
contatto, viene cambiato solamente il percorso dell'impulso
per un tempo prestabilito.
Il
minisumo ovviamente viaggia su
ruote, quindi non è applicabile il concetto di midollo spinale
come serie
chiusa o aperta di neuroni. Si può però
applicare il concetto di arco riflesso per cui ad un impulso in
ingresso ai neuroni corrisponde una risposta specifica. Questo è
il concetto che ho usato in questo progetto,
non limitandolo
però
ad una architettura rigida e non modificabile.
Il
circuito elettrico può essere
suddiviso in quattro parti disposte verticalmente a strati
sovrapposti.
Il
primo strato, quello più in
alto, è la parte di potenza. Il circuito è formato dai
motori, dai rispettivi relè
di comando e dallo stabilizzatore
a 5 volt che alimenta sia i motori sia l'integrato della parte
sensori. A destra
è visibile il circuito di ritardo che
alimenta i motori dopo 5 secondi dall'avvio. I motori sono stati
alimentati a
5 volt con la stessa tensione dei micrologici
perchè
essendo la loro tensione nominale 3.5Vcc non avrebbero
retto ad una
tensione superiore.
Sotto
a
questo c'è la parte di
controllo formata da otto neuroni concatenati tra loro per formare
due stadi,
uno sinistro e uno destro che comandano i rispettivi
motori. Descriviamo quindi solo una sezione, quella di sinistra.
Il
neurone di base è Q2
collegato in uscita al relè RL1 e con l'ingresso applicato
direttamente alla sua uscita.
In questo modo funziona da timer, per
cui all'accensione attiva il relè per il tempo dato dalla
costante RC,
do R è in questo caso la giunzione BE del
transistor Q2. Dopo questo tempo torna allo stato di riposo con
il
condensatore C1 carico (lo stesso vale per la sezione di destra). A
questo punto il robot con i relè allo stato
di riposo viaggia
in avanti.
Se
l'uscita del neurone Q2 viene
portata a massa, questo provocherà l'attivazione del relè
RL1 che invertirà
il senso di rotazione del motore
corrispondente facendo girare il robot a sinistra. Questo
succederà
per il
tempo in cui viene posto a massa l'uscita del neurone più
il tempo di carica di C1.
Questa
funzione è svolta dai
neuroni Q3 e Q4. La differenza tra i due è che Q3 attiva in
neurone Q2 mentre
Q4 attiva sia il neurone Q2 sia il neurone Q7
facente parte della sezione di destra. Abbiamo quindi due situazioni:
° Attivazione
di Q3: RL1
viene
messo a massa da Q3 per il tempo in cui Q4 viene attivato, poi rimane a
massa per
il tempo dato dal condensatore C1. Questo
provocherà
l'inversione di rotazione del motore di sinistra per un tempo
determinato (il robot gira a sinistra).
° Attivazione di Q4: RL1 e
RL2
vengono messi a massa per il tempo in cui Q4 viene attivato, poi
rimangono a massa
per il tempo dato dai rispettivi condensatori C1 e
C2. Poichè i due condensatori non vengono scaricati alla stessa
tensione, i tempi residui di attivazione dei relè saranno
differenti.
Questo provocherà l'inversione di marcia di entrambi
i motori
per il
tempo in cui è presente l'impulso su Q4. Poi il primo
continuerà la
rotazione inversa per il tempo t1 dato
da C1, che è
lungo.
L'altro continuerà la rotazione inversa per il tempo t2
dato
da C2, che è corto (il robot fa marcia
indietro e poi gira a
sinistra).
Le
stesse situazioni valgono
specularmente per la sezione di destra.
Sotto
questa sezione c'è il
connettore sinaptico a cui è dedicato il capitolo seguente.
Esso serve per creare i
collegamenti tra i neuroni sensori, formati
dal sensore vero e proprio e dal rigeneratore di segnale (tipo Nu) e
i
neuroni effettori che abbiamo descrito sopra.
L'ultimo
strato, quello più in
basso, è lo strato dei neuroni sensori. Questi sono formati
dal sensore ottico
tipo QRB1134 e da un neurone tipo Nu formato da
una RC (in cui la C è la capacità di ingresso
dell'inverter) e
da un inverter tipo 74AC14 o meglio 74HC14. Nel caso
di segnale molto disturbato all'ingresso del neurone,
applicare un
condensatore da 100nF tra l'ingresso e la massa dell'inverter.
3.
Programmazione sinaptica
Come si può
vedere dallo schema elettrico del minisumo, c'è una netta ed
apparentemente inspiegabile
separazione tra la zona sensori ottici
(in basso) ela parte minisumo vera e propria (in alto al di sotto
della
zona di potenza che include relè, motori e
stabilizzatore a 5Vcc).
Questo
perchè
si è scelto di non penalizzare il progetto fornendolo delle
sole funzionalità di base (come evita
il bordo-ring, attacca
l'avversario, ecc.) per mezzo di collegamenti fissi tra sensori e
motori. Questo tipo di
approccio infatti, pur essendo efficace,
potrebbe rivelarsi troppo rigido in eventuali combattimenti contro
robot
programmabili tipo MarkIII(c).
E'
stata scelta
quindi
una via intermedia tra la
programmazione fissa e quella software, che avrebbe richiesto
un
microcontrollore. La programmazione è perciò di tipo
hardware per mezzo di sinapsi.
Cosa
è una
sinapsi? La
sinapsi è il
collegamento che c'è tra due neuroni e che avviene tra il
dendrite del
neurone ricettore e l'assone del neurone trasmettitore.
Nel
nostro caso
la
sinapsi tra il neurone
trasmettitore (sensore ottico) ed il neurone ricettore (transistor)
è
costituita da un collegamento semplice oppure un diodo se più
trasmettitori vanno ad un ricettore oppure nel
caso più
elaborato da una memoria RAM statica da 256 byte.
3.1 La matrice
di
programmazione
Il
connettore
sinaptico
è un comune zoccolo a
16 pin, otto per gli ingressi e otto per le uscite. I segnali sono
quelli riportati nella tabella sottostante.
Tabella
1
Possiamo
descrivere il
connettore sinaptico come una
matrice bidimensionale alla stregua si una scacchiera
o meglio la
mappa della battaglia navale.
Abbiamo
quindi le
righe
che rappresentano i sensori
(i numeri da 1 a 8) e le colonne che rappresentano le
risposte
preprogrammate dei neuroni effettori (le lettere da A ad H). Per
collegare l'uscita del neurone sensore
e l'ingresso del neurone
effettore (creare la sinapsi) dovremo unire un numero ad una lettera.
La “X” nella
congiunzione della riga con la colonna
rappresenta la sinapsi, il collegamento fisico che effettueremo tra i
due neuroni.
Il
collegamento
sinaptico viene descritto come 1A
oppure 5D, andando nel verso del segnale (non A1 e D5).
Tabella
2
Facendo fede alle
note
sullo schema elettrico
possiamo vedere che la sinapsi in 2D significa che quando
verrà
attivato il sensore anteriore destro il robot effettuerà la
manovra di marcia indietro e svolta a sinistra
così da non
fuoriuscire dal bordo del ring e rientrare in gara.
Analogamente
la
sinapsi
1E significa che quando verrà
attivato il sensore anteriore sinistro il robot effettuerà
la
manovra di marcia indietro e svolta a destra.
Dal
punto di
vista del
collegamento fisico questo
significa che bisognerà collegare con un filo elettrico il pin
D
con il pin 2 del connettore sinaptico ed anche il pin E con il pin
1.
Questo
vale
fintanto
che il collegamento e uno a uno.
Nel caso di unione tra due neuroni sensori ed uno
effettore, i
collegamenti vanno effettuati con un diodo (diodo sinaptico)
così
da non far interferire tra di loro
le due uscite dei neuroni sensori.
Vediamo
l'esempio
della
tabella sottostante:
Tabella
3
In questa tabella
abbiamo aggiunto una nuova
funzionalità. Supponiamo infatti che per qualche motivo il
robot
durante un disimpegno dal bordo ring faccia marcia indietro
(che è temporizzata) andando di nuovo a superare
il bordo
ring. Se continuasse la marcia indietro, si troverebbe butttato di
nuovo fuori del ring perdendo la gara.
Le doppie sinapsi
7BG e
8BG collegando i sensori
posteriori, fanno sì che l'azione di retromarcia venga inibita
ed
il robot ritorni a marciare in avanti.
Se collegassimoi
tre
punti insieme, metteremmo in
sovrapposizione i due ingressi B e G per cui se ci fosse un
altro
collegamento sinaptico 6B, automaticamente porterei il segnale anche
a G, cosa che non voglio. Userò
quindi dei diodi sinaptici com
enello schema sottostante così da far viaggiare il segnale in
una sola direzione,
da 7 a B e da 7 a G inibendo il collegamento da B
a G e viceversa.
Vediamo sotto
l'equivalente hardware della tabella 3.
Possiamo comunque
sostituire i due collegamenti
diretti con due diodi.
Nota: Il diodo
segue il
verso di conduzione diretta,
Anodo-Catodo. Attenzione a non invertirne le polarità,
altrimenti non funziona. Il Catodo è evidenziato sul corpo del
diodo da una fascetta nera.
Un
ultimo esempio
di
programmazione sinaptica:
Tabella
3
In questo
caso
abbiamo inserito un ipotetico sensore che alla sua ativazione fa fare
retromarcia al robot.
Questo per far notare la infinita
programmabilità del circuito. Unico limite è
l'azionamento sequenziale di più
di due risposte. Ma a questo
si può rimediare tramite un sequencer che può essere
facilmente implementato
tramite una catena di neuroni (chain network)
opportunamente temporizzata le cui uscite vengono collegate
ai
neuroni effetori tramite altre sinapsi.
-
Il
neurone temporizzatore
Qualcuno si
sarà
chiesto: ma a che servono i
neuroni temporizzatori?
Semplice, a
prolungare
una azione oppure come in
questo esempio ad eseguirne una dopo l'altra.
Analizziamo la tabella
sinaptica:
Vediamo le
connessioni
partendo dallo stimolo, che in
questo caso è il sensore anteriore destro “1”.
Il sensore si
attiva,
manda il comando su D attivando
la sequenza retromarcia + svolta a Sx.
Lo stesso stimolo
viene
riportato indietro al neurone
temporizzatore 3sec (notare la sinapsi -X che indica
il diodo montato
in senso inverso e quindi in questo caso la sinapsi diventa D5). Lo
stimolo viene negato
dal neurone invertitore (sinapsi 63)
Una volta negato
viene
inviato alla sequenza C
(sinapsi 4C) che prolungherà l'inversione di marcia del motore
sinistro.
Con questo
stratagemma
avremo due eventi (sequenza D
e sequenza C) sovrapposti uno all'altro. Questo
provocherà la
marcia indietro del robot e la successiva svolta, superiore a 90°
della sequenza D, data dal
prolungamento della sequenza C). In questo
modo potremo avere due differenti comportamenti a seconda
che venga
attivato il sensore di destra o quello di sinistra.
L'attivazione del
neurone temporizzatore si ottiene
effettuando il ponticello tra i contatti C e T.
-
Varianti
E' possibile,
qualora
non si usi il neurone
temporizzatore, utilizzare lo stesso come ingresso semplice per
sensore. Per fare questo occorre spostare il ponticello dai contatti T
e C ai contatti C e S ,
in questo modo si
escluderà il condensatore
elettrolitico di temporizzazione e si inserirà il resistore di
pullup.
Se si utilizza il
neurone temporizzatore come
ingresso sensori, si avrà a disposizione un ulteriore ingresso
bruto per i sensori ( SPARE_SENSOR ) che corrisponderà al
punto “5” della matrice sinaptica. Questo ingresso
potrà
essere collegato verso la +5V con un interruttore o sensore a
contatti o qualsiasi altro tipo che possa
pilotare l'ingresso dei
transistor ( ON = bassa resistenza, OFF = resistenza infinita ).
Usando per questo
ingresso una ampolla al mercurio potremo avere un
semplice misuratore di inclinazione per poter contrastare
un
eventuale ribaltamento del robot con apposite manovre.
Anche il neurone
invertitore può essere usato
come ingresso sensori. Il suo ingresso è il Test Point TP4,
mentre
l'ingesso sensori del neurone temporizzatore è il Test
Point TP6.
4.
Appendice
La foto vista
dall'alto
del robot minisumo completa
con accanto sulla destra il programmatore sinaptico fuori dalla
sua
sede naturale, lo zoccolo sinaptico. In questa versione si possono
avere più programmatori sinaptici intercambiabili,
ognuno con
le sue funzioni e quindi con il proprio schema comportamentale. In
una versione successiva verrà
presentato un programmatore
sinaptico con memoria RAM che permetterà una programmazione
realmente “al volo”
tramite microswitch.
Sono stati
evidenziati
i neuroni effettori (i
transistor tutti in fila), il connettore sinaptico ed i neuroni
sensori
(il circuito integrato). Negli angoli in basso si intravedono
i sensori ad infrarosso.
5.
Copyright
under GNU Free Documentations License
Copyright
(c) 2003, Domenico Mancini
Permission
is granted to copy, distribute and/or modify this document under the
terms of the GNU Free Documentation License,
Version 1.1 or any later
version published by the Free Software Fundation; with the Invariant
Sections being LIST THEIR TITLES,
with the Front-Cover Texts being
LIST and with the Back-Cover Texts being LIST. A copy of the license
is included
in the section entitled “GNU Free Documentations
License”.
GNU
Free Documentations License
Il
documento GNU FDL, disponibile sul sito http://www.gnu.org
anche in versione italiana, è parte integrante di questo
documento
e ne contiene i termini di utilizzo.
|