Fotoresistore (lezione 6)

Introduzione

In natura, degli elementi possono cambiare alcune delle loro proprietà in funzione delle variazioni di particolari grandezze fisiche. Per esempio, il mercurio aumenta il suo volume se riscaldato, questa caratteristica fisica è stata usata, per molti decenni, per misurare la temperatura corporea, fortunatamente, il mercurio è stato bandito poiche’ è un elemento molto pericoloso per la salute degli esseri viventi.

Il fotoresistore, anche definito LDR (light dependent resistor), è un sensore dove la sua conducibilità elettrica è in funzione dell’energia luminosa che incide su di esso. I semiconduttori, come il silicio e il germano, se opportunamente modificati fisicamente, con il processo di drogaggio (argomento che tratteremo in un successivo post), assumono particolari caratteristiche fisiche che li rendono insostituibili nella produzione di componenti elettronici. Il fotoresistore sfrutta una delle proprietà fisiche che hanno i semiconduttori, infatti, la loro conducibilità varia quando sono colpiti da una radiazione luminosa.

Una radiazione luminosa, quando infrange un corpo, trasferisce parte della sua energia all’elemento colpito, in particolare, nei semiconduttore, questo assorbimento d’energia provoca un aumento delle coppie lacune elettrone, introducendo all’interno del materiale una quantità maggiore di carica libera, che come come conseguenza una maggiore conducibilità elettrica.

Per ogni tipologia di sensore c’è una legge che governa il suo funzionamento, in particolare, il fotoresistore, ha un legame tra lunghezza d’onda e intensità della radiazione luminosa incidente e la variazione di conducibilità del materiale semiconduttore utilizzato per la costruzione del sensore. Il comportamento del sensore, generalmente, è descritto tramite dei grafici comportamentali, ricavati empiricamente e il costruttore mette a disposizione dei progettisti, infatti nella Figura 1 e Figura 2 sono indicate la variazione di resistenza in funzione dell’intensità luminosa e della sua sensibilità in funzione della lunghezza d’onda.

Figura 1

Figura 2

Nell’intervallo di lunghezza d’onda compreso tra 500 e 600 nm, il fotoresistore, analizzato in questo esempio, raggiunge la sua massima sensibilità alle radiazioni luminose, mentre per le lunghezze d’onda inferiori a 400 nm e superiori 800 nm è trascurabile.

Diamo un’interpretazione a questa particolare caratteristica: a parità d’intensità luminosa incidente, la resistenza del fotoresistore, ha una maggiore diminuzione se la radiazione luminosa ha una lunghezza d’onda compresa nell’intervallo tra 500 e 600 nm.

In particolari contesti, dove sono utilizzate fonti di energia luminosa artificiale, con determinate lunghezze d’onda, come l’illuminazione delle serre, è necessario scegliere il corretto sensore, affinché esso abbia la massima sensibilità in funzione della lunghezza d’onda della sorgente luminosa usata.

In questo articolo, realizziamo un progetto di un sistema crepuscolare, che monitora il livello d’illuminazione, e in funzione della sua intensità, il sistema modula l’intensità luminosa prodotta da una sorgente artificiale, maggiore sarà l’intensità luminosa della sorgente esterna e minora sarà l’intensità luminosa prodotta dalla sorgente connessa al nostro sistema. Per uso didattico, useremo, come fonte luminosa artificiale, un semplice diodo LED. Arduino genera un segnale PWM che modula la luminosità prodotta dal diodo LED.

In questo articolo verranno esposti i seguenti argomenti:

  • Come calcolare la tensione ai capi di un partitore
  • Come utilizzare un fotoresistore
  • Pilotare un PWM in funzione di una variabile.

Approfondimenti: Partitore resistivo

Con un partitore resistivo possiamo dividere la tensione applicata ai suoi capi.

Figura 3

La tensione V2 e’ direttamente proporzionale al valore dei resistori R1 e R2 ed e’ legata dalla seguente relazione:

Sul resistore R2 cade una tensione di circa 1,66V, se al posto di R2 ci fosse un sensore la cui resistenza è variabile, la tensione che cade ai suoi capi è funzione della grandezza fisica che ha provocato la variazione di resistenza. Questa particolare configurazione può essere usata per realizzare un sistema di misura.

Illuminazione automatica

Nello schema elettrico riportato in Figura 4, ho realizzato un sistema con un partitore resistivo, come descritto nell’esempio precedente, ed ho sostituito il resistore R2 con un fotoresistore. Ho usato un fotoresistore che ha una caratteristica lineare (quando raddoppia l’intensità luminosa, ad una certa frequenza, raddoppia la variazione di resistenza) come riportato nella Figura 1.

Figura 4

La tensione che cade ai capi del sensore, è campionata dall’ADC connesso all’ingresso A0, il duty cycle del PWM che pilota il diodo LED, è direttamente proporzionale al valore di tensione campionato dall’ADC.

const int LED=9; // il pin del LED dove e' collegato il PWM
const int FR=0; // Il fotoresistore e' collegato all'ingresso A0
const int LUCE_MIN=200; // il valore minore rilevato dal sensore
const int LUCE_MAX=900; // il valore massimo rilevato dal sensore
int val = 0; // inizializzazione della variabile di lettura
void setup()
{
	pinMode(LED, OUTPUT); // impostiamo il pin collegato
	                      //al LED come output
}
void loop()
{
	val = analogRead(FR); // lettura della tensiione ai capi del sensore
	val = map(val,  LUCE_MIN, LUCE_MAX, 255, 0); // rimappiamo i valori letti tra 255 e 0
	analogWrite(LED, val); // Control the White LED
}

Prima d’iniziare il test del codice, vi consiglio di ricavare il limite minimo e massimo, quando l’ambiente è nell’oscurità’ e quando è completamente illuminato per poi inseribili nelle costanti: LUCE_MIN e LUCE_MAX.

val = analogRead(LIGHT);

Campioniamo la tensione che cade ai capi del fotoresistore.

val = map(val, LUCE_MIN, LUCE_MAX, 255, 0);

Arduino ha un ADC a 10 bit, quindi il valore campionato e’ compreso tra 0 e 1023, mentre il PWM ha una risoluzione di 8 bit ed accetta valori compresi tra 0 e 255. Per questo motivo, dobbiamo eseguire una mappatura dei valori d’uscita dell’ADC. La funzione map esegue la proporzione tra i valori campionati (compresi tra minimo e massimo) e il range tra 0 e 255, per esempio, quando l’uscita dell’ADC vale 900 (il nostro valore massimo), la funzione associa il valore 0 alla variabile val, il LED deve essere spento poiche’ l’ambiente ha la massima illuminazione, questa operazione e’ eseguita per tutti i valori.

analogWrite(LED, val);

La variabile val, contiene il valore mappato, maggiore e’ questo valore e maggiore e’ il duty cycle del PWM e viceversa.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito