GPS logger do samodzielnego złożenia

Trochę historii

Na grupie pl.misc.elektronika ktoś wspomiał o tanich modułach gps firmy Axiom z Allegro. Jak grzyby po deszczu zaczęły napływać raporty kolejnych ludzi, którzy kupili i uruchomili. Mi również udało się załapać na promocyjną cenę i również zacząłem dłubać.
Oprócz polutowania mikroskopijnego złącza, to reszta już była banalna. Na początek MAX232, zasilanie +5V wzięte wtyczki PS/2 komputera i coś wypluwa: znaczy się dobry.
Kolej na antenę. Chwilowo w finansowym dołku decyduję się na zrobienie własnej. Google długo nie wyrzucają nic ciekawego, aż w końcu trafiam na artykuł (pdf) z jakiejś gazety, który wygląda zachęcająco i biorę się do roboty. Później jeszcze znajduję ze dwa projekty, ale ten jest z nich najlepszy (stosunkowo mała antena i niezły zysk).
Pierwsze odczyty prawdziwej pozycji! Kilka resetów i sporo czasu ponownego szukania satelitów i pozycji od nowa skłaniają mnie od razu do domontowania bateryjki podtrzymującej pamięć (CR2032 z płyty głównej). Elektronika ląduje w pudełku od zapałek:-)
Pierwsze ślady zrobione na rowerze z laptopem…
Niestety, przerwy w śladzie (luźna wtyczka zasilania), waga laptopa i sposób jazdy z
jednak dosyć delikatnym ładunkiem nie pozwalają spocząć na laurach – trzeba kombinować dalej.

CEL: urządzenie rejestrujące ślady, najlepiej w postaci ‚czarnej skrzynki’.
A najlepiej jakby potrafiło zarejestrować cały wyjazd Harpaganowy (3-4 dni)…

Mając kilka złomowatych baterii od DELL-a mam pomysł, żeby wsadzić całość właśnie do takiej baterii. Idea była taka, żeby na wyjazdach z laptopem nie zajmowało to dodatkowego miejsca, łatwo się ładowało (z laptopa) i awaryjnie również zasilało laptopa. Po załadowaniu do baterii czterech ‚nowych’ ogniw Li-Ion (zamiast 8 jak jest orginalnie) upadło już jedno założenie: elektronika baterii dalej myśli, że ogniwa mają 3.6Ah i ładuje je za dużym prądem 🙁
Po pierwszych testach i padzie dwóch ogniw (były wadliwe) elektronika baterii wogóle fiksuje i nie chce nawet oddawać prądu do laptopa -> śmietnik.

Hardware

Chwilowo wygląda to tak:

Można to nazwać wersją 1.0, bo działa tak jak trzeba, ale w miarę jedzenia apetyt rośnie 🙂
Jest to wersja prototypowa (procesor w DIL, płytka uniwersalna itp).

Co widać i z czego w końcu to się składa:

  • 2 akumulatorki Li-Ion (docelowo 4, ale po padzie dwóch muszę odrobić straty)
  • przetworniczka do 3.3V na LM2675 (za radą RoMana), przy 4 ogniwach sprawność jej wynosiła 78%. Zielona płytka widoczna w lewym dolnym rogu. Z braku kondensatorów low ESR na napięcie ok. 20-25V dałem dwa zwykłe równolegle. Dla porównania najpierw zrobiłem przetwornicę na MAX832, ale tamta miała sprawność 71%
  • moduł GPS Axiom zamontowany na płytce ‚do góry nogami’. Pod nim wkomponowana bateria CR2032 (ekran modułu ‚umasiony’ robi od razu za ujemny styk baterii).
  • Procesor ATMEGA8L z zewnętrznym kwarcem 8Mhz
  • kieszonka na kartę pamięci SD/MMC
  • pod kieszonką na kartę zamontowanych kilka elementów biernych, jeden tranzystor, kwarc itp
  • 2 przełączniki bistabilne (jeden do włączania zasilania, drugi do przełączania wyjścia rs232 procesor<>gps, jeden mikroswitch (jeszcze nie wiem po co:-))
  • złączka do podłączenia wyświetlacza (w planach). Służy również do ładowania akumulatorów.
  • wykastrowany kabel od komórki (Siemens) robiący z powodzeniem za max3232, taniej i nie zabierając miejsca na płytce
  • złączka SMA z krótkim kabelkiem i wtyczką MMCX do GPS-a
  • dwie diody świecące (czerwona i żółta)

Schemat:

Jak widać jest to wersja beta (możnaby wywalić kilka oporników podciągających, pozmieniać trochę wartości kondensatorów, bo dałem jakie miałem:-)). JP1 dodany ‚z musu’ po stracie dwóch ogniw i obniżeniu napięcia zasilania.

Robi w tej chwili

  • procesor odbiera po rs-ie dane nmea z gps-a i zapisuje sobie w buforze w pamięci (na przerwaniach)
  • po uzbieraniu się co najmniej 512 bajtów zapisuje dane na kartę SD
  • zapamiętuje ostatni sektor zapisany w eepromie, żeby można było później dalej nagrywać na kartę od przerwanego miejsca (nawet po wyłączeniu zasilania)
  • działa hot-swap karty (sprawdzanie obecności i inicjalizacja przy włożeniu, nie zapisywanie danych w ciemno)
  • mierzone jest napięcie baterii przez wewnętrzny ADC, wypluwany status co 10s na wyjście mikroprocesora (rs) oraz zapisywane na karcie pomiędzy komunikatami nmea (inteligentnie – czeka z zapisem do cr/lf)
  • czerwona dioda: świeci gdy brak karty lub był błąd w zapisie, miga krótko podczas zapisu sektora
  • żółta dioda: miga krótko przy każdym odebranym bajcie po interfejscie szeregowym z gps-a
  • zrobione proste cli umożliwiające resetowanie licznika sektorów karty, pokazanie aktualnego stanu licznika oraz stanu baterii, krótki help.

Software


Ściągnij: pliki na sourceforge.net

  • Licencja GPL
  • Asembler
  • Do kompilacji używam avra – nie gwarantuję, że czymkolwiek innym się to skompiluje
  • Ponieważ kod na chwilę obecną zajmuje ok 1kB, a pamięci jest tam aż 8KB, to nie jest on specjalnie optymalizowany pod kątem zajętości pamięci. Głównym priorytetem jest
    na razie jego czytelność i spójność logiczna. Jeżeli masz jakieś uwago do kodu, to nie obrażaj się jak odpowiem ‚tak ma być, bo tak jest ładniej’. Słaba optymalizacja pod względem objętości nie oznacza to oczywiście niechlujstwa i stosowania makr bezsensownie powiększających kod.

  • Obsługa karty SD/MMC przeklepana z Yampp-a z dodaniem timeoutu przy zapisie, bo była pętla nieskończona w pewnych warunkach (brak odpowiedzi karty po wysłaniu danych do zapisu).
  • Jak na razie można doszukać się tam kilku reguł:
    • definicje rejestrów, bitów wraz z opisami na początku
    • wszystkie rejestry mają swoje nazwy robocze, więc nie używam nazw nic nieznaczących typu r18 itp. Wyjątkiem może być r0, bo czasem jest to jedyny rejestr na którym coś działa
    • makra
    • wektory przerwań
    • głowny program
    • procedury obsługi przerwań
    • inne pomocnicze procedury
    • stałe (dane)
    • zmienne (ram i eeprom)
    • procedury dotyczące karty sd zaczynają się na sd_, obsługi rs232-a na rs_, ogólne spi na spi_ itp.
  • w sofcie może być trochę śmieci, bo jest to wersja robocza i oprócz tego co działa już są zaczątki innych rzeczy (niekoniecznie będzie to docelowo tak wyglądać)

UWAGA!: ponieważ soft nagrywa dane sektor po sektorze, więc prawdopodobieństwo odczytania takiej karty pod windowsem jest mizerne. Pod Linuksem i innymi systemami, które nie mają problemów z dostępem do urządzeń bez filesystemu i partycji w większości wypadków wystarczy użyć komendy
dd if=/dev/sda of=plik
i ewentualnie wyciąć z końca pliku śmieci

TO DO

  • obsługa jakiegoś filesystemu na karcie zamiast zapisu ‚żywych’ sektorów
  • więcej logiki i sterowania do procesora
    • kalibracja napięcia baterii poprzez cli
  • rozpoznawania różnych kart (a przynajmniej wielkości)
  • oprogramowanie mikroswitcha
  • podłączenie wyświetlacza od Siemensa S65
  • oprogramowanie wyświetlacza (wyświetlanie map???)
  • czujnik ruchu roweru (kontraktron + magnes na kole) i automatyczne zaznaczanie waypointów
  • trochę elektroniki dla baterii (może ładowarka ‚zewsząd’ ze step-up sterowana prockiem?)
  • wersja angielska i ewentualne przenosiny na avrgps.sourceforge.net

Do wersji 2.0 elektroniki:

  • zmiana sposobu zasilania pozwalająca procesorowi odciąć zasilanie dla modułu gps-a
  • zmiana połączenia ogniw na dające 7.2V (teraz 14.4V) -> większa sprawność przetwornicy, łatwiejsze ładowanie i kontrola baterii, ale do podświetlenia wyświetlacza trzeba będzie dorobić przetworniczkę step-up
  • zmiana procka na ATMEGA128, ATMEGA162 lub inny z 2xUART, bo to zwiększy elastyczność
  • dodanie jakiegoś multipleksera zamiast przełącznika wejść (pewnie będzie CPLD Xilinxa)
  • czujnik przyśpieszenia do wykrywania stanu nieruchomego i uśrednianie pozycji przy bezruchu
  • lepsze zasilanie przetwornika ADC, pomiar napięcia poszczególnych ogniw (?)
  • podłączenie kamerki MCA-25 od Ericssona
  • zintegrowanie wyświetlacza

ChangeLog

  • 2006.02.27: dodane D2, D3, C7 i R9 dla możliwości wyłączenia przetwornicy i samoodcięcia zasilania przez procesor w przypadku zbytniego rozładowania baterii (trzeba uaktualnić soft!).
  • 2006.02.27: strona i kod już w subversion
  • 2006.03.02: pliki na sourceforge.net. Migracja strony chyba też wkrótce
  • 2006.03.02: poprawiony troche hardware, w sofcie już autowyłączanie przy za niskim stanie baterii, trochę drobnych poprawek w kodzie
  • 2006.03.19: interpreter komend (cli). Można teraz przez konsolę po rs-ie zresetować licznik sektorów, odczytać aktualny sektor, włączać/wyłączać raportowanie statusu baterii na konsolę, krótki help. Dodatkowo dolny poziom stanu baterii przy którym wyłączana jest przetwornica jest zapisany w eepromie zamiast na stałe z kodzie.
  • 2006.04.06: uzupełnienie www
  • 2006.07.10: dodanie buzzera piszczącego przy niskim stanie baterii (pod PB0)

Pomocne linki

AVRGPS 2.0

Work is still in progress…

2007.02.13, first LCD code:

2007.02.20, parse GPRMC and display some basic data, LCD library done:

2007.03.06, parse GPGSA and GPGSV, math library done, added flying sats:

Update 2012.08.25
Strona przeniesiona do bloga, data wpisu ustawiona ostatnią datę modyfikacji.
Projekt nie jest już wspierany od dawna, chociaż sprzęt nadal działa i jest używany.
Pewnie niedługo dorzucę tu lub na SourceForge żródła softu w wersji z wyświetlaczem…

This entry was posted in Elektronika and tagged , . Bookmark the permalink.

One Response to GPS logger do samodzielnego złożenia

  1. Rafał says:

    Super projekt stary! Będę pracował nad czymś podobnym 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.