Omawiany projekt zaczął powstawać w pierwszej połowie 2022 roku, a dojrzałość osiągnął kilka miesięcy później, choć nie nazwę go jeszcze skończonym!
Motywacją była chęć skutecznego zapamiętania przebytych tras w górach, a także zdobycie materiałów pozwalających wprowadzać poprawki i uzupełniać OpenStreetMap. W pierwszej kolejności próbowałem używać w tym celu smartfona, jednak posiadany wówczas przeze mnie model posiadał wyjątkowo marny odbiornik, miał krótki czas pracy na baterii i był zawodny.
Podstawowym sposobem pracy urządzenia jest zapis gotowego pliku GPX z przebytą trasą na włożonej w gniazdo karcie SD. Dodatkowo podczas pracy można konfigurować sposób działania urządzenia i odczytywać niektóre dane z wyświetlacza.
Urządzenie obsługuje karty SD z systemem plików FAT32. Podczas każdej rejestracji na karcie tworzone są trzy nowe pliki: NMEA, zawierający wszystkie linie wygenerowane przez odbiornik GNSS, GPX zawierający zapis trasy gotowy do importu do różnych programów, oraz LOG zawierający różne informacje serwisowe, mogące pomóc między innymi w rozwoju oprogramowania.
Dane dostępne na wyświetlaczu są następujące:
- stan naładowania baterii (0/1/2/3 kreski)
- status (czy trwa rejestracja? czy jest sygnał z satelit?)
- bieżące współrzędne geograficzne w stopniach
- wysokość nad geoidą (w przybliżeniu m n.p.m.)
- ilość widzianych przez odbiornik satelit
- przebyty dystans (km) i czas (s)
- średnia prędkość (km/h)
- czas pauzy (gdy rejestrator był aktywny, ale nie rejestrował - więcej szczegółów za chwilę)
- bieżąca data i godzina przeliczona do polskiej strefy czasowej
- temperatura wewnątrz urządzenia
W dowolnym momencie można wywołać następujące komendy:
- zapisać punkt (tworzy dodatkowy plik GPX zawierający jedynie bieżącą lokalizację)
- wejść w ustawienia
- wstrzymać rejestrację (zamknięcie segmentu trasy w GPX) lub ją wznowić
- stworzyć nowy zestaw plików bez wyłączania urządzenia
Dostępne są następujące ustawienia:
- autopauza: czy rejestrator ma wejść w tryb pauzy, gdy się nie przemieszcza
- czas bezruchu i odległość dla autopauzy (jeśli w danym czasie przebyto mniej, niż wpisana odległość, zatrzymujemy, w przeciwnym wypadku wznawiamy)
- prędkość wyjścia z autopauzy (jeśli przekroczymy daną prędkość, pauza zostanie zakończona a warunek odległości przestanie działać, jego licznik czasu się zresetuje)
- czy zerować przebyty dystans po stworzeniu nowego pliku
- czy wyłączyć filtr wygładzający przebieg trasy (Użycie filtra - Kalman + uśrednianie - nieco wygładza ścieżkę na mapie i zwiększa dokładność wskazania przebytej odległości, ale zmniejsza precyzję punktów, co utrudnia ich wykorzystanie do OSM)
- ile punktów na starcie rejestracji pominąć, aby usunąć niedokładności, gdy moduł się jeszcze synchronizuje
- czy wykorzystywać satelity SBAS
- przy jakiej minimalnej ilości widocznych satelit uznawać dane za dobre (w przeciwnym razie punkt nie zostanie użyty do tworzenia pliku GPX)
- rodzaj GNSS (możliwe kombinacje: GPS+GLONASS+GALILEO, GPS, GPS+GALILEO, GALILEO, GPS+BEIDOU, BEIDOU)
- czy rejestrator ma startować w trybie pauzy, czy rejestrować od razu po włączeniu
Cztery diody świecące sygnalizują stan urządzenia:
- żółta sterowana przez odbiornik, migająca oznacza brak synchronizacji z satelitami
- zielona, błyska po odebraniu poprawnego pakietu RMC (zawierającego m. in. bieżący czas), normalnie raz na sekundę
- czerwona, sygnalizująca dostęp do karty pamięci, świeci także, gdy urządzenie jest w trybie bootloadera
- niebieska, wskazuje, że rejestracja jest wstrzymana i trzeba ją wznowić ręcznie
Buzzer sygnalizuje piskami o różnej liczbie i długości różne zdarzenia podczas działania urządzenia (błąd karty, pusta bateria, start rejestracji itp), nie mam przygotowanej listy sygnałów.
Rejestrator jest zasilany z wbudowanego akumulatora Li-ion (około 1,8Ah), ładowanego przez gniazdo Micro USB. Gniazdo to, po podłączeniu do komputera, służy też za port szeregowy, przez który można odebrać informacje "debugowe" i bieżące komunikaty NMEA, a także przeprowadzić aktualizację oprogramowania mikrokontrolera.
Urządzenie powstało w trzech wersjach:
1. Prototyp, obecnie już zdemontowany.
Jako bazę wykorzystałem płytkę przeznaczoną do innego celu, dokładając gniazdo karty SD i moduł GPS (FGPMMOPA6C, zakupiony wiele lat wcześniej i nigdy dotąd nie wykorzystany). Użyłem doskonale znanego mi mikrokontrolera ATMEGA644PA, zasilanego z 3,3V (dzięki temu łączy się wprost z kartą pamięci) i taktowanego z 7,3728MHz (wartość ta pozwala na bezproblemowe uzyskanie dużej prędkości przez port szeregowy i jednocześnie nie przekracza 8MHz - maksimum dla tego napięcia zasilania). Początkowo urządzenie miało być zasilane z "power banku" USB, i nie mieć żadnych elementów interfejsu użytkownika (włączenie po podpięciu do zasilania, poprawne zamknięcie plików i wyłączenie po jego odcięciu). Pierwsze próby pokazały jednak, że pobór prądu jest zbyt mały, i z tego powodu źródło energii wyłącza się samoczynnie w niespodziewanych momentach. Zatem musiał zostać wprowadzony akumulator. Wymusiło to dodanie pierwszego przycisku - włącznika.
Tworzenie oprogramowania rozpocząłem od poszukiwań informacji na temat dostępu do karty pamięci i systemu plików. Dokumentacja jest dostępna, ale przy tym bardzo rozległa, więc implementacja byłaby bardzo czasochłonna. Rozpocząłem zatem poszukiwanie gotowych rozwiązań, wiedząc, że drukarka 3D wykorzystująca taki sam mikrokontroler jest w stanie odczytywać pliki z takiej karty. Z pomocą przyszedł pewien Japończyk przedstawiający się jako ChaN (ten sam, u którego znalazłem wspomnianą wcześniej dokumentację) - okazało się, że zrealizował on niemal jednakowy projekt, tworząc własne biblioteki dla obsługi karty SD i systemu FAT. Wszystkie te narzędzia zostały udostępnione w otwartej licencji i mogłem je swobodnie wykorzystać. Jego projekt był pomyślany jako rejestrator samochodowy, i nie obsługiwał też plików GPX. Strumień NMEA był zapisywany bezpośrednio na karcie. Na tym etapie dodałem obsługę GPX oraz filtry danych. Urządzenie testowałem przez kilka tygodni, i okazało się w pełni spełniać moje oczekiwania.
2. Płytka w wersji pierwszej.
Zaprojektowałem płytkę pozwalającą na docelowe wygodne wykorzystanie urządzenia, przewidując miejsce na wyświetlacz (alfanumeryczny 2x16 typ LCD-AC-C1602A-YGN, który miałem w swoich zapasach), akumulator Li-ion w rozmiarze AAA (około 0,4Ah), czujnik temperatury, cztery przyciski sterujące i jeden przycisk włącznika. Zabezpieczenie i ładowanie akumulatora jest realizowane przez gotową płytkę dostępną w handlu, nie czułem potrzeby przenoszenia tych komponentów na moją PCB. W projekcie nie było poważniejszych błędów, a interfejs użytkownika pozwalający na odczyt podstawowych informacji i zmianę ustawień powstał dość szybko. Łącznie wykonałem trzy egzemplarze urządzenia, dwa z nich są najprawdopodobniej nadal używane przez moich znajomych.
3. Płytka w wersji drugiej.
W pewnym momencie okazało się, że zastosowany akumulator jest zbyt mały (z trudnością wystarcza na wielogodzinną wycieczkę, urządzenie trzeba ładować na trasie). Oprócz tego, zarówno użyte wyświetlacze, jak i moduły GPS, przestały być dostępne w handlu (tak naprawdę nie były już produkowane w momencie rozpoczęcia projektu). Większy akumulator, dający czas pracy rzędu 25-30 godzin, dał się, po niewielkich przeróbkach, zmieścić w starej wersji. Nowy moduł (użyłem tym razem wielosystemowego PA1616D dostępnego w Maritex) też udało mi się tam zamontować, bo rozkład wyprowadzeń jest zbliżony.
Na tym etapie, latem 2022, wykonałem krótki filmik przedstawiający urządzenie i typową scenerię jego użycia:
Gorzej z wyświetlaczem. Zorientowałem się też, że superkondensator podtrzymujący zasilanie modułu, gdy urządzenie jest wyłączone (dzięki temu o wiele szybciej synchronizuje się po ponownym uruchomieniu) nie jest potrzebny - podtrzymanie można zasilić wprost z akumulatora Li-ion. Po znalezieniu wyświetlacza o zbliżonych wymiarach zdecydowałem o dostosowaniu płytki do jego użycia, uwzględniając też pozostałe ulepszenia i stosując druk czterowarstwowy. Wybrałem tu LCD graficzny typ LCD-AG-C128032R-FGN NO/-E6 (rozdzielczość 128x32, bez podświetlenia). Oprogramowanie zostało zmodyfikowane tak, aby podczas startu wykrywało nowy moduł GNSS (gdy znajdzie ten stary, z listy trybów GNSS pozostaje tylko GPS). Z wyświetlaczem nie było tak łatwo - program obsługuje obydwa, ale trzeba go specjalnie skompilować pod konkretną wersję (płytka jest dostosowana do obu). Aktualnie wyświetlacz graficzny wyświetla dokładnie taką samą treść, co alfanumeryczny, a nadmiarowe piksele pozostają niewykorzystane.
Obudowa i wspornik wyświetlacza są wykonane jako wydruk 3D z naturalnego PLA. Szybka wyświetlacza to płyta z poliwęglanu o grubości 1 mm. Wymiary zewnętrzne obudowy 125 x 44 x 28 mm. Najlepszym miejscem do noszenia jest górna kieszonka plecaka, a optymalna pozycja - wyświetlaczem (czyli też anteną) w górę.
Co pozostało do zrobienia?
Urządzenia nie można jeszcze uznać za gotowe, choć jest z sukcesem użytkowane. Przydałoby się kilka poprawek:
- Ulepszenia oprogramowania, choćby wskazywanie biezącej prędkości, wyświetlanie przebytego czasu w przyjaźniejszych jednostkach, czy też poprawki działania autopauzy.
- Dodanie gniazdka zewnętrznego czujnika temperatury, aby mierzyć temperaturę na zewnątrz (w plecaku, do tego w obudowie pracującego urządzenia, jest znacznie cieplej).
- Jakiś lepszy pomysł na podświetlenie wyświetlacza. Wnętrze obudowy jest po "kliknięciu" włącznika oświetlane białą diodą, co daje pewną czytelność wyświetlanych informacji, ale to czasem za mało.
- Dodać układ wymuszonego resetu przy długim przytrzymaniu włącznika. Zdarzyło mi się kilkukrotnie wgrać program, który z różnych powodów nie reagował zarówno na próbę normalnego wyłączenia, jak i na komendę wejścia w bootloader, ale jednak działał na tyle dobrze, że kasował watchdoga. W takiej sytuacji konieczne jest rozkręcenie obudowy.
- Zabezpieczyć otwór na slot karty, aby karty nie dało się wrzucić do wnętrza obudowy. (Nie mam jeszcze wcale zaprojektowanej obudowy do drugiej wersji PCB, wykorzystałem starą obudowę, wycinając przeszkadzające elementy.)
Chętnym do powielenia urządzenia lub jego części mogę udostępnić niezbędne materiały (nie zamieszczam ich w tym poście, bo ich przygotowanie wymaga ode mnie nieco dodatkowej pracy).
Fajne? Ranking DIY