LEZIONE 41

SENSORI MECCANICI

Il nostro microrobot, per il momento può solo muoversi, ma non può interagire con il mondo esterno.
Durante il suo cammino se il microrobot incontra un ostacolo non lo “sente” e quindi non lo evita.
Per sentire gli ostacoli, il microrobot è dotato di interruttori meccanici.
Questi interruttori hanno bisogno di toccare l’ostacolo per “sentirlo”, quindi se il microrobot non ci sbatte contro non lo sente.
I sensori meccanici sono collegati ai piedini 8 e 9 rispettivamente RB2 (contatto sinistro) e RB3(contatto destro).
Con queste informazioni scriviamo un programma che faccia andare avanti il microrobot, se durante il suo cammino, i contatti riveleranno un ostacolo il microrobot li dovrà evitare.

Esempio, il microrobot mentre cammina rivela un ostacolo a destra, quindi torna indietro e gira a sinistra.
NB: I sensori sono incrociati quindi quando l’interruttore destro rivela un ostacolo in realtà si trova a sinistra e viceversa.

#CHIP 16F84, 4           'Tipo di PIC utilizzato
DIR PORTA OUT           'Definisco le porte d'uscita
DIR PORTB IN           'e d'ingresso
Ciclo:
'Se c'è un ostacolo a destra il microrobot salta
'all'etichetta SINISTRA
IF PortB.2 = 1 THEN GOTO SINISTRA           'Se c'è un ostacolo a sinistra il microrobot salta
'all'etichetta DESTRA
IF PortB.3 = 1 THEN GOTO DESTRA           'Se non c'è nessun ostacolo
PortA = b'00001001'           'Il microrobot va avanti
GOTO Ciclo

DESTRA:           'Il microrobot va indietro
PortA = b'00000110'           'Attende pochi secondi
WAIT 1 sec           'Il microrobot gira a destra
PortA = b'00000101'           'Attende pochi secondi
WAIT 1 sec           'Salta all'inizio del programma
GOTO Ciclo

SINISTRA:           'Il microrobot va indietro
PortA = b'00000110'           'Attende pochi secondi
WAIT 1 sec           'Il microrobot gira a sinistra
PortA = b'00001010'           'Attende pochi secondi
WAIT 1 sec           'Salta all'inizio del programma
GOTO Ciclo

END           'Fine del programma

Analizziamo come di consueto il programma.
Iniziamo con il ciclo, abbiamo visto in precedenza che il ciclo ci permette di controllare costantemente i valori delle porte in modo da testarle di continuo, se non racchiudiamo le istruzioni in un ciclo, il test sugli interruttori sarà effettuato all’inizio del programma e mai più.
Poi tramite il costrutto IF facciamo un controllo sulla PortB.2 per vedere se ha rilevato un ostacolo, usando l’istruzione:

IF PortB.2 = 1 THEN GOTO SINISTRA
Se la porta ha rilevato un ostacolo salteremo tramite l’istruzione GOTO all’etichetta SINISTRA dove andremmo ad eseguire le istruzioni seguenti:
PortA = b'00000110' 'Il microrobot va indietro
WAIT 1 sec 'Attende pochi secondi
PortA = b'00001010' 'Il microrobot gira a sinistra
WAIT 1 sec 'Attende pochi secondi
GOTO Ciclo 'Salta all'inizio del programma

L’istruzione GOTO Ciclo ci permette di tornare all’inizio del programma per testare nuovamente i sensori meccanici.

Lo stesso discorso vale per il sensore collegato alla PortB.3.
Vi ricordo che la PortB.2 è collegata la sensore di sinistra e la PortB.3 a quello di destra ma essendo incrociati il valore 1 sulla PortB.2 sta ad indicare che l’ostacolo si trova a destra ecco perché il microrobot lo evita girando a sinistra.
Per il sensore collegato alla PortB.3 il discorso è analogo e contrario.
Questo programma permette al microrobot di interagire con il mondo esterno e quindi di reagire ed evitare ostacoli che incontra nel proprio percorso.
Di solito un programma del genere è utilizzato nelle gare di explorer o in tutti quei casi in cui il microrobot deve esplorare una zona che non si conosce.

LEZIONE 42
LEZIONE 40