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:
1 |
git clone https://github.com/NordicSemiconductor/Android-Nordic-Thingy.git |
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:
1 2 3 4 |
$ sudo apt install -y qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils wget unzip $ sudo usermod -aG kvm $USER $ sudo usermod -aG libvirt $USER $ sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 libbz2-1.0:i386 wget |
W pliku .bashrc dodałem wpisy:
1 2 3 4 |
export ANDROID_SDK_ROOT=/home/arek/Android/Sdk export ANDROID_HOME=/home/arek/Android export ANDROID_AVD_HOME=/home/arek/.android/avd export PATH=$ANDROID_SDK_ROOT/emulator:$ANDROID_HOME:$ANDROID_AVD_HOME:$PATH |
Uruchomienie środowiska:
1 |
~/dev/android-studio/bin $ ./studio.sh |
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”:
1<string name="pitch">Pitch</string> - 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:
123456789case R.id.action_tap_notification:if (item.isChecked()) {item.setChecked(false);} else {item.setChecked(true);}//enableTapNotifications(item.isChecked());enableEulerNotifications(item.isChecked());break - W „onEulerAngleChangedEvent” dodałem kod:
123if (mIsFragmentAttached) {mTapCount.setText(String.valueOf(pitch));}
- W pliku manifestu AndroidManifest.xml w elemencie <application> dodajcie „android:testOnly=”false” – inaczej Wasza aplikacja się nie zainstaluje:
123456<applicationandroid:name="androidx.multidex.MultiDexApplication"...android:testOnly="false"...<activity
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