RGB LEDs ansteuern PNP Transistor

Hallo,
habe folgendermaßen meine Schaltung aufgebaut. Die Led Widerstände habe ich selbsverständlich in meiner echten Schaltung berücksichtigt. Statt den NPN Transistoren auf dem Bild habe ich PNP genommen.
Die Schaltung funktioniert auch, blos wenn ich Grün und Rot mische, dann flackert es…

Habe ich alles richtig angeschlossen? Ich habe auch gelesen das ich einen Basiswiderstand für den Transistor brauche, kann mir da jemand beim ausrechenn behilflich sein, oder kann es nichts mit dem flackern zutun haben?

hier mal das Bild und der Code.

http://img440.imageshack.us/img440/7278/bfjf.jpg

/*
_____ .__ __ .__
/ _||/ ||| ____ ____
\ \ __ \ \ _ / |/ \ / \
| | | | / || | / /| | | / /
/ >
|
| |
| |
||| /___ _
|
| /___ /
/ ///
__ __ __ .
__
_/ | / | ___________ | | _||/ |
/ /\ _ \ __ \ / __ _ __ \ | |/ / \
_
\ | | / __ | | /| | \ /| | / | <| || |
/
> |
| (
/
| |
| _
_ >| ||
__||__|
/ / / /

Example RGB LED Fader
Autor Stefan Hermann
Date 16.06.2011

Description This example lets you fade through the colors of a RGB LED.

*/

int LEDGreen=9;
int LEDBlue=10;
int LEDRed=11;

int sensorPin=0;
int val;

void setup(){
Serial.begin(9600);
pinMode(LEDRed,OUTPUT);
pinMode(LEDGreen,OUTPUT);
pinMode(LEDBlue,OUTPUT);
}

void loop(){

val=map(analogRead(sensorPin),0,1024,0,900);
Serial.println(val);
if (val<150) {
analogWrite(LEDRed,0);
analogWrite(LEDBlue,255);
analogWrite(LEDGreen,255);
} else if (val<300) {
analogWrite(LEDRed,map(val,150,300,0,255));
analogWrite(LEDBlue,map(val,150,300,255,0));
analogWrite(LEDGreen,255);
} else if (val<450) {
analogWrite(LEDRed,255);
analogWrite(LEDBlue,0);
analogWrite(LEDGreen,255);
} else if (val<600) {
analogWrite(LEDRed,255);
analogWrite(LEDBlue,map(val,450,600,0,255));
analogWrite(LEDGreen,map(val,450,600,255,0));
} else if (val<750) {
analogWrite(LEDRed,255);
analogWrite(LEDBlue,255);
analogWrite(LEDGreen,0);
} else if (val<900) {
analogWrite(LEDRed,map(val,750,900,255,0));
analogWrite(LEDBlue,255);
analogWrite(LEDGreen,map(val,750,900,0,255));
}
delay(10);
}

MfG

Du brauchst nicht nur Basiswiderstände, sondern auch Vorwiderstände für die LEDs. Letztlich fehlen uns auch noch Informationen, welchen Transistor du verwendest. Wenn ich das jetzt nicht total falsch überlegt habe, verwendest du doch RGB-LEDs mit gemeinsamer Anode, musst also Masse schalten. Das macht man mit einem NPN, warum nimmst du was anderes?

hallo,
wie gesagt vorwiderstände habe ich, blos nicht auf dem Bild...
Mit NPN hab ichs probiert, hatte nicht funkitoniert.

Transistoretn sind bc557c

habe nun herausgefunden das das flackern mehr oder weniger am code liegt. Kennt jemand noch einen anderen funktionierenden code mit dem ich mit einem Potentiometer meine RGB Led steuern kann?

gruß

okay habe gerade ienen anderen code ausprobiert, es flackert immernoch.
muss ich vielleicht die basis des transistors mit nem 10Kohm Widerstand gegen masse schalten so wie einen PullDown Widerstand oder an was könnte das noch liegen?

Pulldowns sind hier eigentlich nicht nötig. Solange der Arduino angeschlossen ist, hast du ein definiertes Potential.

Basiswiderstände kannst du Näherungsweise mit ca. 1k annehmen. Da ist sowieso immer viel geschätzt und muss nicht super genau sein.

Hast du mal mit Serial getestet ob der eingelesene Wert vom Poti schwankt auch wenn man nichts dreht? Wenn ja, mache mehrere Messungen und nimm das arithmetische Mittel.

ja der Poti schwankt...
Wie mache ich das, hast du einen Beispielcode?

mfg

Einfach eine for-Schleife:

const int MEASUREMENTS = 5;      //Anzahl der Messungen

void loop()
{
  int val = 0;
  for(int i = 0; i < MEASUREMENTS; i++)
  {
         val = val + analogRead(sensorPin);
         delay(10);              //den Wert kann man vergrößern um es evtl. stabiler zu machen
  }

   val = val / MEASUREMENTS;
   val = map(val,0,1024,0,900);

    .....
}

Also eine RGB Led mit einem Poti zu steuern, war mir irgend wie zu wenig.
Ich wollte die Farben einzeln einstellen.
Bei dem Kit waren aber nur zwei Potis dabei und ich war zu faul um ein anderes zu suchen.

Deshalb hab ich das so gemacht, zwei Taster und ein Poti.
Das Poti regelt immer rot.
Zuerst Taster 1 betätigen und halten, Farbe einstellen, Tatser 2 betätigen und halten, Farbe einstellen, dann zuletzt noch rot einstellen.

Ok, ist was ganz anderes als so ein Lauflicht...aber ich schreib es trotzdem mal hier rein.
Als Anfänger (Arduino Uno seit Heiligabend) kenne IF, FOR, ELSE usw. noch aus den C64 Zeiten (ja ich bin so alt!), hatte mal einen C-Control von Conrad aber ansonsten ist das doch recht neu für mich.
Also nicht gleich erschlagen :smiley: (aber es funktioniert...sozusagen)

int LedG = 10;                           
int LedR = 11;                             
int LedB = 9;
int potPin = 0;                             
int Tast1 = 2;
int Tast2 = 3;


void setup(){
  pinMode(LedR,OUTPUT);                          
  pinMode(LedG,OUTPUT);                          
  pinMode(LedB,OUTPUT);     
  pinMode(Tast1,INPUT);                                        
  pinMode(Tast2,INPUT); 
}

void loop(){
 
  if (digitalRead(Tast1)==LOW) {
    int value = analogRead(potPin);            
    int greenValue = map(value,0,1023,0,255); 
    analogWrite(LedG,greenValue); 
    int redValue = 0;
}
  else if (digitalRead(Tast2)==LOW) {
    int value = analogRead(potPin);            
    int blueValue = map(value,0,1023,0,255); 
    analogWrite(LedB,blueValue); 
    int redValue = 0;
}

else {
  int value = analogRead(potPin);            
  int redValue = map(value,0,1023,0,255);    
    
  analogWrite(LedR,redValue); 
       
}
}

Hallo arduflo,
nochmal zu deiner Schaltung, du hast die Transitoren in Kollektorschaltung das funktioniert ohne Widerstände aber ist kein richtiger Stromverstärker.
Beispiel Arduino kann an seinem Ausgang maximal ca.8mA bereitstellen eine RGB-Led hat für jede Farbe einen Nennstrom von Ca. 20mA das macht bei 4 parallelen Led = 80mA das wird in der Kollektorschaltung nicht richtig Funktionieren.
Besser die Emitterschaltung mit Vorwiderstand und Lastwiderstand.
Berechnung Basiswiederstand: Ausgangsspannung von Arduino (5V) minus Basisspannung Transitor ca. (0,7V) Dividiert durch (maximaler Laststom LED´s Dividiert durch Verstärkungsfaktor Transitor) = Basisstrom) gleich Vorwiderstand in der Basis.
als Formel Rv= (Uarduino-Ube) / (max.ILast / Hfe**)**
Hoffe das kann man Verstehen. (Formeln lassen sich schlecht schreiben mit normalen Text.)
Kollektorwiderstand = (Uversorgung - Uf LED) / I LED
Beispiel : Uversorgung = 5V, UF LED Rot = 1,9V, I LED = 0,08A (4*20mA)=80mA=0,08A
R=U/I
R= (5V-1,9V) / 0,08A
R= 38,75 Ohm
Rnorm = 36 Ohm oder 39 Ohm nach E24 Norm
Gruß Heiko