18. díl o Arduinu – maticové zapojení LED diod

V minulých dílech jsme začali displeje, které byly složeny z LED diod. Zobrazovali jsme na nich čísla a v jednom případě jsme i simulovali načítání. A i přes to, že jsem kdysi řekl, že z diod co se zapojení týče, je to snad vše, budeme se v tomto díle k nim vracet, protože existuje ještě jedno zapojení, které jsme si sice představili již dříve, ale tentokrát jej ještě trochu vylepšíme. Důvodem proč jsme si o tomto zapojení neřekli dříve je to, že se používá hlavně u velikých displejů. A protože již za sebou máme jednobitový i dvoubitový displej, který měl sedm segmentů, budeme potřebovat rozšířit počet bitů, který má displej. Právě z tohoto důvodu se nyní podíváme na maticové zapojení LED diod, protože ty větší a hlavně LCD a jim podobné displeje toto zapojení používají a vysvětlovat toto zapojení přímo na displeji by nebylo asi to nejlepší. Pro jednoduchost si tedy řekneme to, jak budeme diody ovládat a až se v příštím díle vrhneme na čtyřbitový, sedmisegmentový displej, budeme dělat to, co již budeme znát a tak pro nás zapojení bude o hodně jednodušší.

IMG_4559

Maticové zapojení LED diod má jednu velikou výhodu. Umožňuje připojení velkého množství LED diod a jejich obsluhu, i přes to, že nebude využito moc pinů Arduina. Dříve, když pominu, jestli jsou diody zapojeny sériově či paralelně. Vždy jsme je zapojili tak, že anoda diody šla do digitálního pinu Arduina a katoda přes odpor do Arduino na místo, které je označeno jako zem (GND). Pokud jsme tedy tímto způsobem chtěli ovládat čtyři diody, zabrali jsme čtyři digitální piny Arduina a zem. Pokud ale sáhneme po maticovém zapojení, pro ovládání čtyř diod bude zapotřebí pouze čtyř digitálních pinů Arduina. Ano, čtete správně! Diody nebude potřeba připojovat k místu, kde má Arduino zem, ale pouze se čtyři diody připojí na čtyři digitální piny.

Stejně by se to dalo popsat na větším příkladu. V případě zapojení devíti LED diod, s klasickým zapojením tak, jak jsme jej dělali doteď, by bylo zapotřebí devět digitálních pinů Arduina a zem. S novým maticovým zapojením však devět diod zvládneme ovládat pouze za pomoci šesti digitálních pinů! Ano, jen šest digitálních pinů bez země! Pojďme ale dále, pokud se rozhodneme používat 16 LED diod a každou z nich budeme chtít ovládat, pro jejich ovládání bude zapotřebí pouze 8 digitálních pinů Arduina, což by dříve prostě nebylo možné. Pokud bychom měli desku UNO, která má pouze velmi malý počet digitálních pinů a rozhodli bychom se, že chceme ovládat třeba 25 LED diod, pak pro připojení tak, jak jsme jej využívali doteď bychom potřebovali 25 digitálních pinů a zem. Když těch 25 diod ale zapojíme maticově a budeme je tak ovládat, bude nám stačit pro pohodlné ovládání každé z diody pouze 10 digitálních pinů! Což je opravdu velmi málo vzhledem k tomu, kolik diod budeme ovládat. Z tohoto důvodu se nyní pro jednoduchost podíváme na zapojení osmi diod, které budou zapojeny maticově.

Pro připojení osmi LED diod do matice budeme potřebovat:

  • Desku Arduino
  • 8 LED diod
  • Propojovací kabely
  • Bastldesku
  • Odpory k vaší diodě

Od tohoto dílu se již nebudu rozepisovat s tím, jak vypočítat odpor k diodě. Dělal jsem to ve všech předchozích a tak pokud to někoho zajímá, nechť se podívá na předchozí díly, kde jsme s LED diodami začínali. Tam je rovněž detailně vysvětleno, jak se odpor počítá.

Nyní se tedy pojďme podívat na to, jak se LED diody zapojují, protože to není nic jednoduchého, i když, po několika zapojených diodách to pravděpodobně budete dělat automaticky a bez chyb. V tomto zapojení jde o vzájemné propojení LED diod do matice, toho docílíme tím, že katody a anody připojíme na „bastldesce“ k sobě. Pokusím se to znázornit na tomto obrázku:

maticove_zapojeni_led_diodNa tomto obrázku je vidět zapojení čtyř diod tak, že katody a anody mají vždy připojeny k sobě. To znamená, že když v propustném směru, tedy ve směru, ve kterém LED dioda svítí, přivedete napětí, například na bod 2 a na druhý bod 2 přivedeme zem, rozsvítí se dioda vpravo dole. Pokud to samé provedete s body 1, rozsvítí se ta úplně první. Tímto se dá rozsvítit každá z diod i bez toho, že by každá musela být zvlášť připojená. My těch LED diod budeme ale zapojovat více. Jak jsem již na začátku řekl, půjde o zapojení osmi LED diod do matice, tedy jejich zapojení bude vypadat takto:maticove_zapojeni_led_diod_8

Zapojení je úplně stejné, jako na předchozím obrázku, jen s tím rozdílem, že je zde dvakrát tolik diod. Pro ovládání těchto osmi diod nám tedy bude stačit jen 6 digitálních pinů Arduina. Nyní se ale pojďme podívat na to, jak to bude vypadat přímo na bastldesce, na které budou připojeny diody.

IMG_4564

Z fotek je docela dobře vidět, jak jsou LED diody zapojeny a také to, že stejně jako v případě, kdy připojujeme jednu, je zapotřebí aby diody měly odpor. Zde nemusíme ale počítat kolik jich kde a jak je zapojených, odpor se týká vždy jen jedné jediné diody. Lze tedy buď ke každé z nich připojit i odpor anebo vzhledem k tomu, že stejně budeme rozsvěcet v jeden moment pouze jednu jedinou je dát tak, jak je to na fotkách, výsledek je stejný. Pokud by však někdo namítal, že bude chtít mít najednou zapojené třeba dvě diody tak, aby svítily. Rovnou zdůrazním, že ve stejný moment nikdy nebudou svítit dvě diody! Vždy bude svítit pouze jedna, nicméně jich tímto způsobem budeme rozsvěcet víc. Lidské oko má totiž určitou setrvačnost, což znamená, že pokud LED diody rozsvítíme v určité rychlosti, pro oko vypadají, jako by svítily, i když blikají. Tohoto nedostatku lidského oka budeme využívat v mnoha dílech. Nyní tedy pokud budeme chtít rozsvítit dvě diody, uděláme to tak, že jednu rozsvítíme třeba na 1ms, poté ji vypneme a rozsvítíme druhou, opět taky na dobu jedné milisekundy. Pak tu druhou zhasneme a opět pustíme na stejně dlouhý čas, tedy jednu milisekundu… Tímto opakováním docílíme toho, že nám svítí dvě diody, nebo alespoň pro lidské oko, nicméně ve skutečnosti s nimi blikáme na střídačku tak rychle, že to nezaznamenáme. Maticové zapojení je tedy vždy o tom, že svítí jen jedna dioda.

Nyní se ale, pokud vše máme zapojeno do matice, pustíme do programování. To v tomto místě bude možná trochu nezvyklé. Na začátek programu, ještě před tím, než začne funkce setup() nebo loop() si deklaruje proměnou, ve které budeme mít piny, na kterých se nacházejí diody. Pokud se podíváte zpět na fotografie, tak zjistíte, že anody mám připojené k Arduinu červenými drátky k digitálním pinům 40,43,44,47 a katody přes odpor a černé drátky k zpět k Arduinu k digitálním pinům 50 a 53. Záměrně jsem použil barvu červenou a černou, která simuluje plus a mínus. Dále je na fotkách vidět zeleně propojení katod mezi LED diodama a žlutě propojení anod. Tentokrát jsem si dal opravdu záležet, abych dodržoval pro stejné připojení stejné barvy, aby to bylo přehledné a mohli jste to podle toho zapojit.

Nyní tedy deklarujeme na začátku programu, jak jsem zmínil výše proměnou, do které si umístíme hodnoty pinů, které jsou připojeny k Arduinu, zde nemusíte dodržovat piny, co jsem zvolil já, každý má vlastní, nicméně pro mě tento kód vypadá takto:

byte piny_arduina[] = {40,43,44,47,50,53};

Tímto jsme si tedy vytvořili pole, které nese hodnoty pinů, ke kterým je Arduino připojeno k „bastldesce“. Nyní nás ale čeká vytvořit mapu zapojení. Mapa zapojení je něco, podle čeho budete vědět, kterou diodu ovládáte. Jde v ní o to, aby pro konkrétní diodu byla přivedena hodnota HIGH na anodu diody a hodnota LOW na katodu diody.

byte piny_diody[8][6] = {

{1,0,0,0,0,1},//1,1 - 0

{0,1,0,0,0,1},//2,1 - 1

{0,0,1,0,0,1},//3,1 - 2

{0,0,0,1,0,1},//4,1 - 3

{1,0,0,0,1,0},//1,2 - 4

{0,1,0,0,1,0},//2,2 - 5

{0,0,1,0,1,0},//3,2 - 6

{0,0,0,1,1,0},//4,2 - 7

};

Možná vám to přijde trochu nepřehledné, ale je to velmi jednoduché. Na začátku jsem psal, že piny 40,43,44,47 jsou připojeny k anodám LED diod a piny 50 a 53 ke katodám před odpor. V tomto scriptu tedy neděláme nic jiného, než že nastavíme obvod tak, aby diodou protékal proud v propustném směru, když to uděláme opačně, tak dioda nesvítí. Znamená to tedy, že nastavíme jen tu diodu, která má svítit, a u všech ostatních nastavíme to, aby nesvítily. Vždy první čtyři hodnoty jsou pro anodu, další dva pro katodu, tedy alespoň pro toto zapojení. Musíme tedy docílit toho, aby diodou protékal proud tak jak má a právě tímto toho docílíme. Za dvěma lomítkami je souřadnice diody, která se rozsvítí, tedy první čtyři diody pro první řádek a další čtyři pro druhý. Když vezmu tedy první řádek pro diodu se souřadnici 1;1. Znamená to tedy, že na pinu 40 nastavím hodnotu HIGH a aby se mohla rozsvítit tak na pinu 50 hodnotu LOW. Dioda svítí totiž jen v případě, že na její anodě je z Arduina posílána hodnota HIGH (popř. 1, což je to samé), protože tím je puštěno na tomto pinu napájení a aby byl obvod kompletní, je na pinu 50 hodnota 0, tedy LOW, čímž se uzavírá okruh. Ostatní diody mají hodnoty opačně anebo tak, že svítit nemohou, tedy když ke katodě i anodě přiřadíme hodnotu LOW, nebude svítit, stejně tak, jako když k oběma koncům přiřadíme hodnotu HIGH.

Pokud by kód výše nebyl jasný, dejte o tom vědět do komentářů, rád vám to zkusím vysvětlit trochu jinak, protože chápu, že to nemusí být úplně všem po prvním přečtení jasné.

Nyní si nastavíme piny ve funkci setup().

void setup() {

pinMode(40, OUTPUT);

pinMode(43, OUTPUT);

pinMode(44, OUTPUT);

pinMode(47, OUTPUT);

pinMode(50, OUTPUT);

pinMode(53, OUTPUT);

}

Pokud se vám to nechce psát takto postupně, což u větších projektů rozhodně není dobré, lze si tento kód zjednodušit tak, že si místo tohoto napíšete cyklus. Cyklus bude vypadat takto:

for(int i = 0;i<6;i++){

pinMode(piny_arduina[i], OUTPUT);

}

Takto jednoduše lze vytvořit to samé s tím, že jsme rovnou použili pole piny_arduina, které jsme vytvořili hned na začátku tohoto dílu. Co budete používat je jen a čistě na vás, nicméně tato metoda je jednodušší a lepší a pokud budete vytvářet složitější projekt, jako třeba připojivat 50 LED diod, ušetří vám to cca 47 řádku kódu.

Teď ale budeme muset vytvořit naší vlastní funkci, kterou jsem pojmenoval zapni_diodu. Tato funkce získává jeden jediný parametr a tím je číslo diody, které se má zapnout. Na začátku v kódu je za poznámkou kromě souřadnice napsáno i její číslo. A ano, je napsáno správně! Pole jsou totiž číslovány od 0, a proto číslo první diody není 1 ale 0 a vše je o jedničku posunuté. Teď se ale vrátíme k funkci zapni_diodu:

void zapni_diodu(int dioda){

for(int i = 0;i<7;i++){

digitalWrite(piny_arduina[i],piny_diody[dioda][i]);

}

}

Tento kód nedělá nic jiného, než že vezme číslo diody a nastaví všechny piny podle masky, kterou jsme vytvořili výše tak, aby se právě tato dioda rozsvítila. Nyní už jen stačí vše zavolat z hlavní funkce loop(). Tam kód pro zavolání může vypadat třeba takto:

void loop() {

zapni_diodu(X);

delay(250);

}

Kde X je číslo diody, která se má zapnout. Nicméně pokud jich máte připojeno víc, tak takovéto postupné rozsvěcení vždy po nahrání nového kódu není nic moc a tak je velmi vhodné si vytvořit například cyklus a v tom cyklu je postupně rozsvěcet. Takový cyklus může vypadat třeba takhle:

void loop() {

zapni_diodu(a);

a++;

if(a>7){

a=0;

}

delay(250);

}

Možná bych ještě podotknul, že je dobré, jak jsme někde na začátku deklarovali masku a piny, si deklarovat proměnou A, která bude integer a bude mít od začátku běhu programu hodnotu 0:

int a = 0;

Pokud toto všechno máme, výsledný efekt bude vypadat stejně jako na videu. Po tomto díle se tedy budeme moci, pokud vše proběhlo tak jak má, vrhnout na maticové displeje, protože znalosti z tohoto dílu v nich zcela určitě využijeme.

Nyní se ale podíváme ještě na jednu věc. Zmínil jsem se o ní na začátku a to bude rozsvícení více diod najednou. Možné to samozřejmě fyzicky není a tak to budeme dělat tak, jak jsem říkal, jednu diodu rozsvítíme, určitou dobu necháme svítit a pak diodu zhasneme a místo ní si rozsvítíme jinou. Tu opět necháme chvíli svítit, zhasneme a pustíme zase první. Kód, kterým je toto možné vytvořit může vypadat třeba takto:

zapni_diodu(1);

delay(10);

zapni_diodu(6);

delay(10);

Tento kód rozsvítí diodu 1 a 6 a v podstatě mezi nimi přepíná, ale tak rychle, že lidské oko není schopné díky setrvačnosti zjistit, že se to opravdu děje. Od hodnoty 12 ms už je vidět že dioda rychle bliká, nebo alespoň já to již vidím, možná se ale najdou tací, kteří to uvidí ještě dříve, třeba při 11 či 10ms… Nicméně pořád není problém nastavit hodnotu menší. Toto je jen na vás. Příště se tedy podíváme na maticový, sedmisegmentový displej se čtyřmi čísly, na kterém budeme opět, jako v předchozích dílech zobrazovat čísla.


1. díl o Arduinu - Historie

Arduino je open-source platforma určená pro navrhování hraček a rychlou tvorbu prototypů nejrůznějších součástek. Platforma je založena na mikro-kontrolorech ATMega od firmy Atmel a grafickém vývojovém prostředí, které dá se říci, vychází z prostředí Wiring.

2. díl o Arduinu - typy desek

V současné době je na trhu opravdu velké množství nejrůznějších desek, které lze pro projekty v Arduinu použít. Některé jsou velmi vhodné, jiné vám budou způsobovat vrásky na čele. Jde totiž sehnat desku, pro jejíž programování je zapotřebí externí převodník, protože se sama přímo nedá připojit k PC.

3. díl o Arduinu - speciální typy desek

V minulém díle jsme se zaměřili na základní typy desek, na kterých je možné stavit projekty Arduino. Nyní se však pokusím zaměřit na speciální typy desek, které svůj účel mají, dá se říci svým způsobem předurčen. Jde totiž o desky, které nebudete potřebovat tak často, jako ty předchozí, ale v případě některých je dobré vědět, že existují, protože výsledné prototypování je díky nim o dost jednodušší.

4. díl o Arduinu – Shieldy

Arduino samo o sobě v některých verzích obsahuje různá vylepšení základní verze, viz mutace Arduina Uno na desky Ethernet nebo Bluetooth. Jako příklad si uvedeme připojení k Wi-Fi u stolního počítače.

5. díl o Arduinu – Seznamujeme se s deskou UNO

Než se pustíme do jakéhokoliv programování, popíšeme si trochu jednu z těch desek, kterou budeme ze začátku používat pro projekty. Touto deskou bude Arduino Uno. Arduino Uno je základní deska, která dovede pohánět všechny projekty, na kterých se budeme s Arduinem seznamovat.

6. díl o Arduinu – Připojujeme Arduino k PC a instalujeme IDE

Vývojové prostředí pro Arduino je napsané v jazyce Java. To znamená, že je dostupné pro všechny platformy, na kterých je Java dostupná, z těch hlavních zmíním Windows, Linux a Mac OS X, protože pro ty je již připravená instalace na oficiálních stránkách Arduina.

7. díl o Arduinu – První aplikace

Po minulém díle již máme Arduino plně připojené k PC a je plně funkční. Nyní se tedy podíváme na to, jak vytvořit úplně první program, který na našem Arduinu budeme spouštět.

8. díl o Arduinu - Bastldeska

V minulém díle jsme si představili jednoduchou aplikaci. Byl to, dá se říci počátek všeho, co je zapotřebí pro to, abychom na Arduinu začali cokoliv dělat. A tak po stopách předchozího dílu se nyní podíváme na to, jak k Arduinu připojit skutečnou LED diodu, abychom nebyli omezeni pouze na tu jednu, která je připojena k pinu číslo 13 v případě desky UNO.

9. díl o Arduinu - Připojujeme LED diodu

V předminulém díle jsme si vysvětlili, jak Arduino pracuje a vytvořili jsme jednoduchý program, který nám rozblikal diodu, která byla připojena k pinu číslo 13 přímo na desce Una.

10. díl o Arduinu - Připojujeme LED diody seriově

V minulém díle jsme připojovali jen jednu LED diodu, nyní se ale podíváme na to, jak zapojit více diod tak aby svítily společně a aby jejich zapojení bylo sériové. Sériovým zapojením se rozumí, že diody budou zapojeny za sebou. To znamená, že do této větve dvou diod bude zapotřebí umístit jen jeden jediný odpor.

11. díl o Arduinu - připojujeme LED diody paralelně

Po vzoru předchozího dílu, kdy jsme připojovali dvě diody sériově s odporem na Arduino a jednoho před ním, kdy jsme připojovali pouze jednu LED diodu s odporem, se dnes podíváme na to, jak správně zapojit LED diody paralelně.

12. díl o Arduinu - Připojujeme LED diody sériovoparalelně

V minulých dílech jsme si řekli všechno o tom, jak se připojují LED diody sériově i paralelně. Nyní nastal čas, abychom diody zapojili oběma způsoby najednou. To vše z toho důvodu, že například takto jsou zapojeny diody v LED páscích, proto je možné je stříhat.

13. díl o Arduinu - Blikáme LED diody napřeskáčku

O tom, jak zapojit LED diody víme již snad vše, nepřekvapí nás sériové zapojení, nezapotíme se u paralelního a kombinace obou najednou, je už také za námi. Nyní se ale podíváme na to, jak připojit dvě diody nezávisle na sobě, budeme tedy tvořit dva okruhy, kdy každý bude ovládaný zvlášť.

14. díl o Arduinu - Knight rider

Po vzoru předchozího dílu, kdy jsme sepínali diody proti sobě na dvou okruzích, se dnes podíváme na to, jak vytvořit světlo, které mělo auto se jménem K.I.T.T. ze seriálu Knight Rider. Způsobů by se jistě našlo více, nicméně ten, který se zde pokusím popsat je podle mě ten nejjednodušší.

15. díl o Arduinu - 1. bitový sedmisegmentový displej

O LED diodách a Arduinu již víme vše, nyní tedy trochu postoupíme a pokusíme se zapojit sedmi-segmentový displej a budeme na něm zobrazovat číslo. Tento displej se tedy skládá ze sedmi segmentů, respektive z osmi, pokud počítáme i tečku, které jsou označeny písmeny od A do G.

16. díl o Arduinu - 1. bitový sedmisegmentový displej - loading effect

V minulém díle jsme si připojili jeden sedmisegmentový displej, který dovedl zobrazit pouze jedno jediné číslo. Na tomto displeji jsme pak následně zobrazili číslice od 0-9. Nyní se však podíváme na jednoduchý kód, který by nám měl vytvořit jednoduchý efekt, podobný tomu, který možná často vidíte, když něco načítáte.

17. díl o Arduinu - 2. bitový sedmisegmentový displej

V dílech minulých jsme se zaměřili na sedmisegmentový displej, který dovedl zobrazit pouze jednu číslici, zobrazili jsme na něm čísla od 0 do 9 a pak jsme si vytvořili jednoduchý načítací efekt.

19. díl o Arduinu - 4. bitový sedmisegmentový displej

V minulém díle jsme si něco řekli o tom, jak se zapojují LED diody do matice. Vše, co jsme se v minulém díle naučili, se nám nyní bude hodit, protože se dnes pokusíme zapojit 4bitový sedmisegmentový displej, který právě maticového zapojení využívá.

20. díl o Arduinu - Sériový monitor

Dnes si řekneme něco o sériovém monitoru. Arduino když pracuje, tak existuje možnost, díky které Arduino zpět počítači, ke kterému je připojeno po seriové lince posílá nejrůznější informace. Tyto informace mohou být buď hodnoty z nějakého čidla či čidel, informace o tom, jestli je dané relé sepnuté či konkrétní dioda svítí a mnoho dalšího.

21. díl o Arduinu - připojujeme senzor DHT-11

V minulém díle jsme načali sériový monitor a dnes se na něm pokusíme zobrazit první data z čidla. Čidlo, které budeme pro náš pokus používat má označení DHT-11. Tento typ čidla je velmi oblíbený, protože měří teplotu a vlhkost.

22. díl o Arduinu - připojujeme senzor DHT-22

Minule jsme si představili senzor DHT-11, který je sice velmi oblíbený, ale zároveň ne moc přesný, proto se dnes podíváme na jeho vylepšenou verzi, tedy na senzor DHT-22. Senzor DHT-22 má tyto vlastnosti.