Logo audio valvole
Banner Audiovalvole
Gruppo Facebook Audio Valvole il sito degli appassionati di elettronica valvolareCompra Audiovalvole eBook su lulu.com

FotoPotenziometro pilotato da Arduino UNO

Fotopotenziometro, trattazione teorica

Questo dispositivo simula un potenzionetro completamente isolato e comandabile da arduino UNO tramite due uscite PWM.
Il vantaggio è principalmente nel poter gestire un segnale che va da qualche milliVolt a 150V senza problemi di interferenze eliminando anche il problema del rumore introdotto dal contatto strisciante di un potenziometro classico.
I due estremi del potenziometro sono P1 e P3 mentre il centrale è P2.
Questo si ottiene variando il valore Ohmnico di F1 ed F2 (due fotoresistenze) che costituiscono un partitore resistivo tramite i diodi led D1 e D2.
In pratica le fotoresistenze lavorando in coppia permettono una più ampia escursione del valore resistivo, una sorta di push-pull fotoresistivo.
I diodi led sono stati scelti di colore verde perchè è il tipo di luce a cui sono più sensibili le due fotoresistenze.

Fotopotenziometro, possibili impieghi

Esistono in commercio tutta una serie di integrati che emulano il funzionamento di un potenziometro, tuttavia hanno dei limiti di impiego:

I possibili impieghi di questo fotopotenziometro sono i seguenti:

Fotopotenziometro, schema teorico del prototipo

FotoPotenziometro pilotato da Arduino UNO
Figura N.1

Tr1=Tr1=BC547 Transistor NPN per uso generico con hfe>100

R1=R3=Vedi calcolo

D1=D2=Led Verde

C1=C2=Vedi calcolo

R2=R4=Vedi calcolo

F1=F2=GL5528

PWM1=PWM2=uscite PWM di arduino UNO

Caratteristiche BC547 Valori
VCE (Ic=10mA, Ib=0,1mA) 250 mV
VBE (Ic=10mA, Ib=0,1mA) 700 mV
Hfe >100
Caratteristiche fotoresistenza GL5528 Valori
Resistenza con luce di 10 Lux 8-22 KOhm
Resistenza al buio completo 1 MOhm
Tensione massima ai capi 150 Volt
Potenza massima dissipabile 0,1 Watt
Picco di sensibilità 540 nM (luce verde, vedi tabella dei colori sotto)
Tempo di reazione al cambio di luminosità 30 milliSecondi
Caratteristiche led verde Valori
Tensione 2,4 Volt
ColoreLunghezza d'onda
Violetto380–450 nm
Blu450–475 nm
Ciano476-495 nm
Verde495–570 nm
Giallo570–590 nm
Arancione590–620 nm
Rosso620–750 nm

All'atto dell'accensione il transistor Tr2 deve essere in conduzione e Tr1 interdetto, in questo modo la fotoresistenza F2 assume un valore di circa 20KOhm e la fotoresistenza F1 un valore di circa 1MOhm e l'uscita è praticamente zero.

Ipotizzando una corrente massima nel led di 5mA (tenete conto della notevole vicinanza del led alla fotoresistenza):

R2=(Vcc-(VBE+VD1))/0,005=470 Ohm

IB=0,005/100=0,05 mA (dove 0,005 è la corrente di collettore e 100 è hfe del transistor)

R3=(5-0,7)/IB=86KOhm (Dove 5V è la massima tensione in uscita dal PWM e 0,7 è VBE del transistor)

C1=Treg/R3=1uF (dove Treg=100mS che è la costante di tempo R1C1 per integrare il segnale in modo da evitare le fluttuazioni di corrente sul led che potrebbero modulare la resistenza della fotoresistenza tenendo conto che la frequenza minima del PWM di arduino UNO è di 488 Hz).

Fotopotenziometro, trattazione pratica (sperimentale)

Il progetto esposto prima dal punto di vista progettuale funziona, tuttavia all'atto pratico della costruzione riserva qualche sorpresa:

Questo fa si che per realizzare qualcosa di veramente ben funzionante dobbiamo rilevare le caratteristiche dei componenti per armonizzarle e adattare lo schema rendendolo leggermente più complesso.

Caratteristica gruppo diodo-fotoresistenza
Figura N.2

Nella figura N.2 la caratteristica rilevata manualmente punto a punto del gruppo diodo led-fotoresistenza con il led distante 20mm dalla fotoresistenza.
La corrente è espressa in microAmpere.
Come è facile notare la sensibilità della fotoresistenza è molto alta per la prima parte della curva a cui corrispondono forti sbalzi di resistenza per piccole variazioni della corrente che attraversa il led.
E' interessante anche il primo valore di resistenza, che corrisponde al buio assoluto che è oltre 10MOhm.
Sarebbe interessante provare altri tipo di fotoresistenza e altri led.

Circuito elettronico estrapolato dalla sperimentazione

Come vedete il circuito pratico ricavato dalla progettazione top-down è molto diverso da quello teorico.
E' stato adattato per il miglior funzionamento possibile.
E' stato tolto il transistor in quanto la corrente in gioco è veramente esigua e non serve un bufferaggio. E' inutile anche per quello che riguarda l'abbassamento della tensione di soglia da 2V a 0,7V (differenza fra la tensione di accensione del diodo led e la tensione di polarizzazione diretta della ginzione Base Emettitore del transistor).
E' stato aggiunto un tastierino per comandare il potenziometro, il tasto mute reinizializza il circuito ponendo il volume a zero.
Modificando il programma è possibile adattare l'impedenza di uscita e modificare la curva di intervento.

FotoPotenziometro pilotato da Arduino UNO
Figura N.3
FotoPotenziometro pilotato da Arduino UNO FotoPotenziometro pilotato da Arduino UNO
Figura N.4
Figura N.5

Nelle immagini sopra, nella figura n.4 il fotopotenziometro, il tastierino e arduino uno collegati.
Nella figura n.5 un particolare del fotopotenziometro privo delle fotoresistenze.

FotoPotenziometro pilotato da Arduino UNO FotoPotenziometro pilotato da Arduino UNO
Figura N.6
Figura N.7

Nelle immagini sopra, nella figura n.6 il tastierino.
Nella figura n.7 un particolare del fotopotenziometro con le fotoresistenze schermate dalla luce con dello stucco per infissi.
Sia il diodo led verde che la fotoresistenza sono introdotti ai lati oposti di un tubo nero, alla distanza di circa 20mm.

Dati rilevati con il settaggio del programma riportato sotto:

Questi valori si possono modificare agendo sul programma oppure sulle resistenze della scheda.
Il massimo valore di resistenza si ottiene settando l'uscita di arduino in modo che il led che pilota la fotoresistenza non sia mai completamente spento (cosa che farebbe andare la resistenza a valori superiori al megaOhm).
Il limite di questo progetto è la soglia diretta di conduzione dei diodi led e la corsa non lineare della resistenza in rapporto alla luce delle fotoresistenze.
Si potrebbe migliorare complicando di molto il circuito, utilizzando degli amplificatori operazionali reazionati con un gruppo di fotoresistenze sottoposte alla stessa luce che colpisce quelle del fotopotenziomentro.
In questo modo si realizzerebbe un circuito di reazione che linearizzerebbe il comportamento.

Programma di gestione del potenziometro

int ledPin1 = 3; // LED connesso al digital pin 3
int ledPin2 = 5; // LED connesso al digital pin 5
int Pin3 = 7; // Pulsante UP connesso al digital pin 7
int Pin4 = 8; // Pulsante DOWN connesso al digital pin 8
int Pin5 = 6; // Pulsante Mute connesso al digital pin 6
int va1 = 0;
int va2 = 0;
int va3 = 0;
int va4 = 0;
int va5 = 0; // Mute
int nLimitH = 160; // valore limite alto di accensione dei led
int nLimitL = 104; // valore limite basso di accensione dei led per non alzare troppo l'impedenza di ingresso
void setup()
{
Serial.begin(115200); // Inizializzazione del monitor seriale
Serial.print("Inizializzazione potenziometro...");
pinMode(ledPin1, OUTPUT); // setta il pin come output
pinMode(ledPin2, OUTPUT); // setta il pin come output
pinMode(ledPin1, INPUT); // setta il pin come output
pinMode(ledPin2, INPUT); // setta il pin come output
digitalWrite(6, HIGH); // attiva la resistenza di pull up
digitalWrite(7, HIGH); // attiva la resistenza di pull up
digitalWrite(8, HIGH); // attiva la resistenza di pull up
va1=nLimitL;
va2=nLimitH;
}
void loop()
{
va3=digitalRead(Pin3);
va4=digitalRead(Pin4);
va5=digitalRead(Pin5);
if (va3==LOW){ // Rileva la pressione del tasto up
va1++;
va2--;
}
if (va4==LOW){ // Rileva la pressione del tasto down
va1--;
va2++;
}
if (va5==LOW){ // Rileva la pressione del tasto mute che resetta le variabili allo stato iniziale (minor volume)
va1=nLimitL;
va2=nLimitH;
}
if (va1==nLimitH) {
va1--;
va2++;
}
if (va1==nLimitL) {
va1++;
va2--;
}
analogWrite(ledPin1, va1);
analogWrite(ledPin2, va2);
Serial.println(va1);
Serial.println(va2);
Serial.println(va3);
Serial.println(va4);
delay(100) ; // Attende 100mSec per introdurre un ritardo fra la pressione di un tasto e l'altro
}
Inizio Pagina