Un semplice metodo, che richiede giusto un pizzico di manualità, ci permette di avere una resistenza variabile (tra 0 ed 1 MOhm circa) controllata da un PWM a 5V.
L’idea è semplice: utilizzare una fotoresistenza illuminata da un LED. La luminosità del LED controllata dal PWM farà variare in maniera abbastanza lineare il valore della fotoresistenza. In questo modo otteniamo una resistenza variabile controllata da un PWM completamente optoisolata!
Utilizzeremo a tale scopo un led rosso da 3mm, una fotoresistenza di quelle classiche per “arduino”, un tubetto di termorestringente nero di adeguata sezione (5mm) e della colla a caldo nera per chiudere le estremità (basta una goccia).
Il diodo e la fotoresistenza dovranno essre posti uno di fronte all’altro, senza impedimenti e senza toccarsi.
Chiaramente i valori forniti dipendono in larga misura dalla distanza alla quale si troveranno i due componenti, dalla luminosità propria del diodo LED e dalle caratteristiche della fotoresistenza. I valori indicati danno come risultato una variazione tra i 50 KOhm ed 1 MOhm, ma tutto dipenderà in larga parte da come realizzerete l’accrocchio. Aumentando la resistenza da 10K aumenteranno questi valori, al contrario diminuendola . Fate delle prove con un ohmetro ed il codice fornito una volta finita la realizzazione (Arduino UNO).
Questo circuito può essere utile, ad esempio, per realizzare un dimmer optoisolato a 220V, utilizzando gli schemi classici a triac sostituendone il potenziometro con la fotoresistenza.
Il condensatore in parallelo al LED aiuta ad eliminare il residuo della frequenza di PWM, se notate che si ripercuote anche sul circuito controllato dalla fotoresistenza dovrete aumentarne la capacità.
La resistenza variabile funziona anche con una semplice tensione continua da 0 a 5V, senza PWM. Ovviamente il PWM è il metodo più semplice da utilizzare con un uController.
void setup() { pinMode(3, OUTPUT); pinMode(13, OUTPUT); } void LampLed() { digitalWrite(13, HIGH); delay(25); digitalWrite(13, LOW); delay(25); } void loop() { analogWrite(3, 255); LampLed(); delay(2000); analogWrite(3, 192); LampLed(); delay(2000); analogWrite(3, 128); LampLed(); delay(2000); analogWrite(3, 64); LampLed(); delay(2000); analogWrite(3, 16); LampLed(); delay(2000); analogWrite(3, 0); LampLed(); LampLed(); LampLed(); delay(2000); }