RGB led vezérlés Arduinoval


Egy példa analóg kimenet kezelésére. Az RGB LEDeket három LED összeépítéséből hozták létre. Egy tokban egy vörös(R), egy zöld(G), és egy kék(B) led közös anóddal vagy katóddal ellátva. A három szín keverékéből bármilyen szín előállítható, hasonló elv alapján mint ahogy a színes tv-k képernyőjén is.

Az RGB színkör:

Egy egy szín fényerejének csökkentésével vagy növelésével más és más színt kapunk. A színek fényerejének változtatását impulzus szélesség modulációval, PWM-elvalósítjuk meg. 
A PWM -nél a kitöltési tényező számít, ez azt jelenti, hogy azonos frekvencián, azonos amplitúdójú jel mennyi ideig van maximumon, vagyis tápfeszültségen:


100%-os a jel erősség ha folyamatos a tápfeszültség, 80%-os ha 8 egység szélességű tápfeszültség impulzust 2 egység szélességű GND impulzus követ.
50%-os ha a két impulzust szélessége fele-fele, és 0%-os ha nincs tápfeszültség impulzus.
Tehát ha 1 sec alatt csak 200ms ideig van bekapcsolt állapotba a fogyasztó akkor a teljesítménye
is csak 20%-os lesz, ez a PWM lényege. Ennyit az elméletről, most nézzük a gyakorlatot.

A projektünkhöz a következő alkatrészek szükségesek:

Most nézzük a kapcsolást:

RGB lednél mindig a leghosszabb láb a közös, a többi lábkiosztása típusonként változik, itt
van egy sematikus ábra a led belső áramköréről:

Most nézzük a beírandó sketchet:

/*
Adafruit Arduino - Lesson 3. RGB LED
*/
int redPin = 11;

int greenPin = 10; //változók csatlakozó lábakhoz rendelése
int bluePin = 9;

//a következő sort akkor kell aktíválni ha közös anódos a led
//#define COMMON_ANODE

void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT); //a lábak beállítása kimenetnek
pinMode(bluePin, OUTPUT);
}

// főciklus
void loop()
{
setColor(255, 0, 0); // red ; értékadás a meghívott setColor függvénynek
delay(1000); //várakozás 1sec-ig
setColor(0, 255, 0); // green
delay(1000);
setColor(0, 0, 255); // blue
delay(1000);
setColor(255, 255, 0); // yellow
delay(1000);
setColor(80, 0, 80); // purple
delay(1000);
setColor(0, 255, 255); // aqua
delay(1000);
}

// ez a függvény 3 értéket fogad, amit aztán a 3 kimeneti változóhoz rendel
void setColor(int red, int green, int blue)


{

// ez a ciklus csak akkor lép érvénybe ha definiálva van a COMMON_ANODE
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 – green; // common_anode-nál visszafelé számlálunk
blue = 255 - blue;
#endif //common_anode ciklus vége
analogWrite(redPin, red);
analogWrite(greenPin, green); //a függvény értékeinek kiíratása a kimenetekre
analogWrite(bluePin, blue);
}


A mi kis programunk a beállított színek közt váltogat másodpercenként, lehet próbálkozni
különböző színkeverésekkel, eltérő várakozási időkkel. Meglehet adni a színeket hexadecimális
számokban is(ahogy a PC-k is használják), pl.:
A fehér - #FFFFFF, vagy a fekete - #000000, vagy sötétsárga - #FFCC00
ez a proginkba így adható meg: setColor(0xFF,0xCC,0x0);

További jó kísérletezést!


Az anyag Simon Monk után készült szabadon.