L'esercitazione è una rielaborazione dell'esperienza riportata a questo link: http://www.progettiarduino.com/2-crepuscolare-con-arduino.html

Un fotoresistore (o LDR o CDS) è un resistore il cui valore (espresso in ohm) è inversamente proporzionale alla quantità di luce che la colpisce. Anche se il suo nome comune è fotoresistore, non è raro sentirlo 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.
La tipologia del processo produttivo rende questo componente molto impreciso, nel senso che è impossibile trovarne due identiche anche nello stesso lotto di produzione.
Mediamente questo tipo di componente ha una resistenza che va da vari Megaohm (buio totale) a qualche centinaio di ohm (luce piena).

L'andamento NON è lineare, infatti l'asse delle x (illumination) è in scala logaritmica.
Per quanto riguarda la sensibilità alle varie lunghezze d'onda della luce, dal grafico sotto si nota che la tipica risposta di un fotoresistore che reagisce maggiormente a lunghezze d'onda comprese fra 700nm e i 500nm per poi attenuare la risposta fuori da questa banda.

Il modo più semplice per trasformare la resistenza del fotoresistore (che dipende dall'illuminamento) in una tensione che sia possibile leggere con Arduino è metterla in un partitore di tensione

 

La tensione V d'uscita è data dalla formula:

V = Vcc * R2 / (R1+R2)

La differenza del tipo di collegamento si traduce in una variazione di comportamento della tensione in uscita V; nel circuito di sinistra, all'aumentare della luce che colpisce la fotoresistenza la tensione V diminuisce; nel circuito di destra cresce.

L'esperimento

I collegamenti da effettuare sono evidenziati in figura.

Il led rosso simula una luce che si accende quando il livello di luminosità scende sotto un certo valore.
I valori di resistenza sono:

  • 220 Ohm per la resistenza che limita la corrente nel led (può anche non essere inserita)
  • da 10 KOhm a 100 KOhm per quella da porre in serie alla fotoresistenza

Si è visto che il collegamento del fotoresistore è tale per cui la tensione misurata in ingresso aumenta se la quantità di luce che colpisce la fotoresistenza diminuisce (ovvero meno luce => tensione più alta).

Lo sketch da utilizzare è il seguente:

 

int luminosita;  //Il valore letto dalla fotoresistenza
int soglia = 780;

int ledpin = 13;  //Il pin del led

void setup() {
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
}

void loop() {
  luminosita = analogRead(A0);  //Lettura della luminosità
  Serial.println(luminosita);
  
  if(luminosita < soglia){
    digitalWrite(ledpin, HIGH); 
  }
  else{
    digitalWrite(ledpin, LOW); 
  }
  
  delay(500); 
}

La variabile soglia va modificata per tentativi in funzione del valore della resistenza posta nel partitore di tensione.
La taratura per accendere e spegnere correttamente il led può essere fatta utilizzando il monitor serial; è sufficiente leggere il valore in uscita all'ADC in condizioni di luce e quello in condizioni di oscurità scegliendo un valore intermedio per la soglia.

Last modified: Wednesday, 6 March 2024, 4:42 PM