Tutorial Photocell!

Fotocellule aka celle CdS, fotoresistori, LDR (resistore dipendente dalla luce) ...

Cos'è una fotocellula?

Le fotocellule sono sensori che consentono di rilevare la luce. Sono piccoli, economici, a bassa potenza, facili da usare e non si consumano. Per questo motivo compaiono spesso in giocattoli, gadget ed elettrodomestici. Sono spesso riferiti a cellule CdS (sono fatte di cadmio-solfuro), resistori dipendenti dalla luce (LDR) e fotoresistori.

Una fotocellula è fondamentalmente una resistenza che cambia il suo valore resistivo (in ohm) a seconda della quantità di luce che brilla sulla faccia agitata. Sono a costi molto bassi, facili da ottenere in molte dimensioni e specifiche, ma sono molto imprecisi. Ogni sensore di fotocellula agirà in modo leggermente diverso rispetto all'altro, anche se provengono dallo stesso lotto. Le variazioni possono essere davvero grandi, 50% o più! Per questo motivo, non dovrebbero essere usati per cercare di determinare livelli di luce precisi in lux o millicandela. Invece, puoi aspettarti di essere in grado di determinare solo i cambiamenti di luce di base

Per la maggior parte delle applicazioni sensibili alla luce come "è chiaro o oscuro", "c'è qualcosa davanti al sensore (che bloccherebbe la luce)", "c'è qualcosa che interrompe un raggio laser" (sensori del raggio di rottura), o "quale dei sensori multipli ha più luce che lo colpisce", le fotocellule possono essere una buona scelta!

Alcune statistiche di base

Queste statistiche sono per la fotocellula nel negozio Adafruit che è molto simile al PDV-P8001. Quasi tutte le fotocellule avranno specifiche leggermente diverse, sebbene funzionino praticamente allo stesso modo. Se c'è un foglio dati, ti consigliamo di fare riferimento ad esso

  • Dimensioni: rotondo, 5 mm (0, 2 ") di diametro. (Altre fotocellule possono ottenere fino a 11 mm / 0, 4" di diametro!)
  • Prezzo $ 1, 50 al negozio Adafruit
  • Gamma di resistenza: da 200 K ohm (scuro) a 10 K ohm (luminosità 10 lux)
  • Intervallo di sensibilità: le cellule CdS rispondono alla luce tra le lunghezze d'onda di 400 nm (viola) e 600 nm (arancione), raggiungendo un picco a circa 520 nm (verde).
  • Alimentazione: praticamente qualsiasi cosa fino a 100 V, utilizza in media meno di 1 mA di corrente (dipende dalla tensione di alimentazione)
  • Foglio dati e un altro foglio dati
  • Due note applicative sull'uso e la selezione delle fotocellule da cui sono presi quasi tutti questi grafici

Step 1: Come misurare la luce usando una fotocellula


Come abbiamo detto, la resistenza di una fotocellula cambia quando il viso viene esposto a più luce. Quando è buio, il sensore assomiglia a un grande resistore fino a 10 M ohm, quando il livello della luce aumenta, la resistenza diminuisce. Questo grafico indica approssimativamente la resistenza del sensore a diversi livelli di luce. Ricorda che ogni fotocellula sarà leggermente diversa, quindi usala solo come guida!

(Vedi grafico di resistenza contro illuminazione sotto)
Nota che il grafico non è lineare, è un grafico log-log!

Le fotocellule, in particolare le comuni celle CdS che probabilmente troverai, non sono sensibili a tutta la luce. In particolare, tendono ad essere sensibili alla luce tra 700nm (rosso) e 500nm (verde).

Fondamentalmente, la luce blu non sarà altrettanto efficace nell'innescare il sensore della luce verde / gialla!

Che diamine è lux?

La maggior parte dei fogli di dati usa lux per indicare la resistenza a determinati livelli di luce. Ma cos'è lux? Non è un metodo che tendiamo a usare per descrivere la luminosità, quindi è difficile da misurare. Ecco una tabella adattata da un articolo di Wikipedia sull'argomento!
(Vedi la tabella di illuminazione di seguito)

Passaggio 2: test e collegamento della fotocellula


Testare la tua fotocellula

Il modo più semplice per determinare come funziona la tua fotocellula è collegare un multimetro in modalità misurazione della resistenza ai due cavi e vedere come cambia la resistenza quando si ombreggia il sensore con la mano, si spengono le luci, ecc. Poiché la resistenza cambia molto, un misuratore auto-range funziona bene qui. Altrimenti, assicurati di provare intervalli diversi, tra 1M ohm e 1K ohm prima di "arrendermi"

Collegamento alla fotocellula

Poiché le fotocellule sono sostanzialmente resistori, non sono polarizzate. Ciò significa che puoi collegarli "in entrambi i modi" e funzioneranno bene!

Le fotocellule sono abbastanza resistenti, puoi saldarle facilmente, agganciare i cavi, collegarli alle breadboard, utilizzare clip a coccodrillo, ecc. L'unica cura che dovresti fare è evitare di piegare i cavi proprio sul sensore epossidico, in quanto potrebbero staccarsi se flesso troppo spesso.

Passaggio 3: esempi di progetti



Noisemaker che cambia frequenza in base al livello di luce.


Valore del motore e controllo direzionale con fotoresistori e microcontrollore


Robot che segue la linea che utilizza fotocellule per rilevare la luce che rimbalza su strisce bianche / nere

Un altro robot, questo ha due sensori e si sposta verso la luce (si chiamano veicoli Braitenberg)


Usando una fotocellula e un puntatore laser tascabile per creare un sensore breakbeam

Passaggio 4: Metodo di lettura della tensione analogica


Il modo più semplice per misurare un sensore resistivo è collegare un'estremità all'alimentazione e l'altra a una resistenza di pull-down a terra. Quindi il punto tra il resistore di pulldown fisso e il resistore di fotocellula variabile è collegato all'ingresso analogico di un microcontrollore come un Arduino (mostrato)
(Vedi schema elettrico sotto)

Per questo esempio lo sto mostrando con un'alimentazione a 5 V, ma nota che puoi usarlo con un'alimentazione a 3, 3 V altrettanto facilmente. In questa configurazione la lettura della tensione analogica varia da 0 V (terra) a circa 5 V (o circa la stessa della tensione di alimentazione).

Il modo in cui funziona è che quando la resistenza della fotocellula diminuisce, la resistenza totale della fotocellula e della resistenza di pulldown diminuisce da oltre 600K ohm a 10K ohm. Ciò significa che la corrente che fluisce attraverso entrambi i resistori aumenta, il che a sua volta fa aumentare la tensione attraverso il resistore fisso da 10K ohm. È un bel trucco!

(Vedi prima tabella sotto)
Questa tabella indica la tensione analogica approssimativa basata sulla luce / resistenza del sensore con alimentazione a 5 V e resistenza di pulldown da 10 K ohm

Se hai intenzione di avere il sensore in un'area luminosa e utilizzare un pulldown da 10K ohm, si saturerà rapidamente. Ciò significa che colpirà il "soffitto" di 5 V e non sarà in grado di distinguere tra un po 'luminoso e molto luminoso. In tal caso, è necessario sostituire il pulldown 10K ohm con un pulldown 1K ohm. In tal caso, non sarà in grado di rilevare anche le differenze di livello di oscurità, ma sarà in grado di rilevare meglio le differenze di luce intensa. Questo è un compromesso che dovrai decidere!

(Vedi la seconda tabella in basso)
Questa tabella indica la tensione analogica approssimativa basata sulla luce / resistenza del sensore con alimentazione a 5 V e resistenza di pulldown 1K

Si noti che il nostro metodo non fornisce tensione lineare rispetto alla luminosità! Inoltre, ogni sensore sarà diverso. All'aumentare del livello di luce, la tensione analogica aumenta anche se la resistenza diminuisce:

Vo = Vcc (R / (R + Photocell))

Cioè, la tensione è proporzionale all'inverso della resistenza della fotocellula che è, a sua volta, inversamente proporzionale ai livelli di luce

Passaggio 5: semplice dimostrazione d'uso


Questo schizzo prenderà la lettura della tensione analogica e la utilizzerà per determinare la luminosità del LED rosso. Più scuro è, più luminoso sarà il LED! Ricorda che il LED deve essere collegato a un pin PWM affinché funzioni, in questo esempio uso il pin 11.

Questi esempi presuppongono che tu conosca una programmazione di base di Arduino. In caso contrario, potresti passare un po 'di tempo a rivedere le basi del tutorial di Arduino?

/ * Schizzo di prova semplice della fotocellula.

Collegare un'estremità della fotocellula a 5 V, l'altra estremità a Analog 0.
Quindi collegare un'estremità di una resistenza da 10K da Analog 0 a terra
Collegare il LED dal pin 11 attraverso una resistenza a terra
Per ulteriori informazioni, consultare www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 0; // la cella e il pulldown 10K sono collegati a a0
fotocellula int; // la lettura analogica dal divisore del sensore
int LEDpin = 11; // collega il LED rosso al pin 11 (pin PWM)
int LEDbrightness; //
void setup (void) {
// Invieremo le informazioni di debug tramite il monitor seriale
Serial.begin (9600);
}

void loop (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog reading =");
Serial.println (photocellReading); // la lettura analogica grezza

// Il LED diventa più luminoso più scuro è sul sensore
// ciò significa che dobbiamo invertire la lettura da 0-1023 a 1023-0
fotocellulaReading = 1023 - fotocellulaReading;
// ora dobbiamo mappare da 0-1023 a 0-255 poiché è l'intervallo utilizzato da analogWrite
LEDbrightness = map (fotocellulaLeggi, 0, 1023, 0, 255);
analogWrite (LEDpin, LEDbrightness);

ritardo (100);
}

Potresti provare diversi resistori di pulldown a seconda della gamma di livelli di luce che vuoi rilevare!

Passaggio 6: codice semplice per misurazioni della luce analogica:


Questo codice non esegue alcun calcolo, stampa semplicemente ciò che interpreta la quantità di luce in modo qualitativo. Per la maggior parte dei progetti, questo è praticamente tutto ciò che serve!

/ * Schizzo di prova semplice della fotocellula.

Collegare un'estremità della fotocellula a 5 V, l'altra estremità a Analog 0.
Quindi collegare un'estremità di una resistenza da 10K da Analog 0 a terra

Per ulteriori informazioni, consultare www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 0; // la cella e il pulldown 10K sono collegati a a0
fotocellula int; // la lettura analogica dal divisore della resistenza analogica

void setup (void) {
// Invieremo le informazioni di debug tramite il monitor seriale
Serial.begin (9600);
}

void loop (void) {
photocellReading = analogRead (photocellPin);

Serial.print ("Analog reading =");
Serial.print (photocellReading); // la lettura analogica grezza

// Avremo alcune soglie, determinate qualitativamente
if (fotocellulaLeggi <10) {
Serial.println ("- Dark");
} else if (fotocellula Leggi <200) {
Serial.println ("- Dim");
} else if (fotocellula Leggi <500) {
Serial.println ("- Light");
} else if (fotocellulaLettura <800) {
Serial.println ("- Bright");
} altro {
Serial.println ("- Very bright");
}
ritardo (1000);
}

Per provarlo, ho iniziato in una stanza illuminata dal sole (ma all'ombra) e ho coperto il sensore con la mano, quindi l'ho coperto con un pezzo di tessuto oscurante.

Step 7: BONUS! Lettura delle fotocellule senza pin analogici


Poiché le fotocellule sono fondamentalmente resistori, è possibile utilizzarle anche se non si dispone di alcun pin analogico sul microcontrollore (o se si dice che si desidera collegare più di quanto si abbia pin di ingresso analogici). Il modo in cui lo facciamo è sfruttando una proprietà elettronica di base di resistori e condensatori. Si scopre che se si prende un condensatore che inizialmente non memorizza alcuna tensione e quindi lo si collega all'alimentazione (come 5 V) attraverso un resistore, si caricherà lentamente sulla tensione di alimentazione. Più grande è il resistore, più lento è.

Questa acquisizione da un oscilloscopio mostra cosa sta succedendo sul pin digitale (giallo). La linea blu indica quando lo schizzo inizia il conteggio e quando il conteggio è completo, circa 1, 2 ms più tardi.

Questo perché il condensatore si comporta come un secchio e il resistore è come un tubo sottile. Per riempire un secchio con un tubo molto sottile ci vuole abbastanza tempo per capire quanto è largo il tubo tempificando il tempo impiegato per riempire il secchio a metà.

In questo caso, il nostro "secchio" è un condensatore ceramico da 0, 1 uF. Puoi cambiare il condensatore quasi come vuoi, ma cambieranno anche i valori di temporizzazione. 0.1uF sembra essere un posto OK per iniziare per queste fotocellule. Se si desidera misurare intervalli più luminosi, utilizzare un condensatore da 1uF. Se si desidera misurare intervalli più scuri, scendere a 0, 01 uF.

/ * Schizzo di prova semplice della fotocellula.
Collegare un'estremità della fotocellula all'alimentazione, l'altra estremità al pin 2.
Quindi collegare un'estremità di un condensatore da 0, 1 uF dal pin 2 a terra
Per ulteriori informazioni, consultare www.ladyada.net/learn/sensors/cds.html * /

int fotocellPin = 2; // LDR e cap sono collegati al pin2
fotocellula int; // la lettura digitale
int ledPin = 13; // puoi semplicemente usare il LED 'incorporato'

void setup (void) {
// Invieremo le informazioni di debug tramite il monitor seriale
Serial.begin (9600);
pinMode (ledPin, OUTPUT); // ha un LED per l'uscita
}

void loop (void) {
// legge la resistenza usando la tecnica RCtime
fotocellulaReading = RCtime (fotocellulaPin);

if (photocellReading == 30000) {
// se abbiamo 30000 significa che siamo scaduti
Serial.println ("Niente di connesso!");
} altro {
Serial.print ("RCtime reading =");
Serial.println (photocellReading); // la lettura analogica grezza

// Più è luminoso, più velocemente lampeggia!
digitalWrite (ledPin, HIGH);
ritardo (photocellReading);
digitalWrite (ledPin, LOW);
ritardo (photocellReading);
}
ritardo (100);
}

// Usa un pin digitale per misurare un resistore (come un FSR o una fotocellula!)
// Facciamo questo avendo la resistenza che alimenta la corrente in un condensatore e
// contando quanto tempo ci vuole per arrivare a Vcc / 2 (per la maggior parte degli arduinos, questo è 2, 5 V)
int RCtime (int RCpin) {
int reading = 0; // inizia con 0

// imposta il pin su un'uscita e tira su LOW (terra)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, LOW);

// Ora imposta il pin su un input e ...
pinMode (RCpin, INPUT);
while (digitalRead (RCpin) == LOW) {// conta quanto tempo impiega per salire a HIGH
lettura ++; // incremento per tenere traccia del tempo

if (lettura == 30000) {
// se siamo arrivati ​​così lontano, la resistenza è così alta
// è probabile che nulla sia collegato!
rompere; // lascia il ciclo
}
}
// OK o abbiamo raggiunto il massimo a 30000 o speriamo di ottenere una lettura, restituire il conteggio

lettura di ritorno;
}

Articoli Correlati