RGB LED dioda pro profíky

V minulé lekci jsme se seznámili s RGB LED diodou. Naučili jsme se svítit několika základními barvami. RGB LED dioda toho ale umí mnohem více a tom bude řeč v této lekci. Napřed ale nějaké to povídání okolo, takže buďte trpěliví.

RGB barevný model

RGB Led dioda svítí podobně, jako třeba monitor u počítače v určitém barevném modelu (barevný model = systém zobrazení větší škály barev). V tomto systému se mísí barvy z několika světelných kanálů (RGB – červená – zelená – modrá) a výsledkem jsou různé odstíny barev.

RGB – barevný model

Z předchozího obrázku, který zobrazuje náhled na RGB barevný model je jasné, že v tomto modelu je možné zobrazit velkou škálu barev. Abychom mohli tyto barvy matematicky vyjádřit (protože program v arduinu to potřebuje popsat čísly) musíme každou barvu popsat prostřednictvím poměru hodnot třech čísel (červeného, zeleného a modrého barevného kanálu). S podobným systémem funguje například i prostředí internetových stránek, kdy je možné poměrem RGB vyjádřit každou barvu (k vyzkoušení zde).

PWM piny a příkaz analogWrite()

Na začátku našeho povídání jsme si řekli, že arduino má dva druhy pinů – digitální a analogové. Analogové piny umí posílat jako výstup napětí o různé výši (konkrétně 255 různých úrovní od 0 do 5V). Digitální piny oproti tomu umí odesílat jen dvě úrovně – 0V, nebo 5V – 0, nebo 1 – LOW, nebo HIGH. LED didoda připojená na tyto piny tedy buď svítí, nebo nesvítí. My ale potřebujeme posílat různé hodnoty na výstupy RGB LED diody.

Technici jsou ale chytří chlapci a tak vymysleli jak na to. Digitálními piny je totiž třeba nejen svítit RGB LED diodou, ale třeba také regulovat otáčky motůrků, nebo řídit serva. Pro tento účel se využívá technika PWM (Pulse Width Modulation – modulace pomocí šířky pulsu).

PWM – modulace pulsu

Na obrázku PWM – modulace pulsu máte čtyři grafy. Jedná se o průběh napětí v čase. Rozdělíme-li si průběh v čase na stejné úseky (přerušované čáry). Kdybychom měli vyjádřit stav 0, kdy pin neposílá žádné napětí byla by výsledkem čára grafu bez modré plochy symbolizující napětí. Pokud bychom vysílali stav 1 – tudíž plné napětí byl by výsledkem poslední graf zobrazující 100% účinnost.

Pokud ale budeme posílat pulsy napětí přerušované (zbylé tři grafy) s rozdílnou šířkou pulsu získáme výsledek podobný jako když posílá analogový výstup napětí o různé výši. Tento jev se podobně projeví i při posílání pulsů na RGB LED diodu – projeví se, jako bychom na přívod posílali napětí o různé výši.

Jak ale vyjádřit programově pro desku arduina, že chceme aby na určitý pin poslala puls o určité šířce? Víme, že analogový pin posílá napětí od 0 do 5V ve 255 úrovních. Podobně to funguje i v případě digitálního pinu. Příkazem analogWrite([číslo pinu],[hodnota od 0-255]); můžete poslat tento příkaz.

Upozornění: PWM pin je k nalezení na digitálních pinech. Na desce jsou označeny vlnovkou. Na desce Arduino Uno jsou to piny č. 3, 5, 6, 9, 10, 11. Pro tyto piny je možné využít příkaz analogWrite() pro pulsní modulaci.

Program Puls

Zapojení pro program PULS

Zapojení použijte stejné jako v předchozí lekci, rozdíl je pouze v odlišném připojení jednotlivých barevných kanálů využijeme pwm piny 3,5 a 6. Opět použijeme RGB LED diodu se společnou katodou a ochranné odpory o velikosti 220 ohmů.

Program, který je třeba nahrát.

/*
Světelný maják s RGB diodou
Světelný maják pulsuje pomocí příkazu analogWrite
*/
//Nastavení desky – inicializace pinů – RGB
int pin_r=3; //nastavení pinu pro kanál červené barvy
int pin_g=5; //nastavení pinu pro kanál zelené barvy
int pin_b=6; //nastavení pinu pro kanál modré barvy
int pauza=60; //pauza mezi barevnými přechody v milisekundách
void setup() {
pinMode(pin_r, OUTPUT);
pinMode(pin_g, OUTPUT);
pinMode(pin_b, OUTPUT);
}

//Provedení programu – spuštění v nekonečné smyčce
void loop() {
//čistá modrá
analogWrite(pin_r, 0);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(800);

//směsové barvy
analogWrite(pin_r, 57);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 115);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 172);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 172);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 115);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 57);
delay(pauza);

//čistá červená
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 0);
delay(800);

//směsové barvy
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 57);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 115);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 172);
delay(pauza);
analogWrite(pin_r, 230);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 172);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 115);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
analogWrite(pin_r, 57);
analogWrite(pin_g, 0);
analogWrite(pin_b, 230);
delay(pauza);
}
program puls

Úkol:

Vytvořte nějaký pěkný světelný efekt s použitím příkazů analogWrite.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *