Sensori rilevazione luce

Per la rilevazione della luce vengono utilizzati 2 fotoresistori.
I fotoresistori sono dei componenti optoelettronici che variano la propria caratteristica elettrica, la resistività, in base all'intensità della luce che li colpisce.
Possiamo sfruttare questa peculiarità per realizzare un programma in PBASIC che consenta al robot di 'inseguire' una fonte luminosa (naturale o artificiale).

Per far funzionare il programma è necessario realizzare sulla breadboard il circuito riportato nello schema A.
Così facendo i due fotoresistori risultano collegati alle porte logiche del microcontrollore. In particolare il fotoresistore destro è collegato alla porta P9 e il fotoresistore sinistro alla P10. Per costruire il circuito mostrato nello schema vanno utilizzati i componenti presentati nella Foto 1. I condensatori, i resistori e i fotorestori sono allegati al fascicolo 22 mentre i cavetti sono forniti con il fascicolo 23.


Materiale utilizzato per realizzare questo circuito


circuito di
rilevazione luce

 

La struttura del programma Insegue_Luce.bs2   è commentata e descritta anche nel listato.
Il programma è costituito da una parte dichiarativa iniziale (variabili e costanti), dalla verifica del tasto start/stop (chiamato anche pulsante restart o tasto di reset) della scheda madre e infine dal ciclo infinito all'interno del quale si svolge l'algoritmo di navigazione.
Per quanto riguarda quest'ultimo aspetto si è stabilito che il robot cambierà la direzione di marcia in funzione dell'intensità luminosa percipita dai due fotoresistori: il robot si muoverà nella direzione corrispondente al fotoresistore (destro o sinistro) che ha ricevuto la maggior quantità di radiazione luminosa.
Per avere un indicatore della luce rilevata occorre far riferimento a un parametro caratteristico del circuito formato da condensatore e fotoresistore, la costante di tempo.
Il valore di tale parametro risulta essere (per ragioni fisiche) inversamente proporzionale all'intensità luminosa rilevata.
Attraverso l'istruzione PBasic rctime è possibile stimarne il valore e memorizzarlo in un'opportuna variabile.
Confrontando i valori delle costanti di tempo dei due fotoresistori è quindi possibile stabilire in quale direzione debba ruotare il robot: il valore più piccolo indica la direzione da seguire.
È opportuno definire un valore di soglia tra i due valori delle costanti di tempo, al di sotto del quale il robot non modifica la direzione di marcia. In questo modo è possibile rendere il robot più o meno sensibile alla diversa intensità luminosa percepita dai fotoresistori.

Invertendo il confronto tra le due costanti di tempo, decidendo cioè che il robot si muova nella direzione corrispondente al fotorestistore con costante di tempo maggiore, si otterrà un comportamento opposto da parte del robot che, anzichè inseguire la luce, cercherà di evitarla

Modificare il valore della soglia per rendere il robot più o meno sensibile alla differenze di luminosità.

 

 

' {$Stamp BS2}

' Programma che consente al robot di seguire una fonte luminosa: puoi guidarlo puntando
' il fascio di una torcia elettrica sui fotoresistori montati sulla bread-board.
'
Insegue_Luce.bs2

'------------------- Variabili --------------------------
foto_SX VAR Word ' variabili nelle quali verrà memorizzato il valore
foto_DX VAR Word ' della costante di tempo relativa a ciascun fotoresistore

'------------------- Costanti ---------------------------
SOGLIA CON 5 ' serve a rendere più o meno sensibile il robot alla
' differenza di illuminazione dei fotoresistori.
' Aumentando il valore diviene meno sensibile.

'-------------------------- Programma principale ----------------------------------
main:
' Occorre misurare un parametro specifico del circuito formato da capacitore e
' fotoresistore, la costante di tempo: questo parametro dipende, in maniera inversamente
' proporzionale, dall'intensità luminosa che colpisce il fotoresistore, più è intensa la
' luce minore è il valore della costante di tempo e viceversa.

' Misura la costante di tempo relativa al fotoresistore di destra
HIGH 9 ' Imposta P9 al valore logico alto.
PAUSE 3
RCTIME 9,1,foto_DX ' Misura il valore della costante di tempo
' del fotoresistore e lo memorizza nella variabile foto_DX.

' Misura la costante di tempo relativa al fotoresistore di sinistra.
HIGH 10 ' Imposta P10 al valore logico alto.
PAUSE 3
RCTIME 10,1,foto_SX ' Misura il valore della costante di tempo
' del fotoresistore e lo memorizza nella variabile foto_DX.

' Controlla la differenza tra le due costanti di tempo; se il valore assoluto (abs)
' della differenza è maggiore della soglia procede al confronto, altrimenti le due costanti
' di tempo vengono considerate uguali e si lascia avanzare il robot.

IF ABS(foto_SX - foto_DX) > SOGLIA THEN controlla_direzione

' routines per far avanzare il robot
avanza:
.............
' inserire routines di movimento
GOTO main

controlla_direzione:
' se la costante di tempo di sinistra è maggiore di quella di destra significa che il
' fotoresistore di sinistra ha ricevuto una minore quantità di luce e quindi occorre
' girare verso destra per inseguire la luce
IF foto_SX > foto_DX THEN deviaDestra

' se la costante di tempo di sinistra è minore di quella di destra significa che il
' fotoresistore di destra ha ricevuto una minore quantità di luce e quindi occorre
' girare verso sinistra per inseguire la luce

IF foto_SX < foto_DX THEN deviaSinistra

deviaDestra:
' esegue una rotazione sul posto verso destra
..............' inserire routines di movimento
GOTO main


deviaSinistra:
' esegue una rotazione sul posto verso sinistra
.............' inserire routines di movimento
GOTO main

 

      Elenco revisioni
06-11-2005 Prima emissione