Articolo

 

WHISKERS analogici per Blu-Ice Robot

(10 Giugno 2010 - Gemelli)

 


robot


 


Più baffi per tutti ;-)

Il "Progetto Whiskers" nasce all'interno del progetto del robot "Blue-Ice". Blue-Ice non è un classico robot BEAM ma un "programmabile" che fa uso di una scheda Picaxe 28X. Tale scheda monta un PIC a 28 pin ed ha quindi un numero limitato di pin per l'input e l'output. Tipicamente 8+8 di cui 4 ingressi analogici in ingresso e 4 uscite dedicate al L298D per il pilotaggio dei motori. Come si può facilmente immaginare, se metto i classici 8 bumper intorno al robot, poi non ho più ingressi per altri sensori.
Allora "pensa che ti ripensa" mi sono detto: perché non sfruttare quello che la natura ci offre già nel mondo felino? Baffi? Si, certo, ma tanti. Stimolo? Analogico naturalmente, i gatti non sono digitali. E quindi associazione dopo associazione mi sono tornati in mente i partitori di tensione di vecchia memoria. In pratica, invece di moltiplicare gli ingressi "1-0" digitali, uso 1 solo ingresso ma analogico con cui leggo tante tensioni quanti sono i baffi di un lato.

 

2 lati = 2 ingressi analogici = 2*n baffi

 

Nel mio caso 3 baffi per lato, ma potrebbero idealmente essere infiniti. Nella realtà però bisognerà fare i conti con la risoluzione dell'ACD, con il rumore presente e indotto ed altre amenità varie. 3+3 baffi nel mio caso sono sufficienti per coprire da -90 a +90 gradi a step di 45.

 


schema elettrico

 

Ecco lo schema, che oltre ad essere semplicissimo, ha anche un'altra caratteristica interessante. Funziona come un "priority-interrupt" nel senso che se vengono stimolati due o più interruttori insieme (su un lato), vince sempre e solo quello con priorità più alta; quelli a +5V che nel mio caso sono i baffi centrali. Seguono poi i baffi a 45° e quelli a 90° laterali.
Le tensioni generate saranno uguali a 1/3, 2/3 e 3/3 della tensione di alimentazione (90° - 45° - 0°). Non ho previsto un antibounce minimale a condensatore perché è presente una funzione software già nel Picaxe-Basic ma se volete potete mettere un Op-Amp + monostabile tra l'uscita del partitore e l'ingresso dell'ADC.

 



realizzazione baffi

 

Per la realizzazione pratica dei baffi (whiskers) sono stati usati dei tubicini di ottone acquistabili da Opitec, una corda di chitarra e del termorestringente o in alternativa dell'isolante dei cavi della corrente. L'immagine è più esplicativa di mille parole, per cui non ne spendo. I tre fili colorati che si vedono sono il +5V, la massa e l'uscita del partitore che andrà collegato all'ingresso Ana0 o Ana1.
Con le resistenze usate nel prototipo (2,2Kohm) l'assorbimento per ogni ramo è di 0,75 mA. Decisamente accettabile.


Un pezzo del "Codice Da Grey"
:o)
 

 

subroutine:
	low 7,5			; stop motors
	readadc 0, b0		; read lwisk
	readadc 1, b1		; read rwisk
	;

	.....

	if b0 > 10 then 
		high 0
		if b0 > 200 then 
			high 1
			gosub backright   ; indietreggia e gira a destra di 90 gradi
		elseif b0 > 120 then 
			b3 = b3 + 1
			gosub turnright   ; gira a destra di 45 gradi
		elseif b0 > 5 then 
			b3 = b3 + 1
			gosub adjustright ; gira a destra di 20 gradi
		else
			gosub dummy
		endif
		b0 = 0 : b1 = 0 
	endif
	...


 


MIGLIORAMENTI: l'interrupt

Finché il robot usa soltanto i baffi per muoversi nel suo habitat, questo schema di principio (hardware e software) funziona correttamente e con una sufficiente velocità di reazione. Nel momento però che il robot deve scansionare anche altri sensori o assolvere ad altri compiti, il circuito potrebbe non offrire più una velocità di reazione sufficiente.

Per ovviare a questo allora occorre lavorare sugli Interrupt. Ma facciamo un passo indietro:
il programma di gestione del robot semplice, amatoriale, è in generale un ciclo continuo ininterruttibile (a meno di non togliere alimentazione o gestire un segnale di stop) dove vengono interrogati tutti i sensori e vengono eseguiti compiti derivanti dallo stato dei sensori. Viene eseguito cioè un "polling". Poichè ogni interrogazione ed ogni azione hanno un "tempo di esecuzione" se ne deduce che ogni evento in arrivo deve aspettare che finisca quello precedente prima di venir accettato (ammesso che esista ancora) e che questo incide sulla reattività del sistema.

Occorre fare in modo quindi che un dato evento abbia "priorità" sugli altri e per fare questo si usano gli Interrupt, che sono segnali aventi precedenza sugli altri segnali e sui task in esecuzione in quel momento. Quando il micro riceve un interrupt, smetterà di fare quello che sta facendo, memorizzerà lo stato attuale e poi eseguirà il task richiesto dall'interrupt. Il tutto in pochi cicli macchina (usec o decine di usec). Il picaxe 28X offre questa capacità, anche se è un solo livello di Interrupt e per di più è anche uno "pseudointerrupt".

Che significa? Significa che in realtà il picaxe abiliterà la ricezione degli interrupt soltanto tra una istruzione Basic e la successiva del programma in esecuzione. Questo non ci permetterà una reazione "al microsecondo" ma sarà sufficiente per una reazione "praticamente immediata".

Utilizzare questa caratteristica è facile ed è spiegata nel picaxe_manual2.pdf. Basta abilitare la ricezione dell'interrupt su una dato pin digitale (da In0 a In7) e determinare su che fronte (salita o discesa) attivarsi. Quando un segnale (1 o 0) arriverà a quel pin, il programma automaticamente salterà alla subroutine chiamata "interrupt:". E lì noi metteremo il task relativo ai whiskers.

Finito il task, il programma continuerà dal punto in cui è stato interrotto.

Vediamo quindi dallo schema sotto, come gestire l'interrupt.

 


schema elettrico

 


Come si può notare, è' stato aggiunto per questo scopo soltanto un transistor che "condizionerà" il segnale dei due whiskers in OR, adattando il livello generato dai sensori (da 1V a 5V) alla logica TTL (5V). Questo segnale verrà inviato al pin che noi sceglieremo per gestire l'interrupt.

 





Questo sito fa uso di cookies. Se non sei daccordo con l'uso di questi non proseguire la navigazione in questo sito. http://www.aboutcookies.org

All news

Google site search
imageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimageimage

Top Ten
wall-G cacciatore1 cora servolin beaminpillole teoservi cosasonoidatasheet basetondaperrobot easybotchassis identificazionedeitransistor
TECHNO-RING










gammitalia.org



Locations of visitors to this page


Do NOT follow this link or you will be banned from the site!Do NOT follow this link or you will be banned from the site!