Brainbooster
Fotoresistenze o LDR o CDS con arduino
Tutorials -
Martedì 10 Agosto 2010 14:43
Scritto da Brainbooster

Cosè una fotoresistenza?

Una fotoresistenza (o LDR o CDS) è una resistenza il cui valore (espresso in ohm) è inversamente proporzionale alla quantità di luce che la colpisce. Anche se il suo nome comune è fotoresistore, non è raro sentirla chiamare LDR (acronimo di Light Dependent Resistor) o CDS( acronimo di CaDmium Sulfide).

Quindi è un componente in grado di sentire la quantità di luce, e che quindi viene largamente utilizzato in applicazioni che richiedono questo tipo di sensibilità, immaginiamo gli interruttori crepuscolari o le luci che adattano la luminosità a quella ambientale ec..

Esistono varie dimensioni e tipi di fotoresistenze ma più o meno tutte rassomigliano a quella che vedete nella foto

classicaLDRCome vedete sul componente  (anzi sotto) c'è uno strato che è fatto di solfuro di cadmio (scuro) e poi sopra,i due elettrodi,  con una struttura a "doppio pettine" connessi ai reofori per la saldatura.

La tipologia del processo produttivo rende questo componente molto impreciso, nell senso che è impossibile trovarne due identiche anche nello stesso lotto di produzione, ma ci si affida a valori medii.

Mediamente questo tipo di componente ha una resistenza che và da varii megaohm (buio totale) a qualche centinaio di ohm (luce piena) come illustra il grafico in basso

ResVsIllu

Come vedete l'andamento non è proprio lineare ma quasi.. Invece il discorso cambia per quanto riguarda la sensibilità alle varie lunghezze d'onda della luce, dal grafico sotto si nota lla tipica risposta di una fotoresistenza che reagisce maggiormente a lunghezze d'onda comprese fra 700nm e i 500nm per poi attenuare la risposta fuori da questa banda.

Spetvssens

Ok adesso che sappiamo come funziona che ci facciamo?

Iniziamo a verede come si collega questo semplice sensore di luce ad arduino.

Tramite le entrate analogiche di arduino, siamo in grado di misurare una tensione continua da 0 a 5v, per cui per utilizzare il nostro sensore di luce dobbiamo "condizionare" la grandezza in entrata (resistenza) per ottenere quella in uscita  (variazione di tensione).

Il modo più semplice di realizzare questa condizione è mettere la nostra fotoresistenza (ma sempre resistenza) in un partitore di tensione come nell'immagine che segue

Collegammi

Vedete i due modi di collegamento? la differenza del tipo di collegamento si traduce in una variazione di comportamento della tensione in uscita V; in un caso all'aumentare della luce che colpisce la fotoresistenza la tensione V diminuirà mentre nell'altro caso crescerà. Sta a noi scegliere quale collegamento e quindi quale comportamento dare al nostro sensore, conoscendo la formula che definisce il partitore:

Party

Se per esempio volessimo "misurare" la luce nella nostra stanza ci basterebbe usare una fotoresistenza, una normale resistenza da 1oKohm ed arduino...

Colleghiamo i componenti secondo lo schema che vedete qui sotto

schema

E adesso passiamo al codice

Con il seguente codice misureremo la luce ambientale e stamperemo il giudizio di arduino sulla luminosità, via serial monitor:

int fotoresistenzaPin = 0;     // il centro del partitore lo colleghiamo al pin 0
int fotoresistenzaReading;     // il valore che conterrà la lettura

void setup(void) {
// Inizializzo la seriale
Serial.begin(9600);  
}

void loop(void) {
fotoresistenzaReading = analogRead(fotoresistenzaPin);  // lettura grezza dall'adc

Serial.print("Analog read = ");
Serial.print(fotoresistenzaReading);     //stampiamo il valore

// Mettiamo delle soglie di giudizio
if (fotoresistenzaReading< 10) {
Serial.println(" - Buio");
} else if (fotoresistenzaReading< 200) {
Serial.println(" - Ombra");
} else if (fotoresistenzaReading< 500) {
Serial.println(" - Luce");
} else if (fotoresistenzaReading< 800) {
Serial.println(" - Luminoso");
} else {
Serial.println(" - Molto luminoso");
}
delay(1000);
}

 

Ciao da Brainbooster, divertitevi!

 

 

 

int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider

void setup(void) {
// We'll send debugging information via the Serial monitor
Serial.begin(9600);
}

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

Serial.print("Analog reading = ");
Serial.print(photocellReading); // the raw analog reading

// We'll have a few threshholds, qualitatively determined
if (photocellReading < 10) {
Serial.println(" - Dark");
} else if (photocellReading < 200) {
Serial.println(" - Dim");
} else if (photocellReading < 500) {
Serial.println(" - Light");
} else if (photocellReading < 800) {
Serial.println(" - Bright");
} else {
Serial.println(" - Very bright");
}
delay(1000);
}
 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi