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.
Aggiunta il link al corso Linux Uno su Udemy.
Aggiunto il tutorial per la realizzazionedi un Arcade con materiale di riciclo.