
Witam,
Chciałbym zaprezentować swoją najnowszą konstrukcję: GPS Tracker z funkcją powerbanku. Projekt powstał na Arduino, jednak mimo "ardunizmu" dostarcza sporo ciekawych danych statystycznych i jest fajnym gadżetem na piesze/rowerowe wycieczki. Urządzenie powstawało etapami od grudnia.
Celem powstania trackera była... radość tworzenia i posiadania

Udostępniam kod programu, jednak zastrzegam, że może on jeszcze zawierać błędy, ponieważ nie został jeszcze sprawdzony "w terenie". Posiada on sporo komentarzy (po angielsku) i nieaktywnych funkcji - były one pomocne przy pisaniu kodu, szkoda usuwać, mogą się przydać do diagnostyki.
Omówienie programu:
Cały program zajmuje dość sporo pamięci (22kB ROM, 1,4kB RAM). Przy pierwszym uruchomieniu kontroler oczekuje na złapanie FIX-a zarówno w poziomie, jak i w pionie. Następnie zapisywanych jest kilka parametrów, potrzebnych do dalszych obliczeń (wyjściowe położenie, napięcie baterii, czas).
W głównej pętli program sprawdza, czy są wciśnięte dwa przyciski (na ściance od strony ekranu, niewidoczne na zdjęciu), jeżeli nie, to odczytuje dane z GPS i wyświetla odpowiednie informacje (opisane dalej). Jeżeli są wciśnięte dwa przyciski, to następuje wejście do menu kalibracji.
Menu kalibracji umożliwia dostosowanie "czułości" urządzenia na ruch, a także kilku innych rzeczy. Kliknięcie jednego/drugiego przycisku zmienia opcje (tak/nie; +/-), kliknięcie obu potwierdza wybór:
1. "Reliable speed" - wyświetlana jest "aktualna" prędkość modułu i ustawiana przez nas prędkość progowa, poniżej której GPS ma ignorować ruch i nie uwzględniać go w obliczeniach trasy (czas ruchu, dystans, prędkość średnia...)
2. "Reliable DST" - tutaj ustawia się próg minimalnej odległości, którą należy przebyć pomiędzy kolejnymi cyklami obliczeń. Należy uważać, żeby ta wartość była większa od iloczynu minimalnej prędkości, a także czasu pełnego przebiegu wyświetlania informacji pomnożonego przez ilość cykli (tzn. co ile wyświetleń mają być pobierane dane do obliczeń)
3. "Cycle time" - jak długo ma się wyświetlać każdy z ekranów informacyjnych
4. "Cycles number" - dane do obliczeń pobierane są co kilka pętli, aby zmniejszyć szumy - przy rejestrowaniu pieszej trasy odczyt np. co 30 sekund jest ok. Ten parametr ustawia, ile pętli programu ma się wyegzekwować przed pobraniem danych do obliczeń.
5. "Sound" - czy w przypadku zgubienia FIX-a ma się włączać powiadomienie dźwiękowe (buzzer)
Odbiornik to U-blox NEO-6M z zewnętrzną anteną. Muszę przyznać, że jestem z niego całkiem zadowolony. Co prawda zdarzają mu się spore "odchyłki" w pionie, a także (chyba mniejsze) w poziomie, jednak w jakimś stopniu jest to niwelowane w programie. Odbiornik dzięki zewnętrznej antenie posiada całkiem niezłą czułość i potrafi złapać FIX-a w pomieszczeniu.
Arduino komunikuje się z GPS-em za pomocą software serial - zwykły był potrzebny w czasie pisania kodu i tak zostało. Sporo problemów napotkałem przy "warunkach" logicznych polegających na porównywaniu np. aktualnej prędkości z prędkością progową, jako że mikrokontroler nie bardzo radzi sobie z liczbami niecałkowitymi (co najmniej jeden wieczór, zanim sobie o tym przypomniałem). Rozwiązałem to, korzystając z biblioteki math.h i pobierając tylko część całkowitą liczby. Być może dałoby się to usprawnić (zdeklarować np. int(a) = liczba_niecałkowita), jednak pierwotnie rozwiązałem to w taki sposób i tak zostało.
Urządzenie zasilane jest akumulatorem Li-Ion 3200 mAh (LG, nie "chińczyk fire") przez układ kontroli ładowania/rozładowania (gotowy moduł). GPS Tracker posiada dwa przyciski zasilania: główny, łączy gniazdo zasilające z układem zabezpieczającym i diodą POWER a także drugi wyłącznikiem, który podaje napięcie na przetwornicę step-up, zasilającą całość urządzenia. W ten sposób, mogę ładować akumulator lub pobierać z niego prąd, bez dodatkowego zużywania energii przez resztę układów. Gniazdo DC (przy widocznych na zdjęciu przyciskach) służy do ładowania urządzenia (napięcie <5V zbite diodą, aby przetwornica miała "normalne" warunki pracy i żeby na analogowym wejściu pomiaru napięcia baterii nie pojawiło się napięcie wyższe niż zasilające). Do gniazda można podłączyć zewnętrzną przetwornicę 5V USB do ładowania telefonu itp. Pojemność wbudowanego ogniwa powinna naładować telefon "od zera" i zostanie jeszcze trochę energii. Zastanawiałem się nad daniem kolorowego wyświetlacza, jednak zastosowany LCD pobiera znacznie mniejszy prąd (ok. 20mA), toteż nawet go nie wyłączam, dodatkowo jest bardziej wytrzymały, toteż można go umieścić w plecaku i zbytnio się nie przejmować. Przyciski zaopatrzone są w "sprzętowy debouncing" (opornik + kondensator), dodatkowo w programie pomiędzy kolejnym sprawdzeniem stanu kontroler odczekuje 150ms. Moduł GPS zasilany jest oddzielnym stabilizatorem liniowym 3,3V, gdyż "Arduinowe" 3,3V nie wystarczało do poprawnej pracy modułu.
W poszczególnych ekranach wyświetlane są następujące funkcje:
EKRAN 1:
-Ilość "widocznych" satelitów
-Numer bieżącego "cyklu" programu (czyli ile cykli temu były spełnione warunki ruchu i program pobrał dane do obliczeń)
-Godzina
-Aktualna prędkość
-Średnia prędkość
-Aktualna wysokość
-Temperatura
EKRAN 2:
-Dystans "płaski"
-Dystans liczony wg. zmodyfikowanego Twierdzenia Pitagorasa. Model nadaje się na wycieczki w góry, zakłada on, oprócz płaskiego dystansu, dwukrotne pokonanie "odległości" w pionie równej różnicy wysokości końcowej i początkowej
-Dystans liczony z uwzględnieniem pokonanych przewyższeń/spadków
-Różnica maksymalnej i minimalnej wysokości w czasie trasy
EKRAN 3:
-Zużycie energii (% baterii na godzinę)
-Szacowany pozostały czas pracy na baterii
-Pokonane przewyższenia
-Pokonane spadki
-Maksymalna i minimalna wysokość osiągnięta w czasie wycieczki
EKRAN 4
-Całkowity czas wycieczki (od złapania FIX-a)
-Czas w ruchu
-Maksymalna prędkość
-Czy aktualnie w ruchu (Y/N)
-Napięcie baterii
-Stan baterii (%)
Kosztorys:
-Podróbka Arduino Nano ok 10zł od wschodnich przyjaciół
-Moduł GPS U-blox NEO-6M ok. 40 zł
-Przetwornica step-up 5v 4zł
-Termometr DS18B20 4zł
-Wyświetlacz 4X20 (HD44780) 16 zł
-Układ zabezpieczenia ogniwa ok 5zł
(wszystko powyższe darmowa wysyłka)
-"adapter" wyświetlacza do I2C ok 10 zł + wysyłka
-Akumulator Li-Ion 3100mAh - 15zł + wysyłka
-Obudowa ok. 15zł + wysyłka
-Drobnica: przyciski, złącza, kable, oporniki, itp ok 15zł
Zapraszam do komentowania






Cool? Ranking DIY