Doma vyrobený rotátor pre satelitný príjem – Projekt Satnogs. Diel druhý.

V prvej časti článku ste sa dozvedeli o tom, ako som skladal mechaniku a elektroniku rotátora a antény. Teraz sa presunieme do ostrej prevádzky, priamo do terénu. Najprv však niečo o tom, ako sa s rotátorom komunikuje.

Rotátor sa pripája cez Arduino USB, ktoré rovno aj napája riadiacu elektroniku. Nie však motory – na to treba osobitný zdroj napájania, v mojom prípade 12 V. Najprv pripojíme týchto 12 V a potom zapojíme USB do počítača. Rotátor sa začne otáčať, kým v oboch osiach nenájde nulovú pozíciu. Táto pozícia je určená optickými snímačmi. Dá sa mechanicky upraviť pootočením krúžkov s výbežkom, ktoré prechádzajú cez optické snímače.

Po pripojení USB do počítača sa nám objaví v systéme nový COM port. Môžeme ho otvoriť v terminálovom programe, napr. Tera term (https://ttssh2.osdn.jp/index.html.en). Parametre sú 19200 Bd, 8 N 1. Používa sa protokol Easycomm II (http://www.mustbeart.com/software/easycomm.txt).

Správa vyzerá nasledovne:

AZaaa.a ELeee.e\n

kde aaa.a je azimut, eee.e je elevácia, oboje v uhlových stupňoch. \n je znak nového riadku. Dĺžka čísla nie je fixná, teda napríklad

AZ60.4 EL45.2\n

je platná správa pre natočenie azimutu na 60,4 ° a elevácie na 45,2 °. Hurá, vieme otáčať rotátorom! Po chvíli zábavy a radosti z vrčiaceho a otáčajúceho sa čuda by bolo dobré, keby to vypisovanie uhlov do terminálu za nás prebral nejaký softvér. Najprv ale potrebujeme vedieť, kam vlastne chceme otočiť anténu. Na toto je vhodný napr. softvér Orbitron, ktorý som spomenul už v predchádzajúcej časti. Hovoril som aj, že je potrebné mať aktuálne súradnice TLE a správne zadanú našu polohu (Location). Zvolíme si satelit, ktorý chceme sledovať a v tabe Rotor/Radio vidíme vypočítané uhly pre azimut a eleváciu z našej polohy smerom k satelitu. Toto je smer, na ktorý chceme otočiť anténu.

 

Obr.1: Orbitron počíta hodnoty uhlov pre azimut a eleváciu

 

Chýba nám už len pravidelne posielať tieto čísla do rotátora. To sa robí pomocou programu DDE Client, ktorý sa spustí cez Orbitron a posiela údaje ďalej na COM port. Podrobný návod aj program na stiahnutie je tu (http://tripsintech.com/orbitron-dde-azimuth-elevation-to-serial/). Aby to nebolo také jednoduché – ono to nefunguje. DDE Client nám ponúka dve možnosti, ako má vyzerať výstupná správa. Prepína sa to možnosťou „Split out Az and El“. Keď možnosť nezvolíte, správa vyzerá nasledovne:

SNSKCUBE AZ47.1 EL-61.7 DN145001550 UP144998450

Keď zvolíte Split out, posiela to takéto správy:

AZ:46.9,EL:-61.4

 

Obr.2: DDE Client posiela na sériovú linku príkazy pre rotátor

 

Tá prvá vyzerá dobre, až na ten začiatok, ktorý je tam navyše. Preto sa to nevyparsuje. Tá druhá správa má správny začiatok, ale sú tam navyše dvojbodky a čiarka, takže to tiež nefunguje. Ako najjednoduchšie mi prišlo riešiť to ďalšou úpravou firmvéru. Upravil som to tak, že to berie aj formát s dvojbodkami a čiarkou. Strávil som s tým veľa času. Robil som to v teréne a nemal som možnosti vidieť, čo sa deje na sériovej linke, čo tam program posiela. Nemohol som si ani poslať nejaký kontrolný výpis, pretože sériovú linku ovládal DDE Client. V teréne sa mi to vyriešiť nepodarilo, ale napriek tomu sme s Jakubom na Vrchteplej zachytili veľa dát z skCUBE, aj iných cubesatov. Anténu som otáčal tak, že som neustále prepisoval súradnice z Orbitronu do Tera termu. Neskôr som sa vrátil k problému nefunkčnej komunikácie. Pomocou programu USR-VCOM (http://www.usriot.com/usr-vcom-virtual-serial-software/) som si vytvoril virtuálny COM port a zapol som Data Monitor. To vám vyskočí okienko, v ktorom môže vidieť, čo sa na sériovej linke deje.

 

Obr.3: USR-VCOM Data Monitor zobrazuje dáta na virtuálnom sériovom porte

 

Všimol som si, že DDE Client zakaždým sériový port otvára a zatvára. Začal som tušiť, že to bude asi problém. Všimol som si totiž, že keď som pripojil Arduino k terminálu, vždy trvalo niekoľko sekúnd, kým začala komunikácia fungovať. Neviem, prečo to tak je, ale asi je to nejak spojené s konkrétnym USB čipom na Arduine (CH340G), prípadne jeho ovládačom v OS. Pripomínam, že išlo o klon Arduina z Číny. Originál Arduino nemá čip CH340G a možno by tento problém vôbec nevznikol. Hneď ma napadlo – čo tak skúsiť to s nejakým iným prevodníkom USB na Serial? Ako to už býva, varil som z toho, čo bolo poruke. Našiel som dosku s prevodníkom FT232RL. Pridrôtoval som Arduino linky TX, RX, GND k prevodníku. Odpojil som Arduino USB a pripojil som ho k prevodníku. Pripojil som 12 V napájanie k Arduinu, pretože už nie je napájané z USB.

V systéme mi vznikol iný COM port po pripojení prevodníka k USB. V DDE Client som nastavil nový COM port. Tadá – konečne to funguje! Rotátor sám otáča anténu smerom k zvolenému satelitu, paráda!

Máme teda vyrobenú smerovú anténu, ktorú sme namontovali na rotátor, ktorý nám ju otáča želaným smerom. Už len ostáva čakať, kým nastane prelet nejakého satelitu, napríklad skCube 😊 Zistiť, kedy to bude, môžeme opäť v programe Orbitron, tab Prediction. Zatiaľ skontrolujeme nasledovné:

  • Pri AZ:0.0,EL0.0 anténa smeruje vodorovne, na sever
  • Máme správne zadanú polohu (Location) v Orbitrone
  • Máme aktuálne TLE v Orbitrone
  • Máme naladenú správnu frekvenciu v HDSDR, pričom frekvenciu LO máme napríklad o 0,5 MHz nižšie
  • Máme dostatok miesta na harddisku (aspoň pár GB)

Kontrola smeru antény sa dá dobre robiť pomocou Polárky, Slnka alebo Mesiaca. Prípadne aj podľa mapy a nejakého význačného objektu. Asi vidno, že nemám kompas.. Každopádne, keď raz zistíte, kde je sever, skúste si to zapamätať. Možno zajtra bude zamračené a už sa dobre netrafíte. Ak by ste chceli vedieť aktuálne uhly pre Slnko a Mesiac, v Orbitrone stlačte Ctrl+2. Polárka je azimut 0 a elevácia podľa zemepisnej šírky.

Ešte sa zastavím pri aktualizácii TLE – Jakub mi prezradil dobrú fintu. V tabe Main kliknite na ikonku kluca a kladiva, otvorí sa okno nastavení. Tam v tabe TLE updater kliknite na ikonku Zeme s bleskom. Nové TLE sa vám stiahnu automaticky. Dá sa tam nastaviť aj automatické obnovovanie. Odporúča sa nepoužívať TLE staršie ako týždeň.

Všetko sme skontrolovali, satelit vychádza nad obzor. Môžeme zapnúť nahrávanie (Recording) v HDSDR. Nahrávku si môžeme neskôr prehrať, ako keby sme signál práve prijímali. Takto môžeme neskôr aj v kľude dekódovať dáta.

V programe HDSDR počas preletu sledujeme, ako sa pakety striedajú so signálmi morzeovky. Všetko funguje, ako má. V signále ale vidíme akési čiary, ktoré tam nepatria. Vidíme, že vždy, keď sa rotátor otáča, čiary zmiznú, a potom opäť naskočia. Skúsime nachvíľu odpojiť Arduino od napájania – čiary zmizli.

 

Obr.4: Softvér HDSDR, vidno čiary od rušenia Arduinom a jeden rádiopaket zo skCube.

 

Softvér HDSDR, vidno čiary od rušenia Arduinom a jeden rádiopaket zo skCube.

Keď som si zblízka pozrel dosku čínskeho klonu Arduina, domyslel som si, odkiaľ sa tie čiary asi berú. V blízkosti mikrokontroléra nie je žiadny blokovací kondík. Hodinový signál sa tak dostáva do okolia, napríklad aj k našej anténe a rádioprijímaču. Opäť sa dostávam k tomu, že by možno stálo za pokus použiť originál Arduino. Na ňom som videl blokovací kondík rovno vedľa MCU, a tak verím, že by mohlo vyžarovať menej rušenia do svojho okolia.

Ako sa anténa otáča za satelitom, občas sa stane, že prejde cez sever, či už z jednej, alebo z druhej strany. Vtedy sa mení uhol azimutu z 0 na 359 °, alebo naopak. To znamená, že rotátor namiesto toho, aby sa pohol o kúsok, zbytočne urobí takmer celú otočku. Toto trvá niekoľko sekúnd, počas ktorých anténa smeruje nesprávnym smerom. Nám teda môžu uniknúť dáta zo satelitu, po ktorých tak bažíme. Oprava tohto správania si v mojom prípade vyžiadala ďalšiu (v poradí tretiu) úpravu firmvéru rotátora. Implementoval som algoritmus, ktorý zisťuje, či práve sledujeme satelit, alebo bol príkaz zadaný ručne. To sa dá zistiť podľa toho, koľko času ubehlo od posledného príkazu. DDE Client dáta posiela asi každých 5 s. V prípade, že sledujeme satelit, sa použije nasledovný algoritmus.

Máme aktuálny azimut Aa a nový azimut An. Vyhodnotíme tieto tri prípady:

  • Abs(Aa – An)
  • Abs(Aa – (An + 360))
  • Abs(Aa – (An – 360))

Abs() je funkcia, ktorá vracia absolútnu hodnotu. Podľa toho, ktorý z výrazov dá najnižšiu hodnotu, nastavíme novú hodnotu pre azimut buď An, An+360 alebo An-360.

Pokiaľ nesledujeme satelit, čiže od posledného príkazu ubehlo viac ako 5 s (v mojej implementácii viac ako 13 s), tento algoritmus sa nepoužije, ale rotátor sa posunie na tie súradnice, ktoré mu zadáme. Je to dôležité napríklad preto, aby sa nám nenamotávali káble okolo stožiaru 😊

Nakoniec teda máme pomerne uspokojivo funkčný rotátor s anténou, ktorým vieme sledovať satelit a prijímať z neho dáta. Dokonca sme nejaké dáta prijali a zaznamenali. V nasledujúcej časti sa budem zaoberať tým, ako tieto dáta demodulovať, dekódovať a interpretovať. Taktiež existujú databázy, v ktorých sa takéto prijaté údaje koncentrujú, takže sa staneme tiež prispievateľmi do týchto online databáz. Aby aj ostatní mali prínos z našej práce.