LED kostka

LED kostka je můj první větší projekt s Arduinem. Co to vlastně Arduino je, si můžete přečíst v mé recenzi, zakoupil jsem ho na internetovém obchodě www.czechduino.cz. Základní myšlenkou mého projektu je uspořádat LEDky do kostky a vytvořit něco jako prostorový displej. Viděl jsem několik videí na Youtube a byl jsem rozhodnutý stavět. Při zvažovaní rozměrů padla volba na nejrozumnějších 4x4x4, celkem tedy 64 červených diod. Tato barva není sice nejatraktivnější, modrá by se mi líbila daleko více, ale rozhodla cena. Červené diody jsem pořídil za cenu 3Kč/kus, kdežto modré by stály více než dvojnásobek. Protože Arduino je velmi univerzální a chci ho využívat i k dalším projektům, nemělo cenu ho nějak napevno do kostky zabudovat. Ta tvoří samostatný celek, který se jen velmi rychle připojí konektory a podívaná může začít. Jak bude 64 diod blikat záleží na programu, či spíše na fantazii jeho tvůrce, možná proto bych mou sestavu na videu zařadil mezi ty slabší. Někdo s trochou uměleckého talentu by se asi vyřádil více, ale pro demonstraci schopností této hračky to určitě stačí.

Stavba

Jako první je nutné spájet 64 diod do kostky, ke spojení poslouží pouze jejich vývody, další dráty už nejsou třeba. Na takovou kostku se můžeme dívat dvěma způsoby, buď že se skládá ze 4 vrstev po 16 diodách nebo ze 16 sloupců po 4 diodách. Použijeme nakonec oba, každá vrstva má totiž společnou katodu a sloupec zase společnou anodu. Dioda má tak svou vlastní jedinečnou adresu. Například pokud chceme rozsvítit diodu v levém horním rohu blíže k nám, připojíme příslušný sloupec na kladný pól zdroje a vrstvu, ve které se dioda nachází, na záporný. To je vše! Touto jednoduchou logikou se musíme řídit i během pájení.

Při práci jen tak od ruky by se asi těžko podařilo dodržet stejnoměrné rozestupy mezi diodami, postupoval jsem tedy následovně: Do dřevěného prkénka jsem navrtal otvory o průměru 3mm s vzájemnou vzdáleností 23 mm. Vložil jsem diody do otvorů, ohnul vývody tak, aby se dotýkaly, a připájel. Takto lze poměrně jednoduše vyrobit všechny čtyři identické vrstvy. Složitější operace je propojení vrstev mezi sebou. Nepodařilo se mi vymyslet lepší způsob, než z distančních sloupků a dřevěných lišt postavit malé lešení, které při pájení drží vrstvu na správném místě.

Aby se s kostkou pohodlně manipulovalo, umístil jsem ji na plastovou krabičku U-KP22 (označení GME). Vývody diod jsou protažené skrze stěnu dovnitř. Otvory je nutné vrtat poměrně přesně, aby do nich kostka zapadla. Řešil jsem to zaznačením jejich polohy na milimetrový papír, který po přilepení na krabičku posloužil jako šablonka pro vrtání. Na vývody jsou připájené ploché kabely, samozřejmě je nutné dodržovat předem zvolenou logiku, aby se pak člověk vyznal v tom, který kabel kam vede. Nesmíme zapomenout ani na vodiče vedoucí ke společným katodám vrstev. Celkem tedy z kostky vyvedeme pět plochých vodičů se čtyřmi žílami. K přichycení kabelů ke krabičce, aby se všude možně nekroutily, se nejlépe hodí tavná pistole.

Připojit takovou kostku přímo na Arduino by nebylo možné, protože nemá dostatečný počet výstupů a problém představuje i velký odběr. Proto mezi Arduinem a kostkou dělá prostředníka deska s posuvnými registry 74HC595, darlingtonovým polem ULN2803A a vlastním zdrojem stabilizovaného napětí. Použití posuvného registru jsem věnoval samostatnou stránku, takže ho jen shrnu. Této součástce odešle Arduino 8 bitů dat, tedy číslo od 0 do 255, stav osmi výstupů registru pak odpovídá zápisu čísla ve dvojkové soustavě. Kde má být logická jednička naměříme 5V a kde nula pochopitelně 0V. Dva registry mohou navzájem spolupracovat, čímž získáváme 16 výstupů, ty jsou připojeny na jednotlivé sloupce kostky. Zbývá ještě ovládání vrstev, které je nutné připojit na záporný pól zdroje, pokud mají diody svítit. Samotný výstup Arduina nemůže spínat tak velké proudy, proto musíme použít tranzistor. Nejpohodlnější řešení je asi darlingtonovo pole ULN2803A, ačkoliv využijeme jen 4 z 8 integrovaných tranzistorů. K napájení kostky slouží stabilizátor napětí 7805. Nutný je chladič, protože se v provozu docela zahřívá. Schéma nabízím v PDF, GIF nebo jako soubor pro program Formica.

Plošný spoj se součástkami umístíme do dolního dílu krabičky, zatímco LED kostka je uchycena k hornímu. Pak už stačí jen sešroubovat a je hotovo. Na fotkách si nejspíše všimnete modré diody na čelní straně krabičky, ta měla signalizovat zapnuté napájení, ale nakonec jsem ji odpojil, protože působila velmi rušivě. Tak a to by bylo ke stavbě vše. Spojení s Arduinem zajišťují konektory, celkem je potřeba 7 vodičů.

Shrnutí - jak to funguje?

Arduino odešle pomocí tří výstupů data posuvným registrům, ty připojí společné anody příslušných sloupců na kladný pól zdroje. Další čtyři výstupy Arduina zároveň přes tranzistory připojí na zem tu vrstvu diod, kterou chceme rozsvítit. Takto lze rozsvěcovat postupně různé sestavy diod a vytvářet celkem pěkné efekty. Napájení kostky i Arduina zajišťujě adaptér s výstupním napětím 9V a rozdvojka vlastní výroby (na fotkách malá černá krabička s modrou LED). Bylo by zbytečné používat zvlášť dva adaptéry, když jeden může dodávat až 2A, což je dost pro kostku i Arduino dohromady.

Trocha programování

Následující vzorový program by vám měl objasnit základní princip. Předpokládejme, že máme v plánu vytvářet delší sekvence různých obrazců, které na kostce budou postupně blikat. Proto je výhodné napsat funkci, která se postará o rozsvícení jakékoliv předem zadané sestavy diod. Pak už budeme funkci jen volat a zadávat parametry: kterou sestavu diod chceme použít, ve které vrstvě budou diody svítit, na jak dlouho a zda bude následovat pauza.

// Priřazení vrstev pinům Arduina
#define vrstva1 7
#define vrstva2 6
#define vrstva3 5
#define vrstva4 4

/* Přiřazení vstupů registrů pinům Arduina */
int latchPin = 8;
int clockPin = 9;
int dataPin = 10;

/* Sestavy diod, které budeme rozsvěcovat,
k uložení slouží proměnná typu pole.
1 = dioda svítí, 0 = dioda zhasnuta, rozmístění odpovídá skutečnosti */

int LED1 [16] = 
{
1,1,1,1,
1,0,0,1,
1,0,0,1,
1,1,1,1
};

int LED2 [16] = 
{
0,0,0,0,
0,1,1,0,
0,1,1,0,
0,0,0,0
};

// funkce setup provede nastavení pinů jako výstupu
void setup() 
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(vrstva1, OUTPUT);
pinMode(vrstva2, OUTPUT);
pinMode(vrstva3, OUTPUT);
pinMode(vrstva4, OUTPUT);
}

//================================================
// funkce, ktera má za úkol rozsvítit sestavu diod

void rozsvit (int LED[16], int vrstva, int trvani, int pauza)
{
int data1;
int data2;
  
/* převod binárního čísla na decimální */ 
data1 = LED [0]*128 + LED [1]*64 + LED [2]*32 +
           LED [3]*16 + LED [4]*8 + LED [5]*4 +
           LED [6]*2 + LED [7]*1;
    
data2 = LED [8]*128 + LED [9]*64 + LED [10]*32 +
           LED [11]*16 + LED [12]*8 + LED [13]*4 +
           LED [14]*2 + LED [15]*1;

/* odeslání dat registrům*/     
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data1);
shiftOut(dataPin, clockPin, MSBFIRST, data2);
digitalWrite(latchPin, HIGH);

/* rozsvíceni a zhasnutí vrstvy */
digitalWrite(vrstva, HIGH);
delay(trvani);
digitalWrite(vrstva, LOW);
delay(pauza);
}

//===============================================
// smyčka probíhající stále dokola

void loop ()
{
/* voláni funkce rozsvit
zadáváme parametry (sestava diod, vrstva, trvaní, pauza) */

rozsvit(LED1, vrstva1, 250, 0);
rozsvit(LED2, vrstva2, 250, 0);
rozsvit(LED1, vrstva3, 250, 0);
rozsvit(LED2, vrstva4, 250, 0);
}

- Stránka vytvořena 28. března 2010 -