wtorek, 19 października 2021

Kontroler OnStep oparty o Arduino Mega 2560 i RAMPS 1.4


Kilka miesięcy temu udało mi się okazyjnie kupić teleskop z lustrem 6 cali. Celestron C6-N. Trochę zabytkowy z wczesną wersją montażu CG-4. Co istotne nie był zmotoryzowany. Już poprzedni mój teleskop Sky Watcher 1309eq2, częściowo zmotoryzowałem zaczynając od focusera. Przy Celestronie było to po prostu łatwiejsze. Zacząłem od zaprojektowania sposobu montażu silników krokowych, a w czasie oczekiwania na potrzebne elementy i próbowania kolejnych wersji mocowań, sprawdzałem jak to wszystko wprowadzę w ruch. Focuser sam oprogramowałem w Micropython, ale tu było dużo trudniej i wiele problemów do rozwiązania. Na szczęście trafiłem na projekt OnStep. Opis mocowania silniczków jest tu.

Musiałem przeczytać wiele wątków na forum OnStep, stron Wiki i innych wpisów by wykonać mój sterownik. Dlatego postanowiłem spisać HowTo dla mojej wersji. Może ktoś będzie chciał też zmotoryzować swój teleskop i ten  opis mu pomoże. By było jasne, ten opis nie zrobi wrażenia na starych wyjadaczach. Od nich chętnie usłyszę co zrobiłem źle lub co mogło by być zrobione lepiej. Ten opis jest dla amatorów słabo znających się na elektronice, ale potrafiących coś zlutować, użyć miernika i użyć wiertarki jeśli trzeba.      


Platforma sprzętowa

Siłą projektu jest możliwość dostosowania go do różnych montaży teleskopowych i uruchomienia go na różnych mikrokontrolerach. Ja wybrałem wersję z minimalną ilością lutowań i tanimi komponentami choć jednocześnie jedną z mniej wydajnych. Dzięki popularyzacji drukarek 3D, komponenty, które wybrałem do budowy są stosunkowo tanie. Klon Arduino Mega + RAMPS to razem koszt około 55pln. Ten sprzęt już miałem, w związku z krótką przygodą z AstroEQ. Sterowniki silników krokowych (stepstick) kosztują od 6-76pln. Zależy od ich głośności, zakresu mikrokroków i precyzji kroków. Wybrałem kompromis. LV8729 zapewnia mikrokroki do 1/128 i w miarę cichą pracę. Obsługuje też całkiem duże napięcie (max do 1.8A). Jeśli wybierzecie inny model to upewnijcie się na Wiki projektu, czy dana wersja będzie działać z OnStep. 

Klon Arduino Mega 2560 v.3.0
RAMPS 1.4
Wemos D1 Mini ESP8266
Konwerter poziomów 5V-3V
Moduł RTC DS3231
Obudowa z tworzywa Z4A
Sterownik silnika krokowego LV8729
Listwy GoldPin
kabel KYNAR i kabelki połączeniowe
gniazdo DC 2,1/5,5 i przedłużacz kilkumetrowy na ten wtyk
włącznik kołyskowy bistabilny

Razem koszt to mniej niż 200pln. Po dodaniu montażu silników razem to około 300pln.


Kilka linków

Strona grupy OnStep

Strona Wiki 

Strona autora projektu http://www.stellarjourney.com/  

Wiki: RAMPS 1.4, 1.5, 1.6

Wiki (starszy opis): RAMPS 1.4/1.5 with Mega2560

Wątek o regulacji LV8729

Realizacje wg montaży

Przydatny wątek o LV8729

Ciekawy opis realizacji na Arduino Mega bez RAMPS

Strona RAMPS 1.4

Realizacja opisane na Instructables


Podłączanie do RAMPS

RAMPS został stworzony do obsługi drukarek 3D. Ale OnStep ma bardzo podobne potrzeby: obsługa kilku silników krokowych przez kontrolery stepstick, podłączenie urządzeń po portach szeregowych i I2C. Dzięki temu nie trzeba dużo lutować.

Oto co podłączyłem w aktualnej wersji kontrolera: 

1. Dwa kontrolery LV8729 do kontroli osi RA/DEC teleskopu.

    Pod kontrolerami są wyprowadzone zworki do ustawienia mikrokroków. Prędkość określa się podając napięcie na odpowiedni pin stepstick-a czyli zwierając odpowiednią zworkę. Projekt przewiduje korzystanie z dwóch wartości mikrokroków: wolniejszy obrót dla śledzenia (AXISn_MICROSTEPS) i szybszy dla zmiany pozycji (AXISn_MICROSTEPS_GOTO). Trzy piny to trzy bity dające wartość 0-7. Tyle jest też różnych wartości mikrokroków. Dla ułatwienia dobiera się te wartości dla stałych ustawień pierwszych dwóch bitów i OnStep dokonuje regulacji na bicie 3. Daje to następujące trzy pary parametrów AXISn_MICROSTEPS/AXISn_MICROSTEPS_GOTO: 32/2, 64/4, 128/8. Uzyskuje się to łącząc trzecią zworkę z pinem na RAMPS (jak na schemacie) a pozostałe odpowiednio zwierając. Ja w tej chwili mam ustawione 32/2, ale być może zwiększę parametry, gdy spróbuję fotografować. Oczywiście trzeba odpowiednio wyregulować stepstick-i do silników. Kalkulator np. tu. A tu opis LV8729.

2. Wemos D1 Mini po złączu szeregowym do obsługi Smart Web Server

Smart Web Server pozwala zarządzać podstawowymi funkcjami OnStep przez prostą stronę WWW oraz podłączenie przez sieć IP popularnych aplikacji astronomiczna na Windows/Linux/Android/iOS.

Opis poniżej w rozdziale Smart Web Server.

3. Moduł RTC DS3231 do obsługi zegara na łączu I2C 

Arduino nie ma własnego zegara czasu rzeczywistego. Moduł wystarczy poprawnie podłączyć do wyjścia I2C oraz ustawić model modułu w config.h (na etapie generacji konfiguracji). 


Schemat ze strony Wiki Onstep
Schemat ze strony Wiki Onstep

Schemat połączeń mojego OnStep

Schemat mojego rozwiązania


Zasilanie

Do pracy kontroler Arduino + RAMPS potrzebuje 12V. Ja podpiąłem zasilacz 3,5A. Ale być może jeśli obsadzone będzie więcej silników to było by za mało. Przy moich dwóch silnikach pewnie wystarczyłby mniejszy. Zasilanie podpiąłem do wejścia 5A/12V (widać na schemacie). Zasilacz ma wtyk 5,5/2,1 i takie gniazdo ma obudowa. Zaopatrzyłem się też w kilkumetrowy przedłużacz na te wtyki, ale w terenie przyda się rozwiązanie z akumulatorem 12V. Do wymyślenia na przyszłość. 


Konfiguracja parametrów i Generator

Konfiguracja OnStep jest przechowywana w pliku config.h. Ręczna modyfikacja byłaby trudna. Na szczęście jest strona z generatorem konfiguracji, z której można wygenerować nasz plik. Procedura jest taka:
  1. W dokumencie excel (do pobrania tu) trzeba ustawić parametry napędów.
  2. Na stronie Generatora Konfiguracji  trzeba wypełnić dane. Część trzeba skopiować z pól wyliczonych w excel-u.
  3. Nacisnąć "Generate"
  4. Pobranym plikiem zastąpić zawartość pliku config.h w katalogu z programem OnStep.
  5. To wszystko to punkt 7. z rozdziału poniżej.
Kilka wartości wymaga wyjaśnienia.
    
    Excel:
  1. Stepper-Steps - ilość kroków na obrót silnika krokowego. U mnie 200. 
  2. AXIS1_DRIVER_MICROSTEPS - mikrokroki ustawione dla śledzenia na RAMPS. U mnie 32. 
  3. GR1 - przełożenie na kołach zębatych lub przekładni planetarnej. Ja mam dla DEC 60 zębów na 20 czyli wartość 3. Dla RA mam 40 zębów na 16 czyli wartość 2,5.
  4. GR2 - liczba pełnych obrotów pokrętła mikroruchów teleskopy dla obrócenia tuby teleskopu o 360 stopni w danej osi. Jeśli nie znajdziecie tych parametrów dla waszego montażu w Necie to pozostaje tylko to zmierzyć empirycznie. Np. ustawić tubę w pionie (przyda się poziomica) i obracać aż dojdziecie do poziomu. Potem trzeba przemnożyć przez 4. Dla mojego CG-4 są to: RA=130, DEC=64
  5. SLEW_RATE_BASE_DESIRED - oczekiwana prędkość przesuwania tuby w trybie szybkim (w °/s). Jeśli podacie za dużą wartość to sprzęt może nie dać rady lub silniki będą głośno pracować. Ja w tej chwili podaje 2. Mi się to wydaje dobrym kompromisem między głośnością a szybkością.

    Generator:

  1. MICROSTEPS_GOTO - mikrokroki dla szybkiego ruchu silniczków. U mnie 2.
  2. Automatically Start Tracking - przydatne gdy testujemy silniczki i nie mamy jeszcze możliwości sterowania ruchami teleskopu. Ale potem lepiej to wyłączyć.

Instalacja oprogramowania

Szczegółowa instrukcja instalacji OnStep na Arduino Mega 2560 jest tu. W skrócie należy:

  1. Zainstalować Arduino IDE
  2. Dla klona Arduino z CH340 trzeba zainstalować sterownik np. stąd: https://cdn.sparkfun.com/assets/learn_tutorials/8/4/4/CH341SER.EXE
  3. Pobrać kod OnStep z GITHUB wybierając Code -> Download ZIP
  4. Rozpakować do jakiegoś katalogu i uruchomić OnStep.ino
  5. Uruchomi się Arduino IDE, ustawić w menu Tools->Board->Arduino Mega or Mega 2560
  6. Wybrać port, który się pojawi po podpięciu Arduino do USB (numer można sprawdzić w Menagerze Urządzeń)
  7. Plik config.h nadpisać wygenerowanym w rozdziale powyżej.
  8. Jeśli domyślnie nie masz biblioteki dla RTC DS3231 to pojawi się błąd. Przejdź do Sketch->Include library->Manage Libraries i wyszukaj 'RTC by Makuna' na liście dostępnych bibliotek i zainstaluj.
  9. Nacisnąć "Upload" i poczekać na komunikat, że się udało.

Smart Web Server

Łączność z OnStep można zapewnić na 4 sposoby.

1. Kabel USB podłączony do portu Arduino Mega. To rozwiązanie wymaga modyfikacji kabla. Trzeba odłączyć linię zasilania 5V, zostawiając pozostałe 3 sygnały. Jest to konieczne, ponieważ Arduino po podpięciu kabla USB wyłącza inne zasilania zewnętrzne. Jeśli odetniemy w kabli V+ to Arduino zostanie na zasilaniu zewnętrznym (w naszym przypadku z RAMPS) i jednocześnie będzie działać łączność szeregowa na USB. Ja użyłem taśmy izolacyjnej wyciętej w wąski pasek naklejonej na styk we wtyczce, ciągle działa.

2. Łączność WiFi. To rozwiązanie zastosowałem. Wymaga podpięcia mikrokontrolera ESP8266 do jednego z dwóch postów szeregowych na RAMPS. Najczęściej stosowany model to Wemos D1 Mini, choć na stronie projektu jest wymienionych więcej modeli. Akurat Wemos-a miałem pod ręką z wcześniejszego projektu.  

Trzeba pamiętać, że Wemos D1 musi zostać oddzielnie zaprogramowany. Opis na Wiki jest tu. A program tu

Na czas programowania najlepiej wyjąć go z płytki, tak by nie dostał jednocześnie zasilania z dwóch źródeł. W Arduino IDE należy zmienić Board na "LOLIN(WEMOS) D1 R2 and mini" oraz port na ten, który się pojawi po podpięciu. Konfiguracja sieci jest w pliku Extended.config.h, w którym można zmienić ustawienia np. czy ma wystawić własny AccesPoint czy podłączyć się do istniejącego. Konfiguracja dla jego AP mi zadziałała, ale nie mogłem go przełączyć na moje domowe WiFi. Na szczęście na wystawionej przez niego stronie WWW można zmienić parametry sieci i taka zmiana działa.

Poniżej fragment konfiguracji odpowiedzialny za sieć:

// IP ADDRESS SETTINGS -----------------------------------------------------------------------
// These settings are stored in NV (EEPROM) and will not revert to the defaults once first set 
// NV is wiped, these settings (where applicable) can be changed at runtime however.
#define AP_ENABLED                   true //        true, Wifi Access Point Enabled.
#define AP_SSID                  "ONSTEP" //    "ONSTEP", Wifi Access Point SSID.
#define AP_PASSWORD            "password" //  "password", Wifi Access Point password.
#define AP_CHANNEL                      7 //           7, Wifi Access Point channel. 
#define AP_IP_ADDR          (192,168,0,1) // ..,168,0,1), Wifi Access Point IP Address.
#define AP_GW_ADDR          (192,168,0,1) // ..,168,0,1), Wifi Access Point GATEWAY Address.
#define AP_SN_MASK        (255,255,255,0) // ..55,255,0), Wifi Access Point SUBNET Mask.

#define STA_ENABLED                 false //       false, Wifi Station Enabled. 
#define STA_DHCP_ENABLED             true //        true, Wifi Station DHCP Enabled.
#define STA_SSID                   "Home" //      "Home", Wifi Station SSID to connnect to.
#define STA_PASSWORD           "password" //  "password", Wifi Station mode password.
#define STA_IP_ADDR        (192,168,1,55) // ..168,1,55), Wifi Station/Ethernet IP Address.
#define STA_GW_ADDR         (192,168,1,1) // ..,168,1,1), Wifi Station/Ethernet GATEWAY Address.
#define STA_SN_MASK       (255,255,255,0) // ..55,255,0), Wifi Station/Ethernet SUBNET Mask.

Ważnym tematem jest różnica napięć na stykach RX/TX oby mikrokontrolerów. Arduino Mega pracuje na 5V, a Wemos ESP2866 na 3.3V. To zmusza do zastosowania rozwiązania z rezystorami lub konwerterem poziomów (Level Shifter). Ja zastosowałem konwerter bo miałem go pod ręką.

3. Łączność po bluetooth. Wystarczy podpiąć do jednego z dwóch wyjść szeregowych wyprowadzonych na RAMPS moduł HC-05 lub HC-06. Obsługa modułu jest w głównym oprogramowaniu OnStep. Trzeba pamiętać, że HC-05 działa na 3.3V. Można zastosować rozwiązanie z konwerterem poziomów. HC-06 pracuje na 5V.

4. Port Ethernet. Nie zgłębiałem tego rozwiązania bo dla mnie było mało praktyczne. Szczegóły są na Wiki OnStep.



Sterowanie

Najlepszy opis jest tu. Kilka uwag ode mnie. Na Windows potrzebny jest ASCOM Driver. Działają wtedy programy typu Stellarium, Cartes du Ciel lub Sky Planetarium. Sterownik pozwala obsłużyć połączenie kablem USB (z odciętym 5V) lub przez WiFi (adres IP Smart Web Servera i port 9999).
Ale z tych aplikacji nie da się lub tylko częściowo się da wykonać parkowanie, odparkowywanie, kalibrowanie na gwiazdy lub korekta strzałkami w czterech kierunkach. Dlatego ja zawsze zaczynam od strony lub aplikacji OnStep na komórce. Tam wykonuję pierwsze przesunięcia. Kalibruję na gwiazdy, a potem dopiero ewentualnie przechodzę do aplikacji na komputerze. Aplikacje sterujące na komputerze są za darmo, na telefon są płatne (z wyjątkiem wspomnianej OnStep) i ponieważ jeszcze ich nie kupiłem to się na ich temat nie wypowiem.
Warto jednak wyjaśnić co to jest parkowanie, bo trochę mi zajęło zanim znalazłem i zrozumiałem. Na początku gdy się już wypoziomuje statyw i ustawi oś na biegun, trzeba ustawić tubę tak by też patrzyła na biegun a przeciwwaga była skierowana na północ. Ta pozycja nazywana jest PARK. Potem można zawsze wrócić do tej pozycji lub ponownie ją ustawić. Jeśli się wybierze przycisk PARK na stronie to teleskop wróci do tej pozycji i przestaje reagować, do momentu wybrania UNPARK. 
Są jeszcze kontrolery BHC i SHC. A jeśli do Wemos-a podłączy się HC-05/HC-06 to można też parować z game padem przez bluetooth. Ale jeszcze nie zgłębiłem tematu. Opis jest na Wiki. 

Obudowa

Jest dużo dostępnych projektów obudów do druku 3D, pewnie da się też dobrać mniejszą obudowę, ale ja po prostu miałem taką pod ręką :). Należy tylko pamiętać, że w ramach rozbudowy może być potrzebne miejsce na porty RJ na podłączenia silników i ST-4. Można też wyprowadzić diody pokazujące, w jaki stanie jest kontroler. Ja dodałem jedynie gniazdo zasilania 5.5/2.1, wyłącznik i wyprowadziłem port USB Arduino. Oczywiście warto pomyśleć o sposobie mocowania do nogi statywu teleskopu. Ja dodałem dwa paski z rzepem.  

OnStep CaseOnStep Case
 

Wnioski po testach

Kontroler działa. Niestety nie jest precyzyjny. Pomimo prób z różnymi ustawieniami nie ustawia się precyzyjnie na cel. Powodem mogą być złe parametry w config.h, ale też problemy z zasilaniem, lub wydajnością sprzętu. 
Ale to jest i tak niesamowity skok jakościowy. W połączeniu z kamerą (mam kamerkę planetarną SVBony SV105) mogę spokojnie przy ekranie laptopa ustawić parametry nagrywania lub zdjęć. 

To Do

Jeśli znajdę czas to w kolejce czekają poniższe modyfikacje i rozbudowy:
  • Smart Hand Controler
  • ST-4
  • Wymiana kabli do silników na RJ11, RJ12, lub RJ45
  • może zmiana platformy na szybszą np. maxESP3
  • Usuwanie odchyleń ruchu
  • Dodanie obsługi focusera na A4988
  • Zasilanie z akumulatora
 

 



wtorek, 12 października 2021

Montaż silników do OnStep dla teleskopu C6-N

Montaż silników krokowych NEMA 17 do montażu Celestron CG-4 (odpowiednik EQ3-2). Po jednym do RA i DEC. Całość będzie sterowana z kontrolera OnStep w oparciu o Arduino Mega + RAMPS 1.4.  


Wcześniej zrobiłem zautomatyzowany focuser (wyciąg okularu). Teraz postanowiłem zmechanizować tubę teleskopu. Zaczęło się od pomysłu, by dało się fizycznym pilotem lub aplikacją przesuwać tubę na dowolny fragment nieba oraz włączyć śledzenie.

Potem trafiłem na projekt AstroEQ, który był super. Miał jednak wadę, nie był już  rozwijany. Ale tam znalazłem link do OnStep. Na pierwszy rzut oka projekt jest bardzo chaotyczny. Trzeba przeczytać wiele postów, stron Wiki, wzmianek i zobaczyć kilka filmików. Ale opłacało się. Mam działający kontroler, a tu pokażę jak zamontowałem silniki. Oczywiście to końcowa wersja (w tej chwili ;)). Wcześniej było wiele innych, ale okazały się nieoptymalne.

Zastosowałem silniki które miałem pod ręką. W osi RA 17HS4401S, a w osi DEC 17HS4023. Koła zębate miały być w obu osiach 20 zębów (na silniku) i 60 na teleskopie, ale okazało się, że dla osi RA koło zaczepia o rączkę blokady. Dla RA zastosowałem 16 na 40 z dodatkową przedłużką osi. Ponieważ nigdzie nie znalazłem łącznika na osie 6mm i 6mm, musiałem zastosować łącznik 6mm na 8mm i kilkucentymetrową oś 8mm. Koło duże oczywiście też musiałem zmienić na takie z otworem 8mm (akurat pod ręką miałem 40 zębów).
 
Poniżej kilka zdjęć poglądowych:




Daje to dla osi RA przełożenie 40:16 (2,5), a dla osi DEC 60:20 (3,0). Oba mocowania udało się wykonać za pomocą typowego mocowania typu L do NEMA17. Przy osi RA co prawda trzeba je było je zamocować odwrotnie i lekko rozwiercić jeden z otworów. Paski zębate u mnie sprawdziły się 172mm dla osi DEC i 154mm dla osi RA.

Elementy


silnik krokowy 17HS4401S
silnik krokowy: 17HS4023
Paski zębate 154mm i 172mm 6mm szerokości
Koła zębate 16, 40, 60 zębów 5, 6, 8 mm GT2
Mocowanie stalowe typu L do NEMA 17 2szt.

Łącznik osi 6 na 8 mm

Koszt mocowania trochę ponad 100pln.