Starter Kit Projekt 4 Farbmischende Lampe

Hallo Arduino-Foristen,

ich habe ein Problem mit dem 4. Projekt aus dem Starter Kit (15 Projekte, Arduino Uno).

Ich habe den Schaltkreis gebaut und das Sketch programmiert. Die farbmischende LED leuchtet auch schön pink, aber es ändert sich nichts, wenn ich die Photowiderstände mit den mitgelieferten Farbfolien abdecke oder die Widerstände mit einer Taschenlampe beleuchte. Das Licht bleibt pink. Im Monitor werden zwar Veränderungen wahrgenommen, aber sie haben keine Auswirkungen auf das Licht.

Was mache ich falsch? Oder wie sollte sich die LED überhaupt verändern, wenn ich sie mit rotem Licht anstrahle oder alle / einen Photowiderstände abdecke?

Anbei findet ihr den Code und ein Bild vom Schaltkreis (ich hoffe, man kann es erkennen):

const int greenLEDPin = 9;
const int redLEDPin = 11;
const int blueLEDPin = 10;

const int redSensorPin = A0;
const int greenSensorPin = A1;
const int blueSensorPin = A2;

int redValue = 0;
int greenValue = 0;
int blueValue = 0;

int redSensorValue = 0;
int greenSensorValue = 0;
int blueSensorValue = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  
  pinMode(greenLEDPin,OUTPUT);
  pinMode(redLEDPin,OUTPUT);
  pinMode(blueLEDPin,OUTPUT); 
}

void loop() {
  // put your main code here, to run repeatedly:
  redSensorValue = analogRead(redSensorPin);
  delay(5);
  greenSensorValue = analogRead(greenSensorPin);
  delay(5);
  blueSensorValue = analogRead(blueSensorPin);
  delay(5);

  Serial.print("Raw Sensor Values \t Red: ");
  Serial.print(redSensorValue);
  Serial.print("\t Green: ");
  Serial.print(greenSensorValue);
  Serial.print("\t Blue: ");
  Serial.println(blueSensorValue);

  redValue = redSensorValue/4;
  greenValue = greenSensorValue/4;
  blueValue = blueSensorValue/4;

  Serial.print("Mapped Sensor Values \t Red: ");
  Serial.print(redValue);
  Serial.print("\t Green: ");
  Serial.print(greenValue);
  Serial.print ("\t Blue: ");
  Serial.print(blueValue);

  analogWrite(redLEDPin, redValue);
  analogWrite(greenLEDPin, greenValue);
  analogWrite(blueLEDPin, blueValue);


}

Gratulation; Optimale Infos und Fehlerbeschreibung!
kann mal keinen Fehler ausmachen.
Welche Werte wenden Dir auf das Terminal ausgegeben?

Grüße Uwe

Hallo Uwe,
Danke!

Bild oben: Werte am Fenster sitzend (graues Wetter :wink: )

Bild unten: Wenn ich den Finger auf alle Fotowiderstände lege. Die funktionieren also.

Hi

Wenn Du alle Werte gleichermaßen änderst, wird sich nur die Helligkeit, nicht die Farbe ändern.
Text-Ausgaben kann man übrigens prima als Text hier einfügen :wink:

Die LDR sind nicht sonderlich farbabhängig, wenn Du alle LDR mit der gleichen Folie abdeckst, ändert sich ebenfalls nur die Farbe.

MfG

Hi,

okay, im Dunkeln funktioniert es etwas besser. Da kommt das Dimmen besser durch. Aber ein strahlendes Rot oder Blau habe ich noch nicht hingekriegt. Liegt das an der farbmischenden RGB-LED, dass da immer viel "weiß" mit drin ist? Ich bekomme eher hellblau und hellrot hin. Hellgrün gar nicht, aber das kann auch an meinen Augen liegen :wink:

Vielen Dank euch!

Und guten Rutsch (nachträglich).

Hi

Wo bist Du her, daß Du schon 'gerutscht' bist?
Da die einzelnen LDR jeweils die Menge der entsprechenden Farbe vorgeben, hast Du auch immer alle Farben, zumindest ein Wenig davon, mit in der Ausgabe.

Du könntest versuchen, das Programm so umzuschreiben, daß die Helligkeit aller drei LDR erfasst wird, und Der, Der sich (weit) unterhalb der beiden Anderen befindet, bestimmt, welche Farbe Du 'runter zählst'.
Wenn Du den blauen LDR zuhältst, wird Dessen Analog-Wert um Einiges kleiner sein, als Die von Rot und Grün.
Nun kannst Du diese Information dazu nutzen, 'Blau' runter zu zählen - wenn die Farbe (als Byte) unter Null kommt, fängt Sie wieder bei 255 an.

Das mit allen drei LDRs, und Du kannst die Ausgangs-Farbe durch zuhalten EINES LDR beeinflussen.

MfG

Du kannst mit map() auch einen größeren PWM Bereich berechnen.

Wenn sich ein LDR von zB 500 bis 900 bewegt kannst Du diesen Bereich als PWM nehmen.
zB:

blueSensorValue = analogRead(blueSensorPin);
...
blueValue = map(blueSensorValue, 500 , 900, 0, 255);
..
analogWrite(blueLEDPin, blueValue);

Grüße Uwe