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 (starszy opis): RAMPS 1.4/1.5 with Mega2560
Ciekawy opis realizacji na Arduino Mega bez RAMPS
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 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
- W dokumencie excel (do pobrania tu) trzeba ustawić parametry napędów.
- Na stronie Generatora Konfiguracji trzeba wypełnić dane. Część trzeba skopiować z pól wyliczonych w excel-u.
- Nacisnąć "Generate"
- Pobranym plikiem zastąpić zawartość pliku config.h w katalogu z programem OnStep.
- To wszystko to punkt 7. z rozdziału poniżej.
- Stepper-Steps - ilość kroków na obrót silnika krokowego. U mnie 200.
- AXIS1_DRIVER_MICROSTEPS - mikrokroki ustawione dla śledzenia na RAMPS. U mnie 32.
- 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.
- 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
- 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:
- MICROSTEPS_GOTO - mikrokroki dla szybkiego ruchu silniczków. U mnie 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:
- Zainstalować Arduino IDE
- Dla klona Arduino z CH340 trzeba zainstalować sterownik np. stąd: https://cdn.sparkfun.com/assets/learn_tutorials/8/4/4/CH341SER.EXE
- Pobrać kod OnStep z GITHUB wybierając Code -> Download ZIP
- Rozpakować do jakiegoś katalogu i uruchomić OnStep.ino
- Uruchomi się Arduino IDE, ustawić w menu Tools->Board->Arduino Mega or Mega 2560
- Wybrać port, który się pojawi po podpięciu Arduino do USB (numer można sprawdzić w Menagerze Urządzeń)
- Plik config.h nadpisać wygenerowanym w rozdziale powyżej.
- 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.
- 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
Obudowa
Wnioski po testach
To Do
- 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