Pár slov úvodem
Kompas jsem přidával jako poslední , nad rámec věcí, s nimiž jsem počítal do první verze kokpitu až když byl kokpit téměř hotový. Ale tak nějak mi přišlo, že nesmí chybět a že už nepůjde o nic tak složitého. Projekt od Kapitána Boba ale kompas úplně neobsahoval a tak jsem se porozhlédl po jiných hotových modelech. Nakonec se mi nejvíce zalíbil tento z GA Wet Compass z Thingverse
Objednal jsem tedy nutné elektronické součástky a kompas vytiskl. V Hornbachu jsem koupil hobby plexi sklo a vyřezal si z něj krycí sklo, jenž jsem nechtěl nechat kompas otevřený. To mě trochu doběhlo, hned dvakrát. Jednak jsem také musel upravit hloubku přední části kompasu (+4mm), protože mi to všechno tak nějak nechtělo, s tím přidaným 2mm tlustým plexisklem, do sebe zapadnout. A podruhé, zhruba už po druhé hodině testování celého kokpitu, se mi začala odlepovat samolepka na růžici kompasu a já ho tak musel znovu rozebírat.
Nad rámec originálního designu jsem na horní stěnu kompasu vlepil LED diodu, aby mohl být přístroj osvětlený tak jako rychloměr, umělý horizont a výškoměr. Ale to nevyžadovalo žádné úpravy 3D modelu, jen pistoli s tavným lepidlem.
Galerie
Popis je dobrá věc, ale obrázek je prostě fajn:
Zapojení
Níže je obrázek zapojení kompasu.
Nejde o nic tak složitého. LED dioda pro osvětlení přístroje má anodu (bílý kablík) zapojenou na PWM výstup desky Arduino Mega a katodu (černý kablík) na zem. Jedná se o malou LED diodu na plošném spoji, kde je intengrován i odpor. Zde stačilo jen propojit ji kabely s Arduinem.
Kompasová růžice se otáčí s pomocí jednoho krokového motorku 28BYJ-48, který bývá součástí většiny Arduino kitů. Arduino tyto motorky řídí skrze řadiče ULN2003 nebo jiné podobné. Řadič motoru vyžaduje napájení. Lze ho napájet Arduinem, ale to by to s přibývajícím počtem komponent brzy nezvládlo. Já jsem tedy použil 5V z počítačového zdroje. Motorek je tedy propojen se svým řadičem a s napájením a pak už potřebuje jen čtyři vodiče na propojení řadiče s Arduinem. MobiFlight to pak celé řídí a kompas nám díky tomu ukazuje směr. Barvy kablíků vedoucí od obvodu ULN2003 do Arduina nejsou nijak důležité, šlo spíš o takovou nějakou moji konvenci (IN1 – žlutá, IN2 – zelená, IN3 – modrá, IN4 – bílá) , kterou jsem možná ne ve všech případech dodržel.
U kompasu funguje i automatické nastavení nulové / výchozí polohy. V případě umělého horizontu to bylo řešeno magnetem a Hallovým senzorem. Zde jednak už autor původního modelu navrhl opitcký člen a já jsem si jeho použití chtěl také vyzkoušet, tudíž jsem to neměnil. Optočlen jednoduše řečeno vysílá infračervený paprsek a zkoumá zda a v jaké intenzitě se vrací. Když paprsek narazí na povrch s odrazivými vlastnostmi, optočlen na to zareaguje spíš, než když ho namíříme do vesmíru. Na spodek růžice kompasu jsem tedy bílou akrylovou barvou nakreslil čáru, která představuje nulovou polohu. Mělo to být na pozici severu, ale o pár stupňů mi to nevyšlo. To ale nevadí, to se dá zkorigovat v MobiFlight.
Každopádně, zapojení optočlenu se již může zdát malinko složitější. Má totiž už 4 kontakty. Samozřejmě je vždycky potřeba přečíst si dokumentaci optočlenu, který máte. Já jsem použil typ QRD1114. Optočlen jsou vlastně dvě součástky v jedné. Jednak obsahuje infračervenou diodu, která vysílá onen světelný parsek a pak také fototranzistor, který reaguje na vracející se paprsek (pokud nějaký je). Každá z těchto částí potřebuje dva drátky. Infračervená dioda má anodu (A) spojenou s napájením (5V) (bílý kablík) skrz 330Ω odpor (modrý kablík) a katodu (černý kablík) se zemí. Fototranzistor, ten nám říká, kdy optočlen zaznamenal návrat paprsku. Ten má kolektor (C) také spojen s napájením (5V) (bílý kablík) , tentokrát skrze 10kΩ odpor a současně se vstupem na desce Arduino (žlutý kablík). Emitor (E) je pak spojen se zemí (černý kablík). Toto zapojení pak funguje tak, že pokud optočlen vidí onu bílou čáru na růžici kompasu, je na vstupu do Arduino 0V (LOW) a pokud ji nevidí, je tam 5V (HIGH).
Níže ještě galerie s použitýmí součástkami…snad poslouží k nalazení alternativ, až za pár měsíců nebudou odkazy níže platné 🙁
Programování
Jelikož programování kompasu už bylo mým dílem – na základě zkušeností a okoukání postupů od Kapitána Boba s jeho přístroji, zkusím to zde trochu popsat. Opět tady ale není prostor zabřehávat do základů práce s MobiFlight, do hlubších souvislostí jak to pracuje se simulátory, co je Offset nebo simulátorová proměnná. Očekávám, že to znáte a pokud ne, budete se muset dovzdělat jinde 🙁 Já jen napíšu, jaké jsem použil proměnné, jaké transformace a proč zhruba.
Programování pohybu růžice kompasu
Naprogramování kompasu je jeden záznam v MobiFlight na kartě „Output configs“, tedy tam co se definuje „výstupní chování“ a poté, co máte nadefinován krokový motor 28BYJ-48 jako jeden z výstupů na Arduinu – s tím také počítám, že víte jak. A vrhneme se tedy na ten jeden řádek, který Arduinu říká, co s tím krokovým motorem dělat.
Já jsem na kartě Sim Variable jako zdroj informací použil FSUIPC Offset – 0x02CC. V dokumentaci FSUIPC k offsetům by jste našli, že na tomto offsetu najdete hodnotu indikovaných stupňů na kompasu – tedy hodnotu, co ukazuje kompas v simulátoru. A to je to co chceme, aby nám ukazoval i fyzický (vytištěný) kompas. Hodnota na offsetu je 8 bajtový Double, v MobiFlight tedy nastavíme Value type => Float (ten přímo Double nemá) a velikost v bajtech na 8. Teď tedy MobiFlight ví, že si má číst údaje kompasu, což bude destinné čílo mezi 0 a 360. Ale co tím? Chceme podle toho točit s krokovým motorem tak, aby nám stejnou hodnotu ukazoval i fyzický kompas. Přeskočme tedy nyní na kartu Display:
Zde vybereme v sekci „Display type“ parametr Choose => Output Device, Module => Arduino deska ke které máte připojen krokový motor od kompasu a Use type of => Stepper. V sekci „Display settings“ vybereme Stepper => krokový motor co nám řídí kompas. Display scale nastavíme na 1000 (myslím že je to výchozí hodnota). Compass Mode musí být zaškrtnuto. To vlastně říká: „Hej, když otočíš krokovým motorem o celých 360 stupňů, nevracej se zpátky na nulu ale pokračuj dále…“. Když toto nezaškrtnete, kompas by se vždycky po dosažení otáčky o celých 360 stupňů nejdříve otočil o 360 do protisměru a pak terpve by začal točit další hodnotu. Hodnoty v „Advanced stepper settings“ jsou myslím výchozí, opiště je z obrázku. Souvisí s rychlostí otáčení a spadají do kategorie „nebudeme do nich teď vrtat“. Vraťte se na kartu Modify, kterou jsme přeskočili:
Na této kartě je možné z hodnoty, kterou MobiFlight získá ze simulátoru, udělat úplně jinou hodnotu. Zde například, MobiFlight dostává ze simulátoru desetinné číslo od 0 do 360. Krokový motor ale očekává, že mu MobiFlight pošle hodnotu od 0 do 1000 – což je otáčka krokového motoru o 360 stupňů. Ano, mohli by jsme nastavit krokovému motoru Display scale na kartě Display na 360, abychom to srovnali. Pak bychom ale trochu přišli o výhodu přesnosti desetinného čísla, protože bychom mohli s krokovým motorem točit vlastně jen po celých stupních. Rozlišení 1000 umožní jemnější otáčení růžicí kompasu. Musíme ale tedy tu hodnotu 360 naroubovat na 1000. Přes tlačítko Add Modifier přidejte modifikátor typu Transformation a do Expression napiště výraz z obrázku:
((1000/360*(-$))-38)
(1000 / 360 * (-$)) – to je ten přepočet, kterým naroubujeme hodnotu 0-360 ze simulátoru na rozlišení 1000 krokového motoru. $ v MobiFlight zastupuje hodnotu získanou ze simulátoru. Mínus je před ní kvůli směru otáčení krokového motoru. To je na vyzkoušení, když se Vám motor točí na opačnou stranu, než chcete, musíte změnit polaritu hodnoty, kterou mu MobiFlight posílá. V tomto případě jsem musel mínus použít, aby se mi kompas točil správně s kompasem v simulátoru. A těch -38 je moje kompenzace pro „nulovou hodnotu“ kompasu. Vzpomínáte, jak jsem někde v zapojení psal, že jsem tu bílou čáru na spodku růžice kompasu, s pomocí které optický senzor, respektive MobiFligh pozná, kde má můj kompas nulovou hodnotu (sever), nenakreslil úplně přesně? Tímto jsem to zkorigoval. To je tedy také číslo, které si musíte najít metodou pokus-omyl.
Programování „podsvícení“ kompasu
Jak víte, kompas, stejně jako trojice záložních přístrojů – rychloměr, umělý horizont a výškoměr obsahují LED diodu pro „podsvícení“ – osvětlení přístrojů. Níže popíšu její naprogramování (ostatní přístroje to mají jako přes kopírák).
Po přidání záznamu v MobiFlight, začneme zase na kartě Sim Variable:
Jako zdrojovou proměnnou pro podsvícení jsem prozatím použil „předdefinovanou“ proměnnou z MSFS – Backlight STDBY Ind z letadla Cessna 172. Zatím jsem nenašel nějakou univerzálnější. Ta nabývá hodnoty 0-100 (je v procentech). Podle této hodnoty chceme řídit jas diody modulací PWM. V MobiFlight to znamená poslat na výstup, kde je dioda, hodnotu od 0 od 255 (0 – zhasnuto, 255 – maximální rozsvícení). Potřebnou transformaci nadefinujeme na kartě Modify:
255 / 100 * $
Tento výraz, jenž přepočítává hodnotu 0-100 na 0-255 snad není potřeba extra vysvětlovat 🙂
Na kartě Display pak jen zbývá nadefinovat, že podle této vypočtené hodnoty má MobiFlight nastavit PWM výstup na dané LED diodě.
V sekci „Display type“ tedy nastavíme Choose => Output Device, Module => Arduino deska ke které je připojena LED dioda, Use type of => LED / Output. V sekci „Display settings“ pak Select Pins => LED dioda kompasu (nebo libovolného jiného přístroje) a zaškrtnout volbu PWM Mode (bez toho by to fungovalo jen jako zapnuto/vypnuto, bez regulace jasu).
Ke stažení
Níže si můžete stáhnout archiv, který obsahuje jak původní soubory kompasu z Thingeverse, tak mé modifikované a přidané soubory:
Pokud chcete jen panely pro namotnování elektroniky k přístrojům:
Programování MobiFlight celého kokpitu:
Odkazy
Začněme odkazy na zdrojové soubory….
- GA Wet Compass (https://www.thingiverse.com/thing:4810513)
A pár odkazů na použité součástky:
- Arduino Mega2560
- Krokový motor 28BYJ-48
- Řadič ULN2003 pro krokový motor
- ONSEMI (FAIRCHILD) QRD1114 reflexní optočlen
- Odpor 330Ω
- Odpor 10kΩ
- 3V-5V 40mA SMD bílý LED modul pro Lilypad
- Hobby plexi sklo, tloušťka 2mm – to jsem použil pro vyřezání krycího skla
A použitý software: