Progetto dimmer led

Ciao sono nuovo del forum ho iniziato ad usare arduino qualche anno fa con il modellismo quando i multirotori e autopiloti non erano ancora di moda, ma la programmazione per me è ancora un grande ostacolo, per questo mi sono iscritto al forum dove sono sicuro di trovare qualcuno più capace di me che mi potrà dare qualche dritta.

Devo fare un dimmer per dei pannelli led che ho in ufficio e per delle striscie led che ho a casa.

Ho già fatto uno sketch che mi permette di variare l'intensità di luce tramite una fotoresistenza, risultato ottimo, ma se vario rapidamente l'intensità di luce che va alla fotoresistenza è molto reattivo (effetto flash) vorrei che la variazione di intensità della luce durasse qualche secondo per passare dal valore minimo al max, ci sto sbattendo la testa da ore ma non trovo una soluzione qualcuno mi può aiutare? grazie

lo sketch è questo:

//dichiaraz costanti
const int sensorPin= A0;
//il pin out del sensore
const int ledPin= 9;
//il pin di output PWM per il led

//dichiarazione delle variabili
int sensorValue= 0;
//variabile per memorizzare i dati in ingresso
int ledValue = 0;
//variabile per il valore della luminosità

void setup(){
  //dichiarazione di ledPin come output
  pinMode(ledPin, OUTPUT);
}

void loop(){
  //lettura valore sensore
  sensorValue = analogRead(sensorPin);
  //conversione letturain valori da 0 a 255
  ledValue = map(sensorValue, 40, 500, 255, 0);
  ledValue = constrain(ledValue, 5, 255);
  //impostazione del livello PWM del LED
  analogWrite(ledPin, ledValue);
}

Marcocrt: Ciao sono nuovo del forum

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Invece di una singola lettura puoi farne molte di più, farne una media e tra una lettura ed un altra mettere un delay. Esempio fai 10 letture in un ciclo For con 100ms di ritardo tra una e l'altra, dopo fai la media e mandi un uscita il risultato. Avrai una modifica ogni secondo di un valore mediato. Fai poi delle prove modificando il numero di letture da mediare o il tempo di delay

Testato: Invece di una singola lettura puoi farne molte di più, farne una media e tra una lettura ed un altra mettere un delay. Esempio fai 10 letture in un ciclo For con 100ms di ritardo tra una e l'altra, dopo fai la media e mandi un uscita il risultato. Avrai una modifica ogni secondo di un valore mediato. Fai poi delle prove modificando il numero di letture da mediare o il tempo di delay

grazie ho già provato questa strada ma il comportamento è quasi identico, e aumentando il delay le luci diventano scattose, aumentando il numero di letture non cambia molto e oltre a 1000 non parte più il led. volevo ottenere un comportamento tipo la luminosità dei display degli smartphone che solo dopo 1-2 secondi del cambio di luminosità gradualmente anche il display si adegua. forse dovrei impostare dei valori fissi tipo una scala di 10 così da gestire la luminosità a "gradini" e passare da un gradino all'altro lentamente es. 2-3 secondi, ma non ho idea di come fare.

ciao, io non so se posso esserti molto di aiuto in quanto sono pure io poco esperto di codici & co.

L'idea che mi è venuta è che forse potresti fare una rampa di salita/discesa con cui arrivi al valore di luminosità desiderato. Penso che con un ciclo for potresti riuscire a dare qualcosa, praticamente leggi il valore e poi con un ciclo for (temporizzato magari) puoi raggiungere il valore desiderato in modo da ottenere quel ritardo che desieri.

Marcocrt: ... se vario rapidamente l'intensità di luce che va alla fotoresistenza ...

Uhm ... mi sa che solo con un ciclo for non la risolvi, una situazione del genere, perche' dovresti modificare dinamicamente i cicli in tempo reale ... magari con un PID, ma qui deve intervenire qualcuno piu in gamba ... io con i miei tentativi di PID ci sto ancora litigando (anche a prenderli a martellate, fanno comunque quello che vogliono loro :P :D)

Etemenanki: Uhm ... mi sa che solo con un ciclo for non la risolvi, una situazione del genere, perche' dovresti modificare dinamicamente i cicli in tempo reale ... magari con un PID, ma qui deve intervenire qualcuno piu in gamba ... io con i miei tentativi di PID ci sto ancora litigando (anche a prenderli a martellate, fanno comunque quello che vogliono loro :P :D)

hahahah non dirlo a me! bisognerebbe provare un po' per vedere...

potresti anche lavorare di hw invece che solo sw, cioe' condensatori al posto giusto e del valore giusto, lato sensore e/o lato attuatore. scusa la vaghezza, e' giusto un idea veloce, ma credo vale la pena approfondirla

Testato: potresti anche lavorare di hw invece che solo sw, cioe' condensatori al posto giusto e del valore giusto, lato sensore e/o lato attuatore. scusa la vaghezza, e' giusto un idea veloce, ma credo vale la pena approfondirla

ho già provato con un condensatore, in parte funzionerebbe, quando le luci si attenuano il condensatore lentamente si scarica quindi gradualmente si attenuano in base alla capacità del condensatore, ma quando si riaccendono il condensatore si carica istantaneamente quindi anche le luci...

é anche vero che per delle luci ambientali il tempo di risposta delle luci nei confronti della luminosità esterna, anche se è istantaneo non dovrebbe essere un problema tranne in caso di forti temporali... anzi a pensarci bene così com'è i lampi verrebbero ammortizzati dai led... però mi piacerebbe capire come fare per rendere questa variazione di luminosità più lenta.

resistenza :) crei un filtro rc, abbinando una resistenza al condensatore limiti la corrente di carica, quindi ne rallenti la carica :)

Testato: potresti anche lavorare di hw invece che solo sw...

Shhhh ... vuoi farti sparare ? ... se ti sente un programmatore a dire una cosa simile, guai ... "ma come, usare un'RC, quando con un paio di centinaia di linee di codice si puo farne a meno ? ... vergogna ..." ... :smiling_imp: :stuck_out_tongue_closed_eyes: :smiling_imp: :stuck_out_tongue_closed_eyes: :smiling_imp: :stuck_out_tongue_closed_eyes:

Seriamente, non sull'uscita ma sul sensore ... un'RC sul sensore causerebbe un ritardo nella sua risposta, quindi diventertebbe molto meno sensibile alle variazioni veloci, e graduale a quelle lente ... non so che tipo di fotocellula usi, ma se ci metti per provare un 10K in serie, con un condensatore da 10uF in parallelo fra pin di ingresso e massa, gia dovrebbe darti una discreta rampa, poi i valori li si cambiano come servono ...

Etemenanki:
Shhhh … vuoi farti sparare ? … se ti sente un programmatore a dire una cosa simile, guai

:stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

karma +1