3D-DIY.de

RGB(W) Beleuchtung als Statusanzeige mit Marlin

In diesem Tutorial zeige ich euch, wie ich einen RGBW LED-Streifen an meinen 3D-Drucker angeschlossen habe und wie der Drucker darüber nicht nur hübsch ausgeleuchtet wird, sondern auch seinen aktuellen Status anzeigen kann. Wie das dann aussieht, wenn der Drucker aufheizt, seht ihr in diesem Zeitraffer.

Die Idee dazu kam mir noch recht zu Anfang meiner 3D-Druck-Karriere, als ich in irgendeinem YouTube Video mal einen älteren Makerbot gesehen habe, der eine farbige Beleuchtung hatte. Einen entsprechenden LED-Strip, sogar mit warmweißen LEDs, zusätzlich zu den farbigen, also RGBW oder streng genommen RGBWW, hatte ich noch von einem früheren Projekt rumliegen. Nach kurzer Recherche war klar, dass außerdem Transistoren benötigt werden, da das Mainboard des Druckers an seinen geeigneten Ausgängen nicht genügend Strom für die LEDs liefern könnte.

Leider kam schnell die erste Ernüchterung, denn damals hatte ich mein Mainboard noch nicht getauscht. Leider ist das in den ersten Tornados verbaute Mainboard sehr rudimentär und hat nur wenige Anschlüsse, die für dieses Projekt nötig wären. Gebraucht werden hier nämlich Pins, die PWM-fähig sind (Pulse Width Modulation), also Pins die nicht nur den Status an oder aus kennen, sondern die quasi „dimmbar“ oder eben analog sind. PWM funktioniert, vereinfacht gesagt, durch schnelles an- und ausschalten. Je höher die Frequenz, desto heller leuchtet eine angeschlossene LED, bei langsameren Frequenzen leuchtet sie entsprechend dunkler.

Das Board der frühen Tornados verfügt zwar mutmaßlich über PWM-fähige Pins, davon war bei mir aber einer schon vom BLTouch belegt. Mutmaßlich schreibe ich, weil das Board leider kaum dokumentiert ist. Es weicht vom MKS Base in einigen Aspekten ab, rein optisch kommt es wohl dem Biqu Base am nächsten, jedoch habe ich auch dafür keine ordentliche Dokumentation gefunden.

Der einzige Anschlussblock, in dem dort wohl nutzbare PWM Pins vorhanden sind, wäre der Servos Block. Dieser hat beim Tevo Base aber nur zwei Reihen (jeweils Signal, +5V, GND) und davon war, wie gesagt eine schon vom Bed Leveling Sensor belegt. Zum Glück habe ich das Board dann getauscht und auch die neueren Tornados kommen ab Werk mit einem MKS Gen L Mainboard, das über ausreichend PWM Pins verfügt.

Anschluss der LEDs

Ein wichtiger Hinweis vorweg: Die Pins auf dem Board, sei es nun ein MKS Gen oder ein Arduino mit RAMPS Shield oder was auch immer, sind nur dafür gedacht Steuersignale zu übertragen, können daher nur wenige mA an Strom liefern. Für eine einzelne LED beim klassischen Blink-Aufbau, den jeder wohl als erstes Arduino-Projekt umsetzt, reicht das aus. Für einen ganzen Streifen mit einigen mehrfarbigen LEDs ist das aber viel zu wenig. Wer hier seine LEDs direkt anschließt, wird wohl kein Licht bekommen oder schlimmstenfalls sein Board zerstören.

Der Korrekte Weg führt deshalb über Transistoren, die in diesem Fall als Schalter eingesetzt werden. Geschaltet wird bei den meisten LED-Streifen die Masse. Die Streifen besitzen einen gemeinsamen Eingang, meist für 12V, der alle LEDs mit Strom versorgt und je Farbe einen Anschluss für Masse, also GND.

Kleine Transistorkunde

Ein Transistor hat drei Anschlüsse: Collector, Emitter und Basis. Wir verwenden einen NPN Transistor, das bedeutet, dass unser Schalter normalerweise immer offen (NO oder normally open) ist, also keinen Strom vom Collector zum Emitter leitet. Um den Schalter zu aktivieren wird ein Signal an die Basis angelegt, nun wird die Collector-Emitter Strecke leitend.

Auf unsere Anforderungen abgeleitet heißt das, dass wir den Streifen zunächst einmal direkt mit Strom versorgen müssen, den können wir z.B. am Netzteil des Druckers abgreifen. Dann benötigen wir je Farbe einen NPN Transistor, für RGBW also vier Stück.

Am Collector des Transistors wird eine Farbe des LED Streifens angeschlossen, am Emitter GND, davon finden sich am Mainboard und Netzteil ausreichend geeignete Anschlüsse. Den PWM Pin unseres Mainboards müssen wir dann noch mit der Basis verbinden. Nun wird jedes Mal wenn der Pin ein Signal ausgibt auch der Weg für den Strom durch die LEDs frei, unser Streifen leuchtet.

In der Praxis braucht es in diesem vereinfachten Aufbau noch eine zusätzliche Komponente: Einen Basis (Vor-)Widerstand für den Transistor. Der sorgt dafür, dass der Transistor auch wirklich durchschaltet, wenn ein Signal anliegt und schützt unseren Transistor vor Überlastung. Ohne den Widerstand könnten nämlich, je nach Last die geschaltet wird, hohe Ströme von der Basis zum Emitter fließen. Die meisten Transistoren sind auf dieser Strecke aber nur für kleine Ströme ausgelegt und würden andernfalls zerstört.

Schaltplan

Im folgenden Schaltbild seht ihr den grundlegenden Aufbau unserer Steuerung. Links sind die Eingänge, also 12V vom Netzteil (Achtung, bei einem 24V Drucker nicht einfach einen 12V Streifen anschließen!) und die Steuersignale vom Mainboard (bezeichnet mit den Namen der Pins, die wir in diesem Tutorial verwenden). Rechts seht ihr die entsprechenden Ausgänge, die an den LED-Strip angeschlossen werden. In der Mitte die vier Transistoren mit jeweils einem Basiswiderstand. Die Seite mit dem Pfeil ist der Emitter, die alle über eine gemeinsame Leitung an GND angeschlossen sind.

Der Basiswiderstand kann übrigens nicht ganz beliebig gewählt werden. Zwar hat man eine gewisse Toleranz nach oben und unten, aber sowohl ein zu kleiner als auch ein zu großer Wert kann dazu führen dass die Schaltung nicht funktioniert oder die Transistoren überhitzen und zerstört werden.

Die Berechnung des geeigneten Vorwiderstands würde den Rahmen hier sprengen, da man einige Werte der Transistoren und den Strom, den die Verbraucher ziehen, kennen muss. Deshalb verlinke ich an dieser Stelle nur auf einen sehr guten Artikel bei mikrocontroller.net, nach dem auch ich mich gerichtet habe.

Ein Beispiel dazu möchte ich euch aber geben: Ich habe einen LED Streifen in der oberen Strebe des Druckers, also etwa 35-40cm lang. Alle Farben auf voller Helligkeit werden in der Regel nie gemeinsam an sein, daher habe ich mich nach den stromhungrigsten Farben (weiß und blau) orientiert. Sind die beiden gleichzeitig zu 100% an, zieht mein Streifen um die 200mA, bei nur einer Farbe um die 100-150mA. Nach einer Recherche im Datenblatt der Transistoren, die ich verwende, komme ich auf einen Widerstand von etwa 220Ω, der über diese Spanne im Mittel ganz gut passt.

Steuerung der LEDs über Marlin

Eher zufällig habe ich entdeckt, dass schlaue Entwickler doch tatsächlich schon eine Steuerung für verschiedene Arten von LEDs in die Firmware integriert haben. Wir müssen als gar nichts programmieren!

Das Feature findet sich in der configuration.h, ziemlich am Ende. Dort muss lediglich die Zeile für die verwendeten LEDs aktiviert werden und die verwendeten Pins sind anzugeben – das war es schon. So sieht das dann für unseren RGBW Streifen aus:

//#define RGB_LED
#define RGBW_LED

#if ENABLED(RGB_LED) || ENABLED(RGBW_LED)
  #define RGB_LED_R_PIN 5
  #define RGB_LED_G_PIN 4
  #define RGB_LED_B_PIN 6
  #define RGB_LED_W_PIN 44
#endif

Wenn dein verwendeter Streifen keine extra weißen LEDs hat, dann wird anstatt der zweiten Zeile die erste aktiviert. Ein Pin für weiß muss dann nicht definiert werden.

Wie man sieht habe ich die Pins 4, 5, 6 und 44 verwendet. Alle sind auf dem MKS Gen L PWM Pins. Die drei mit den niedrigen Zahlen sitzen in den den Blöcken Servos-1 und Servos-2, Pin 44 im Aux-2. Die untere Reihe des Servos-1 Blocks wird vom BLTouch belegt, daher wird der hier nicht verwendet.

Die Plug&Play Lösung

Während der Vorbereitung dieses Tutorials kam mir der Gedanke, dass vielleicht nicht jeder das hier gezeigte einfach umsetzen kann. Vom Schaltplan ist der Weg zur Platine mit der richtigen Software nicht mehr weit. Daher habe ich auf Facebook gefragt, ob Bedarf für eine fertige Plug&Play Lösung besteht. Mit weit über 90% war das Ergebnis recht eindeutig.

So ist dann das RGBW Plug&Play entstanden, das ihr ab sofort als komplettes Kit bei mir im Shop kaufen könnt.
Update: Die Kits, entweder zum selbst löten oder als fertig bestückte Platinen, sind leider ausverkauft. Ich habe aber noch einige der unbestückten Platinen auf Lager. Es würde sich leider nicht lohnen dafür nochmals Spannungsregler, Transistoren & Co nachzubestellen, da bei sehr kleinen Stückzahlen die Einkaufspreise der Teile sehr unattraktiv sind. Das ist euer Vorteil, denn wenn ihr eh einen gut gefüllten Vorrat an Komponenten daheim habt oder günstig an die Teile kommt, dann könnt ihr jetzt ab sofort die letzten Platinen günstig erwerben.

Der Clou des Boards besteht darin, dass neben einem einfachen Zusammenbau auch an die Stromversorgung gedacht wurde. Die meisten LED-Strips arbeiten nämlich mit 12V, können also an einen Drucker, der mit 24V arbeitet, wie der Tevo Tornado, nicht direkt angeschlossen werden. Zwar gibt es auch Strips für 24V, die sind aber meist teurer.

Daher sind im Kit nicht nur die Transistoren und Widerstände enthalten, sondern auch noch ein 12V Spannungsregler, der bis zu 2A liefern kann. Das Board kann also direkt am Netzteil angeschlossen werden und liefert am Ausgang die benötigten 12V. Aber auch für Drucker mit 12V Netzteil oder 24V Streifen ist es geeignet, da man einfach per Jumper den Regler umgehen und die Spannung direkt vom Eingang zum Ausgang durchschleifen.

War das Tutorial nützlich für dich?

Dir hat das Tutorial gefallen, du konntest es für dich selbst umsetzen oder den entscheidenden Anstoß für dein Projekt mitnehmen? Das freut mich!

Wenn du magst, kannst du dich mit einem Kaffee erkenntlich zeigen.

Kennst du die schon?

12 Kommentare zu „RGB(W) Beleuchtung als Statusanzeige mit Marlin“

  1. Schalbetter Christoph

    Hallo,

    Wie werden die Kabel mit einem Raspberry Pi 4 verdrahtet, so das die Steuerung über Octoprint hergestellt werden kann.
    Vielen Dank.

    Lg aus der Schweiz

  2. Hallo, wissen Sie ob Ich auch bei einem GT2560 V4.0 einen PWM Übrig habe? und wenn ja wo anschließen? Ist ein Geeetech A20M. finde dazu nix im Netz!

    MFG

    1. Hallo Philipp,

      also ich kenne das GT 2560 auch nicht genauer, aber soweit ich das in der offiziellen Dokumentation erkennen kann, hat das Board nur einen frei konfigurierbaren PWM Anschluss. Zwar sind noch drei Lüfter-Anschlüsse vorhanden, die ebenfalls PWM unterstützen aber mindestens einen oder zwei davon wird der Drucker ja bereits verwenden. Ich denke man könnte die prinzipiell zweckentfremden und die Firmware so anpassen, dass du dort LEDs anschließen kannst. Aber wie gesagt, wenn schon Lüfter drauf sind, geht das natürlich nicht.

      Die Alternative wäre sonst ein adressierbarer WS2812 (Neopixel) Streifen. Der braucht nur einen Datenpin und der muss nicht zwingend analog, als PWM-fähig, sein.

  3. Burkhard Kneiseler

    Hallo Kevin,

    habe meinen Tornado jetzt ja auf das SKR1.4 Turbo umgebaut. Läuft auch alles sehr gut Allerdings hab ich da jetzt das Problem, dass ich nicht finde, wie ich Dein RGBW-Controller anschließen kann. Weißt Du zufällig, wie ich herauskriegen kann, welche Pins dort genutzt werden könnten?
    Ich weiß, sehr spezielle Frage, aber auf dem Port finde ich nur ein Pin für die Ansteuerung der Neopixel-LEDs. Leider ist nicht wirklich ersichtlich, welche PINS PWM bieten (oder einfach nur zu Blind, sie zu finden).

    Vielleicht hast Du da ja nen Tipp.

    Viele Grüße

    Burkhard

    1. Hallo Burkhard,

      ich musste da auch selbst erstmal suchen. Es gibt ja inzwischen so viele Varianten. Ich war schon drum und ran, meinen Kontakt von BigTreeTech in China anzuschreiben. Aber ich denke, jetzt bin ich doch fündig geworden.

      Leider ist es so, dass bei vielen aktuellen 32bit Boards keine ausreichenden PWM Pins mehr verfügbar sind, zumindest werden sie nicht in Anschlüssen nach außen geführt. Einige haben halt dafür einen speziell gekennzeichneten Neopixel-Header. Wenn ich aber das richtige Pinout gefunden habe, dann müsste das SKR 1.4 Turbo stattdessen aber tatsächlich einen eigenen RGB Anschluss haben. Kannst du bestätigen, dass auf deinem Board die Bezeichnung BTT002 steht? Dann gilt dieses Pinout hier. Da siehst du den RGB Anschluss. Sollte also gehen, nur fehlt halt der Pin für weiß, ist wirklich nur RGB und kein RGBW. Aber besser als nichts.

      1. Burkhard Kneiseler

        Hallo Kevin,

        leider nein, dass Btt002-V1 ist ein neueres Board, anscheinend speziell für Prusa-Drucker. Ich besitze dieses Pinout hier. Dann werde ich wohl in den sauren Apfel beißen müssen und mir Neopixel-LEDs zulegen müssen. Schade.

        Viele Grüße

        Burkhard

        1. Hmm okay. Alles sehr übersichtlich mit den Boards bei BTT – nicht 😀

          Dann sehe ich da derzeit keine Möglichkeit, außer NeoPixel. Aber ich hab die inzwischen ja auch am Drucker, weil bei meinem MKS SGEN_L Mainboard das gleiche Problem besteht und kann dir sagen, die sind auch sehr cool, vor allem, weil sie einzeln adressierbar sind. Gibt dann schöne Animationen beim Aufheizen usw. Du bekommst die inzwischen auch recht günstig. Such am besten nicht nach NeoPixel, das ist eigentlich eine Marke von Adafruit, sondern einfach nach WS2812B LED Streifen. Ist technisch genau das gleiche. Und der Anschluss ist viel simpler, gibt ja nur drei Kabel.

  4. Rainer König-Hawes

    Hallo,
    Welche LED – Strips muss ich bestellen?

    Die angegebenen gibt es bei Amazon nicht mehr.

    Bitte Reichelt Type, ich bestelle so etwas nur dort.

    Die Platine bestelle ich jetzt trotzdem schon einmal.

    Mit freundlichen Grüßen.
    Rainer König-Hawes

    1. Hallo Rainer,

      danke für deine Bestellung, ist bereits angekommen und in Bearbeitung.

      Zu deiner Frage: Bei Reichelt könntest du bspw. diesen Streifen bestellen. Bei dem sind die weißen LEDs kaltweiß. Gibt dort aber auch noch einen mit warmweißen LEDs, wenn dir das besser gefällt.

      Viel Spaß mit dem Kit!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.