Arduino – RGB LED
Een RGB LED zijn eigenlijk 3 halfgeleiders (LED’s) in 1 behuizing:
De kleuren zijn dan Rood, Groen, Blauw, waarmee je vrijwel alle kleuren van de regenboog kan maken als je deze kleuren combineert:
In de meeste gevallen heeft de RGB led een gezamelijke kathode (common cathode), je ziet veel voorbeelden met 3 weerstanden in de anode aansluitingen, maar waarom niet 1 weerstand via de kathode aansluiting?, dat is uiteraard ook mogelijk.
Het aansturen gaat dan via de digitale poort en wordt PWM toegepast om kleuren te dimmen, sluit het volgende aan via onderstaand schema:
LEDpin RoodĀ Ā naar Arduino 9
LEDpin Groen Ā naar Arduino 10
LEDpin BlauwĀ naar Arduino 11
LEDpin GNd naar Arduino GND
LET OP: Let goed op de aansluitcontacten van uw eigen LED, deze kunnen afwijken!!
Dit is een voorbeeld code om de basiskleuren automatisch te laten wisselen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// RGB LED - automatische kleuren wisseling RGB int rodePin = 9; int groenePin = 10; int blauwePin = 11; int wachttijd = 500; // in ms void setup() { pinMode(rodePin, OUTPUT); pinMode(groenePin, OUTPUT); pinMode(blauwePin, OUTPUT); } void loop() { digitalWrite(rodePin, HIGH); delay(wachttijd); digitalWrite(rodePin, LOW); digitalWrite(groenePin, HIGH); delay(wachttijd); digitalWrite(groenePin, LOW); digitalWrite(blauwePin, HIGH); delay(wachttijd); digitalWrite(blauwePin, LOW); } |
Dit is een voorbeeldcode om een willekeurige RGB kleur te genereren, de tijd is in te stellen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// RGB LED - willekeurige kleur met RGB int tijd = 1000; int red = 9; int green = 10; int blue = 11; void setup() { pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); } void loop() { analogWrite(blue, random(255)); analogWrite(red, random(255)); analogWrite(green, random(255)); delay(tijd); } |
Dit is een voorbeeld code om de kleuren automatisch te laten wisselen met fade, hier wordt gebuik gemaakt van de PWM functie:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// RGB LED - automatische kleuren wisseling int redPin = 9; int greenPin = 10; int bluePin = 11; int redVal; int greenVal; int blueVal; void setup() { redVal = 255; greenVal = 255; blueVal = 255; update(); } // Deze functie werkt de LED kleuren bij. void update() { analogWrite(redPin, redVal); analogWrite(greenPin, greenVal); analogWrite(bluePin, blueVal); } // Deze functie werkt een van de kleuren bij door // deze lichter of donker te maken. void color_morph(int* value, int get_brighter) { for (int i = 0; i < 255; i++) { if (get_brighter) (*value)--; else (*value)++; update(); delay(10); } } void loop() { // start met zwart (alles uit) color_morph(&redVal, 1); // transitie naar rood color_morph(&greenVal, 1); // transitie naar geel color_morph(&redVal, 0); // transitie naar groen color_morph(&blueVal, 1); // transitie naar aqua color_morph(&redVal, 1); // transitie naar wit color_morph(&greenVal, 0); // transitie naar violet color_morph(&redVal, 0); // transitie naar blauw color_morph(&blueVal, 0); // transitie naar zwart (alles uit) } |
Met het voorbeeld hieronder kun je de kleur van de RGB LED instellen met een regels via de seriƫle poort:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// LED RGB kleur via seriele invoer! // Voorbeelden: // // 000;000;000 // Alles uit // 000;100;050 // 100;150;200 // 255;255;255 // Alles aan String readString; // Configureer de pinnen van de LED // LET OP: Gebruik wel pinnen die PWM ondersteunen! int rodePin = 9; int groenePin = 10; int blauwePin = 11; void setup() { // Start de seriel poort op 9600 baud. Serial.begin(9600); } void loop() { while (Serial.available()) { // Even wachten zodat de buffer zich kan vullen. delay(3); // Kijk of er seriele gegevens binnenkomen. if (Serial.available() >0) { // Lees 1 byte van de seriele buffer. char c = Serial.read(); // Plaats de ingelezen byte achter de rest (om een string te maken). readString += c; } } if (readString.length() >0) { // Haal de waarden RGB uit de binnengekomen regel. int rood = readString.substring(0, 3).toInt(); int groen = readString.substring(4, 7).toInt(); int blauw = readString.substring(8, 11).toInt(); // Print de waarden in de seriele monitor. Serial.print("R: "); Serial.println(rood); Serial.print("G: "); Serial.println(groen); Serial.print("B: "); Serial.println(blauw); // Schrijf de waarden PWM naar de RGB LED. analogWrite(rodePin, rood); analogWrite(groenePin, groen); analogWrite(blauwePin, blauw); // Maak de buffer weer leeg. readString = ""; } } |