RGB Controller mit dem Arduino Uno

Guten Abend,
habe mich nun hier angemeldet in der Hoffnung ein bisschen Unterstützung zu erhalten, möchte aber nicht alles vergekaut bekommen. 8)

Ich habe 15 RGB SMDs (wird aber auf 50 aufgestockt), die jeweils einzeln
auf einer Platte befestigt sind (rund und 2cm durchmesser). Unter dieser
Platte ist eine Lochrasterplatine auf der jeweils 3 Widerstände
aufgelötet sind an den Kathoden und einmal eine gemeinsame Anode. Das beides zusammen
steckt in einer Röhre, oben kommt das Licht raus und unten das
Stromkabel. Das heißt also ich habe jede SMD-Farbe einzeln mit
Widerständen verbunden.

Nun möchte ich die ganzen gebauten Spots parallel schalten und
ansprechen. Stelle mir also eine Bedieneinheit wie auf dem Bild
Controller.png vor.
Ein Arduino verträgt aber nur 5V und die SMDs sind auf 12V ausgelegt
(mit den Widerständen).

Wie gehe ich da vor und wie schliesse ich das ganze an einem Arduino an?
Ich füge noch einen FritzingSketch an, damit ihr wisst wie weit ich
schon gekommen bin, wäre nett wenn ihr schauen könntet ob die Verkabelung so weitest gehend richtig ist.

Habe übrigens Transistoren statt MOSFETS genommen, da ich gelesen habe, dass MOSFETS nicht geeignet sind zum Regeln von 0-100%

Habe auch noch Probleme die 16 Taster anzuschliessen und bin mir bei den 3 Dreh-Encoder
nicht sicher.
Über die 16 Taster sollen übrigens 10 Farben und 6 Modusse ausgewählt
werden.

Was sagt ihr zu der restlichen Schaltung, ist sie soweit korrekt und
habe ich durch die 12V die Dort anliegen auch die benötigten 12V an den SMDs?

Für den Anfang habe ich auch schonmal ein kleines Porgramm geschrieben, dass 2 Modusse abdeckt. Vielleicht könnte da ja auch mal jemand drüber schauen.

    int pinR = 9; //Rot an Pin 9
   int pinG = 10;//Grün an Pin 10
   int pinB = 11;//Blau an Pin 11
   
   void setup(){
pinMode (pinR, OUTPUT)
pinMode (pinG, OUTPUT)
pinMode (pinB, OUTPUT)
}

    void loop(){
//Feste Farben      
      //Rot
      analogWrite(pinR,0)
      analogWrite(pinG,255)
      analogWrite(pinB,255)
      //Gruen
      analogWrite(pinR,255)
      analogWrite(pinG,0)
      analogWrite(pinB,255)
      //Blau
      analogWrite(pinR,255)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      //Magenta
      analogWrite(pinR,0)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      //Tuerkis
      analogWrite(pinR,255)
      analogWrite(pinG,0)
      analogWrite(pinB,0)
      //Yellow
      analogWrite(pinR,0)
      analogWrite(pinG,0)
      analogWrite(pinB,255)
      //Weiss
      analogWrite(pinR,0)
      analogWrite(pinG,0)
      analogWrite(pinB,0)
      //Orange
      analogWrite(pinR,0)
      analogWrite(pinG,50)
      analogWrite(pinB,255)   
      //Braun
      analogWrite(pinR,50)
      analogWrite(pinG,50)
      analogWrite(pinB,255)
      //dunkelLila
      analogWrite(pinR,50)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      
      
//Modusse   
//Harte Übergänge
//R->G->B
      //R
      analogWrite(pinR,0)
      analogWrite(pinG,255)
      analogWrite(pinB,255)
      delay(1000)
      //G
      analogWrite(pinR,255)
      analogWrite(pinG,0)
      analogWrite(pinB,255)
      delay(1000)
      //B
      analogWrite(pinR,255)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      delay(1000)
      
//Harte Übergänge
//R->G->B->M->T->Y->W
      //R
      analogWrite(pinR,0)
      analogWrite(pinG,255)
      analogWrite(pinB,255)
      delay(1000)
      //G
      analogWrite(pinR,255)
      analogWrite(pinG,0)
      analogWrite(pinB,255)
      delay(1000)
      //B
      analogWrite(pinR,255)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      delay(1000)
      //M
      analogWrite(pinR,0)
      analogWrite(pinG,255)
      analogWrite(pinB,0)
      delay(1000)
      //T
      analogWrite(pinR,255)
      analogWrite(pinG,0)
      analogWrite(pinB,0)
      delay(1000)
      //Y
      analogWrite(pinR,0)
      analogWrite(pinG,0)
      analogWrite(pinB,255)
      delay(1000)
      //W
      analogWrite(pinR,0)
      analogWrite(pinG,0)
      analogWrite(pinB,0)
      delay(1000)
      
//WEICHE ÜBERGÄNGE


//R->G->B

//R->G->B->M->T->Y->W     
      




}

Würde mich freuen wenn ihr mir helfen würdet.

Gruß
Fkhm

Edit: Habe das Programm noch etwas erweitert und die festen Farben festgelegt. Bei den Modussen der delay von 1000ms soll noch durch die Variable Standzeit ersetzt werden, die dann mittels Drehencoder eingestellt wird.

Controller.png

Bei gemeinsamer Anode brauchst du PNP Transistoren:

Wenn ich das richtig lese, hast du den Emitter auf Masse. Das heißt du hast entweder NPN Transistoren oder PNPs falsch angeschlossen. Wobei das generell sehr komisch aussieht. Die Basis muss über den Widerstand auf einen Arduino Pin. Der Emitter kommt bei PNP an Plus und bei NPN an Masse. Und der Kollektor an die LEDs.

Also dann so wie jetzt? Funktioniert dann darüber auch das Faden wenn ich an den PWM pins Werte von 0-255 angebe, also 0-5V?

Edit: Habe grad gesehen dass man am besten statt RGB HSV benutzt, da man dann besser Helligkeit usw. einstellen kann? Ist das so kompliziert wie es aussieht oder ist es eigentlich ganz einfach?

Ich verstehe leider die Schaltung der Potentiometer nicht. Den Mittelabgriff legst Du auf Masse und die beiden "Enden" des Widerstandes legst Du auf je zwei Pins. Was soll das bringen?
Auch die Schaltung mit den 16 Tastern die 5V über einen Widerstand mit Masse verbinden ist mir nicht ganz klar.

Falls das Dinge für "Später" sind, lass sie in der Zeichnung weg. Wenn noch nicht ganz klar ist, wie bestimmte Dinge funktionieren, dann konzentriere Dich auf eine Sache und male auch nur dafür die Schaltung. Die dann aber vollständig. Bei den RGB LEDs solltest Du wenigstens eine pro Farbe mit einzeichnen, damit klar ist wie die LEDs angeschlossen werden.

Achso, wenn Du das Bild der Schaltung ein wenig verkleinerst, hilft uns das auch, dann sieht man alles auf einen Blick und muss nicht scrollen. 1024x768 reichen völlig aus.
Mario.

mkl0815:
Ich verstehe leider die Schaltung der Potentiometer nicht. Den Mittelabgriff legst Du auf Masse und die beiden "Enden" des Widerstandes legst Du auf je zwei Pins. Was soll das bringen?
Auch die Schaltung mit den 16 Tastern die 5V über einen Widerstand mit Masse verbinden ist mir nicht ganz klar.

Falls das Dinge für "Später" sind, lass sie in der Zeichnung weg. Wenn noch nicht ganz klar ist, wie bestimmte Dinge funktionieren, dann konzentriere Dich auf eine Sache und male auch nur dafür die Schaltung. Die dann aber vollständig. Bei den RGB LEDs solltest Du wenigstens eine pro Farbe mit einzeichnen, damit klar ist wie die LEDs angeschlossen werden.

mkl0815 Schreibt doch daß das Drehencoder sind. Also ist das so richtig.
Die Taster haben unten ein unscheinbaren Text "2x74hc165) also Schieberegister die noch verdrahtet werden müssen.
Grüße Uwe

Serenifly:
Bei gemeinsamer Anode brauchst du PNP Transistoren:
http://www.bristolwatch.com/picaxe/images/8leds_common_anode_xsistor.gif

Wenn ich das richtig lese, hast du den Emitter auf Masse. Das heißt du hast entweder NPN Transistoren oder PNPs falsch angeschlossen. Wobei das generell sehr komisch aussieht. Die Basis muss über den Widerstand auf einen Arduino Pin. Der Emitter kommt bei PNP an Plus und bei NPN an Masse. Und der Kollektor an die LEDs.

Bei gemeinsamer Anode und alle LED gleichzeitig schalten hast Du recht.
Da bei RGB-LED, wo die Anode zusammengeschaltet wird, dies aber NIE der Fall ist, weil man ja die Farben ändern will und jede einzelnes LED sprich Kathode ansteuern muß, ist da, was Du vorschlägst, falsch.

@fkhm
Für die Steuerung der RGB LED mit gemeinsamer Anode wird die Anode auf + Versorgungspannung geschaltet und die 3 Kathoden mittels NPN oder N-MOSFET auf Masse gezogen. Soweit ist Deine erste Schaltung (Fast) richtig. NPN Transistoren brauchen einen Basiswiderstand zwischen Arduino Ausgang und Basis ansonsten schließt der Transistor den Arduinoausgang kurz.
Des weiteren verstehe ich, nicht wieso Du die LED mit 12V betreiben willst. In jeder Röhre ist ja nur 1 LED und bei einer Durchlaßspanung von max 3,4V für blau kannst Du die RGB-LED ohne Probleme mit 5V betreiben. Bei 12 V muß Du viel mehr Leistung an den Vorwiderständen verbraten.
Da jede LED 20mA max Durchlaßstrom hat ergibt sich bei 50 LED maximal 1A. ALs Transistor brauchst Du entweder einen Darlington-Leitungstransistor wie zB den TIP120 oder einen LogicLevel N-MOSFET.

Habe übrigens Transistoren statt MOSFETS genommen, da ich gelesen habe, dass MOSFETS nicht geeignet sind zum Regeln von 0-100%

Das ist falsch. NPN und N-MOSFETs funktionieren in diese Anwendung geleich gut.

Edit: Habe grad gesehen dass man am besten statt RGB HSV benutzt, da man dann besser Helligkeit usw. einstellen kann? Ist das so kompliziert wie es aussieht oder ist es eigentlich ganz einfach?

Die LED werden immer mit RGB angesteuert. Wenn Du als Eingabeparameter HSV nehme willst dann kannst Du das machen aber bei 16 Tastern und 3 Drehencodern ohne Display oder Fernsteuerung von PC, Smartphon oder ähnlichem ist die interne Benutzung von HSV meines Erachtens sinnlos und unnötig aufwändig. Du muß sowieso am ende HSV auf RGB umrechnen un die LEDs anzusteuern.

Grüße Uwe

Entschuldigt das ich erst jetzt schreibe, der Tag war nur so mit Terminen voll gestopft.
Ich habe jetzt die PNP-Transistoren wieder durch NPN ersetzt und neu verkabelt, bin mir nur nicht sicher ob ich den Emitter an + oder an GND, also -, anschliessen muss?

Des weiteren verstehe ich, nicht wieso Du die LED mit 12V betreiben willst. In jeder Röhre ist ja nur 1 LED und bei einer Durchlaßspanung von max 3,4V für blau kannst Du die RGB-LED ohne Probleme mit 5V betreiben. Bei 12 V muß Du viel mehr Leistung an den Vorwiderständen verbraten.
Da jede LED 20mA max Durchlaßstrom hat ergibt sich bei 50 LED maximal 1A. ALs Transistor brauchst Du entweder einen Darlington-Leitungstransistor wie zB den TIP120 oder einen LogicLevel N-MOSFET.

Die 12V da ich ja mit den RGBs verschiedene Farben darstellen werde, z.B. weiß, für weiß habe ich dann also R,G und B auf voller Leistung, wäre somit über 5V. Desweiteren ziehen sie pro Farbe bis zu 30mA. Wären bei weiß 90mA, bei einem 3A Netzteil könnte ich also maximal 33 SMDs daran betreiben, und ich glaube kaum das der Arduino 3A aushält.

Schreibt doch daß das Drehencoder sind. Also ist das so richtig.
Die Taster haben unten ein unscheinbaren Text "2x74hc165) also Schieberegister die noch verdrahtet werden müssen.
Grüße Uwe

Genau, es sind Drehencoder. Freut mich das wenigstens die richtig angeschlossen sind.

Die Taster haben unten ein unscheinbaren Text "2x74hc165) also Schieberegister die noch verdrahtet werden müssen.
Grüße Uwe

Ich habe im Fritzing Programm leider keinen 74hc165 gefunden, der hc595 ist ja als Output gedacht und der 165 als Input, daran hängts momentan noch, und eben ob, so wie es jetzt ist, die Schaltung mit den Transistoren und den 3 PWM Ports funktioniert. Kann jemand etwas zu dem "Sketch" sagen? Bin ich auf dem richtigen weg?

Sorry für die Verwirrung :confused: War etwas spät :confused:

Der Emitter kommt an bei NPN Masse. Bei dir ist es von oben nach unten C-B-E:

Ist also noch vertauscht.

Aber diese kleinen NPNs machen wie schon gesagt maximal 500mA, besser eher weniger. Mit einem FET liegst du am besten, z.B. IRLZ44, IRLU024 oder IRLD024. TIP120 wurde auch genannt, aber der hat auch ein großes TO220 Gehäuse. Also nicht unbedingt besser.

Die 12V da ich ja mit den RGBs verschiedene Farben darstellen werde, z.B. weiß, für weiß habe ich dann also R,G und B auf voller Leistung, wäre somit über 5V. Desweiteren ziehen sie pro Farbe bis zu 30mA. Wären bei weiß 90mA, bei einem 3A Netzteil könnte ich also maximal 33 SMDs daran betreiben, und ich glaube kaum das der Arduino 3A aushält.

  1. Bei RGB LEDs addiert sich nicht die Spannung du brauchst. Das sind im Prinzip 3 separate LEDs in einem Gehäuse.

  2. Du darfst die LEDs natürlich nicht an die 5V des Arduinos anschließen. Korrekt.

Aber du kannst auch statt dem 12V Netzteil gleich ein 5V Netzteil nehmen. Oder noch einen Step Down Wandler dazwischen bauen (ebay: LM2596) wenn du schon ein Netzteil hast und kein neues kaufen willst.

Bei 12V fallen maximal etwas über 10V an den Widerständen ab (bei rot). Macht bei 30mA, 0,3W. Damit liegst du schon über den kleinen 1/4W Widerständen. Kannst natürlich auch 1W oder 2W Widerständen verbauen.

Zur Schaltung. Die Emettitoren der Transistoren mußt Du auf Masse (minus) schalten. Du schaltest beide (Anode und Transistor) auf +.
Ich nehme an daß die Vorwiderstände der LED auf der jeweiligen Platine sind.

Die 12V da ich ja mit den RGBs verschiedene Farben darstellen werde, z.B. weiß, für weiß habe ich dann also R,G und B auf voller Leistung, wäre somit über 5V. Desweiteren ziehen sie pro Farbe bis zu 30mA. Wären bei weiß 90mA, bei einem 3A Netzteil könnte ich also maximal 33 SMDs daran betreiben, und ich glaube kaum das der Arduino 3A aushält.

Entweder Du schaltest die einzelnen LED des RGB-LED in Reihe oder Paralell. Beides gleichzeitig geht nicht. Wenn Du LED mit gemeinsamer Anode hast, kannst Du sie nicht in Reihe schalten. Somit ist die Max notwendige Spannung von den einzelnen Durchlaßspannungen abhängig und nicht von deren Summe. Die Ströme addieren sich bei Paralellschaltung.

Grüße Uwe

Die einzelnen Leds werden parallel geschaltet, im Notfall müsste ich die Widerstände für Rot neu löten und 1W Widerstände nehmen, das hatte ich nicht bedacht, oder ich speise einfach nur 9V ein, verlieren sie zwar etwas an Helligkeit wäre aber zu verkraften.

Aber dann adieren sich die Ströme doch, wenn ich sie parallel geschaltet habe. Da in der SMD 3 LED sind die parallel laufen, hätte ich dort schon max. 90mA, und dann eben alle Leds die zum Einsatz kommen x90mA = max. 3000mA. So hatte ich das jetzt gedacht.

Habe es jetzt auf N-Mosfets geändert, hoffe Gate und Drain und Source sind richtig angeschlossen.

Edit: von oben nach unten: Gate, Drain, Source

Du schaltest jeweils alle LEDs einer Farbe parallel wenn ich das richtig sehe. 3A wären das nur bei weißer Farbe, wenn alle voll an sind.

Die Reihenfolge GDS ist korrekt.

Mit den Widerständen geht das aber anders, da die nicht über Strom gesteuert werden. Rein Theoretisch brauchst du gar keine im Eingang. Besser ist aber 20-100k von Gate nach Masse, sowie etwa 1k zwischen Gate und Arduino. Muss hier nicht super genau sein.

Hängt nicht die Reihenfolge der Anschlüssse vom Modell des MOSFET ab? Welchen MOSFET benutzt fkhm?
Grüße Uwe

Von der Gehäuse-Form ja, aber GDS ist bei N-Kanal in TO220 und ähnlichen Gehäusen die Regel.

Deshalb ist es bei sowas auch besser ein richtiges Schaltbild zu zeichnen statt einen Verdrahtungsplan :slight_smile: Dann ist man von den genauen Bauteilen unabhängig.