Sequenza colori

Ciao a tutti.
Sono alle prese con una striscia a led RGB che piloto tranuillamente facendo dissolvenzr varie fra vari colori.

Sto cercano alcune sequenze di colori (RGB o anche HEX che poi trauco in RGB), un banale eleno di numeri per il canale R, G e B distinti che mi facciano più o meno il passaggio da notte a giorno e viceversa.

Ho provato con un semplice passaggio dallo 0 al 255 e viceversa per i 3 colori ma è una dissolvenza banale.

Mi piacerebbe trovare le sequenze di colori che sfruttano le potenzialità dei led RGB in termini di colori.

Sono un po' testone ma non ho trovato la sequenza da nessuna parte.

Grazie

Spiega meglio quale tipo di "dissolvenza non banale" intendi. Ovviamente se controlli tutti e tre i colori contemporaneamente con lo stesso valore, avrai un fade bianco.

Se per "non banale" intendi cambiare colore al mattino per replicare la luce dell'alba, poi passare alla luce massima a mezzogiorno ed infine andare verso il tramonto la sera, quello che proverei a fare io al tuo posto è semplicemente (si fa per dire) trovare quale colore desideri in questi tre istanti. Ad esempio, al mattino vogliamo una luce più sul celeste, per poi diventare "calda" alle 12, e poi scendere fino a zero ma con un tono sempre più sul rosso.

Quindi fatti un programmino con il quale modifichi (con tre potenziometri o encoder diciamo, o con 6 pulsanti +/-) i valori fino ad identificare questi tre colori base ossia i tre valori RGB e da questi il rapporto in percentuale. Ad esempio per un colore più "caldo" sarà (R,G,B)=(60%, 20%, 20%).

Fatto questo, devi semplicemente (sempre si fa per dire) fare in modo che ogni canale dell'RGB, partendo da zero, faccia crescere uniformemente i valori ma con uno specifico rapporto tra loro che deve via via arrivare a quello del valore massimo, e poi decrescere nuovamente verso il valore minimo, fino ad arrivare a tutti zeri.

Se è questo che intendevi, direi che puoi iniziare a provarci ma non so darti una "tabella" specifica.

Quello che dici ossia passare da un colore ad un altro tramite dissolvenza l'ho già fatto pilotando i 3 led RGB assieme (dal bianco si passa al nero 255->0 e viceversa).

Chiedevo se esisteva in giro una tabella di colori, una sequenza già fatta di RGBper simulare effetto notte-> giorno e viceversa.

Partendo da tutti gli RGB a 0 seguire una sequenza di valori precisi per R, G e B singolarmente in maniera tale da simulare i colori dell'alba fino a luce piena e poi passare da luce piena (255) a notte (0) seguendo un'altra sequenza di colori o invertendo banalmente quella di prima.

Non è una domandi su come fare ma una domanda l'ho già fatto ma mi servono i "dati giusti".

Grazie

redsurrogate:
Chiedevo se esisteva in giro una tabella di colori, una sequenza già fatta di RGBper simulare effetto notte-> giorno e viceversa.
Non è una domandi su come fare ma una domanda l'ho già fatto ma mi servono i "dati giusti".

Eh, dato che non ho trovato una qualche "tabella" già pronta come quella che vorresti avere, te l'ho detto come farei al posto tuo a trovare i TUOI "dati giusti", e con quelli dosare la curva di ogni canale per fare in modo che da zero salga al 100% passando per il valore "base" della mattina, e poi scendere a zero passando per il valore "base" della sera (che poi potrebbero anche essere uguali o simili). Per fare questo potresti provare ad esempio a moltiplicare un indice, che ad esempio va tra 0 e 100, per la percentuale di ogni canale e poi il risultato lo dividi per 100 e moltiplichi per 255, per avere il valore PWM di quel canale. Questa "rampa" la userai solo per gli orari della mattina, ad esempio tra le 5 e le 9 (in salita da 0 a 100), e poi la sera, tra le 16 e le 20 (in discesa da 100 a 0).

Se non vuoi sperimentare direttamente tu e quindi non vuoi doverti sforzare a calcolarlo e fare qualche prova, con qualche minuto di ricerca (ma ti consiglierei di cercare direttamente anche tu) ho trovato ad esempio questa tabella che converte la temperatura di colore, ossia i gradi Kelvin della luce, in valori RGB, puoi usarlo come base visto che include i valori RGB per la luce solare del mattino (255,160,75), mezzogiorno (255,255,255) e sera (255,160,75 come quella del mattino).

Se vuoi ulteriori informazioni, anche di carattere più "tecnico-fisico", puoi provare QUI ma ti consiglio comunque di sperimentare e farti tu un algoritmo specifico, che potrai controllare ed adattare al meglio per le tue esigenze.

Tempo fa feci una luce per addormentarsi (collaudata volante, ma purtroppo non realizzata in maniera definitiva) con un solo LED RGB, che spegnendosi sfumava dal bianco al rosso simulando il tramonto. Questa è la parte dello sfumo che mi ha soddisfatto, dopo alcune prove:

int X; byte Y=255; byte Z=255; int T=1000; // Lo sfumo deve essere molto lento                               
for(X=256; X>0; X--) // Fa lo sfumo da acceso a spento passando dal bianco
  {                  // al giallo, all'arancione, al rosso.
  if(Y<0) Y=0; if(Z<0) Z=0;
  analogWrite(LEDR,X-1);
  analogWrite(LEDV,Y);
  analogWrite(LEDB,Z);
  delay(T); Y-=2; Z-=3;
  }

Se vuoi leggere i valori, dopo aver abilitato la seriale:

int X; byte Y=255; byte Z=255; int T=10;                                  
void setup()
{
for(X=256; X>0; X--) // Fa lo sfumo da acceso a spento passando dal bianco
  {                  // al giallo, all'arancione, al rosso.
  if(Y<0) Y=0; if(Z<0) Z=0;
  analogWrite(LEDR,X-1);
  analogWrite(LEDV,Y);
  analogWrite(LEDB,Z);
  Serial.print("R="); Serial.print(X-1); Serial.print("   G="); Serial.print(Y); Serial.print("   B="); Serial.println(Z);
  delay(T); Y-=2; Z-=3;
  }
}

Grazie docdoc. Avevo già visto quei siti ma non ci avevo fatto più di tanto caso....cercavo una tabella già fatta

Grazie Datman per il tuo esempio.

Ora provo a raccogliere le informazioni e direzionarle in una tabella colori che poi posto....non si sa mai che interessi qualcuno.

Grazie ancora

Prego :slight_smile:

Dunque dunque sto impazzendo.

Ho raccolto un po' di info sui colori ed armato di santa pazienza ho deciso di sperimentare.

Mi sono creato 3 array di interi da 0 a 255 di valore e di dimensioni 255 celle l'uno, inizializzati con valori a mio piacimento per la sequenza di colori che voglio fare.

Questi 3 array sono ovviamente R, G e B che mando su uscite pwm con un bel ciclo for.

Faccio le mie prove poi porto gli array a 380 celle l'uno e di conseguenza modifico il ciclo for.

Da qui il delirio.

Accade che se uso solo 2 array nel ciclo for ed uno lo commento, va tutto bene.
Se ne uso 3, uno ha dei valori assurdi che mi falsano la sequenza di colori che ho fatto.

Pensando ad una errata inizializzazione ho monitorato il valore delle celle mentre girava il ciclo for.
Se uso solo 2 array tutto bene, se uso anche il terzo i valori di uno sono assurdi e completamente diversi da quelli da inizializzazione che è statica.

Allora ho eliminato la scrittura sulle uscite pwm ed ho monitorato solo il valore....nulla da fare, sempre cosi.

Altra cosa, non importa quale dei 3 array commento il risultato non cambia.

Sicuro sto facendo una s.....ata galattica io solo che non capisco dove.

AIUTOOOOOOOO !!!!!

E come sempre ...grazie

Serve di vedere il codice

redsurrogate:
Mi sono creato 3 array di interi da 0 a 255 di valore e di dimensioni 255 celle l'uno, inizializzati con valori a mio piacimento per la sequenza di colori che voglio fare.

Dunque, facciamo due conti... Un intero sono 2 byte, ogni array da 255 interi (perché non 256? Ma ok..), e hai 3 array, giusto? Quindi 22553=1539 byte.
Fatti una domanda e troverai la risposta (anzi la domanda te la faccio io: secondo te quanta RAM ha Arduino?...).

Intanto se ti servono valori da 0 a 255 ti basta un byte non un intero che occupa 2 byte, quindi già dimezzeresti l'occupazione di questi 3 (inutili) array.

Poi quello che ti consigliavo era di trovare invece un algoritmo per calcolare le "rampe" di salita (e discesa) per ognuno dei 3 colori, partendo da qualche esperimento per determinare quali siano i valori "intermedi" da usare per ognuno dei colori, e da qui arrivare da 0 a 100% (ossia da 0 a 255) all'interno del range di orari all'interno dei quali devi fare la "rampa" in salita per l'"alba" (o, sviluppandola in "discesa", per il "tramonto").

docdoc:
(anzi la domanda te la faccio io: secondo te quanta RAM ha Arduino?...).

URCA.
Sono un pirla atomico.....grazie della dritta, delle dritte.

Questa sera provo a sistemare la cosa.

Grassssssie ancora

Solo un'altra considerazione banale ... a te non servono piu di 16 milioni di sfumature per il tuo fade (255255255) ... quindi perche' usare tutti i 255 livelli per ognuno dei tre canali ? ... uno ogni 5 o simile, non e' sufficente per un fading decentemente graduale ? ... anche perche' puoi "gradualizzarlo" ancora di piu cambiando solo uno dei tre valori per passo invece che tutti insieme, in modo che si noti ancora di meno il passaggio fra due tonalita' diverse ... :wink: ?

Ciao,

non ho capito cosa vuoi fare di preciso, vuoi sfumare un particolare colore o fare un passaggio fra colori?

Da quello che ho capito, credo voglia riprodurre le varie tonalita' della luce solare durante tutto il ciclo da alba a tramonto ... sempre se ho capito bene ...

Si ma il cambio di tonalità di colore nell'arco della gironata si ha solo nelle prime ore del mattino e le ultime ore della sera, per via della presenza dell'atmosfera. All'incirca dalle 10 alle 16 (parliamo di estate ad esempio) la tonalità è praticamente costante, perché la quantità di atmosfera attraversata dai raggi non cambia molto.

Infatti avevo già linkato un paio di articoli che spiegano tutto, compresa una corrispondenza RGB-tipo di luce (ossia QUI e QUI). Poi se uno vuole trovare la "pappa pronta", beh... :wink:

La pappa pronta gliela avevo già data io...

Datman:
La pappa pronta gliela avevo data io...

...eh, appunto! :wink: MALE! :smiling_imp:

Ma avendo i due colori soglia, non basterebbe stabilire il tempo di fade e poi dividere a intervalli calcolati per avere l'intervallo minimo di movimento? e ad ogni passo avanzare del pelino corrispondente?
Cioè se devo passare da 0 a 100 un colore e un altro da 0 a 200 il tutto in 10s, non basca calcolarsi che posso fare uno step ogni 10 / 200 = 50mS
Il primo colore lo muovo di 1 ogni 2 step e il secondo colore ogni step.
I 50 mS li gestisco con millis() e ho finito un singolo fade.

Se ne metto N in fila, con parametri differenti, posso gestire l'intera gamma di variazione dell'arco della giornata.
Avrò un passaggio consistente in poco tempo all'alba e al tramonto, e poi una variazione lieve fino a mezzogiorno e poi contraria da mezzogiorno fino all'inizio del tramonto.

Per calcolare gli step devo trovare il minimo comune multiplo delle singole variazioni, nell'esempio tra 100 e 200 era 200.

Maurizio

NO no niente pappa pronta.
E' che se c'era qualcuno che aveva già una sequenza per il giorno e notte (come Datman) sarei partito da li per fare vari test.
Sto leggendo i vari suggerimenti con interesse e appena riesco a metterci le mani vedo di creare una cosa mia che magari vi posto.

Le vostre indicazioni le seguo e la pappa pronta non mi piace :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: