Podstawa teleskopu: projekt sterowania (Mark II+)

Podstawę teleskopu można nastawiać ręcznie. Dzięki łożyskom wszystko chodzi lekko. Dzięki hamulcom – można zablokować ją w określonej pozycji. Teraz nadszedł czas zastanowić się, jak nią sterować elektrycznie.

Projekt przystosowałem do tego celu już na etapie budowy wersji „manualnej” (Mark I). Na obydwóch osiach osadziłem koła napędowe. Dodatkowo naciąłem ich krawędzie tak, żeby weszły w nie paski napędzające. W kolumnie wyciąłem otwór pod silnik „Y”. W talerzu dodałem przepusty na kable. Podstawę powiększyłem tak, żeby zmieściło się w niej zasilanie i sterowanie. Następnie ją obudowałem tak, żeby elektronika nie była na zewnątrz. Przygotowałem thingy do montażu na teleskopie.

Teraz przyszedł czas na zaplanowanie szczegółów. Sterowanie podstawą będę realizował w kilku krokach:

  • Mark I – nastawiam podstawę „ręcznie”,
  • Mark II – układ otwarty – ale ze wskazaniem położenia tuby,
  • Mark III: układ otwarty, gdzie Arduino z rozszerzeniem CNC steruje silnikami dwóch osi na podstawie wychyleń joystick’a,
  • Mark IV: sterowanie w układzie zamkniętym, kontrolowane przez algorytm śledzenia,
  • Mark V: wspomaganie dla astrofotografii,

Mark II

W wersji Mark II użyję czujników i dodatkowego kontrolera (roboczo nazwany master) do czytania i wyświetlania pozycji teleskopu.

  • Położenie tuby czytam z czujników umieszczonych na teleskopie,
  • Otrzymane wskazania wyświetlam na wyświetlaczu LCD, włączając w to:
    • Kierunek,
    • Kąt podniesienia,
  • Do mastera podłączę odbiornik GPS,
    • Położenie geograficzne (długość/szerokość),
    • Godzina, data
  • Biorąc pod uwagę, że na LCD (w przyszłości) będę wyświetlał więcej opcji, do poruszania się po menu użyję dodatkowego joysticka.

Mark III

W wersji Mark III planuję sterowanie w układzie otwartym.

Arduino z rozszerzeniem CNC zareaguje na wychylenia joysticka:

  • Wychylenie (drugiego) joysticka przekładane jest na kolejne impulsy dla silników osi poziomej i pionowej,
    • Arduino tylko każe silnikom się ruszyć – nie rozważa jaką zmianę położenia teleskopu to wywoła,
  • Arduino musi zareagować na wyłączeniem silników, gdy podstawa znajdzie się w pozycjach krańcowych
  • Arduino musi zareagować na awaryjne wyłączenie silników.

Mark IV

Mark IV to sterowanie w układzie zamkniętym, gdzie obroty silników kontroluje odpowiedni algorytm. Algorytm pilnuje, żeby teleskop osiągnął zadane położenie uruchamiając silniki i badając wartości położenia zwracane przez czujniki.

Ma to działać następująco:

  • Użytkownik na masterze wybiera pewne nastawy, np. pozycję gwiazdy z katalogu,
  • Algorytm analizuje jak je najlepiej osiągnąć,
  • Algorytm wysyła rozkazy do Arduino sterującego silnikami (Mark III) i bada ich wpływ na położenie (Mark II),
    • Algorytm będzie analizował zmiany kierunku i kąta podniesienia w stosunku do zadanych,
    • Po osiągnięciu zadanej pozycji silniki zatrzymują się kończąc program sterowania,
  • Arduino musi obsłużyć dodatkowe funkcje:
    • Przyjmuje komendy do poruszenia silników (np. po USB),
    • Raportuje koniec wykonania przesunięcia oraz ew. krańcowy stop, awaryjny stop,
  • Zmiana pozycji joysticka sterującego silnikami przerywa kontrolę automatyczną, Arduino raportuje takie zdarzenie zatrzymując Algorytm,

Mark V

W tej wersji zamierzam dodać wspomaganie dla astrofotografii. Będę mógł wybrać ile klatek ma być „strzelonych” i czas ich naświetlania (głównych, jasnych i ciemnych). Robienie zdjęcia będzie wyzwalał  kontroler master.

Konieczne będzie też dodanie funkcji śledzenia obiektów – np. po każdym zdjęciu podstawa będzie zmieniała swoje ustawienie tak, żeby śledzić obiekt. Ponieważ jest to montaż azymutalny – zmiana będzie dotyczyły obydwu osi.

Docelowo podstawa ma współpracować z aparatem canon 450d (rebel xsi).

Kontrolery – razem

Wygląda na to, że będę potrzebował 3 kontrolerów. Thingy dostarczy danych z czujników (po BLE). Arduino będzie sterował  silnikami. Potrzebuję jeszcze jednego, roboczo nazwałem go „Master”.

Thingy (czujniki położenia, przez BLE) Mark II Mark III Mark IV Mark V
Kierunek teleskopu (heading) Tak Tak Tak Tak
Podniesienie teleskopu (yaw) Tak Tak Tak Tak
Master Mark II Mark III Mark IV Mark V
Odczyt danych z Thingy po BLE Tak Tak Tak Tak
„Shake” Thingy, wybudzanie ze snu Tak Tak Tak Tak
Wyświetlanie danych o położeniu Tak Tak Tak Tak
Odbieranie danych z GPS Tak Tak Tak Tak
Planowanie trasy śledzenia Nie Nie Tak Tak
Algorytm sterowania Nie Nie Tak Tak
Obsługa aparatu Nie Nie Nie Tak
Arduino z CNC shield Mark II Mark III Mark IV Mark V
Bezpośrednie sterowanie silnikami Nie Tak Tak Tak
Odbieranie nastaw joysticka Nie Tak Tak Tak
Odbieranie sygnałów krańcowych Nie Tak Tak Tak
Odbieranie alarmowego stopu Nie Tak Tak Tak
Odbieranie komend z portu szeregowego Nie Nie Tak Tak
Raportowanie statusu przez port szeregowy Nie Nie Tak Tak

Master

Na początku wybór mastera był… naturalny. Raspberry Pi ma wszystko co potrzeba, łącznie z wbudowanych Bluetooth. Z drugiej  strony, patrząc na wymaganą funkcjonalność… trochę strzelanie z armaty do komara… (za co nieraz obrywało mi się na forach).

Myślałem o micro:bit, ale odpadło ze względu na brak możliwości odbierania danych z thingy:52. micro:bit ma jedynie tryb BLE peripheral, który nie pozwala na inicjowanie połączeń do innych urządzeń. Do tego potrzebny jest Softdevice 130 i pełny stos. Nie znalazłem takiej implementacji. Wydaje się, że przeszkodą jest ilość dostępnej pamięci.

Ostateczny wybór padł na ESP32 na płytce Wroom. Dużo GPIO, wbudowany WiFi i BLE, i2c do sterowania wyświetlaczem, obsługa UART, łatwy do programowania – i natychmiastowy start (be zkonieczności czekania na załadowanie linuxa). To wszystko, czego potrzebuję.

Kilka detali

Zasilanie

Do zasilania projektu wybrałem zasilacz 12v, 5A (60W). 12v potrzebowałem do zasilenia silników. 12v można też spokojnie zasilić Arduino – poprzez port Jack. Myśląc o odczycie pozycji za pomocą thingy, potrzebowałem również USB 5v – stąd dodatkowy konwerter.

W przypadku thingy, do linii zasilania dołożyłem też pojedynczy przekaźnik. W ten sposób mogą ją włączać/wyłączać, gdybym stracił z nią komunikację.

W obudowie zamontowałem wyłącznik zintegrowany z gniazdem zasilającym. Spodziewając się podwyższonych temperatur, dodałem również wentylator zasilany z 12v.

Silniki

Do napędu użyłem 2 silniki krokowe. Dla ograniczenia kosztów kupiłem używane:

  • Typ: bipolarny
  • Krok kąt: 1.8, tzn. 200 kroków na obrót
  • Prąd: do 1.5A
  • Rozmiar: NEMA 17 (42x42mm)
  • Waga: 270g
Sterowanie silnikami

Do sterowania silnikami użyłem rozszerzenia CNC na Arduino uno. Program na Arduino będzie instruował silniki do wykonania obrotów. Dodatkowo będzie odbierał sygnały z wyłaczników krańcowego i alarmowego – na wypadek, gdyby coś poszło nie tak.

Joysticki

W projekcie wykorzystam dwa joysticki. Jeden będzie sterował silnikami. Podłączę go do A0 i A1 CNC shield, które to porty nie są przez niego używane. Drugi joystick podłączę do mastera. W ten sposób będę mógł zmieniać opcje w menu.

Wyświetlanie stanu

W tej roli użyję wyświetlacza i2c. Zdecydowałem się na 4-linijkowy LCD 4×16 znaków.

Podsumowanie

Brzmi jak plan:)