RGB LED Strip Ansteuerung / Programm für smoothes faden

  • Moin,
    ich such wie blöde nach einer fertigen Lösung um meinen RGB Strip zu steuern.
    Ich möchte mir einen Lichtwecker (ist aber nicht nur dafür.. sondern auch für weitere Basteleien mit allen farben) bauen und komme grad nicht weiter.


    Es geht darum, dass das Faden von RGB-Wert zu RGB- Wert fürs Auge nicht grad fließend ist, wenn man stumpf die Werte durch eine Schleife jagt. Daher suche ich einen fertigen Algorythmus, den ich dafür nehmen kann um letztenendes ein gleichmässiges Faden zu erreichen.


    Ich bin da z.b. auf VaRGB gestoßen.
    Da diese Lib aber anscheinend keinen Daemon hat, weiß ich nicht, wie ich das ganze per Bash/PHP nutzen kann..


    Aber das wäre ja nur ein Beispiel. Vieleicht gibts ja schon was anderes fertiges?


    Infos:
    Meine Schaltung ist recht simpel.. ich habe 3x TIP120 an GPIOs 23, 24 und 25 angeschlossen.. dazwischen sitzt noch jeweils ein DAC
    Ich kann mit pigpio und dem tool pigs alle RGB Werte wunderbar an den Strip weitergeben.
    (danke an dreamshader und diesem Tutorial.
    Ich hab ein wenig mit diesem script zum faden rumgespielt.
    Jedoch sind die Übergänge halt nicht bei jeder Farbe fließend.. sondern teils recht abrupt.

    Edited once, last by demlak ().

  • oooook... mitlerweile bin ich soweit, dass ich rausgefunden habe, dass dies im RGB farbraum fast unmöglich ist.. man soll wohl zu HSL/HSV/HSI konvertieren..


    ich fade jetzt durch die 360° im HSV Raum.. aber da dieser auch nicht gleichmässig für das menschliche auge aufgeteilt ist.. siehts eben nicht gleichmässig aus..


    bin also auf der suche nach einem algorithmus der die farbverteilung gleichmässig rausgibt..
    und/oder nach einem anderen Farbraum als HSV oder RGB.. wo das Spektrum gleichmässiger verteilt ist (für das menschliche auge!)

    Edited once, last by demlak ().

  • ok.. ich denke mitlerweile sollte das hier vieleicht verschoben werden =)


    ich hab das hier gefunden.. und mit dieser Kennlinie des Auges, kann man weiterarbeiten..
    http://www.mikrocontroller.net…es_Auges_genau_betrachtet


    die Tabelle, bzw. die darin verwendete Formel ist ja schonmal eine gute Basis..
    es geht ja um den Eindruck, den das Menschliche auge von Helligkeitsunterschieden hat.
    Ich frag mich, wie man das jetzt am besten nutzt um durch mehrere Farben zu faden..

  • *thread push*


    mitlerweile jemand dabei der einen Plan haben könnte, wie man über mehrere Farben hinweg smooth faden kann, so dass zwischen den Farben für DAS MENSCHLICHE AUGE ein gleichmässiger Übergang stattfindet?


    Momentan gehts mir primär um einen simulierten Sonnenaufgang.. für meinen Lichtwecker

    Edited once, last by demlak ().

  • Naja, ich kann Dir da auch net helfen aber ggf. musst Du beim Faden Korrekturwerte mit einberechnen ....


    Irgendwie war mir da noch was in Erinnerung.

    ;) Gruß Outi :D
    PIs: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (J. Lite)
    2x Pi Zero 1.3 (J. Lite) / 2x Pi Zero W 1.1 (Stretch) / 1x Pi 3 B+ (Buster) / 1x Pi 4 B 4GB (Buster)
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT

  • Hier ein Programm für smoothes fading in bash, auch wenn du wohl inzwischen schon eine Lösung haben wirst.

  • Hallöle ...


    ich hätte da was. Ist allerdings für den Arduino - ist aber (fast) in C und sollte relativ einfach nachzubauen sein. Es geht ja vorwiegend um den Algorithmus ...
    Ich häng das File mal an.


    cheerio,
    -ds-

  • hi.. danke an euch beiden.. jedoch berühren beide algorithmen nicht die ausgangsproblematik..


    das lineare faden von einem rgb-wert zu einem anderen, ist ja eine leichtigkeit..


    das problem ist eher die kennlinie des menschlichen auges.. siehe die drei eingangspostings..

  • Bin kein Mathematiker aber wie wärs mit Tabellen ??


    Das nutzen Mathegenies, wenn Algorithmen zu komplex und/oder zu langsam sind und/oder nicht hinhauen .... ;):D

    ;) Gruß Outi :D
    PIs: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (J. Lite)
    2x Pi Zero 1.3 (J. Lite) / 2x Pi Zero W 1.1 (Stretch) / 1x Pi 3 B+ (Buster) / 1x Pi 4 B 4GB (Buster)
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT

  • Wieso Notlösung ?? Diese Tabelle(n) kannst Du zukünftig immer wieder verwenden ....

    ;) Gruß Outi :D
    PIs: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (J. Lite)
    2x Pi Zero 1.3 (J. Lite) / 2x Pi Zero W 1.1 (Stretch) / 1x Pi 3 B+ (Buster) / 1x Pi 4 B 4GB (Buster)
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT

  • 1.
    Tabellen sind eine komplexe Angelegenheit, wenn ich für jede mögliche RGB-Kombi von Farbe X zu Farbe Y eine eigene Tabelle benötige. Dies ist insbesondere bei ressourcenkritischen Dingen ein Problem. (z.B. Speicher oder Zeit)


    2.
    Da man nicht garantieren kann, dass _ABSOLUT IMMER_ von X zu Y ohne _jedwede Ausnahme_ komplett am Stück gefaded werden kann, wirds dann auch problematisch, wenn man dann zwischen den "Endfarben" einen mehr oder minder undefinierten Bereich hat, von dem es weitergehen soll. Es kann doch keine tatsächliche Lösung sein, dass man IMMER zu ende faden muss.


    3.
    durch tabellen wird es fast unmögliche unterschiedliche fadezeiten einzustellen. wenn ich z.b. 100 werte habe, die mich smooth von X nach Y in 100 Sekunden bringen, bin ich in 50 sekunden nicht genauso "smooth" von X nach Y gefaded, nur weil ich jeden 2. wert von den 100 auslasse.. das ist eben das problem der nicht-linearität... und richtig problematisch wirds dann, wenn ich hunderte werte habe, aber runter will auf wenige sekunden..


    4.
    faden zwischen helligkeitsstufen wird unmöglich


    Etc.. etc..


    Tabellen sind eben nur eine Notlösung.. keine Lösung.


    ich erinner mich grob daran, dass ich damals aus der in beitrag #3 verlinkten website die libre office tabelle zerpflückt habe um die dort verwendete formel in bash/php umzusetzen.. das liegt hier auch irgendwo noch rum..
    Jedoch ist das ganze sehr theoretisch.. in der praxis spielen immense farbunterschiede eine rolle.. alle 3 kanäle auf 100% ist eben kein reinweiß.. sondern (in meinem fall) eher ein blauweiß in richtung 10.000 kelvin..


    wenn ich die muße dazu hätte, würde ich das ganze nochmal raussuchen und eine kalibrierung dazuschreiben.. so dass man "einfach" ein paar RGB werte von mischfarben angeben kann, und diese dann in die formel mit einfließen..
    Werte für weiß, Gelb, Türkis und Violet.. und das ganze dann noch für verschiedene helligkeitsstufen...


    es ist umständlicher scheiß.. aber letztenendes würde man nur so ein halbwegs passables endergebnis bekommen.


    z.b. ist hier 255, 255, 128 kein helles Gelb, sondern weiß
    oder 255, 0 ,128 ist ein viel satteres lila, als 255, 0, 255
    etc.. etc..



    es sind eben "nur" billige rgb stripes =)

    Edited once, last by demlak ().

  • Feuerpfeil, ich hatte in meinem letzten Post das Problem auf die Hardware-Ebene runtergebrochen.. es ist nicht nur eine Frage der Ansteuerrung..
    Bei billigen Stripes wird so ein Algorithmus eben zum Kalibrierproblem..


    Zudem geht es bei der ganzen Sache um die Kennlinie des menschlichen Auges.. von rgb-wert x zu rgb-wert y smooth zu faden, ist kein problem =)

  • Hallo zusammen,


    durch diesen Thread neugierig geworden, habe ich mich auch einmal versucht.
    Anbei mein Versuch VaRGB an den Pi anzpassen.
    Für die Hardwaresteuerung habe ich Pi-Blaster genutzt, weil es aus meiner Sicht ideal zu VaRGB passt.
    https://github.com/sarfata/pi-blaster


    Weiterhin habe ich alle Beispiele in eine Datei (TestRaspiExt.cpp) zusammengefasst. Wenn man das Programm startet, werden also alle Beispiele einmal ausgegeben.
    Dazu habe ich eine weitere Kurvenfom Fading hinzugefügt. Das ist aber sehr rudimentär und weit davon ein vernünftiges Fading zu machen.
    Die Herausforderung ist, das Fading der Kurve Linear nachzubauen. Linear in VaRGB setzt die Kurve an dem Punkt fort, an dem der letzte Aufruf geendet hat. Da kann es passieren, dass der Verlauf von 50 % PWM auf 20 % gedimmt werden soll. Wie parametiere ich die Funktion so, dass sie an die letzte Dimmung anschließt? Vielleicht denke ich ja einfach nur zu kompliziert und jemand hat eine einfache Lösung.
    Mein Wissen zum Fading habe ich weitesgehend aus der Diskussion auf mikrocontroller.net.
    (z.B. http://www.mikrocontroller.net…les/Diskussion:LED-Fading) Hier geht es zwar weitestgehend um Tabellen für Atmels, jedoch denke ich, dass der Raspi genug Rechenleistung zur Verfügung hat, die Tabellen für jeden Aufruf der Fading Funktion zu errechnen. So wie es VaRGB ja eigentlich auch macht.
    Auf der anderen Seite, schaut man sich das Beispiel in VaRGB zu linearen Dimmung an, stellt sich die Frage ob ein Anpassen der Kennlinie wirklich zweckmässig ist.


    Ich hoffe, dass der eine oder andere Spaß an Sache hat. Ich denke, dass VaRGB wirklich eine tolle Spielwiese ist, unterschiedliche LED Ansteuerungen zu probieren.


    Gruß
    mafenic

    Files


  • das posting ging irgendwie an mir vorbei..
    ich habs nicht gelöst.. und nicht abgehakt.. aber auf die lange bank verschoben.. ich finds grundsätzlich interessant.. jedoch hab ich andere prioritäten.. momentan ist das ganze basteln mit dem RPi sehr weit in den hintergrund gerückt...



    mafenic: sehr cool! Ich werds mir bei Gelegenheit mal anschauen.. das kann aber wochen/monate dauern...
    ansonsten fänd ich tatsächlich eine zusammenarbeit mit pigpiod besser als mit pi-blaster.. pigpiod ist.. sagen wir mal "ressourcenschonender"..

  • Hallo demlak,


    zu einer Lösung gekommen damit? Ich hatte vor einiger Zeit das selbst mal probiert, mit dem Effekt, dass ich die Weckfunktion als sehr grob empfand.

    Soweit ich mich erinner gab es irgendwie nur ~20 Helligkeitsstufen die ich setzen konnte und damit konnte kein langsamer, harmonischer Weckvorgang erzeugt werden. Mein nächster Ansatz wäre gewesen 2 Strips zu kombinieren.

    In der normalen RGB Tabelle wären es 255 Schritte rot gewesen aber durch die Pulsansteuerung steigt man da auch nicht bei 0 ein also spielte ich schon mit dem Gedanken die Pulssteuerung mit Spannungsregulierung zu kombinieren, da insbesondere die dunklen Werte interessant sind.

    Habe bislang aber noch nicht ausprobiert, wie sich so ein 12V Strip überhaupt mit "undervoltage" verhält.