dosare luce led direttamente con potenziometro motorizzato

Ciao a tutti. Da un po' di tempo sto lavorando, quando trovo il tempo, ad un istema di regolazione della luce, naturale ed artificiale. Per quanto riguarda quella artificiale, ho sempre dosato la quantità con un PWM, con discreti risultati. Il problema è che, dovendo il sistema autoregolarsi, la lettura risultava difficoltosa perché, sebbene impercettibile all'occhio umano, la sequenza di accensioni e spegnimenti viene percepita dai sensori, e per quanto si possano scremare i dati a ottenere delle medie tra letture ravvicinate, ho sempre ritenuto che fosse un punto debole del sistema.

Così ho pensato di connettere un servo ad un potenziometro per dosare la luce. La meccanica funziona, ma connettendo un potenziometro lineare direttamente ad un led l'incremento di luce è all'incirca esponenziale, mentre io mi aspettavo fosse lineare.

Ho provato a leggere i valori del potenziometro con un pin analogico e la progressione è in effetti lineare.

Probabilmente sbaglio qualcosa nella mia ingenuità, spero possiate aiutarmi.

Il PWM è una modulazione d'onda, non è un vero segnale analogico, per cui il comportamento del LED è differente rispetto a quello che ti attenderesti con un potenziometro. Difatti in PWM hai quasi subito luce che poi cresce lentamente, mentre con un pot hai poca luce all'inizio che cresce d'intensità alla fine.

Vero. Vedete soluzioni? Con un potenziometro logaritmico temo sarebbe peggio.

Perché? se lo usi nel giusto "verso" potrebbe compensare l'esponenzialità del comportamento

Secondo me basta usare qualche riga di codice e risolvi anche con quello che hai. Basta aumentare l'incremento man mano che arrivi a fine corsa del Pot.

Ossia, farlo diventare incrementale via software

secondsky: La meccanica funziona, ma connettendo un potenziometro lineare direttamente ad un led l'incremento di luce è all'incirca esponenziale, mentre io mi aspettavo fosse lineare.

Dipende dalla curva che lega corrente e intensità luminosa nei led, non è lineare. Se usi il PWM il led si accende sempre alla intensità luminosa prevista dalla corrente che scorre, però la quantità totale di luce emessa, e quindi percepita, dipende dal rapporto ON/OFF imposto dal PWM, di conseguenza la variazione di luminosità è praticamente lineare. Se alimenti tramite un potenziometro vari la corrente che attraversa il LED e di conseguenza la variazione della luminosità non è lineare. Se capti la luce del led tramite un fotoresistenza puoi ovviare al problema visibilità del PWM semplicemente portando la frequenza di quest'ultimo a 15-20 kHz, le fotoresistenze hanno una banda molto limitata.

Compensare il potenziometro via script presenta il problema che, in ogni caso, il servo ha una risoluzione di 180 passi, 100 considerando quelli sfruttati da questo ingranaggio, contro i 256 del pwm. Doverlo anche compensare credo significherebbe perdere ulteriormente risoluzione in certe fasi. Invece mi sembrava interessante il discorso della frequenza del pwm, ma come si fa a modificarla?

secondsky: Compensare il potenziometro via script presenta il problema che, in ogni caso, il servo ha una risoluzione di 180 passi

Ma nemmeno i servo cinesi da 2 euro hanno una risoluzione così bassa :) Prima di tutto i servo economici sono analogici, quindi hanno virtualmente risoluzione infinita, anche con quelli più scrausi si ottiene l'equivalente di 400-500 step su 180°, quelli decenti arrivano senza problemi ad un equivalente di oltre 1000 step su 180°. Mi sa tanto che stai usando la myservo.write(val); che per sua natura è limitata al controllo sul singolo grado e di conseguenza 180 step complessivi. Se usi la myservo.writeMicroseconds(pos); hai il controllo sul singolo microsecondo che compone la durata dell'impulso e come tale fino a 2000 step su 180° (impulso compreso tra 500 e 2500 us), il che ti permette di sfruttare al 100% la reale risoluzione del servo a meno che non si tratta di un costosissimo digitale a 12 bit (4096 step).

Ti ringrazio molto. Ho fatto qualche esperimento con questo comando e in effetti è più fluido. Tuttavia ho notato una cosa, sotto i 600 uS il motore resta inattivo, e comincia a muoversi solo dopo. In più, a volte, al variare dei valori va sotto sforzo ma da uno scatto solo ogni 2-3 valori di differenza. Il modello è questo: http://www.graupner.de/en/products/4101.LOSE/product.aspx

secondsky:
Ti ringrazio molto.
Ho fatto qualche esperimento con questo comando e in effetti è più fluido.
Tuttavia ho notato una cosa, sotto i 600 uS il motore resta inattivo, e comincia a muoversi solo dopo.

Il limite di 500-2500 è puramente teorico, ogni produttore ha i suoi standard per i servo e non è detto che tutti i servo fanno 180° di corsa meccanica.

In più, a volte, al variare dei valori va sotto sforzo ma da uno scatto solo ogni 2-3 valori di differenza.

C’è anche la deadband, cioè di quanto deve variare il segnale PPM prima che il servo lo interpreti come un reale movimento, comunque quelli sono servo standard low cost, 3 us a step (circa 650 step complessivi su 180°) è un valore normale per quei servo.

Questo comando è molto utile anche per molte altre applicazioni. Invece come posso cambiare la frequenza dei pwm. Pensavo non fosse possibile...

secondsky:
Questo comando è molto utile anche per molte altre applicazioni.
Invece come posso cambiare la frequenza dei pwm. Pensavo non fosse possibile…

più che cambniare frequenza al PWM, esiste un modo per renderlo un vero segnale analogico… però io non lo so fare

lesto: più che cambniare frequenza al PWM, esiste un modo per renderlo un vero segnale analogico... però io non lo so fare

Ti riferisci forse al filtro R-C? Sì, può aiutare ad "arrotondare" la cresta dell'onda per far apparire il segnale come un vero segnale analogico. Su internet c'era anche un tool che tempo fa pubblicò Brainbooster per trovare i giusti valori di R e C. Se vai nel thread del mio pannello solare, verso le ultime pagine, dovresti trovarlo.

Da un po' di tempo sto lavorando, quando trovo il tempo, ad un istema di regolazione della luce, naturale ed artificiale.

Immagino tu ti riferisca a luce ambiente. Se è così presumo avrai dei led da almeno 1 Watt, per questi il pilotaggio PWM di solito è realizzato tramite alimentatori a commutazione (PWM) con regolatore di corrente incorporato. Il regolatore regola la corrente ad un valore nominale a cui corrisponde una determinata composizione spettrale, cioè quello che chimano temperatura di colore. Per variare la luminosità mantenendo invariata la temperatura di colore, pilotano l'intero alimentatore con un segnale PWM da circa 1KHZ, questo pilotaggio accende e spegne l'intero regolatore in base al rapporto pausa impulso del PWM. Ovviamente qui i filtri non si devono usare perchè l'obbiettivo è anche (soprattutto) l'efficienza. Pilotare una serie di led con una corrente continua risolve lo sfarfallio rilevato dal sensore ma comporta una efficienza scarsa e una variazione della temperatura di colore che va ad es. da 2000 a 6000 Kelwin tra minima corrente e massima corrente.

Ciao.