Pro proJEcT159 jsou použity desky Arduino 2560 Mega. Jedná se o kompletní "malý počítač" na základní desce osazený procesorem, pamětí, obvodem komunikující s USB portem počítače, vstupně výstupními porty a dalšími nutnými prvky. Arduina jsou na jedné straně oblíbené pro svojí jednoduchost a snadnost použití, na stranu druhou jim řada vyspělejších uživatelů naopak ze stejných důvodů nemůže přijít na jméno. Vyrábí se několik typů těchto desek. Arduino 2560 Mega se vyrábí v mnoha klonech z nichž některé nejsou osazeny čipem komunikace s USB kompatibilním s oficiálním instalačním balíkem resp. drivery. Proto je nutné v případě že Arduino nelze nainstalovat a je vybaveno nekompatibilním čipem nainstalovat speciální verzi driveru.
Pro připojení desky Arduina k simulátoru je použitý speciální shield. Tato mezideska byla vyvinutá mým kolegou, za což mu patří velký dík. Jejím úkolem je pouze převést signály z konektoru Arduina na bloky, ke kterým lze připojit vnější zařízení především pomocí konektorů PFL16. Vzhledem k tomu že Arduino má implementovány vnitřní zdvihací odpory, které je možné aktivovat softwarovým příkazem, nemusí být deska použitá pro vstup dat těmito odpory vybavena. Tím se celá konstrukce značně zjednodušuje. Naopak pokud tato deska bude použita pro výstup a opatřena LED svítivými diodami, musí se příslušné odpory k LEDkám samozřejmě přidat.
Pro ovládání Arduin je nutno použít starší verzi 1.0.6 : arduino-1.0.6-windows.zip . Novější verze neumějí aktivovat sériové porty pro provoz. Pokud máte levnější verze Arduin s jiným švábem pro ovládání sériové komunikace je nutno použít ovladač : ch341ser.zip . Tyto Arduina nepracují s ovladači dodávanými v základním programovacím prostředí Arduina.
Kolega Láďa laskavě připravil shield pro Arduino MEGA2560 pro program Eagle : Arduino IN sheil TISK .brd Desku lze objednat u výrobce : http://vyrobadps.webnode.cz/o-nas/
V simulátoru se pro načítání ovládacích prvků a rozsvěcení varovných a informačních tabel používá vstupní a výstupní deska
vždy odděleně
. To znamená, že vstupní deskynačítají stisk či přepnutí ovládacích prvků v kokpitu a vysílají po RS232 kód stisku každé klávesy. Tento unikátní kód je načten do PC
a zde je vyhodnocena příslušná akce. To znamená že je naprosto jedno která deska Arduina a který konkrétní pin je použit pro určitý spínač. Rozhodující
je pouze správné přiřazení konkrétního scan kódu ke správnému spínači v programu nahraném do Arduina.
Vstupní desky
načítají stisk či přepnutí ovládacích prvků v kokpitu a vysílají po RS232 kód stisku každé klávesy. Tento unikátní kód je načten do PC
a zde je vyhodnocena příslušná akce. To znamená že je naprosto jedno která deska Arduina a který konkrétní pin je použit pro určitý spínač. Rozhodující
je pouze správné přiřazení konkrétního scan kódu ke správnému spínači v programu nahraném do Arduina.
Výstupní desky
pouze načítají USB resp. RS232 port z počítače a pokud zjistí že byl použit kód pro tuto desku příslušnou tak buď
zhasnou, nebo rozsvítí příslušné tablo.
Desky Arduino slouží pro jednoduchý vstup a výstup dat po pseudosériové lince USB. Systém komunikace je zcela jednoduchý. Ve zdrojovém programu pro Arduino
jsou nadefinovány v případě vstupní desky (určující je zde PC, to znamená že do PC data vstupují (spínače, tlačítka) a výstupní desky naopak rozsvěcí LEDky)
v textovém souboru jednotlivé akce :
typeCODE[46] = 1; scanCODEpush[46] = 1000; scanCODErelease[46] = 1001; // BATT/EXT
Toto znamená že typ vstupu je spínač. Je přiřazený k pinu 46 Arduina. Když se spínač sepne tak pošle po sériové lince do PC kód 1000. Když se naopak spínač
vypne pošle kód 1001. Program PC v případě že přijme kód 1000 připojí simulovanou baterii k palubní síti letounu a pokud PC přijme kód 1001 baterii odpojí.
Uvedeme si ještě jeden příklad :
typeCODE[10] = 2; scanCODEpush[10] = 1064; scanCODErelease[10] = 0; // Flaps LAND
Zde se jedná o tlačítko, které při stisku pošle do PC kód 1064. To znamená, že program vysune vztlakové klapky do přistávací konfigurace.
Uvedeme si ještě nějaké vlastnosti programu pro Arduina :
POSLI = 4;
Proměnná pošli určuje, kolikrát po sobě zašle Arduino příslušnou instrukci do PC. Protože se komunikace občas někde ztrácí (ještě jsem nezjišťoval kde)
program má zde nastaveno počet zaslání kódu do PC - zde konkrétně zaške kód 3 x po sobě, což snad zajistí větší pravděpodobnost přijetí dat.
TEST = 0;
Pokud je test nastaven na 0 program posílá do PC příslušné kódy. pokud se nastaví proměnná na 1 začne posílat program do PC číslo pinu Arduina, které
je sepnuté. To je ideální při zapojování tlačítek, nebo při hledání chyb.
// Refresh = Refresh + 1;
Zde je počítadlo automatického načítání resp. skenování všech poloh spínačů a tlačítek. Pokud je zde tento řádek zaremovaný tak Arduino nebude
automaticky skenovat stav spínačů a nebude ho posílat do PC. Pokud je řádek aktivní Arduino jednou za čas zjistí stavy všech vstupů a pošle je do PC.
To je pro případ když se ztratí komunikace při sepnutí tlačítka a tak Arduina časem nastaví opravdu aktuální stav všech vstupů.
A teď si uvedeme krátce příklad výstupních desek Arduino. Ten je podstaně jednodušší :
outputON[2] = 163; outputOFF[2] = 164; // GREEN SPEED BRAKE
V definičním souboru pro výstup Arduina číslo 2 je uvedeno následující. Pokud Arduino přijme číslo 163 dojde k rozsvícení LEDky, pokud Arduino
přijme kód 164 dojde ke zhasnutí LEDky signalizující stav vzdušných brzd. Komunikace směrem k Arduinu se neztrácí, proto není zde nutné dělat jakkýkoliv
refresh.
Teď zmíníme další společnou vlastnost obou typů desek tzn. vstupních a výstupních. Na výstupu č. 13 je vždy připojena LEDka. Ta je umístěna jednak na
shieldu a za druhé je zde malý konektor, kterým se vyplatí diodu "vytáhnout" někam na jasně viditelné místo. Jednak při programování Arduina
blikáním dává najevo že uploud programu probíhá. A jakmile je program nahrán a automaticky spuštěn LEDka jednou za čas blikne a dává tím najevo, že
program běží v pořádku.
A nyní jaký má tato pokročilá architektura výhody ? Stačí nadefinovat vstupní a výstupní desky Arduino ve dvou příslušných txt souborech a program
je začne automaticky na uvedených COM adresách vyčítat pro vstup a posílat data pro výstup. Dále je naprosto jedno ke kterému Arduinu či ke kterému pinu
máte konkrétní tlačítko či svítivou diodu připojenou. Rozhodující je pouze definice dat v příslušných programech jednotlivých Arduin.
A teď pro změnu jedna nepříjemná zpráva. Po každém spuštění PC nebo naprogramování kteréhokoliv Arduina je zapotřebí z vývojového prostředí Arduina
spustit pro každý COM sériový monitor !!! Bez tohoto opatření hlavní program v PC havaruje a nespustí se !!! Domnívám se, že spuštěním sériového monitoru¨
Arduina dojde k nakonfigurování parametru každého COM portu, bohužel se mi to přes řadu pokusů nepodařilo nijak napravit čo ověřit že tato teorii je
správná. Navíc z mě dalšího neznámého důvodu vše funguje s verzí 1.0.6 a ne už s verzí vyšší. Zato je ověřeno, že se takto chovají nejméně 4 různé PC
na různých OS, takže jde snad o vlastnost reprodukovatelnou.