Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

GPS Logger - rejestrator przejechanej trasy

Duch__ 24 Cze 2012 23:17 19311 39
  • GPS Logger - rejestrator przejechanej trasy

    Witam.

    Dzisiaj prezentuję mój ostatni projekt, którym jest samochodowy GPS Logger.
    Układ powstał z dwóch powodów:

    Pierwszy powód - parę tygodni temu udałem się na opolską giełdę i na jednym ze stoisk trafiłem na odbiornik GPS firmy JENTRO model SC-GPS-1 - zapłaciłem za niego dosłownie 5zł :D

    Drugi powód - zbliżający się wakacyjny wyjazd moich rodziców. Ojciec bardzo lubi po powrocie analizować przebytą trasę :)

    Te dwa "zdarzenia" zmobilizowały mnie do stworzenia takiego oto urządzonka.

    Sercem układu jest Atmega328P w obudowie TQFP32, która komunikuje się z w/w odbiornikiem GPS dwukierunkowo poprzez sprzętowy UART z prędkością 115200. Żeby prawidłowo (bezbłędnie) odbierać ramki z odbiornika, zastosowałem kwarc 7.372800MHz. Całość docelowo zasilana jest przez port mini USB z ładowarki samochodowej lub z innego źródła dającego na wyjściu 5V i co najmniej 200mA, zakończonego wtykiem mini USB. Na płytce znajduje się stabilizator LD33 zasilający procesor oraz kartę SD, natomiast sam odbiornik GPS wymaga do poprawnej pracy 5V. Bezpiecznik polimerowy jest profilaktycznie.

    Zasada działania jest następująca:

    Po podaniu zasilania procesor naprzemiennie miga diodami LED przez 5 sekund. Jest to czas niezbędny do prawidłowego uruchomienia odbiornika GPS. Następnie wysyłana jest komenda przełączając odbiornik w tryb wysyłania tylko ramki GPRMC co jedną sekundę. Domyślnie GPS wysyła ramki GPGGA i GPRMC. Można też ustawić inne ramki, ale mi one nie były do niczego potrzebne. Po więcej szczegółów odsyłam do dokumentacji układ Sony CXD2951.

    Po rozpoczęciu pracy układ oczekuje aż GPS zsynchronizuje się z satelitami i zacznie wysyłać poprawną ramkę GPRMC - poprawną w znaczeniu pełną. Świeci się wtedy dioda zielona, a czerwona zmienia swój stan co sekundę.

    Jeśli ramka jest prawidłowa, to układ przechodzi do właściwej pracy, gdzie pełne ramki są zapisywane na kartę SD. Żeby zbędnie nie zajechać karty SD zapisuję co piątą odebraną ramkę. Dodatkowo w celu ochrony karty sprawdzam, czy odbiornik przemieścił się w stosunku do poprzedniego zapisu, zatem jeśli zatrzymam auto na światłach bądź zostawię na parkingu na całą noc, to z tego miejsca będę mieć tylko jeden zapis! Dioda zielona oznacza prawidłowe odebranie ramki GPRMC natomiast czerwona oznacza moment zapisu.

    Zdjęcia układu:
    GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy GPS Logger - rejestrator przejechanej trasy

    Przykładowe zarejestrowane trasy (wyeksportowane do programu GOOGLE EARTH):

    Trasa 1:

    Link


    Trasa 2:
    GPS Logger - rejestrator przejechanej trasy

    Praca układu w czasie jazdy:

    Link


    Zapraszam do komentowania.

    Pozdrawiam, Duch__

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Duch__
    Poziom 31  
    Offline 
    Unitrez elektronik
    WWW.UNITREZ.PL
    SYSTEMY ALARMOWE, TELEWIZJA DOZOROWA,
    KONTROLA DOSTĘPU, AUTOMATYKA BRAMOWA.
    INTELIGENTNE BUDYNKI
    Specjalizuje się w: bascom, avr, alarmy, telewizja, monitoring, kontrola dostępu
    Duch__ napisał 2282 postów o ocenie 1491, pomógł 33 razy. Mieszka w mieście Opole. Jest z nami od 2004 roku.
  • PCBway
  • #2
    gbd.reg
    Poziom 21  
    Co do tego idle time po starcie, jest to zalecane wg datasheetu odbiornika GPS, czy po prostu taki workaround na skomplikowany proces inicjalizacji, bo tak też działa? ;)
  • #3
    ~~[eM]~~
    Poziom 11  
    Taki projekt stanął u mnie na fazie kupna odbiornika GPS :)
    Czy możesz przybliżyć jaki format wyjściowy jest danych do zapisu na karcie, że daje radę go importować w GoogleEarth?
  • #4
    Duch__
    Poziom 31  
    gbd.reg napisał:
    Co do tego idle time po starcie, jest to zalecane wg datasheetu odbiornika GPS, czy po prostu taki workaround na skomplikowany proces inicjalizacji, bo tak też działa? ;)


    Podczas wielu testów okazało się że odbiornik GPS gubił ramkę konfiguracyjną otrzymaną od procesora zaraz po uruchomieniu. Testując różne czasy opóźnienia doszedłem do wniosku że 5 sekund to jest optymalna wartość. Bez ramki konfiguracyjnej i tak GPS rozpoczyna samoczynną synchronizację z satelitą. Ja mu tylko ustawiam co ma przesyłać do procesora.

    ~~[eM]~~ napisał:
    Taki projekt stanął u mnie na fazie kupna odbiornika GPS :)
    Czy możesz przybliżyć jaki format wyjściowy jest danych do zapisu na karcie, że daje radę go importować w GoogleEarth?


    Na karcie SD jest zapisywana pełna ramka GPRMC. Jest ona interpretowana przez GOOGLE EARTH jako punkt. Dwie ramki to już jest jakiś odcinek. Proponuję poszukać w internecie przykład ramki GPRMC i skopiować ją kilkukrotnie modyfikując czas, długość i szerokość geograficzną, zapisać to wszystko do pliku LOG i w programie GOOGLE EARTH normalnie otworzyć taki plik.
  • #5
    benny111
    Poziom 11  
    Kiedy urządzenie jest pozostawione w jednym miejscu na dłużej to faktycznie w każdej ramce jest takie samo położenie? Mój GPS szumi i po nocy na parkingu mam zapis jakby auto całą noc manewrowało po parkingu. Czy może sprawdzając czy jest zmiana położenia przyjmujesz jakąś tolerancję?
  • #6
    szulat
    Poziom 23  
    benny111 napisał:
    Kiedy urządzenie jest pozostawione w jednym miejscu na dłużej to faktycznie w każdej ramce jest takie samo położenie? Mój GPS szumi i po nocy na parkingu mam zapis jakby auto całą noc manewrowało po parkingu. Czy może sprawdzając czy jest zmiana położenia przyjmujesz jakąś tolerancję?

    niektóre GPSy mają opcję ignorowania ruchu z prędkością mniejszą niż próg (np. 1m/s), wysyłają wtedy dokładnie tę samą pozycję, co może uprościć filtrowanie.
    jeżeli takiej opcji nie ma to jest zupełnie normalne że GPS wędruje nawet o kilkanaście metrów nie ruszając się z miejsca.
  • #7
    Duch__
    Poziom 31  
    Ja u siebie opisane filtrowanie wykonałem programowo tzn. z otrzymanych ramek wyciągam części ułamkowe z długości i szerokości, a następnie zapisuje je do zmiennych WORD. Przed zapisem sprawdzam czy różnica w części ułamkowej w obu przypadkach jest >= 20, w stosunku do starych części ułamkowych wcześniej zapisanej pozycji. Jeśli tak to zapisuję nowy punkt pomiarowy na karcie SD. Wartość 20 została dobrana doświadczalnie i w rzeczywistości wynosi ona około 5-8 metrów. Nie mierzyłem jeszcze dokładnie. Tak więc jeśli odbiornik nie przemieści się o te 5-8 metrów w ciągu 5 sekund (analiza co piąty odczyt) to nie dokonuje zapisu.

    Bez takiej korekty odbiornik też mi szalał po podwórku.
  • #8
    scooba
    Poziom 15  
    fajnie jak by zapisywał czas kiedy staje i kiedy ruszył, np zaprkowałes auto 18:00 i start 8 rano, wiadomo ile czasu stało auto w danym miejscu jak nie było w ruchu
  • #9
    Duch__
    Poziom 31  
    Spytam... do czego informacja ile czasu stało zaparkowane? Co ona nam istotnego przyniesie?
  • #10
    gbd.reg
    Poziom 21  
    scooba napisał:
    fajnie jak by zapisywał czas kiedy staje i kiedy ruszył, np zaprkowałes auto 18:00 i start 8 rano, wiadomo ile czasu stało auto w danym miejscu jak nie było w ruchu


    Z tego co wiem, ramka GPRMC zawiera również czas, więc nie ma potrzeby zapisywania żadnych dodatkowych danych, wystarczy porównać czas dwóch ramek i basta ;)
  • PCBway
  • #11
    Duch__
    Poziom 31  
    Podaje link do bardzo ciekawej rozpiski z której można się dowiedzieć o rodzajach ramek GPS, oraz danych jakie można z nich wyciągnąć:

    Link
  • #12
    scooba
    Poziom 15  
    Duch__ napisał:
    Spytam... do czego informacja ile czasu stało zaparkowane? Co ona nam istotnego przyniesie?

    Jeśli zapisujemy, by śledzić trasę to również jest to istotna informacja ile staliśmy np. w czasie przerwy na śniadanie, chyba,ze zapisujesz trasy z domu do pracy ,żeby ja analizować w domu.
    Dlatego podałem tą podpowiedz, bo kiedyś zapisywałem również trasy i to było dla mnie istotne, oczywiście dla ciebie nie musi być to tak ważna informacja.
    Pozdrawiam
  • #13
    mlfox85
    Poziom 10  
    A ja chcę jeszcze podrążyć temat zapisu na kartę. Zapisujesz plik na kartę w jakimś systemie plików czy zapisujesz punkty bitowo. Jeśli bitowo to jak później tworzysz z tego plik typu log? Masz do tego jakieś źródło (w sensie gdzie znalazłeś na ten temat informacje, nie chodzi mi o źródło programu!)
  • #14
    starepc.pl
    Poziom 24  
    mlfox85 napisał:
    Zapisujesz plik na kartę w jakimś systemie plików czy zapisujesz punkty bitowo. Jeśli bitowo to jak później tworzysz z tego plik typu log


    Przy zapisie bitowym, możesz otworzyć kartę na przykład w DMDE i skopiować dane hex do pliku, a potem je odczytać.
  • #15
    heyka
    Poziom 17  
    W jakim języku programowałeś mikroprocesor?
  • #16
    Duch__
    Poziom 31  
    Dane zapisywane są na karcie do pliku txt który później mogę otworzyć np. notatnikiem.

    Język programowania to poczciwy Bascom.
  • #17
    krru
    Poziom 32  
    Tak trochę dziwie się, że zastosowałeś jakieś mechanizmy ograniczania zapisu. Dzisiejsze karty (powiedzmy 1GB) wystarczą na prawie 5 miesięcy ciągłego zapisywania jednej sekwencji NMEA - coś około 80 znaków na sekundę.
  • #18
    aneuro
    Poziom 16  
    A orientujesz się może z jaką dokładnością w przeciętnym GPS można wysokość zarejestrować? Logujesz wysokość też? Interesowałoby mnie coś takiego do testów pojazdów EV-przydałoby się kreślić trajektorię w 3D w metrach... niekoniecznie z wizualizacją w Google ;)
  • #19
    anilion
    Poziom 14  
    kolego Duch, bardzo przydatna konstrukcja, czy mógł byś udostępnić schemat i wsad lub źródło ? Mam odbiornik GPS Pentagram P3105 na bt i chciałbym go tak wykorzystać. W środku są wyprowadzone linie danych więc nie widzę problemu.
    Pozdrawiam
  • #20
    Duch__
    Poziom 31  
    krru napisał:
    Tak trochę dziwie się, że zastosowałeś jakieś mechanizmy ograniczania zapisu. Dzisiejsze karty (powiedzmy 1GB) wystarczą na prawie 5 miesięcy ciągłego zapisywania jednej sekwencji NMEA - coś około 80 znaków na sekundę.


    A po co mam logować szum gps-a kiedy pojazd stoi? Tylko po to żeby później zobaczyć plamę z kilkuset punktów?

    aneuro napisał:
    A orientujesz się może z jaką dokładnością w przeciętnym GPS można wysokość zarejestrować? Logujesz wysokość też? Interesowałoby mnie coś takiego do testów pojazdów EV-przydałoby się kreślić trajektorię w 3D w metrach... niekoniecznie z wizualizacją w Google ;)


    Według danych z noty katalogowej to mniejsza od 18000 metrów. Wysokości nie loguje, ale można ją wyciągnąć z ramki GPGGA.

    anilion napisał:
    ..czy mógł byś udostępnić schemat i wsad lub źródło ?


    W załączniku kod źródłowy i schemat z PCB
  • #21
    aneuro
    Poziom 16  
    Duch__ napisał:

    Według danych z noty katalogowej to mniejsza od 18000 metrów. Wysokości nie loguje, ale można ją wyciągnąć z ramki GPGGA.

    No tak, tylko np. 1000m (n.p.m) +/- ile metrów? Chyba nie będzie to dokładne-pewnie jakiś czujnik przyspieszenia będzie lepszy, bo chcę analizować zmiany energii w czasie (min. straty związane z przymusowym hamowaniem)-prędkość z czujników Halla z silnika BLDC w kole będzie zczytywana więc energię kinetyczną bez problemu się policzy, gorzej z potencjalną, bo wysokość potrzebuję, ale akcelerometr może rozwiąże problem.... a jak nie to jakiś zyroskop może, bo kąt nachylenia trasy przydałoby się cały czas znać, wtedy już zmiany wysokości z prędkości by się wyliczało...
  • #22
    krru
    Poziom 32  
    Błąd wysokości systemu GPS jest ok 3 razy większy niż błąd położenia w poziomie. Na pomiar lepszy niż kilkanaście metrów raczej nie ma co liczyć. Oczywiście wszystko może się jeszcze zepsuć, jeśli odbiór sygnału jest jakoś utrudniony. Jeśli ten twój pojazd nie ma latać, to najdokładniej mieć wgraną mapę i wysokość odczytywać z ukształtowania terenu. Jeśli wspomnianą analizę możesz robić offline to znacznie upraszcza sprawę.

    Inna możliwością jest barometr - oczywiście tylko we współpracy z GPS, do wyeliminowania zmienności ciśnienia związanej z pogodą. Tutaj jednak chyba kilkumetrowe zmiany wysokości będą poza zasięgiem rozdzielczości dostępnych czujników.
  • #23
    anilion
    Poziom 14  
    Duch__ napisał:
    Całość docelowo zasilana jest przez port mini USB z ładowarki samochodowej lub z innego źródła dającego na wyjściu 5V i co najmniej 200mA
    200 mA to całkiem sporo, wiem ze odbiorniki GPS pobierają prądy 40-60 mA, czy zapis na kartę jest az tak prądożerny? pytam bo chciałbym zrobić wersje mobilną- do wędrówek pieszych które trwają kilka dni, chciałbym aby bez ładowania można było to zasilać np z 4 paluszków przez kilka - kilkanaście dni, czy jest to realne?
  • #24
    krru
    Poziom 32  
    Karta SD ciągnie sporo jak jest aktywna. A w takim zastosowaniu prawie nic nie robi. Karta z nieaktywną linią CS ciągnie znacznie mniej. Można też sterować zasilaniem - co prawda trzeba będzie inicjować kartę za każdym razem, co było by skuteczne, gdyby procek dysponował jakimś większym RAMem , tak by zapisywać od razu większe paczki danych. Kilkadziesiąt KB powinno wystarczyć na gromadzenie danych przez kilka minut a zapis potrwa sekundę.
  • #25
    Duch__
    Poziom 31  
    anilion napisał:
    Duch__ napisał:
    Całość docelowo zasilana jest przez port mini USB z ładowarki samochodowej lub z innego źródła dającego na wyjściu 5V i co najmniej 200mA
    200 mA to całkiem sporo, wiem ze odbiorniki GPS pobierają prądy 40-60 mA, czy zapis na kartę jest az tak prądożerny? pytam bo chciałbym zrobić wersje mobilną- do wędrówek pieszych które trwają kilka dni, chciałbym aby bez ładowania można było to zasilać np z 4 paluszków przez kilka - kilkanaście dni, czy jest to realne?


    Mój moduł GPS w czasie pracy pobiera 100mA. Jeśli włącze mu tryb sleep mode (nieuwzględniony w programie) to pobiera w okolicy 60-80mA. Dolicz do tego działanie procesora, karty, i diodek LED i już jesteśmy blisko 200mA. Zasilacz nigdy nie stosuje się na styk, zawsze musi mieć zapas.
  • #26
    aneuro
    Poziom 16  
    krru napisał:

    Inna możliwością jest barometr - oczywiście tylko we współpracy z GPS, do wyeliminowania zmienności ciśnienia związanej z pogodą. Tutaj jednak chyba kilkumetrowe zmiany wysokości będą poza zasięgiem rozdzielczości dostępnych czujników.

    A dlaczego pomysł z żyroskopem jest kiepski? Jak znam kąt nachylenia i przebytą drogę i w sposób ciągły to będę analizował za pomocą uP, to powininem dostać sensowne zmiany wysokości...
    W zasadzie przy jeżdzie ze stałą prędkością chyba nawet 3osiowy akcelerometr by starczył, bo jedyną siłą byłaby siła grawitacji i jej 3y składowe we współrzędnych pojazdu powinny pozwolić określić nachylenie. Natomiast analiza przyspieszenia na podstawie zmian prędkości pojazdu-to jest znane, bo czujniki Halla w BLDC pozwalają określić przebytą drogę w funkcji czasu....
    To chyba jest do zrobienia zwykłym akceloerometrem + pomiar drogi, prędkości i przyspieszenia wzdłuż trasy...
    3 osiowe akcelerometry nie są drogie więc chyba to jest jakis pomysł, bo sam sygnał GPS rzeczywiście dokładność żadna będzie....
  • #27
    pgoral
    Poziom 26  
    to bardzo ciekawy temat nawigacji zliczeniowej - np. inercyjnej i nawigacji GPS. Dobrą drogą idziesz. Ciekaw jestem co z tego wyniknie.
  • #28
    aneuro
    Poziom 16  
    pgoral napisał:
    to bardzo ciekawy temat nawigacji zliczeniowej - np. inercyjnej i nawigacji GPS.

    Mam zamiar pobawić się takim czujnikiem i zintegrować go z własnym sterownikiem silnika BLDC, który wysyła sygnał z 3ech czujników Halla (3 fazowe bipolarne sterowanie), więc predkość i jej zmiana znana-na dodatek jest kilkanaście par biegunów magnetycznych w tych silnikach więc otrzymuję na jeden obrót koła o 360 stopni wiele sygnałów z każdego takiego czujnika Halla w róznych przedziałach czasu, zależnych od prędkości. Wychodzi na to że całkiem dokładnie zmiany drogi przebytej w czasie znam wzdłuż trajektorii ruchu, więc pozostaje chyba tylko odpowiednio przetworzyć sygnal z tego akcelerometru. Trzeba będzie poanalizować, czy teoretycznie jest możliwe określenie w układzie trajektorii terenu wektora przyspieszenia znając jego wartość całkowitą i niejako rzut na wektor chwilowego kierunku ruchu-trochu z wektorami w 3D trzeba się będzie pobawić ;) Ale jak w sumie jedynymi siłami dodatkowymi będzie siła grawitacji, a siła działająca na pojazd w kierunku ruch znana (opór powietrza będzie przeciwdziałał przyspieszeniu silnika więc uwzględniony już bedzie w rzeczywistym przyspieszeniu wyznaczonym z czujników Halla). Bedzie tam też część przyspieszenia z grawitacji, więc chyba kierunek siły grawitacji z stosunku do kierunku ruchu jest do wyliczenia i oszacowania :D
    Akcelerometr 3 osiowy +/-5g ADXL325
    Ten akcelerometr poniżej 100PLn można dostać już wlutowany na płytkę z wyprowadzeniami gotowy do podpięcia do uP, więc gra może być warta zachodu i stosunkowo tania...
  • #29
    amalino
    Poziom 13  
    Czy dałoby się zrobić coś na wzór nawigacji stosowanych w rolnictwie? Np robi się rundkę po obwodzie pola, ustawia się szerokość roboczą narzędzia uprawowego a system na jakimś prostym monitorze wyświetla gdzie był robiony przejazd i gdzie ma być wykonany kolejny.
  • #30
    aneuro
    Poziom 16  
    amalino napisał:
    Czy dałoby się zrobić coś na wzór nawigacji stosowanych w rolnictwie?

    No nie wiem ale GPS chyba odpada, bo za mała dokładność by była.
    Ale może gdyby do zwykłego koła ala rowerowego 26" załozyć czujnik Halla i kilka magnesów do pomiaru odległości przebytej przez kręcące się koło (równie dobrze jakiś silnik BLDC z odzysku ale ze sprawnymi czujnikami Halla wpleciony w koło rowerowe-te rowerowe maja dużą ilość par biegunów magnetycznych) i do tego całość wyposażyć w żyroskop do pomiaru kąta w czasie, to teoretycznie znając drogę i kąt obrotu w czasie dałoby radę trajektorię wykreślić i już tylko kwestia "widzimi się" projektanta jaki interfejs do tego zrobić.
    Temat będę badał, bo być może łatwiej za pomocą żyroskopu i znanej drogi wyznaczyć trajektorię, a chcę analizować w 3ech wymiarach trasę przebytą przez pojazd w znanym czasie, aby wyznaczać zmiany energii całkowitej (kinetycznej i potencjalnej oraz ruchu obrotowego niwielkie) w funkcji zużycia paliwa, czy rozładowania acu w pojeździe EV, więc niebawem być może będę miał coś działającego to zapodam do DIY.
    Zabawa może być niezła i zastosowania różne takich układów pomiarowych.

    BTW: Nie ma na rynku do kupienia takich urządzeń do analizy trasy bez GPS a tylko za pomocą koła z czujnikami Halla i żyroskopem?