Temperatur abhängige RGB LED

Aloha liebe Forum Gemeinde,

Ich habe vor ca. 2 Wochen mit dem "spielen" mit Arduino angefangen und wollte mich nun mal an ein relativ sinnvolles Projekt ranmachen.

Also ich habe vor das eine RGB LED in Abhängigkeit der Temperatur die an einem NTC gemessen wird
von Blau ( für Kalt) nach Rot( Warm) durch faded .

ich bin schon so weit das ich die Temperatur im Serial Monitor ausgeben kann in Grad c° und auch das die RGB stumpf umschaltet. aber nicht so ein schöner smoother übergang.

ich finde aber auch keine ansätze im netz dafür.

hoffe ihr könnt mir evtl Ideen geben damit ich weiterkomme.

LG Mukki

LED und Augen sind nichtlinear. Damit das ungefähr passt, muss man da einiges Anpassen. Eine Betrachtung dazu findest Du hier.

Gruß Tommy

erstmal danke das du das rausgesucht hast. :slight_smile:

ich habe das jetzt mal durchgelesen und ich muss leider sagen ich verstehe das mit den Tabellen nicht.

meine Kurzfassung wenn ich es richtig verstanden habe brache ich so eine Funktion wenn ich ein sauberes Fadding haben will.

Du brauchst die Werte aus der Tabelle.
Lasse doch mal eine LED mit den Werten aus der 8 Bit-Tabelle leuchten.

Gruß Tommy

Hi

Entweder, Du 'fadest' von Blau AN nach Blau AUS und gleichzeitig von Rot AUS nach Rot AN, oder Du schaust nach HSV-Farbraum, dort ist eine Gerade zwischen den beiden Farben ein kontinuierlicher Farbwechsel.
Die HSV-Farbwerte kann man in RGB umrechnen, womit Du dann Deine RGB-LED befeuern kannst.
Von dieser Gerade kannst Du als 'ganz normale Geradengleichung' jeden Zwischenwert und daraus die RGB-Werte bestimmen und weiter benutzen.

MfG

und wie mach ich das denn mache ich denn den Farbwechsel in meinem fall Temperatur abhängig

lg

... häh?

sagen wir mal ich habe an meinem ntc ne Temperatur von 10 grad dann soll die led blau leuchten und wenn es wärmer wird also die Temp ansteigt soll sich die farbe der LED zu rot verändern.

das ist so mein plan

Du suchst dier erst mal die passenden Farben zusammen. Das ist Fleißarbeit und auch persönliche Geschmackssache.

Dann hast Du RGB-Wertetripel, die kannst Du jeweils in eine Struktur packen und davon ein Array anlegen.

Dann musst Du nur noch festlegen, welche Farbe bei welcher Temperatur genutzt werden soll.

Gruß Tommy

wenn ich es richtig verstanden habe suche ich mir jetzt für sagen wir mal 0,5 grad Änderung eine neue farbe und spreche die dann in einem einzelnen befehl an .

LG

Wenn wir mal von einem Messbereich von -10°C bis 40°C ausgehen, wären das 100 verschiedene Farben.
Das kannst Du optisch überhaupt nicht auseineander halten.
Fange erst mal mit einer Farbe pro 5 K an. Das wären 10 Farben. Du kannst es ja später noch verfeinern.

Pseudocode:

struct farbe {
   byte rot;
   byte gruen;
   byte blau;
};

farbe farben[10];

Gruß Tommy

Du kannst auch einfach 2 map verwenden

rot = map (temperatur, -10, 40, 0 , 255);
blau = map (temperatur, -10, 40, 255, 0);

Grüße Uwe

Du könntest es damit lösen:

lese am analogen Eingang deine Temperaturen. die kleiste und die größte.
Das liegt dann irgendwo zwischen 0 und 1023, vielleicht bei 230 bis 850 für deinen Meßbereich. Das ist ein wenig individuell.
Diesen Wert übergibst du der Variablen "Z":

Mache eine Variable "angle" für den Winkel des Farbkreises

 angle = map(Z,KLEINSTER WERTt,GRÖSSTER WERT,0,240);
   if (angle<0){ angle=0;}
   if (angle>240) {angle=240;}


 unsigned char pwmtable[40] = {0, 0, 0, 1, 2, 3, 4, 6, 8, 10, 13, 16, 19, 23, 27, 31, 36, 41, 47, 52, 59, 65, 72, 80, 88, 96, 105, 114, 123, 133, 143, 154, 165, 177, 189, 201, 214, 227, 241, 255};
 
 
  if(angle<40)
        {
            R=0;
            G=pwmtable[angle];
            B=255;
        }
        else if(angle<80)
        {
            angle-=40;
            R=0;
            G=255;
            B=pwmtable[39-angle];
        }
        else if(angle<120)
        {
            angle-=80;
            R=pwmtable[angle];
            G=255;
            B=0;
        }
        else if(angle<160)
        {
            angle-=120;
            R=255;
            G=pwmtable[39-angle];
            B=pwmtable[angle];
        }
        else if(angle<200)
        {
            angle-=160;
            R=255;
            G=pwmtable[angle];
            B=255;
        }
        else if(angle<=241)
        {
            angle-=200;
            R=255;
            G=pwmtable[39-angle];
            B=pwmtable[39-angle];
        }

    //analogWrite(Red,R);
    //analogWrite(Green,G);
    //analogWrite(Blue,B);

Damit fährt deas RGB Display von kalt = Blau über Cyan, Grün, Gelb, Magenta bis Rot( warm)
den kompletten Regenbogen durch.