VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Počítačové systémy
3D LED Cube bakalářská práce
Autor: Marek Stavěl Vedoucí práce: Ing. Bc. Michal Vopálenský, Ph.D. Jihlava 2014
Abstrakt Práce se zabývá návrhem a realizací prostorového zobrazovače – krychle o rozměrech 8 x 8 x 8 zobrazovacích bodů, složené ze svítivých diod (LED), tzv. 3D LED Cube. Dále popisuje návrh a realizaci řídicího hardware včetně rozvahy výběru vhodných komponent. Jako procesorová jednotka byla zvolena platforma Arduino UNO, jež byla programována ve vývojovém prostředí Eclipse. Komunikaci s řídicí jednotkou 3D LED Cube lze navázat prostřednictvím standardní sériové linky či prostřednictvím bezdrátové sběrnice Bluetooth. Byl navržen jednoduchý komunikační protokol, prostřednictvím něhož lze kostkou zobrazovat celé řetězce znaků či rozsvěcovat a zhasínat jednotlivé zobrazovací body, v závislosti na řídicím znaku.
Klíčová slova 3D LED kostka, Arduino, LED zobrazovače, Bluetooth, sériově paralelní převodník, sériová linka
Abstract This bachelor thesis deals with the hardware and software design of a 3D display, socalled 3D LED Cube, consisting of 8 x 8 x 8 displaying points realized by Light Emiting Diodes (LED). It also discusses an appropriate choice of used components. As the processing unit, Arduino UNO programmed in the Eclipse development environment has been chosen. Communication with control unit may be established via a standard serial line or wireless Bluetooth protocol. A simple communication protocol has been developed, allowing to display character strings or to switch on/off particular displaying elements, depending on the control string.
Key words 3D LED cube, Arduino, LED displays, Bluetooth, serial-to-parallel converter, serial line
Prohlašuji, že předložená bakalářská práce je původní a zpracoval jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne 20. 5. 2014
............................................... Podpis
Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce panu Ing. Bc. Michalu Vopálenskému, Ph.D., za odborné vedení, vstřícný přístup a čas strávený diskuzí. Dále děkuji panu Ing. Ivanu Krejčímu, CSc., za podnětné rady.
Obsah 1
Úvod.......................................................................................................................... 8
2
Koncepce 3D kostky ................................................................................................. 9
3
Rozvržení konstrukce a výběr komponent.............................................................. 14 3.1
3.1.1
Svítivost .................................................................................................... 14
3.1.2
Vyzařovací úhel ........................................................................................ 14
3.1.3
Typ pouzdra .............................................................................................. 15
3.1.4
Pohled na trh ............................................................................................. 16
3.2
4
6
Budiče LED ...................................................................................................... 17
3.2.1
Výstupní proud ......................................................................................... 17
3.2.2
Pohled na trh ............................................................................................. 17
3.3
Spínání pater kostky ......................................................................................... 18
3.4
Procesorová jednotka ....................................................................................... 18
3.5
Modul Bluetooth .............................................................................................. 22
3.6
Multiplexování ................................................................................................. 24
3.7
Souřadný systém kostky................................................................................... 24
Konstrukce kostky .................................................................................................. 26 4.1
Kostka z LED ................................................................................................... 26
4.2
Desky plošných spojů ...................................................................................... 27
4.2.1
Horní deska ............................................................................................... 27
4.2.2
Spodní deska ............................................................................................. 28
4.3 5
LED .................................................................................................................. 14
Bluetooth modul ............................................................................................... 30
Program v procesorové jednotce............................................................................. 31 5.1
Příjem dat ......................................................................................................... 31
5.2
Naplnění posuvných registrů............................................................................ 33
5.3
Připojení modulu Bluetooth ............................................................................. 37
Popis realizace zařízení ........................................................................................... 38 6.1
Napájení ........................................................................................................... 38
6.1.1
Napájení LED a řadičů ............................................................................. 38
6.1.2
Napájení procesorové jednotky ................................................................ 38
6.2
Datová komunikace .......................................................................................... 40
6.2.1
Komunikace pomocí sériové linky ........................................................... 40
6.2.2
Komunikace prostřednictvím Bluetooth ................................................... 40
6.3
Zobrazování znaků z definované sady ............................................................. 42
6.5
Ovládání kostky v souřadnicovém systému ..................................................... 47
7
Závěr ....................................................................................................................... 49
Seznam použité literatury ............................................................................................... 51 Seznam obrázků .............................................................................................................. 53 Seznam použitých zkratek .............................................................................................. 54 Přílohy............................................................................................................................. 56 1
Obsah přiloženého CD ............................................................................................ 56
1 Úvod Tuto práci jsem si zvolil, protože již od útlého věku jsem se zajímal o různá zapojení se svítivými diodami (Light Emitting Diode, LED), slaboproudé elektronické obvody a protože se jedná o práci, ze které zůstane zajímavý hmatatelný výsledek. Vývoj v zobrazovacích médiích velmi pokročil a od klasických 2D televizorů se přechází na pseudo-3D zobrazení, která využívají nedokonalosti lidského oka a specifik zpracování zrakových vjemů lidským mozkem. V kultovních sci-fi filmech se objevují zařízení, která položíme na zem a tam dokážou vytvořit projekci prostorového obrazu. Podobná zařízení jsou zatím předmětem budoucího vývoje. Co však lze realizovat, je soustava svítících bodů, pravidelně rozmístěných v prostoru, v nichž je možné zobrazovat 3D objekty. Jedná se většinou o laboratorní projekty, kde je vývoj časově i finančně velmi náročný. Nicméně v malém měřítku se dá takovýto projekt uskutečnit např. v realizaci 3D kostky o rozměrech 8 x 8 x 8 zobrazovacích bodů. Jistě nemůžeme na této kostce sledovat film, ale jednoduché obrazce ano. Ve své práci se nezaměřuji na aspekt grafických transformací; zabývám se spíše návrhem, jak by se dal řešit hardware podobného zařízení ve větší velikosti. Jako výpočetní jednotku jsem pro snadnou realizaci použil open-source mikrokontrolérovou platformu Arduino UNO. Pro kostku zvolené velikosti je ještě dostatečně výkonná a disponuje i dostatečným počtem pinů pro realizaci kostky. Jedním z cílů vývoje byla možnost komunikace prostřednictvím sériové linky. Základní softwarové vybavení zvládá zobrazovat odesílané znaky, měnit jejich barvu a pozici v kostce a v neposlední řadě zobrazovat body, jejichž souřadnice jsou odesílány prostřednictvím některého z komunikačních protokolů.
8
2 Koncepce 3D kostky Návrh zapojení vlastní LED krychle je základem pro řešení ostatních konstrukčních prvků. Pokud bychom zvolili variantu budit každou jednotlivou diodu, museli bychom uvnitř konstrukce protahovat 512 vodičů ke katodám na jednu barvu diod a tím by došlo ke zhoršení viditelnosti zobrazovacích bodů uvnitř kostky. Ani po estetické stránce by to nebylo vhodné. Proto jako základ zobrazení byla zvolena multiplexace po jednotlivých patrech. Kostka se prochází po patrech, musí to být dostatečně rychlé, aby nebylo vidět pohasínání. Anody všech diod jednoho patra jsou spojeny, spínáním proudu do katod se vybírá konkrétní dioda. V každém patře se nachází 64 diod, které je potřeba mít možnost individuálně rozsvítit. Ukazuje se jako výhodné použít posuvný registr, kde se 64 pozic nejprve sériově naplní odpovídajícími daty a poté se připojí katody diod. Samotné rozsvícení diody je třeba řešit s ohledem na potřebný proud, takže buď přímo posuvný registr musí být schopen dodat dostatečný proud, nebo musí být doplněn vhodným budičem. Díky multiplexaci se celá tato hardwarová část realizuje pouze jednou a následně se využívá s různými daty pro rozsvěcení každého patra. Tím máme jednodušší i řídicí hardware. Při nahrávání do budičů LED by měla být kostka zhasnutá, aby nedocházelo k problikávání nahrávaných dat. Toto zhasnutí se bude odehrávat prostřednictvím dalšího tranzistoru označeného jako EN. Tranzistor EN slouží k odpojení všech anod LED ze všech pater najednou a ten přímo odpojuje tranzistory ovládající multiplexaci anod jednotlivých pater LED. Multiplexací je docílen především jednoduší řídicí systém ovládající LED. Díky multiplexaci můžeme na řízení kostky aplikovat desku Arduino UNO, která má na desce 13 digitálních pinů, využitelných pro ovládání celé kostky. Jako budiče budeme vybírat mezi LED Drivery a posuvnými registry. Tyto registry by mohly být použity jako převodníky serial in paralel out. Obě řešení nabízejí svoje výhody. U LED Driverů je to větší šířka slova oproti posuvným registrům či jednoduše nastavitelný přesný proud přes všechny LED. Výhoda posuvných registrů je jednoduchost aplikace a především cena. Při konstrukci samotné LED krychle je důležité vybrat vhodné LED a dbát na čtyři základní hlediska, tj. svítivost, vyzařovací úhel, typ pouzdra, dostupnost a cena na trhu. Podrobný rozpis všech důležitých vlastností je v kapitole 3.1. Při realizaci kostky pouze jednobarevnými LED se celá konstrukce zjednoduší. Pro lepší efekty na kostce je dobré mít kostku vícebarevnou, ideálně v zastoupení barev červená, zelená
9
a modrá (RGB). Díky nim je možné realizovat jakoukoliv další barvu. Vícebarevná kostka po koncepční stránce znamená mít více kostek realizovaných jedním hardwarem – fyzickou kostkou složenou z vícebarevných diod. Konstrukčně se s každou barvou zvyšuje náročnost nejen na zapojení a program v procesorové jednotce, ale i na realizaci hardware. Podle zvolených řadičů se nám zvyšuje i počet pinů potřebných pro nahrání dat do budičů LED a také každá barva LED potřebuje vlastní budiče. V práci zmiňuji také pozorovací úhel. Není tím myšlen vyzařovací úhel LED, ale dobrá viditelnost svítící LED ze všech stran diody. Jako procesorová jednotka je zvoleno Arduino UNO viz kapitola 3.4. Jako další možné
řešení
je
využití
programovatelného
logického
pole
(FPGA).
Z programovatelného logického pole lze vytvořit vlastní logický IO pomocí naprogramování logických buněk, kterých běžné FPGA má několik stovek až desítek tisíc podle typu a výrobce. Výhodou je velký počet výstupních pinů, ale při jejich použití musíme každý jednotlivý pin posílit tranzistorem. S FPGA by se dalo využít přímého řízení každé diody zvlášť. To s sebou nese nevýhody v podobě velké spotřeby. Proto bylo už při zadávání práce rozhodnuto o platformě Arduino. Jednotlivé součástky jsou propojeny pomocí desek plošných spojů, které jsou navrženy i vyrobeny v rámci této práce. Jednotlivé vývody LED jsou zapájeny do první desky plošných spojů, která je pomocí kontaktů spojena s druhou DPS, na které se nacházejí budiče LED. První deska tedy musí být o rozměrech základny kostky. Pro lepší konstrukci je vhodné, aby DPS měla otvory pro sešroubování s druhou DPS, a proto je třeba udělat DPS větší než je základna LED krychle. Do druhé desky je připojena i procesorová jednotka Arduino. K návrhu DPS je využito návrhové prostředí. Pro jeho dřívější užívání bylo zvoleno prostředí Eagle, v němž se nejprve vytvoří schéma celého zapojení a následně se vygeneruje předloha pro výrobu DPS viz kapitola 4.2. Ovládání kostky neobsahuje žádný ovládací prvek v podobě tlačítek. Pro ovládání, výběr požadovaných funkcí i nahrání dat slouží komunikační linky. Komunikace probíhá v podobě protokolu, který je složen ze dvou částí, a to řídicího předdefinovaného znaku a dat odpovídajících významu tohoto znaku. Podrobný popis podoby protokolu je v kapitole 5.1. Pokud budeme využívat funkce zobrazení řetězce, je zapotřebí mít definovanou sadu znaků pro zobrazení. Tato sada je definována 10
v programu procesorové jednotky Arduino. Po příjmu dat a uplatnění funkce uvozené řídicím znakem bude kostka zpracovaná data zobrazovat. Páteří celého programu je pole Kostka. Výpis z pole Kostka dále ukazuji v kapitole 6.5. Do tohoto pole se zpracovaná data nahrají a část kódu zajišťující zobrazení na LED krychli data vyčte a použije pro rozsvícení konkrétních LED. Před návrhem DPS či vývojem programu bylo třeba uvážit, jak bude kostka rozvržena
a
jaká
bude
adresace
jednotlivých
LED.
Kostka
je
3D,
tedy
trojdimenzionální. Pro adresování jednotlivých LED by se tady dala aplikovat možnost, adresace každé LED v souřadném systému X, Y, Z. V dalším textu bude souřadnice Y odpovídat vybranému patru, souřadnice X a Z potom výběru konkrétní LED z matice patra. Řadiče pro spínání LED na určitém patře byly tedy zapojeny do série a hardwarově byla kostka řešena jako dvourozměrné pole o rozměrech 8 x 64 zobrazovacích buněk. Výřez schématu ukazující toto propojení viz Obrázek 2-1, kde do prvního IO (IC9) do vstupů AB je přiveden datový vodič z kontroléru a do druhého IO (IC10) je vstup (QA) připojen z výstupu prvního (QH). Díky osmi takto sériově řazeným posuvným registrům bylo docíleno převodníku seriál-paralel o šířce slova 64 bitů. Programem je také kostka virtuálně řešena jako dvojrozměrné pole viz kapitola 3.7.
11
Obrázek 2-1: Řazení posuvných registrů
V následujícím popisu (Obrázek 2-2) je symbolicky vysvětlen princip multiplexace a plnění registrů. Procesorová jednotka dostala za úkol zobrazit znak A. Řekněme, že již jednou celý zobrazovací cyklus proběhl a lidský mozek vyhodnotil rozsvícené body na krychli právě jako znak A. Bíle zvýrazněné patro je právě nahráváno do posuvných registrů. V poli Kostka jsou právě tato data: {{00011000}, {00100100}, {00100100}, {01000010}, {01000010}, {01111110}, {01000010}, {01000010}};
12
Tučně zvýrazněný řádek se nyní bude nahrávat do posuvných registrů. Po naplnění registrů se sepne tranzistor EN a řádek se rozsvítí. Tento zobrazovací cyklus se neustále opakuje pro každé patro.
Obrázek 2-2: Symbolické naplnění registrů
13
3 Rozvržení konstrukce a výběr komponent Výběr vhodných komponent hraje při návrhu velmi podstatnou roli. Je třeba zohlednit rychlost multiplexace, proudy LED, zpracování dat i případnou komunikaci. Vše se musí, pokud možno, odehrávat v co nejkratších časech. V podkapitolách jsou tyto problematiky podrobněji popsány.
3.1 LED 3.1.1 Svítivost Svítivost vyjadřuje hustotu světelného toku zdroje do všech směrů. Základní jednotkou je kandela [cd] a značka veličiny je velké I. Svítivost je důležitá pro dobrou viditelnost jednotlivých zobrazovacích bodů především ve dne. Musíme si uvědomit, že jednotlivá patra v kostce budou multiplexovaná (viz kapitola 3.6), a proto bude střední svítivost LED nižší než při ukázkovém rozsvícení na zdroji s konstantním proudem. Pro představu jsem vybral červenou (typ 105MR2D) a zelenou (typ 560PG2D) LED o svítivosti 800 mcd při 20 mA, se kterými jsem zkoušel svit při aktivním čase svitu (střídě, duty cycle) T/8 a T/9 kde T je perioda. V běžně osvícené místnosti by LED o této svítivosti byly dostačující. Je ovšem nutno předpokládat, že se kostka nebude používat venku ani na přímém slunci.
3.1.2 Vyzařovací úhel Směrový diagram, viz Obrázek 3-1, znázorňuje závislost intenzity záření na směru a tím je odvozen vyzařovací úhel, který je definován jako úhel směru vyzařování, ve kterém je intenzita záření poloviční oproti intenzitě vyzařování v přímém směru. Jedná se o charakteristiku k již zmíněné zelené LED.
14
Obrázek 3-1: Směrový diagram LED [1]
Výrobce v katalogovém listu uvádí vyzařovací úhel 60°. Tento úhel se dostává při poklesu svítivosti na poloviční hodnotu, v našem případě 30° na obě strany. K realizaci je vhodné použít LED s co nejvyšším vyzařovacím úhlem, aby byl jejich jas dobře patrný ze všech stran kostky. Toto lze částečně nahradit tzv. difúzním pouzdrem LED, viz kapitola 3.1.3.
3.1.3 Typ pouzdra Typem pouzdra rozumíme tvar a materiál plastu, do kterého je LED zalisována. Pro uplatnění v kostce se nejvíce hodí pouzdra s drátovými vývody. Samotný tvar plastu lze vybrat z velmi široké škály, ovšem pro použití v projektu je podstatnější, aby byla splněna jiná kritéria - velký pozorovací úhel a dostatečná svítivost. Ukázku typů pouzder uvádí Obrázek 3-2.
Obrázek 3-2: Ukázka několika typů pouzder LED [2]
Pouzdra LED lze rozdělit na čirá a difúzní. Čirá pouzdra se pro použití na konstrukci kostky nehodí, protože jsou určena ke svícení jedním směrem a mají velmi úzké vyzařovací úhly. Pro projekt 3D LED 15
kostky je třeba, aby bylo možné svit LED pozorovat z různých úhlů, a proto je vhodné použít typ pouzdra, který se nazývá difúzní. Jedná se o technologii, kdy při výrobě LED dojde ke zmatnění (difundování) plastu, v němž je LED zalisována. Difúzní
pouzdra
jsou
převážně
zabarvená
v
barvě
svitu
LED,
ale pro vícebarevné LED se používá bezbarvý plast viz Obrázek 3-2, třetí LED zprava. Difúzní pouzdro rozvádí světlo do celého pouzdra a tím se docílí požadavku velkého pozorovacího úhlu. Tedy při porovnání čirého a difúzního pouzdra, kde obě pouzdra mají stejné objektivní vlastnosti i tvar, docílíme u difúzního pouzdra mnohem lepší pozorovatelnosti i z velkých úhlů. Porovnání difúzní a čiré LED představuje Obrázek 3-3, kde je vpravo LED difúzní a vlevo čirá. Obě LED mají shodnou svítivost i katalogový vyzařovací úhel.
Obrázek 3-3: Porovnání čirého a difúzního pouzdra LED
3.1.4 Pohled na trh Na základě předchozích poznámek je možno shrnout, že pro realizaci 3D kostky s předpokládanou dobou svitu přibližně T/8 (vzhledem k multiplexování 8 pater) je vhodné použít LED s minimální svítivostí 800 mcd s co největším vyzařovacím úhlem, nejlépe v difúzním pouzdře a s drátovými vývody. Při použití LED pouze jedné barvy, například výše zmíněných zelených, se cena bude pohybovat kolem 1,10 Kč/ks (květen 2014). Při výběru LED s možností zobrazení více barev, narazíme na nepřijatelnost ceny. Cena za tříbarevnou (RGB) LED je v české distribuci 27,50 Kč/ks (leden 2014). Při počtu 512 kusů se dostáváme na částku přesahující čtrnáct tisíc korun. Při hledání na světovém trhu lze najít nejlevnější varianty LED, splňující předpoklady pro použití v 3D LED kostce, na aukčních portálech, kde přímo výrobci nabízejí větší počty kusů. Ceny se pohybují kolem 1,10 Kč/ks při koupi 100 kusů 16
(RGB) LED. Jistou nevýhodou může být dodací lhůta kolem 20 dnů a nestálost nabídky, nicméně pro sériovou realizaci by tato možnost představovala zajímavé řešení. Pro realizaci této bakalářské práce byly LED s kompromisními vlastnostmi pořízeny v běžném maloobchodě s elektrickými součástkami za cenu 4,20 Kč/ks. Při rozměrech 3D kostky 8 x 8 x 8 zobrazovacích bodů bylo třeba 512 LED. LED jsou dvoubarevné červeno-zelené, což představuje celkem 1024 svítivých prvků. Použití dvoubarevných LED do budoucna umožní realizovat zajímavější barevné efekty.
3.2 Budiče LED Pro výběr konkrétního typu je třeba splnit tři požadavky, kterými jsou dostatečný proudový výstup, dobrá dostupnost a přijatelná cena. Diody, které byly v realizaci použity, mají maximální trvalý proud 30 mA a impulzní opakovatelný proud 100 mA. Při multiplexaci jednotlivých pater budeme vždy naráz rozsvěcet vybrané LED na aktuálně vybraném patře. Na patře je 64 LED a vždy je musím inicializovat naráz. Proto vyla zvolena možnost sério-paralelního převodu. Po odzkoušení a zvážení vlastností LED driverů a posuvných registrů byly jako řadiče vybrány posuvné registry.
3.2.1 Výstupní proud Pro buzení LED se standardně používají LED Drivery. Mají dostatečně dimenzovaný výstupní proud. Tento proud lze snadno měnit redukcí hodnoty jednoho rezistoru, jako např. u IO typu STP16CP05 [1]. Jako posuvný registr se nabízí typ 74164 [4], který je dostupný v mnoha technologiích. Pro tento projekt je nejvhodnější technologie HCT, u které jsou výstupy dimenzovány na desítky miliampér.
3.2.2 Pohled na trh U ryze českých prodejců je poměrně velký problém s dostupností u již zmíněných LED Driverů, ale posuvné registry jsou běžně dostupné. Posuvný registr lze pořídit do 10 Kč/ks, je ovšem pouze 8bitový. Zmíněný LED Driver je naopak 16bitový. V internetových obchodech lze objednat obojí, ale problém může činit vysoké dovozné, v jehož důsledku se objednávky malého množství kusů nemusí vůbec vyplatit. Navíc cena jednoho LED Driveru se pohybuje kolem 90 Kč/ks bez dopravy. Tabulka 3-1 přináší rozpětí cen IO. 17
Tabulka 3-1: Rozpětí cen na trhu
Kč/ks
DM13A ~ TLC5928 ~ STP16CP05 Kč/ks
9,00 – 15,00
84,00 – 87,00
9,00 – 10,00
84,00
14,27
34,23
74HCT164
Internetové obchody Kamenné obchody Aukční portály
3.3 Spínání pater kostky Při zobrazení určitých obrazců může dojít k situaci, kdy svítí obě barvy všech LED na jednom patře. Svítí tedy celkem 128 diod. To znamená, že proud může krátkodobě dosahovat i přes 3 A. Z tohoto důvodu byl zvolen pro spínání pater tranzistor typu IRF7329 [5], jež je určen pro řízení logickými obvody TTL či CMOS, přičemž tranzistorem může v sepnutém stavu téci trvalý proud až 9,2 A. Tento typ má v jednom pouzdře umístěny dva HEXFET tranzistory s kanálem typu P. Vnitřní uspořádání tranzistoru zobrazuje Obrázek 3-2.
Tabulka 3-2: Tranzistor IRF7329 [5]
3.4 Procesorová jednotka Za procesorovou jednotku pro vývoj kostky bylo zvoleno
Arduino ve verzi
UNO[6], a to především pro jeho jednoduchost, respektování předchozích poznatků a odpadnutí nutnosti návrhu a oživení desky mikrokontroléru. V případě realizace komerčního výrobku
by se zvolil jiný způsob, například v podobě SMD
mikrokontroléru aplikovaného přímo na desce plošných spojů s budiči LED. Arduino je open-source projekt, který jako výpočetní jednotku používá procesory ATmega od společnost ATMEL [7]. Arduino využívá vývojové prostředí vycházející
18
z projektu Wiring [8]. Je možné použít též vývojové prostředí Eclipse [9] s vhodnými knihovnami pro práci s Arduinem v jazyce C/C++. Eclipse je open-source vývojové prostředí. Vznik tohoto prostředí započal uvolněním kódu společností IBM. Nejčastěji se využívá pro programování v jazyce JAVA. Nicméně se jedná o velmi flexibilní prostředí, které lze využít pro vývoj např. v již zmíněném jazyce C/C++, PHP či UML. Obrázek 3-4 ukazuje náhled na vývojové prostředí Eclipse ve verzi Kepler s doinstalovanými knihovnami pro programování Arduina.
Obrázek 3-4: Ukázka vývojového prostředí Eclipse
Vlastní procesor Arduina je připojen k PC pomocí převodníku USB-serial, jenž virtualizuje sériovou linku RS232 [10].
19
RS232 je asynchronní komunikační protokol. Před začátkem komunikace je nutné na obou zařízeních znát přenosovou rychlost a celé složení odesílaného rámce. Při startu odesílání se odešle START bit, který slouží pro synchronizaci vysílače a přijímače. Následně 7-9 bitů dat (datový „byte“). Datový byte se odesílá od nejméně významného bitu (LSB) po nejvýznamnější (MSB). Hned po odeslání datového bytu se odešle STOP bit[11]. Pokud zařízení neodesílá data, nachází se TX v logické nule. Arduino disponuje obvodem pro realizaci sériového přenosu typu UART (universal synchronous / asynchronous receiver and transmitter). Protokol UART využívá stejný komunikační protokol jako RS232, rozdíl je pouze v napětích definujících logické úrovně (jiná fyzická vrstva). Arduino má na UARTu tzv. invertovanou logiku „active low“. Tedy logické nule odpovídá vysoké napětí a logické jedničce odpovídají nízké napětí. Ukázka komunikace pomocí RS232 - viz Obrázek 3-5.
Obrázek 3-5: Rámec komunikace RS232 [11]
Arduino UNO je vybaveno procesorem ATmega328 a přebírá všechny jeho vlastnosti, tj. 8 bitová ALU, 6 PWM výstupů, 6 analogových vstupů, dalších 8 digitálních výstupů, takt 16 MHz, 32 kB paměť na program, čítač reálného času, možnost linky
, přerušení, Low Power mód, 6 režimů spánku atd. [12]. Obrázek 3-6
zobrazuje ATmega328 s popisem možností využití všech pinů a Obrázek 3-7 rozmístění pinů na boardu Arduino, které obvykle využívají TTL.
20
Obrázek 3-6: Popis pinů na ATmega328 [7]
Obrázek 3-7: Popis funkcí pinů na boardu Arduino UNO [13]
Na boardu Arduino je napájecí stabilizátor z vnějšího zdroje napětí. Obrázek 3-8 ukazuje rozložení procesorového boardu Arduino UNO.
21
Obrázek 3-8: Procesorová jednotka Arduino UNO [6]
3.5 Modul Bluetooth Jako jedna z komunikačních možností je komunikace prostřednictvím technologie Bluetooth[14], který je definován standardem IEEE 802.15.1. Bluetooth byl vytvořen společností Ericsson v polovině 90. let 20. století jako bezdrátový ekvivalent sériové komunikace prostřednictvím RS232. První kanál pracuje na frekvenci 2,402 GHz a poslední kanál na 2,480 GHz [16]. Jedná se o bezlicenční pásmo, které používá například Wi-Fi. Celé frekvenční pásmo je rozděleno do 79 kanálů s rozestupem 1 MHz (Bluetooth4.0 - 2MHz – 40 kanálů). Pro potlačení interference s dalšími signály a následné ztrátě dat se používá metoda kmitočtových skoků. Každý skok proběhne jednou za 625 mikrosekund, tedy 1600 skoků za sekundu. Kmitočet se také mění po každém dokončeném přenosu, čímž je zajištěno kvalitnější spojení. Modulace signálu se provádí Gaussovskou modulací s frekvenčním klíčováním. Verze 2.0 +EDR využívá modulaci PSK – pro rychlost až 3 Mb/s prostřednictvím 8DPSK. Spojení dvou zařízení je typu Master-slave, kde master je ten, který je aktivní jako první. Master zajišťuje veškeré řízení komunikace, tj. frekvenční skoky, připojuje případnou komunikaci s dalším zařízením a přiděluje komunikační kanály. Pokud jsou zařízení spárována, master začne vysílat na 16 frekvencích, tzv. Page. V případě, že zařízení spárována nejsou, vysílá Inquity a čeká na odpověď. Když odpověď nepřijde, hledá na dalších 16 frekvencích. Teoretických spojení pomocí Master-slave je neomezené množství, ale realita je zcela odlišná. Master dokáže koordinovat maximálně sedm zařízení v režimu slave. Je však možné, aby jeden slave byl koordinován dvěma mastery. Pokud chceme spárovat dvě zařízení, musejí obě umět pracovat ve stejném profilu, který je na nejvyšší softwarové úrovni. Profilem se rozumí soubor instrukcí, 22
jako příklad uvádím několik profilů komunikace mezi mobilním telefonem a sluchátky viz Tabulka 3-3. Tabulka 3-3: Ukázka profilů Bluetooth
Zkratka profilu HSP A2DP AVRCP PBAP
Název profilu
Funkce profilu
Headset Profile Advanced Audio Distribution Profile Audio/Video Remote Control Profile Phone Book Acces Profile
Přenos hovoru Dvoukanálový přenos hudby Umožňuje ovládat zařízení přehrávající video či hudbu Zpřístupňuje zařízení přístup ke kontaktům v telefonu (zobrazí iniciály vlajícího)
Rozdělení zařízení podle vzdálenosti se dělí do tříd, což vyobrazuje Tabulka 3-4. Tabulka 3-4: Rozdělení zařízení Bluetooth podle tříd [15]
Maximální vyzářený výkon Přibližný dosah mW dBm m Class 1 100 20 100 Class 2 2,5 4 10 Class 3 1 0 1
Tabulka 3-5 popisuje verze zařízení podle rychlosti. Tabulka 3-5: Verze zařízení Bluetooth [15]
Maximální přenos Maximální propustnost Verze 1.2 1 Mbit/s 0,7 Mbit/s Verze 2.0 + EDR 3 Mbit/s 1,4 Mbit/s Verze 3.0 + HS 24 Mbit/s Verze 4.0 24 Mbit/s
Zajímavostí je, že Bluetooth moduly do USB se dají koupit za několik set korun, u modulů Bluetooth - RS232 je situace jiná. Tyto moduly se běžně prodávají řádově v tisícikorunách. To je velmi zajímavé, protože modul HC-05 má linku RS232 i USB a lze jej pořídit za částku nepřesahující sto korun. Jedinou nevýhodou je jeho dostupnost, protože se dováží i prodává pouze v Číně, v dnešní době však není problém jej odtud objednat. Tento modul se pro použití komunikace prostřednictvím Bluetooth jeví jako jednoduché řešení. Pokud je modul osazen na standardizovaném boardu,
23
lze ho napájet 5 V, jeho maximální odběr proudu je 35 mA a lze ho využít pro komunikaci přes RS232 [16]. Modul HC-05 ukazuje Obrázek 3-9.
Obrázek 3-9: Modul Bluetooth HC-05
3.6 Multiplexování Multiplexace světelných zdrojů je přepínání mezi několika signály a pokud se provádí dostatečně rychle, lidský zrak nezaznamená jednotlivý příchod signálů. Celkový vjem působí tak, jakoby signály přišly zároveň. V realizaci kostky jsou multiplexovaná patra. To znamená, že každé patro v určitém okamžiku svítí samostatně a ostatní patra jsou zhasnutá. Frekvence, kdy dochází k opětovnému rozsvícení daného patra, by podle subjektivního pozorování neměla klesnout pod 130 Hz, jinak lidský zrak zaznamená blikání či vlnění zobrazeného obrazce. Z toho plyne, že obnovovací frekvence všech pater nesmí klesnout pod 1 040 Hz. Rychlost zpracování znakových vjemů se může u každého jedince lišit, ale obecně lze říci, že 1 kHz je již nedostačující obnovovací frekvence. Tento aspekt je zohledněn v obsluhujícím programu, který je popsán v kapitole 5.
3.7 Souřadný systém kostky Jak bylo předesláno, topologicky je hardwarový návrh kostky složen z 8 matic po 64 diodách, přičemž každá matice odpovídá jednomu patru kostky. Kostka má pro lepší představivost, ale i pro užití funkce rozsvícení LED podle jednotlivých souřadnic, určený souřadný systém v podobě X, Y, Z. Softwarově je kostka uložena do dvourozměrného pole typu byte s názvem Kostka. První souřadnice je patro, 24
druhá souřadnice představuje stěnu. Jako třetí souřadnice se používá vlastní hodnota buňky na dané souřadnici. Programovému řešení plnění dat do řadičů se věnuje Kapitola 5.2. Obrázek 3-10 a vyobrazuje soustavu souřadnic přímo realizovanou na kostce.
Obrázek 3-10: Soustava souřadnic na kostce
25
4 Konstrukce kostky Na internetu lze pod pojmem 3D LED CUBE najít spoustu zajímavých návodů na konstrukci podobné kostky. Zvolil jsem realizaci, která se skládá ze třech částí, tj. kostky z LED, desek plošných spojů a procesorové jednotky s modulem Bluetooth.
4.1 Kostka z LED Samotná realizace kostky započala navrtáním děr ve stojanové vrtačce do laminátové desky s otvory v mřížce o rozteči 20 x 20 mm, jak vyobrazuje Obrázek 4-1. Dále byly natvarovány ohebné vývody LED, aby nedošlo k nežádoucímu kontaktu v konstrukci. Zasazením diod do otvorů v desce a jejich postupného pájení bylo vytvořeno osm pater.
Obrázek 4-1: Laminátová deska s LED připravenými na pájení
26
Jednotlivá patra jsou k sobě pájena za pomoci jednoduché konstrukce, která pomohla zajistit přesnou vzdálenost pater 20 mm od sebe, viz Obrázek 4-2.
Obrázek 4-2: Pájení 7. patra
4.2 Desky plošných spojů Pro návrh DPS jsem použil program EAGLE 6.4. Eagle je komplexní návrhové prostředí pro návrh DPS, elektrických schémat. Při vytváření schémat můžeme využít rozsáhlé knihovny s IO, pasivními součástkami, konstrukčním materiálem atd. Celou kompozici DPS jsem rozdělil na dvě desky. Na horní desce jsou pouze cesty pro svedení vývodů diod do potřebného pořadí a na spodní desce jsou akční členy. Do spodní desky je připojeno Arduino a napájení.
4.2.1 Horní deska Jednotlivé vývody katod LED jsou rozmístěny po celé ploše spodní podstavy kostky, proto bylo zapotřebí tyto vývody uspořádat pro přehledné propojení s posuvnými registry. V levém horním rohu se nacházejí jednotlivé vývody pro společné anody každého patra diod kostky. Obrázek 4-3 prezentuje jednotlivé spoje na desce. 27
Obrázek 4-3: Horní deska DPS
4.2.2 Spodní deska Na spodní desce se nacházejí všechny elektronické součástky. Pro náročnost propojení musí být deska oboustranná. Desky plošných spojů byly vyrobeny tzv. fotocestou. Místo prokovů
použito drátových propojek, zapájených z obou stran.
K SMD tranzistorům jsou vytvořeny dostatečně velké přívody pro lepší odvod tepla, které jsou vhodně dimenzované i proudově. Efektivní odběr kostky není extrémní, ale impulzně může být odběr přes 3 A, na což je třeba brát zřetel. Anodové kontakty pater jsou proto mezi deskami zdvojené. Procesorová jednotka je připojena pomocí tří trojic datových kontaktů a kontaktu pro enable. Samozřejmostí je propojení země.
28
Celá kostka se napájí pomocí zdvojených šroubovacích kontaktů. Předlohu plošných spojů obou vrstev ukazuje Obrázek 4-4.
Obrázek 4-4: Spodní deska DPS
29
4.3 Bluetooth modul Bluetooth modul je k procesorové jednotce připojen pomocí plochého kabelu se čtyřmi vodiči, z nichž dva jsou datové a dva napájecí. Modul lze napájet jak 3,3 V, tak i 5 V. Deska plošných spojů, na které je modul Bluetooth připájen, obsahuje přizpůsobovací zdroj napětí a informační LED, jak ukazuje Obrázek 3-1. Způsob připojení modulu k procesorové jednotce vyobrazuje Obrázek 4-5.
Obrázek 4-5: Připojení modulu Bluetooth k procesorové jednotce
30
5 Program v procesorové jednotce Zásadní částí práce je řídicí program v procesorové jednotce. Program musí umožňovat obsluhu příjem dat, jejich interpretování a vytvoření nové datové posloupnosti, kterou se naplní posuvné registry. Je zapotřebí, aby veškeré operace probíhaly v co nejkratším čase, aby nedošlo ke zmenšení frekvence, na níž probíhá multiplexace pater pod kritickou hodnotu, kdy už začínáme vnímat, že kostka bliká. Tato kapitola je věnována implementaci všech zmiňovaných částí jako je příjem dat po sériové lince, prezentace přijatých dat a jejich zpracování, ale i vlastní plnění posuvných registrů.
5.1 Příjem dat Protokol pro komunikaci po sériové lince byl navržen tak, že prvním znakem je znak řídicí, který určuje typ následujících dat, respektive jejich účel. Podle řídicího znaku jsou pak data interpretována a následně zpracována. Tabulka 5-1 uvádí všechny řídicí znaky, jejich popis i ukázku celé poslané sekvence. U poslané sekvence se vždy počítá s tím, že data budou přijata v pořádku a neprovádí se žádná kontrola přijatých dat. Tabulka 5-1: Řídicí znaky a jejich význam
Řídicí znak
Význam
Příklad
%
Přímo zobrazí odeslané znaky v intervalu 1s Souřadnice rozsvícených diod
%000111444
*
Nastaví stěnu zobrazení znaku
*4
$
Vybere barvu
$A
#
#3D CUBE
Při využití funkce přímého zobrazení řetězce (uvozuje znak #) je potřeba mít předdefinovanou knihovnu, v níž je vyjádřen tvar jednotlivých znaků. Tato knihovna znaků je definována prostřednictvím pole písmena, ve které jsou binárně vyjádřeny tvary jednotlivých písmen. Pole pismena je dvourozměrné pole, kde řádky jsou jednotlivé znaky a sloupce uvozují jednotlivé souřadnice. V ukázce je vyobrazeno definování znaku 3.
31
/*3*/{ B00111100, B01000010, B00000010, B00001100, B00000010, B00000010, B01000010, B00111100},
Funkce nastavení stěny zobrazovaného znaku (uvozuje znak *) je vázána na funkci zobrazení řetězce. Nastavení stěny slouží ke změně stěny, na níž se přehrává sekvence znaků. Funkce vyber barvy (uvozuje znak $)je opět vázaná na funkci přehrávání řetězce. Výběr barvy je plně vázán na typ zvolených LED. Jak bylo již předesláno, byly zvoleny červeno-zelené LED. Tudíž si pomocí funkce vyber barvy lze zvolit buďto červenou nebo zelenou barvu. Při svitu obou barev můžeme složit barvu oranžovou.
V následující části kódu je nástin funkce pro čtení dat ze sériové linky. byte cic=0; if(Serial.available() > 1){ //Pri prichodu znaku po serive lince se vstoupi do prijmove casti kodu delay(10); //ceka se 10 ms pro spolehlive naplneni bufferu na seriove lince while(Serial.available()){//Dokud neni buffer prazdny inputChars[cic]=Serial.read(); //Do pole inputChars se nacitaji vsechna data z bufferu cic++; } inputChars[cic] = '\0'; //Po vyprazdeni bufferu se nastavi ukoncovaci znak pole
Po načtení dat se zjišťuje jejich význam a následně se vybere příslušná operace prostřednictvím řídicího znaku.
V následující části kódu je patrné, jak pracuje výběr operací podle řídicího znaku. Jako první je uveden příklad funkce pro zobrazování jednotlivých bodů, která je určena řídicím znakem %. Funkce pracuje tak, že pokud v poli imputChars je na první pozici znak %, dojde k vynulování pole Kostka pomocí funkce clrKostka() 32
a tím odstraníme z pole předchozí hodnoty a dále můžeme do pole nahrát body prostřednictvím FOR-cyklu. Pomocí předdefinované funkce bitSet() se nastaví souřadnice v poli Kostka, které se mají rozsvítit. Následně se nastaví režim pro zobrazení ze vstupu souřadnic. To znamená, že se vypne sekundové posouvání znaků, které se aktivuje pouze při zobrazení řetězce znaků.
if(inputChars[0]=='%'){ //Podle ridiciho znaku vybere operaci clrKostka(); //Vynuluje pole Kostka for(byte i = 0; i < (strlen(inputChars)*0,34); i++) { byte x = inputChars[i * 3 + 1]; byte y = inputChars[i * 3 + 2]; byte z = inputChars[i * 3 + 3]; //[X, Y, Z] jednotlivy radek vezme kazde treti cislo z pole vzajemně od se be posunute o jednu bunku z inputChars a tato cisla jsou povazovana za souradnice bitSet(Kostka[y%8][z%8],(x%8)); //bitSet() nastavi do pole Kostka podle souradnic [X, Y, Z] bitovou jednicku (B1) //[y%8] zabrani nastaveni vetsi souradnice nez je cislo 7 – adresovani souradnic //kostky je 0 – 7 ve vsech osach. Pokud je cislo vetsi vydeli se 8 a zbytek po //celociselnem deleni se zapise na misto puvodni souradnice. //Zabrani se tak preteceni znaku mimo kostku. } rezim='%'; //Zmeni rezim zobrazovani – vypne prehraveni znaku }
5.2 Naplnění posuvných registrů Po sestavení řetězce 64 bitů, ve kterém je kódován požadovaný stav zobrazovacích bodů konkrétního patra na kostce, je potřeba posuvné registry naplnit relevantními údaji. To se děje prostřednictvím digitálních výstupů desky Arduino. Arduino disponuje funkcí
digitalWrite()
pro
přímé
nastavování
logických
úrovní
na jednotlivých výstupních pinech. Bohužel se však ukazuje, že tato funkce není vhodná pro účel plnění registrů kostky, neboť je příliš pomalá – při zavolání kontroluje, zda není zapnutý PWM režim na daném pinu, číslo pinu je ve funkci digitálně maskováno, vstupuje se do makra cli a až poté se pomocí IF-ELSE nastavuje požadovaná úroveň na daném pinu. V důsledku pomalé funkce digitalWrite() dochází k pomalému odesílání dat do posuvných registrů a snižuje se frekvence multiplexování pater kostky až na úroveň, kdy je výrazně zřetelné blikání. Proto byl použit jiný přístup pro nastavení logické úrovně, a to prostřednictvím přímé operace AND a OR na portech.
33
Příklad těchto operací ukazuje následující požadavek a jeho řešení. Pro představu vybereme
port
B,
což
prezentuje
název
jednoho
osmibitového
registru
v mikrokontroléru, kde jeho bitová hodnota odpovídá bitovým hodnotám portu a tedy napěťovým úrovním na výstupních pinech. Je-li např. požadavek nastavit na portu B pátý bit (pin) do logické jedničky a neovlivnit ostatní bity stejného portu, pak se provede logický součet (funkcí OR) s bytem, který má na páté pozici log. 1 a ostatní pozice jsou nulové:
Na portu B je nyní číslo B10111100. V jazyce
C
je
možné
implementovat
popsaný
postup
takto:
BV() neboli bit value je makro z knihovny avr/io.h pomocí něhož lze nastavit bitovou jedničku (B1) na danou pozici v bytu. Další ekvivalentní funkcí je například bitSet(). Je-li požadavek nastavit pátý bit daného bytu (např. portu) do logické 0, pak se použije logického součinu (funkce AND) s bytem, kde požadovaný bit je v logické 0 a všechny ostatní jsou v logické jedničce. Prakticky je byte získán negací inverzního bytu podobně jako v první části příkladu. S takto získaným bytem provedeme s portem logický součin a získáme tak požadovaný byte.
Na portu B je nyní požadované binární číslo B10011100. V jazyce
C
je
možné
implementovat
popsaný
postup
takto:
Porovnání rychlosti předdefinované funkce digitalWrite() a použití logických operací uvádí Tabulka 5-2 Test spočíval v cyklickém nastavování logické jedničky a nuly.
34
Tabulka 5-2: Porovnání rychlosti metod nastavení úrovně na pinu [17]
Metoda
Frekvence v kHz
Perioda v ns
Strojní cykly
digitalWrite(5, HIGH);
142
7042
56
PORTB |= _BV(5);
4000
250
2
Vlastní plnění posuvných registrů probíhá synchronně s multiplexací, kde je zapotřebí pomocí programu zajistit správnost nahrávaných dat do registrů spolu s výběrem pater. Buzení anod LED zajišťují tranzistory sloužící nejen k rozsvěcení, ale především k vlastní multiplexaci. Zhasínání tranzistorem EN respektive rozsvěcení LED zajišťují funkce rozsvitKostku() a zhasniKostku(). Pro výběr prvního patra slouží funkce inicializujeVyberPatra() a další patra se v programu vybírají funkcí posunPatro(). Když máme požadované patro, vstoupíme do funkce nahrejPatro(), ve které vybíráme barvu rozsvícených LED, a zároveň tato funkce nahrává data do budičů LED.
35
Smyčka
nahrání
dat
po
multiplexovaných
patrech
je
demonstrovaná
v následující ukázce kódu. for(byte patro=0;patro<8;patro++){ zhasniKostku(); //Dojde ke zhasnuti kostky inicializujeVyberPatra(patro); //Vybere prvni patro posunPatro(patro); //Vybere nasledujici patra v kostce nahrejPatro(patro); //Nahraje data do posuvnych registru rozsvitKostku(); //Dojde k rozsviceni kostky }
V další implementaci je znázorněno čtení z pole Kostka a nahrání dat do budičů LED v aktuálně vybraném patře. Pole Kostka funguje jako výstup z přijímací části a vstup do části zobrazovací. //Do funkce je predana hodnota aktualne vybraneho patra - indexPatra for(byte Stena = 0; Stena < 8; Stena++) {//Vyber steny v poli Kostka for(byte pozice =0; pozice < 8; pozice++){//Vybere pozici na souradnici if((bitRead(Kostka[indexPatra][Stena],pozice)==B1) && ((barva=='A') || (barva =='C')))//bitRead cte bit na pozici "POZICE" z pole Kostka na pozici znak a indexPatra – toto se porovnava jestli je na dane pozici binarni 1 a zaroven se kontroluje barva { PORTB &= ~_BV(2);//LED sviti na log 0. Na pin 2 portu B je //pripojen datovy pin budice LED zelené barvy } else{ PORTB |= _BV(2); //LED zustane zhasnuta na log 1 } if((bitRead(Kostka[indexPatra][Stena],pozice)==B1) && ((barva=='A') || (barva =='B')))//bitRead cte bit na pozici "POZICE" z pole Kostka na pozici znak a indexPatra – toto se porovnava jestli je na dane pozici binarni 1 a zaroven se kontroluje barva { PORTB &= ~_BV(5);//LED sviti na log 0. Na pin 5 portu B je //pripojen datovy pin budice LED cervene barvy } else{ PORTB |= _BV(5); //LED zustane zhasnuta na log 1 } //Potvrzeni hodnoty datovych pinu hodinami pro oba registry obou barvev PORTB |= _BV(4);//HIGH pro cervene PORTB |= _BV(1);//HIGH pro zelene PORTB &= ~_BV(4);//LOW pro cervene PORTB &= ~_BV(1);//LOW pro zelene } }
36
5.3 Připojení modulu Bluetooth Modul Bluetooth není připojený na hardwarovou sériovou linku mikrokontroléru. Připojíme-li k procesorové jednotce USB kabel, je hardwarová sériová linka využita převodníkem USB – serial. Pokud bychom tedy do pinů 0 a 1 připojili ještě modul, došlo by ke kolizi převodníku a modulu. Tomuto stavu je třeba se vyhnout, což je možné vytvořením dalšího sériového portu z jiných výstupních pinů platformy Arduino. Potřebné funkce jsou připraveny v knihovně SoftwareSerial.h. V realizaci kostky byl využit pin 2 jako RX a pin 3 jako TX portu D. Připojení je jako u standardního sériového komunikačního rozhraní. V nadcházející selekci kódu je patrné celé použití softwarového sériového portu. #include <SoftwareSerial.h>//Pripojeni knihovny pro Sofwareserial ... //Definovani Softwaroveho serioveho portu pro pripojeni BT SoftwareSerial BlueSerial(2, 3); // RX~pin2, TX~pin3 ... BlueSerial.begin(9600); //Nastaveni rychlosti pro softwareovy seriovy port BlueSerial.println("BT pripojeno "); //Odeslani potvrzovaci sekvence ... byte cic=0; if(BlueSerial.available() > 1){ do pole ...
//Pri zjisteni prijmu dat dojde k nahrani znaku
...
37
6 Popis realizace zařízení V této kapitole je popsáno použití, zapojení, a nastavení pro komunikaci s kostkou, popis nastavení sériového portu a popis aplikace pro zařízení Android pro komunikaci s technologií Bluetooth.
6.1 Napájení 6.1.1 Napájení LED a řadičů Celé sestavení kostky se standardně napájí ze dvou zdrojů. První zdroj je výkonový a slouží k napájení LED a řadičů. Jeho napětí se smí pohybovat v rozmezí od 3,7 V až do 6 V, typicky doporučeno 5 V. Tento zdroj by měl být dimenzován na efektivní proud 2,5 A, pokud ale budeme chtít rozsvítit vekou část kostky, je třeba ho dimenzovat na maximální možný odběr kostky, a to 4 A. S tímto případem je počítáno, a proto jsou zdvojené napájecí svorky na DPS. Realizaci napájecích svorek ukazuje Obrázek 6-1.
Obrázek 6-1: Napájecí svorka kostky
6.1.2 Napájení procesorové jednotky V případě, že máme připojeno USB k procesorové jednotce, nemusíme se o napájení více starat. USB 2.0 se skládá ze dvou datových vodičů, jednoho vodiče pro společnou zem a jednoho napájecího vodiče. USB 2.0 má na napájecím vodiči typicky 5 V a běžné USB 2.0 se dá zatěžovat proudem až 500 mA. Nyní se již objevují USB zařízení, ze kterých lze odebírat proud o hodnotě až 1,5 A. Nejčastěji to jsou zařízení
38
vybavená USB 3.0 nebo novějším. Takovýto proud ovšem prostřednictvím USB nebudeme potřebovat. Procesorovou jednotku lze napájet též prostřednictvím napájecího konektoru ze zdroje napětí 7 V až 12 V. Pokud nejsou nijak zatížené piny na Arduinu, spotřeba se pohybuje kolem 50 mA. Nicméně piny Arduina při 5 V logice lze zatěžovat až 40 mA na pin. U Arduina není přímo doporučeno výkonové dimenzování napájecího zdroje, ale pravděpodobně je nejlepší se řídit podle spotřeby z pinů a spotřeby dalších prvků na desce Arduino (cca již zmíněných 50 mA). Obrázek 6-1 vyobrazuje USB a napájecí konektor Arduina použitého v kostce.
Obrázek 6-2: USB a napájecí konektor Arduino UNO
39
6.2 Datová komunikace 6.2.1 Komunikace pomocí sériové linky Jak je zmíněno v 3.4, Arduino má implementovaný převodník USB – serial. Tudíž jeho připojení k PC je velmi snadné. Postačí k tomu USB kabel typu A-B. V operačním systému Windows není zpravidla nutné řešit instalaci driveru, jelikož Arduino je zařízení Plug-and-play a instalace driveru proběhne po připojení automaticky. V případě, že pro komunikaci a především pro nahrávání kódu potřebujeme použít jiný program než je Arduino-vývojové prostředí, například prostředí s rozšířením pro Arduino, jako je Eclipse či NetBeans, bude nutno zjistit, jakou definici má sériová komunikace bootloaderu, jinak se nám nepodaří kód do kontroléru nahrát. Pro další komunikaci je pak samozřejmě nutné, aby byly hardwarové vlastnosti komunikace (baud rate, paritní bit, počet stop bitů atd.) nastaveny stejně na obou zařízeních. Například pro navázání komunikace v prostředí Eclipse je zapotřebí nastavit dvě podstatné položky, a to přenosovou rychlost a komunikační port. Přenosovou rychlost je potřeba nastavit stejnou jako je nastaveno v programu Arduino ve funkci Serial.begin(). Komunikační rychlost je v současnosti nastavena na 57 600 baud (bitů za sekundu), lze ji měnit v rozsahu od 300 baud do 115 200 baud.
6.2.2 Komunikace prostřednictvím Bluetooth Ústředním bodem komunikace prostřednictvím technologie Bluetooth je modul HC-05, jak je popsáno v kapitole 0, funguje jako převodník BT-serial. Komunikační rychlost procesorové jednotky a modulu musí být nastavena stejně viz část 0. Hlavní výhodou a hlavním důvodem implementace komunikace prostřednictvím Bluetooth je široká dostupnost zařízení, které disponují Bluetooth modulem – jedná se zejména o prakticky jakýkoliv mobilní telefon či přenosný počítač. Prostřednictvím Bluetooth je tedy možné ovládat kostku z mobilního telefonu z vhodné aplikace. V tomto projektu se předpokládá využití OS Android. Aplikací v prostředí Android, kterou lze použít pro komunikaci po sběrnici Bluetooth, je například Bluetooth Serial Controller, která je vhodná právě pro 40
jednoduché úlohy, jako je třeba 3D kostka. Lze vybrat několik možností použití, z nichž nejvhodnější je TERMINAL MODE [18]. Jedná se o editační řádek ASCII znaků, které lze pomocí tlačítka odesílat do připojeného zařízení. Totéž funguje i z opačného směru – aplikace se tedy chová podobně, jako hyperterminál v systému Windows či např. Serial monitor v Eclipse, viz Obrázek 6-3.
Obrázek 6-3: Náhled na aplikaci Bluetooth Serial Controller
41
6.3 Zobrazování znaků z definované sady V této podkapitole je popis možnosti použití i názorné ukázky. Při inicializaci kostky a navázaném spojení se na terminálu objeví informace, že spojení je navázáno. Obrázek 6-4 a Obrázek 6-5 znázorňují terminál v PC a mobilním telefonu, komunikující přes bezdrátovou technologii Bluetooth. Na kostce se v prvotním stavu rozsvítí jedna LED na souřadnicích [7,7,0]. Náhled uvádí Obrázek 6-6. Po inicializaci se zobrazuje znak mezera. Přibližně jednou za dvacet sekund problikne na kostce jiná dioda, která signalizuje připravenost kostky na příjem dat.
Obrázek 6-4: Navázání komunikace prostřednictvím sériové linky
Obrázek 6-5: Navázání komunikace prostřednictvím Bluetooth
42
Obrázek 6-6: Výchozí stav kostky
V následujících třech vyobrazeních je znázorněno odeslání řetězce ve tvaru 3D CUBE. Tento řetězec má řídicí znak v podobě symbolu #. V tomto případě kostka odeslaný řetězec cyklicky zobrazuje znak po znaku v intervalu jedné sekundy. Pro tuto ukázku funkce je pro odesílání dat použita sériová linka (Obrázek 6-7). Pro zpětné odeslání přijatého řetězce a potvrzení příjmu dat je pro názornost využito zařízení Bluetooth (Obrázek 6-8). Po potvrzení příjmu dat se ihned začne řetězec zobrazovat, jak znázorňuje Obrázek 6-9.
Obrázek 6-7: Odeslání řetězce
43
Obrázek 6-8: Potvrzení příjmu dat
Obrázek 6-9: První znak řetězce
44
Pokud potřebujeme změnit zobrazovací stěnu, použijeme příkaz (např. *5) - viz Obrázek 6-10 a výsledek ukazuje Obrázek 6-11.
Obrázek 6-10: Přesunutí znaků na stěnu č. 5
Obrázek 6-11: Zobrazení 6. stěny
Změnu barvy provedeme příkazem (např. $B či $C) - viz Obrázek 6-12 či Obrázek 6-13. Reakce kostky na příkaz - Obrázek 6-14 či Obrázek 6-15.
Obrázek 6-12: Zobrazit pouze červeně
45
Obrázek 6-13: Zobrazit pouze zeleně
Obrázek 6-14: Svítí pouze červená barva
Obrázek 6-15: Svítí pouze zelená barva
46
6.5 Ovládání kostky v souřadnicovém systému V této části ukázky je naznačeno, jak se využívá další funkce, a to zobrazení po souřadnicích. Tato možnost nahrávání dat je specifikována řídicím znakem %. Čísla za tímto znakem jsou programem rozdělena do trojic a každé trojčíslí představuje souřadnice [X,Y,Z] rozsvíceného bodu. Uvedený příklad odpovídá zobrazení úsečky, která protíná celou kostku. Náhled na kostku ukazuje Obrázek 6-17. Tvar odesílaných dat prezentuje Obrázek 6-16.
Obrázek 6-16: Odesílání dat pro zobrazení po bodech
Obrázek 6-17: Přímka
Pro ukázku, co se v současné době nachází v poli Kostka, jež je uvedeno v kapitole 5, jsem si nechal vypsat toto pole (Obrázek 6-18).
47
Obrázek 6-18: Výpis z pole Kostka po přijetí bodů k zobrazení úsečky
48
7 Závěr Cílem práce bylo navrhnout 3D kostku jak po stránce elektronické a konstrukční, tak po stránce softwarové. Hardware je v podobě jednotlivých dílčích částí rozdělitelný. Celá koncepce se dělí na části LED krychle, deska plošných spojů, procesorová jednotka a Bluetooth. Po připojení napájení a navázání komunikace prostřednictvím některé z komunikačních linek se kostka ovládá pomocí definovaných řídicích znaků a následných dat, jež mohou kostku zhasnout, měnit barvu, převolit mezi zobrazením řetězce nebo jednotlivých bodů. Při výběru LED použitých pro realizaci krychle bylo zapotřebí dodržet některá kritéria - jako velký pozorovací úhel či dostatečná svítivost. Z nabídky diod běžně dostupných v ČR bylo vybíráno z jednobarevných, dvoubarevných i tzv. RGB LED. V zadání práce nebyl požadavek na konkrétní typ diody. Typ dvoubarevných LED použitý pro realizaci je kompromisem zejména mezi cenou, svítivostí a počtem barev. Pro buzení LED se ukázaly vhodnými prvky posuvné registry typu 74HCT164. Tato sada posuvných registrů umožňuje budit paralelně 64 LED, což je počet LED na jednom patře kostky. Aktuální patro je vybíráno jiným signálem a postupné přepínání (multiplexování) pater probíhá tak rychle, že není postřehnutelné lidským zrakem. Na každém posuvném registru, v případě že svítí všechny LED, se na IO rozptyluje okolo 0,5 W. V provedení DIP lze na IO rozptylovat až 0,75 W. Při provozu nebylo hmatatelně znát zahřátí IO. U tranzistorů pro spínání jednotlivých pater a u tranzistoru s funkcí EN je dostatečné proudové dimenzování důležité. Při rozsvícení všech LED je protékající impulzní proud tranzistorem až 4 A. Důsledkem projevování přechodových dějů při vysokém proudu se tranzistor mírně zahřívá. Zpočátku vývoje programu pro řízení kostky bylo při nastavování hodnot na pinech mikrokontroléru využíváno předdefinované funkce digitalWrite(). Ta se už při prvním testování ukázala být pomalá. Následkem toho byla velmi nízká multiplexovací frekvence (okolo 130 Hz) a viditelné přepínáním pater. Další verze programu nastavuje hodnoty pinů pro posuvné registry logickými operacemi s registrem výstupního portu, čímž bylo dosaženo obnovovací frekvence 1 100 Hz.
49
Program do procesorové jednotky Arduino byl vyvíjen v prostředí Eclipse IDE C/C++ Kepler V2 s knihovnami pro programování platformy Arduino. Výhodou je přehlednost a uspořádání tohoto prostředí. Při vývoji jsem ocenil možnost připojení více procesorových jednotek najednou a snadného přepínání mezi nimi nebo správu obou jednotek v sériové komunikaci. V průběhu vývoje bylo rozhodnuto o připojení modulu pro bezdrátovou komunikaci Bluetooth. Modul je připojen pomocí páskového vodiče a vyveden mimo kostku, v dalších modelech by bylo možné jej připojit např. zásuvnými konektory přímo na DPS. Modul Bluetooth HC-05 je třídy 2, to znamená, že má typický dosah ve volném prostoru kolem padesáti metrů. Tato vzdálenost nebyla přímo testována, nicméně spolehlivá komunikace byla navázána na vzdálenost 11 metrů. Komunikace prostřednictvím Bluetooth využívá shodný protokol s komunikací prostřednictvím sériové linky. Arduino UNO má integrovaný převodník USB – serial. Díky převodníku můžeme Arduino snadno připojit k libovolnému PC. Sériová linka je virtualizována prostřednictvím převodníku. Program v procesorové jednotce by se dal do budoucna rozšířit například o rotaci znaku o určitý úhel nebo zpracování dat online. To však znamená další vývoj zručného programátora, neboť vyšší výpočetní náročnost se může projevit snížením multiplexační frekvence. V tuto chvíli je program schopen zpracovávat čtyři operace - cyklické přehrávání řetězce, změna barvy, změna zobrazovací stěny a rozsvícení LED podle souřadnic. Návrh a realizace celé práce byly velmi významné nejenom pro uplatnění (či spíše rozšíření) mých dosavadních dovedností, ale také mi odkryly četné jevy a problémy, které jsem řešil při aplikování. Dlouho jsem se například zabýval problémem, který byl nakonec vyřešen eliminováním zlozvyku v podobě nevhodně použitých deklarací pro číselné proměnné. Důsledkem bylo přetékání paměti RAM a následná ztráta některých důležitých hodnot. U sériové komunikace jsem se setkal s některými jevy, jejichž řešení bylo až na úrovni knihoven sériové linky. Celé zařízení je nyní plně funkční a připraveno pro použití nebo další vývoj.
50
Seznam použité literatury [1] LEDZ.com:
560PG2D.
[online].
[cit.
Dostupné
2014-02-05].
z:
http://ledz.com/led.datasheet/560PG2D.pdf [2] Wikipedia: LEDs in different casings. [online]. [cit. 2014-02-05]. Dostupné z: http://commons.wikimedia.org/wiki/File:Verschiedene_LEDs.jpg [3] STMicroelectronics: STP16CP05Low-voltage 16-bit constant current LED sink driver.
[online].
[cit.
Dostupné
2014-02-05].
z:
http://www.st.com/web/en/catalog/sense_power/FM142/CL1854/SC1573/PF144 684?s_searchtye=keyword [4] NXP Semiconductors N.V.: 74HCT164 8-bit serial-in, parallel-out shift register. [online].
[cit.
2014-02-05].
Dostupné
z:
http://www.nxp.com/products/logic/shift_registers/74HCT164N.html [5] International Rectifier: IRF7329 -12V Dual P-Channel HEXFET Power MOSFET in a SO-8 package. [online]. [cit. 2014-02-07]. Dostupné z: http://www.irf.com/product-info/datasheets/data/irf7329.pdf [6]
Arduino:
UNO.
[online].
[cit.
2014-02-05].
Dostupné
z:
http://arduino.cc/en/Main/ArduinoBoardUno [7]
Atmel:
ATmega328P.
[online].
[cit.
2014-02-05].
Dostupné
z:
http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontrolleratmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet.pdf [8]
Arduino
UNO:
Examplex. [online]. [cit. 2014-02-05]. Dostupné z:
http://arduino.cc/en/Tutorial/HomePage [9]
THE ECLIPSE FOUNDATION. Eclipse: Kepler [online]. [cit. 2014-04-26]. Dostupné z: https://www.eclipse.org/org/
[10] ARC Electronics: RS232 Data Interface. [online]. [cit. 2014-02-07]. Dostupné z: http://www.arcelect.com/rs232.htm [11] Fakulta informačních technologií, VUT v Brně, Ústav počítačových systémů: Analýza dějů na rozhraní RS 232 C. [online]. [cit. 2014-05-02]. Dostupné z: http://www.fit.vutbr.cz/study/courses/PTP/public/texty_lab/uloha9-rs232.pdf [12] Wikipedie:
Arduino.
[online].
[cit.
2014-02-05].
Dostupné
z:
http://cs.wikipedia.org/wiki/Arduino [13] GAMMON, Nick. Arduino Forum: Rev3 pinouts photo. [online]. [cit. 201405-01]. Dostupné z: http://forum.arduino.cc/index.php?topic=84190.0 51
[14] ČEPIČKA, David. PCWORLD. Základy technologie Bluetooth: Původ a rozsah funkcí [online]. http://idg.cz/, 2009 [cit. 2014-04-26]. Dostupné z: http://pcworld.cz/hardware/Zaklady-technologie-Bluetooth-puvod-a-rozsahfunkci-6635 [15] ČÁNSKÝ, Jiří. České vysoké učení technické v Praze FAKULTA ELEKTROTECHNICKÁ. BLUETOOTH [online]. 2006 [cit. 2014-04-26]. Dostupné
z:
http://radio.feld.cvut.cz/personal/mikulak/MK/MK06_semestralky/Bluetooth_ CanskyJ.pdf [16] MAKE:. HC Serial Bluetooth Products: User Instructional Manual [online]. [cit. 2014-04-26]. Dostupné z: http://makezineblog.files.wordpress.com/ 2014/03/hc_hc-05-user-instructions-Bluetooth.pdf [17] BILL. The Mind of Bill Porter: Ready, Set, Oscillate! The Fastest Way to Change
Arduino
Pins.
[online].
[cit.
2014-04-29].
Dostupné
z:
http://www.billporter.info/2010/08/18/ready-set-oscillate-the-fastest-way-tochange-arduino-pins/ [18] NEXT PROTOTYPES. Google play: Bluetooth Serial Controller. [online]. [cit. 2014-05-03].
Dostupné
z:
https://play.google.com/store/apps/details?id=mBluetoothSerialController.nom al
52
Seznam obrázků Obrázek 2-1: Řazení posuvných registrů ........................................................................ 12 Obrázek 2-2: Symbolické naplnění registrů ................................................................... 13 Obrázek 3-1: Směrový diagram LED [1] ....................................................................... 15 Obrázek 3-2: Ukázka několika typů pouzder LED [2] ................................................... 15 Obrázek 3-3: Porovnání čirého a difúzního pouzdra LED ............................................. 16 Obrázek 3-4: Ukázka vývojového prostředí Eclipse ...................................................... 19 Obrázek 3-5: Rámec komunikace RS232 [11] ............................................................... 20 Obrázek 3-6: Popis pinů na ATmega328 [7] .................................................................. 21 Obrázek 3-7: Popis funkcí pinů na boardu Arduino UNO [13] ...................................... 21 Obrázek 3-8: Procesorová jednotka Arduino UNO [6] .................................................. 22 Obrázek 3-9: Modul Bluetooth HC-05 ........................................................................... 24 Obrázek 3-10: Soustava souřadnic na kostce ................................................................. 25 Obrázek 4-1: Laminátová deska s LED připravenými na pájení .................................... 26 Obrázek 4-2: Pájení 7. patra ........................................................................................... 27 Obrázek 4-3: Horní deska DPS ....................................................................................... 28 Obrázek 4-4: Spodní deska DPS ..................................................................................... 29 Obrázek 4-5: Připojení modulu Bluetooth k procesorové jednotce ................................ 30 Obrázek 6-1: Napájecí svorka kostky ............................................................................. 38 Obrázek 6-2: USB a napájecí konektor Arduino UNO .................................................. 39 Obrázek 6-3: Náhled na aplikaci Bluetooth Serial Controller ........................................ 41 Obrázek 6-4: Navázání komunikace prostřednictvím sériové linky ............................... 42 Obrázek 6-5: Navázání komunikace prostřednictvím Bluetooth .................................... 42 Obrázek 6-6: Výchozí stav kostky .................................................................................. 43 Obrázek 6-7: Odeslání řetězce ........................................................................................ 43 Obrázek 6-8: Potvrzení příjmu dat.................................................................................. 44 Obrázek 6-9: První znak řetězce ..................................................................................... 44 Obrázek 6-10: Přesunutí znaků na stěnu č. 5 .................................................................. 45 Obrázek 6-11: Zobrazení 6. stěny ................................................................................... 45 Obrázek 6-12: Zobrazit pouze červeně ........................................................................... 45 Obrázek 6-13: Zobrazit pouze zeleně ............................................................................. 46 Obrázek 6-14: Svítí pouze červená barva ....................................................................... 46 Obrázek 6-15: Svítí pouze zelená barva ......................................................................... 46 Obrázek 6-16: Odesílání dat pro zobrazení po bodech ................................................... 47 Obrázek 6-17: Přímka ..................................................................................................... 47 Obrázek 6-18: Výpis z pole Kostka po přijetí bodů k zobrazení úsečky ........................ 48
53
Seznam použitých zkratek LED
Light Emiting Diode, dioda emitující světlo
3D
Three-dimensional space, trojrozměrný prostor
PWM
Pulse Width Modulation, pulzně šířková modulace
RGB
Red Green Blue, zkratka tří základních barev
IO
Integrovaný obvod
HCT
High-speed CMOS - TTL compatible
A
Ampér, hodnota proudu v ampérech
MOSFET
Metal Oxide Semiconductor Field Effect Transistor, jedná se o
technologii polem řízených tranzistorů Hz
Hertz, jednotka frekvence
FTDI
Future Technology Devices International Ltd, přeneseně se tato zkratka
užívá pro označení převodníků mezi USB a RS232 DPS
Deska plošných spojů, jedná se o laminátovou destičku, na níž je
nanesena měď v podobě spojů mezi součástkami SMD
Surface Mount Device, typ pájení součástek na DPS, kdy se vývody pájí
přímo na desku cd
candela, jednotka svítivosti
B
Byte, jednotka množství dat složena z osmi bitů
b
bit, jednotka množství dat
TTL
Tranzistor Tranzistor Logic, tranzistorová logika IO
c/c++
Generický programovací jazyk
JAVA
Objektový programovací jazyk
PHP
Personal Home Page, programovací jazyk používaný pro webové stránky
UML
Unified Modeling Language, grafický programovací jazyk 54
IBM
International Business Machines Corporation, světoznámá firma
PC
Personal Computer
USB
Universal Seriál Bus, sériová sběrnice
LSB
Least Significant Bit, nejméně významný bit
MSB
Most Significant Bit, nejvýznamnější bit Inter-Integrated Circuit, sériová průmyslová sběrnice
IEEE
Institute of Electrical and Electronical Engineers, Institut pro
elektrotechnické a elektronické inženýrství Wi-Fi
standard bezdrátové komunikace
PSK
Phase-shift keying, fázové modulování
b/s
bit za sekundu, rychlost přenosu dat
W
Watt, jednotka výkonu
dBm
Decibel-miliwatts, jednotka vyzářeného výkonu
m
metr, jednotka vzdálenosti
RX
Reseive data, přijímač dat
TX
Ttransmit data, vysílač dat
V
Volt, jednotka napětí
OS
Operating system
ASCII
American Standard for Information Interchange, standardizované
kódování pro výměnu informací UART
Universal Synchronous / Asynchronous Receiver and Transmitter –
Synchronní / asynchronní sériové rozhraní
55
Přílohy 1 Obsah přiloženého CD Na přiloženém CD se v kořenovém adresáři nachází tato bakalářská práce ve formátu bakalarska_prace.pdf, zdrojový kód pro řízení kostky a program Eclipse, který je připravený pro programování Arduina. Dále pak odkaz na Android aplikaci pro komunikaci prostřednictvím Bluetooth a předlohy DPS z programu Eagle.
56