RGB LED ansteuern

Nachdem ich bereits seit längerer Zeit immer mal wieder vorbei schaue, ist es jetzt so weit und ich plane meine erste Box zu bauen. Ich habe bereits einiges an benötigter Hardware von Raspberry Pi Basteleien da, unter anderem auch eine RGB LED. Nun dachte ich, dass ich diese als Status LED mit der Firmware von @stephan einsetzen könnte, um das allseits bekannte „Problem“ der automatischen Abschaltung von Powerbanks zu umgehen.

Nach kurzer Studie des Codes ist das wohl nicht ohne Weiteres möglich, da die LED keine adressierbare WS281x ist, sondern eine Standard LED, die aber anders als eine einfarbige nicht einen, sondern gleich 3 Pins + GND braucht. Ich bin zwar blutiger Anfänger, was Arduino angeht, denke aber, dass ich die benötigten Codeänderungen wohl mit etwas trial&error hinbekommen würde. Genug PINs müssten ja auch frei sein, wenn ich es richtig verstehe.

Bevor ich mich da hinein stürze: Hat das eventuell schonmal jemand gemacht und den Code angepasst?

Normal werden vor LEDs ja auch Widerstände geschaltet. Da bin ich mir jetzt unsicher, welche benötigt werden. Kann man einfach die üblichen Werte für rot, gelb und blau annehmen? Ein Datenblatt habe ich leider nicht. Die LED war bei einem RPi / Arduino Starter-Set dabei.

Ich warte noch auf den Arduino Nano und DFPlayer, so dass ich momentan leider noch nichts ausprobieren kann.

Meine Firmware unterstützt sowohl WS281x als auch normale LEDs. Gut wenn du eine 3in1 hast musst du mehr Pins haben, was schwierig wird. Daher habe ich ja den WS281x Support zusätzlich zum Standardsupport eingebaut.

1 „Gefällt mir“

Du kannst drei Pins des Arduino nehmen und damit die drei Anoden der 3-Farb-LED über jeweils hinreichend dimensionierte Vorwiderstände ansteuern. Ich nehme an, die 3 Farben haben eine gemeinsame Kathode?

Die Widerstände errechnen sich nach der Formel 5V minus gewünschte Spannung an der LED, geteilt durch den gewünschten Strom.

Da Du die Sollwerte nicht kennst, bleiben nur zwei Möglichkeiten:

  1. Du nutzt die vorhandene LED und tastest Dich von oben ran, d.h. Du beginnst mit zu großen Widerständen. Damit kannst Du nichts kaputt machen. Typischerweise liegen die Werte bei RGB-LEDs nicht anders als bei einfarbigen LEDs, da die Spannungen von der Art des verwendeten Halbleiters abhängen und letzterer farbabhängig variiert. Aber man kann nie wissen. Wenn man von 20mA Nennstrom ausgeht (meistens der Fall), kann man mit einiger Sicherheit bei blau und reinweiss von 3,5V, bei grün von 3V, bei gelb von 2,2V und bei rot von 2V ausgehen. Das ergäbe je nach Farbe 75-150 Ohm ( (5V-Nennspannung)/Nennstrom ). Wenn Du nur 10 oder 15mA Strom durchlässt (d.h. 100-200 bzw. 150-300 Ohm), werden die LEDs auch leuchten, aber nicht ganz so hell. Mit 300 Ohm, jedenfalls aber mit 1kOhm liegst Du auf der sicheren Seite und machst wohl nichts kaputt.
  2. Wenn Dir das zu unsicher ist, oder Du keine große Auswahl an Widerständen zum Testen hast, ist es vielleicht günstiger, Dir eine neue Farb-LED mit bekannter Spezifikation zu besorgen. Preislich dürfte die nicht ins Gewicht fallen (0,50€?).
1 „Gefällt mir“

Wieso wird das denn schwierig? Wenn ich es richtig verstanden habe gibt es doch genügend freie PINs am Nano oder nicht? Ist die spätere Ansteuerung im Programm dann problematisch? Ich kenne mich da wie gesagt nicht aus, aber hätte gedacht, dass das mit etwas copy&paste Zauberei an den richtigen Stellen funktioniert.

Falls das doch mit mehr Aufwand verbunden ist als ich dachte, werde ich wohl erstmal mit einfarbigen LEDs testen (danke nochmal @Peer für die Infos :slightly_smiling_face: ) und das ganze später nochmal angehen oder gleich eine WS281x beschaffen. Erstmal hoffe ich, dass ich die Box am Wochenende so weit zum Laufen bekomme.

Edit: Ob die RGB LED nun eine gemeinsame Kathode oder Anode hat, kann ich nicht sagen. Das ist ja vermutlich auch etwas, was man im Code berücksichtigen müsste. So langsam dämmert es mir, dass das schwieriger als erwartet sein könnte …

Naja kommt halt drauf an was du alles gleichzeitig nutzen willst. Wenn es nur die LED ist, sind in der tat genug pins frei.

1 „Gefällt mir“

Wenn Du nicht weisst, ob die LED eine gemeinsame Kathode oder Anode hat, kannst Du einfach mit einem Durchgangsprüfer testen in welche Richtung die LED sperrt.

Bei normalen LEDs kann man ansonsten Anode und Kathode leicht an der Länge der Drahtbeine erkennen. Die Anode (+) ist etwas länger als die Kathode (-). Bei RGB-LEDs ist das aber nicht so. Da ist der gemeinsame Anschluss immer der Längste von allen, egal ob es die Anode oder die Kathode ist.

Des Weiteren ist R am kürzesten, G am zweitlängsten und B am zweitkürzesten. Wenn man die LED so hinlegt, dass das kürzeste Bein links liegt, liegen die Anschlüsse von links nach rechts in der Reihenfolge ®(-)(G)(B) oder ®(+)(G)(B).

Bei einer RGB-LED mit gemeinsamer Kathode legst Du jede Farbe über einen passenden Widerstand auf einen Digital-Out-Pin des Arduino und die Kathode auf GND. Die Pins schaltest Du dann auf HIGH um die LEDs einzuschalten und auf LOW zum Ausschalten.

Bei gemeinsamer Anode machst Du es anders herum: Du legst die Anode auf 5V und die über die Widerstände mit den Farb-Beinen verbundenen Arduino-Pins schaltest Du auf LOW zum Einschalten der LEDs.

1 „Gefällt mir“

Kleiner Nachtrag:

Wenn Du tatsächlich zu wenig Pins frei hast um die drei Farben separat anzusteuern, geht es evtl. auch anders.

Falls Du nur zwei Farben brauchst, reichen natürlich auch nur zwei Pins.

Aber auch wenn Du alle drei Grundfarben nutzen möchtest, müssten bei geschickter Beschaltung mit nur drei Widerständen zwei Digital-Out-Pins des Arduino ausreichen. Man kann dann aber nur ROT, GRÜN, BLAU oder AUS, nicht aber die Mischfarben GELB, MAGENTA, CYAN, WEISS schalten. Die Schaltung hierzu sieht (wenn man annimmt, dass alle drei Farben jeweils einen Vorwiderstand von 220 Ohm benötigen) dann so aus:

Wenn D5 und D6 beide auf HIGH (5V) geschaltet sind, sind alle drei LEDs ausgeschaltet.

Wenn D5 und D6 beide auf LOW (0V) geschaltet sind, sperren die beiden äußeren LEDs und die mittlere ist über R1 (110 Ohm) und die parallel geschalteten R2 und R3 (jeweils 220 Ohm, zusammen wg. Parallelschaltung 110 Ohm) mit einem Gesamtwiderstand von 220 Ohm angeschaltet.

Wenn D5 auf HIGH und D6 auf LOW geschaltet sind, sperrt die rechte LED, wogegen die linke und die mittlere leuchten. Allerdings fällt an der mittleren Diode eine deutlich geringere Spannung ab als an der linken. Der meiste Strom fließt durch die linke LED, so dass diese die wahrgenommene Farbe dominiert.Trotzdem ist der Strom durch die linke LED hinreichend durch R3 begrenzt.

Wenn D5 auf LOW und D6 auf HIGH geschaltet sind, verhält sich die Schaltung analog zum letzten Fall (links und rechts vertauscht).

2 „Gefällt mir“

Sorry, dass ich das Thema noch mal hochhole. Um mir die vielen LEDs zu sparen um die Powerbank am Leben zu halten, habe ich mir gedacht, dass ich einfach eine RGB-LED nehme. Davon hatte ich noch ein paar mit gemeinsamer Kathode rumliegen.
Wäre schön, wenn man als kleine Spielerei einen Farbverlauf darstellen könnte.

Daher die Frage, hat da vielleicht schon jemand entsprechenden Code? Genügend PINs für eine LED sind ja noch frei, aber mit meinen Versuchen dass als non-blocking Code umzusetzen bin ich nicht weit gekommen.