Thingy:52 – śledzenie pozycji teleskopu – montaż i zmieniony kod Nordic’a na Android (Mark II)

Przy budowie każdego systemu, którego elementy muszą być pozycjonowane, macie wybór: śledzić nastawy napędów – albo dopasować je względem położenia sterowanego obiektu. W pierwszym przypadku zakładacie, że np. ponieważ obróciliście silnikiem o 90 stopni – tak też zmieniła się pozycja Waszego obiektu sterowania. W drugim podejściu sprawdzacie, gdzie znajduje się obiekt – i na tej podstawie podejmujecie decyzję o np. uruchomieniu napędów. Obydwa podejścia są stosowane zależnie od konkretnego przypadku. W pierwszym musicie bardzo dokładnie poznać kinetykę Waszego rozwiązania. W drugim – wyznaczyć pozycję obiektu.

Jako że wybrałem to drugie podejście, muszę dokładnie wiedzieć, gdzie skierowany jest mój teleskop. W tym celu umieszczę na tubie thingy:52. Nordic wyposażył je w zestaw czujników, które pozwolą mi na odczytanie pozycji teleskopu – zwłaszcza jego kierunku i podniesienia. Potem spróbuję odczytać dane z Thingy:52 w zmodyfikowanej aplikacji Nordic’a na telefonie z Androidem.

Tutaj znajdziecie indeks tekstów na temat budowy podstawy teleskopu

W pierwszym kroku zająłem się umieszczeniem Thingy na tubie teleskopu. Nie chciałem go tam przyklejać, mocować na stałe. Dlatego postanowiłem wydrukować podstawkę z oczkami, w które wejdą gumki obejmujące tubę.

Montaż thingy

Najpierw wydrukowałem sobie podstawkę. Uwzględniłem krzywiznę tuby (średnica ok. 10.3mm):

Przy okazji wydrukowałem również małe sprzączki, dzięki którym wygodnie naciągnę gumki:

Paski taśmy dwustronnej i przykleiłem do podstawki a do nich – kawałki starej opony rowerowej:

Przez otwory przełożyłem szpilki (3mm z jakiegoś drutu):

Teraz przyszła kolej na tasiemki:

Wyszło całkiem zgrabnie:

Kod – zmodyfikowana aplkiacja Nordica dla Android

Problem z aplikacją Nordica na telefony Android polega na tym, że nie wszystko się w niej wyświetla – zwłaszcza interesujący mnie kąt podniesienia (element „pitch” kątów Eulera). Zazwyczaj po prostu użyłbym App Inventora i zbudował prostą aplikację. Ale może uda mi się tak zmodyfikować kod androidowej aplikacji dostarczanej z thingy?  Nordic byłtak miły, że udostępnił kod aplikacji za darmo:

Pobierzcie Android studio ze strony https://developer.android.com/studio. Rozpakujcie go i zainstalujcie (dla linux wystarczy uruchomić skrypt ./bin/studio.sh). Samo środowisko jest trochę przyciężkie, podczas instalacji dużo danych dociąga – a więc warto to zrobić trochę wcześniej. Upewnijcie się, że system zainstalował komponenty jak Android SDK.

Kilka podpowiedzi znalazłem też w tekście na iTZgeek:

W pliku .bashrc dodałem wpisy:

Uruchomienie środowiska:

Najwięcej trudności sprawiła mi konfiguracja AVD Managera – emulatora urządzeń z Androidem. Z menu Tools wybierzcie SDK Manager a potem Android SDK. Trzeba ręcznie dodać element ARM EABI – a potem przekopiować element „kernel-ranchu” do katalogu „./Android/Sdk/system-images/android-22/google_apis/armeabi-v7a/kernel-ranchu”.

Po tych zabiegach, doinstalowaniu SDK dla maszyny x86 (znacznie szybsze w działaniu), wreszcie udało mi się uruchomić emulator. Za chwile okazało się, że… niepotrzebnie. Emulator nie wspiera bluetootha, a podłączenie przez niego go thingy jest pierwszym (i koniecznym) krokiem dla uruchamiającej się aplikacji.

Mogłem modyfikować kod, zbudować apk – ale podejrzeć jego działanie jedynie na telefonie.

Modyfikacje kodu aplikacji Nordic

Wyświetlanie podniesienia podłożyłem w miejsca, gdzie była liczba „pyknięć” w thingy. Najważniejsze modyfikacje:

  • W res/values/strings.xml dodałem „pitch”:
  • W res/layout/fragment_motion.xml zmieniłem container/tap/TextView na „@string/pitch”
  • W res/menu/motion_card_menu.xml zmieniłem action_tap_notification/title na @string/pitch
  • Zmiana w res/layout-19, teksty elementów na panelu na „@string/pitch”,
  • Najwięcej zmian zrobiłem w MotionServiceFragment
    • Usunąłem kod z „onTapValueChangedEvent”
    • W onCreateView włączyłem notyfikacje kątów eulera w podmenu:
    • W „onEulerAngleChangedEvent” dodałem kod:
  • W pliku manifestu AndroidManifest.xml w elemencie <application> dodajcie „android:testOnly=”false” – inaczej Wasza aplikacja się nie zainstaluje:

Teraz wystarczy przekopiować plik apk (znajdziecie go w katalogu projektów, np. ~/StudioProjects/Android-Nordic-Thingy/app/build/outputs/apk/debug/) na telefon, pozbyć się kilku zabezpieczeń (np. instalowanie nie podpisanych aplikacji) – i gotowe:)

Podsumowanie

Udało mi się zamontować thingy na tubie teleskopu. Dzięki zmodyfikowaniu aplikacji na Androida, mogę teraz obserwować zmieniające się nastawy na telefonie. Wygodne, nie powiem:)

Źródła

  • https://www.itzgeek.com/how-tos/linux/linux-mint-how-tos/how-to-install-android-studio-on-linux-mint-19-tara.html