Come usare un
sensore di colore
RGB con Arduino
Come si formano i colori
Quando hai l’esigenza di “leggere” o discriminare un colore devi usare uno speciale sensore chiamato, per l’appunto, sensore di colore. Questa occasione può essere tra le più disparate. Nel mio caso mi sono trovato a dover discriminare il verde, dal bianco e dal nero, per fare un percorso di RoboCup Rescue.
Interfacciare un sensore di colore alla scheda Arduino è un po’ come interfacciare un sensore ad un microprocessore. Avremo bisogno di “misurare” una intensità di segnale che dipende dal colore che “incontra” il sensore che abbiamo scelto.
Ci facciamo aiutare dalla fisica per richiamare il concetto di colore: è una “frequenza di energia luminosa”. L’arcobaleno è il risultato della scomposizione della luce bianca nelle sue componenti di frequenza di colore (spettro luminoso).
Quando illumino un oggetto con luce bianca, l’oggetto assorbe le frequenze luminose in base alla sua particolare forma o materiale. L’oggetto riflette il resto delle frequenze luminose, ed il risultato è il colore che viene percepito dal nostro occhio, che per inciso mischia automaticamente le frequenze luminose e crea la percezione di un unico colore.

I colori RGB
E’ importante comprendere come si forma il colore per capire come funziona questo sensore. Nei computer esiste un formato, chiamato RGB, che definisce un colore con tre numeri che misurano l’intensità dei tre colori principali Red-Green-Blue (in italiano Rosso-Verde-Blu). Mischiando questi tre colori, con proporzioni variabili, si ottengono i vari colori intermedi. L’intensità di ogni colore principale viene suddivisa con una scala di 256 livelli. Questo si trasforma in un numero che varia tra 0 e 255 (in esadecimale da 0x00 a 0xFF).
Un singolo colore viene definito da tre coppie di numeri esadecimali che variano tra 0x000000 (nessun colore = Nero) e 0xFFFFFF (tutti i colori che mischiati formano il Bianco). Per Arduino questo si traduce in un numero che varia tra 0 e 16’777’215.
Sfruttando questo concetto usiamo tre differenti LED in modalità di generatori attivi, e misuriamo l’uscita elettrica degli stessi quando investiti dalla luce riflessa dall’oggetto di cui ci interessa rilevare il colore.
I tre LED saranno di colore Rosso, Verde e Blu e verranno interfacciati con un amplificatore operazionale di modo che la poca corrente che generano viene trasformata in tensione proporzionale alla luce che li colpisce.

Sensore di colore analogico
Abbiamo stabilito che un led di colore definito è sensibile alla frequenza di luce corrispondente. Il LED viene normalmente utilizzato per generare luce, ma può essere utilizzato al contrario, cioè misurare l’intensità di luce che lo colpisce.

La corrente generata da un LED colpito dalla luce è molto bassa e dipende dalla superficie totale utilizzata per produrre il semiconduttore (LED chip). Nella misura effettuata con multimetro sono risultati 29 uA.

Realizzato con semplici LED e fototransistor
I fototransistor sono dotati di un amplificatore interno che aumenta questa corrente. I normali diodi LED devono essere amplificati. Il circuito è semplicemente un amplificatore operazionale utilizzato come amplificatore di corrente. L’amplificatore deve avere la possibilità di funzionare con una tensione singola di 5 Volt, così può essere alimentato con la tensione della scheda Arduino ed essere direttamente compatibile con gli ingressi analogici. Un amplificatore integrato adatto a questo circuito è il LT1006.
La resistenza R1 determina il fattore di amplificazione della corrente generata dal LED usato come sensore di colore. Questo valore dipende da quanta corrente genera il LED ad una determinata intensità di luce. Dovrai provare partendo dal valore indicato. Aumentando il valore della resistenza aumenti la sensibilità del sensore, cioè misuri luci più deboli.
Circuito elettrico sensore di colore analogico
Con una resistenza R1 di valore 1 MΩ si ha un fattore di amplificazione Av = 1’000’000 (la banda passante, cioè la velocità di lettura della luce, dipende dall’amplificatore usato). Se, come nella misura precedente, il LED genera 29 uA (che corrispondono a 0,000029 A) la tensione di uscita dall’amplificatore operazionale sarà di 1’000’000 x 0,000029 = 29 Volt.

Spettro cromatico e sensibilità ai colori
Ogni LED ha la sua sensibilità al colore. Dovrai provare alcuni LED in modo da verificare se vanno bene per la tua applicazione. I LED con il corpo trasparente sono consigliabili in quanto non sono dotati di filtro di colore.

Ogni LED ha un angolo di maggiore sensibilità, che può variare tra i 8° e i 120°. I LED con angolo di illuminazione stretto (Narrow angle Beam) a parità di corrente di alimentazione illuminano più lontano.

Ci sono altri modi di misurare il colore per esempio usando i led RGB (cioè che hanno tutti e tre i LED Rosso, Verde e Blu integrati in un chip) e un sensore di luce a fotoresistenza. La fotoresistenza non ha bisogno di esser amplificata e può essere utilizzata direttamente come partitore di tensione. Ci sono chip integrati come il S9702 della Hamamatsu che sono dotati di LED RGB con una grande area di esposizione alla luce.

Circuito elettrico con fotoresistore
La fotoresistenza ha una sensibilità su un ampio spettro luminoso e questo ci obbliga ad usare LED colorati per generare la luce con il cromatismo/colore desiderato. E’ un metodo che necessita di una taratura preventiva (pesatura) della luce ambiente.
Ha il vantaggio di usare un numero molto limitato di componenti elettronici. Come funziona? Si accende un LED di colore diverso ed ogni volta si misura il valore della fotoresistenza, tramite l’ingresso Analog In di Arduino. Si può realizzare una variazione utilizzando un fototransistor al posto del fotoresistore. Questo sistema migliora sensibilmente quando accoppiato ad una schermatura nera che “intuba” la luce riflessa dall’oggetto.

Sensore di colore digitale
I sensori di colore digitali usano lo stesso principio descritto in precedenza, ma forniscono una informazione pronta all’uso e non necessitano di circuiti analogici. L’informazione viene letta per esempio attraverso la comunicazione I2C.
Puoi trovare molte schede già pronte per essere utilizzate con Arduino o altri microprocessori.

Questi circuiti si basano su Chip integrati: TSC3200, TCS34725, ISL29125.
TSC3200
è un chip che contiene 16 LED in parallelo per ogni colore RGB + il bianco. La misura del colore viene trasmetta tramite un segnale PWM a frequenza proporzionale alla intensità luminosa. I LED devono essere selezionati tramite i pin S2 e S3. Funziona con una tensione da 2,7 a 5,5 Volt. Usando un divisore di frequenza integrato, e attivato tramite i pin S0 e S1, la intensità di luce viene convertita in una frequenza di fondo scala che varia tra 12 kHz fino ai 600 kHz.
La sensibilità ed il fondo scala variano dai 35 ai 47 uW/cm2 (dagli 0,35 ai 0,47 W/m2). Dal grafico della risposta spettrale noto che c’è una debole differenza nel riconoscimento del blu e del verde. La scheda integra anche 4 LED bianchi per l’illuminamento dell’oggetto da misurare. Arduino dovrà essere programmato per “leggere” la frequenza in uscita da questo chip con la funzione “pulseIn(pin, polarità);”. Questa funzione ritorna la durata dell’impulso cioè mezzo periodo della frequenza da misurare. Per conoscere la frequenza si deve applicare la formula 1/(Ton+Toff), da cui 1/(2*pulseIn).

TCS34725
è una scheda pronta all’uso per Arduino. E’ dotata di un sensore RGB con una sensibilità di contrasto di 3’800’000 : 1. I LED sono filtrati per non misurare la luce IR. La alimentazione varia dai 3,3 ai 5 Volt. Può essere usata sia on microprocessori con bus da 3,3V che 5V. Ha un LED bianco neutro che può essere usato per illuminare l’oggetto da misurare. La trasmissione dei dati avviene tramite la comunicazione I2C. Qui un tutorial su questo sensore RGB. Grazie alla sua alta sensibilità può essere utilizzato dietro vetri scuri. E’ dotato di un uscita interrupt che può essere utilizzata per comunicare velocemente al microprocessore quando è attivo un livello di luce prestabilito. E’ dotato di una libreria direttamente utilizzabile con Arduino.

ISL29125
Questo integrato è simile al TCS34725 in quanto ha delle caratteristiche simili e trasmette i dati con il protocollo I2C. Lavora con tensione a 3,3V, per cui servirà un traslatori di segnale per le comunicazioni a 5 Volt. La scheda non è dotata di LED bianco di illuminazione dell’oggetto.

Programma Arduino per sensore di colore
Al momento ti rimando ai produttori delle schede già pronte. Nella prossima puntata realizzerò il circuito analogico più semplice e valuterò le caratteristiche e le prestazioni che si possono ottenere.
Pubblicità
Credits
http://makezine.com/projects/make-36-boards/how-to-use-leds-to-detect-light/
http://forrestmims.org
Link al metodo di misura con fotoresistenza