Sterownik obrotnicą antenową na Arduino UNO

Po 5 latach eksploatacji anteny HexBeam postanowiłem zdjąć antenę z komina i postawić na 10m maszcie w ogrodzie. Na starym maszcie pozostały anteny UKF i stary rotor AR303 sterowany wcześniej opisanym sterownikiem na Atmega8. Do kręcenia anteną HexBeam na nowym maszcie skonstruowałem rotor na bazie starego reduktora ślimakowego. Elementem odczytującym położenie anteny jest czujnik impulsów wbudowany w rotor. Do budowy sterownika wykorzystałem płytkę Arduino UNO i wyświetlacz 2*16. Sterownik może pracować w dwóch trybach, ręcznym i automatycznym. Sterowanie ręczne realizowane jest przez zadawanie azymutu z potencjometru na ściance przedniej a sterowanie automatyczne polega na komunikacji z komputerem w protokole GS-232 YAESU z prędkością 9600bd i współpracuje ze wszystkimi programami logującymi.

Poniżej znajduje się schemat blokowy połączeń z kilkoma zewnętrznymi elementami. Wszystkie moduły i elementy zakupiłem na znanym portalu zakupowym w łącznej cenie poniżej 100pln. Sterownik zasilam napięciem 13.8V z tego samego zasilacza co TRX. Ponieważ wykorzystałem silnik 24V zastosowałem dodatkową regulowaną przetwornice napięcia 12>24VDC, którą można pominąć dla silników 12V. Załączanie i zmiana kierunku obrotów silnika realizowana jest przez moduł przekaźnikowy. Położenie anteny przy każdorazowym wyłączaniu zasilania zapisywane jest do pamięci mikrokontrolera i odczytywane po załączeniu zasilania. Przy wyłączonym sterowniku rotor powinien być zablokowany mechanicznie przed poruszeniem przez podmuchy wiatru. Elementy D1 i C1 gromadzą energie potrzebną na podtrzymanie pracy kontrolera i zapisanie parametrów do pamięci eeprom po rozłączeniu zasilania. Kontroler przez dzielnik napięcia R3 i R4 i wejście analogowe A1 czuwa nad stanem napięcia zasilania 12V i natychmiast zapisuje położenie anteny w pamięci podczas zaniku zasilania. Ewentualne podświetlanie LCD powinno być zrealizowane z oddzielnego obwodu +5V a nie z napięcia +5V płytki Arduino. W przeciwnym razie funkcja zapamiętywania może nie działać poprawnie. Przełącznik RESET zamontowany z tyłu urządzenia powinien być normalnie rozwarty i przełączany tylko dla programowania Arduino. W przeciwnym razie nie otrzymamy poprawnej komunikacji z programami logującymi. Impulsy z czujnika rotora podawane są na pin 2 modułu Arduino. Ja użyłem czujnika indukcyjnego M8 PNP ale można zastosować kontraktron, halotron lub inny czujnik. Impulsy zliczane są w przerwaniach. W kodzie programu w linii 168 należy obliczyć dzielną właściwą dla użytego rotora i całkowitej ilości impulsów na pełen obrót 360 stopni.

Opis menu i informacji pojawiających się na wyświetlaczu LCD: