Chciałbym dzisiaj przybliżyć Wam odbiorniki sygnału GPS. Postaram się to zrobić na podstawie gotowego modułu który wykorzystuje do tego układ firmy U-BLOX a mianowicie układ o nazwie NEO-6 w wersji „M”.
Nie będę tutaj rozpisywał się na jakiej zasadzie działa pomiar pozycji odbiornika. Moduł NEO6-M wyposażony jest w interfejs UART TTL dzięki któremu możemy się z nim komunikować i odbierać dane z wykorzystaniem protokołu NMEA-0183.
NMEA to National Marine Electronics Association, jest to specyfikacja protokołu który umożliwia komunikację między różnego rodzaju urządzeniami pomiarowymi oraz proste połączenie odbiornika GPS z innymi urządzeniami.
Standard NMEA polega na wysyłaniu niezależnych linii danych, gdzie każda linia:
- zaczyna się od znaku $;
- posiada nagłówek;
- nie może przekraczać 80 znaków;
- każda nada oddzielona jest od następnej znakiem przecinka;
-dane w formacie liczby mogą posiadać wartości ułamkowe wyrażone po znaku kropki;
- może być zakończona sumą kontrolną w postaci zapisu w formie dwucyfrowej liczby szesnastkowej poprzedzonej znakiem gwiazdki.
Poniżej opisze kilka linii danych , nie będą to wszystkie możliwe występujące w protokole NMEA a tylko te które to nasz odbiornik NEO-6M wysyła do nas poprzez UART.
GGA – Fix information
Przykład:
$GPGGA,151654.00,5145.11403,N,01803.73294,E,1,04,4.86,131.8,M,38.3,M,,*50
GGA – identyfikator nagłówka;
151654.00 – czas o której zostały odebrane dane. 15:16:54 czasu UTC;
5145.11403,N – szerokość geograficzna, 51°45,11403’N;
01803.73294,E – długość geograficzna, 18°03,73294’E;
1 – jakość pomiaru;
04 – ilość śledzonych satelitów;
4.86 – dokładność pozycji - HDOP;
131.8,M – wysokość nad poziomem morza;
38.3M – wysokość geoidy powyżej elipsoidy WGS84;
brak danej – czas od ostatniego uaktualnienia DGPS;
brak danej – numer ID stacji DGPS;
*50 – suma kontrolna.
Jak widać powyżej brakuje nam dwóch danych. DGPS to inaczej Differential GPS, są to dane wysyłane przez stacje naziemne a akurat nasz odbiornik tego nie obsługuje.
Jakość pomiaru może mieć następujące wartości:
0 – brak pozycji lub pozycja z bardzo dużym błędem;
1 – pozycja określona na podstawie GPS;
2 – pozycja określona przy udziale DGPS;
3 – pozycja PPS;
4 – Real Time Cinematic;
5 – Float RTK;
6 – estimated;
7 – manual impet mode;
8 – tryb symulacji.
Dokładność pozycji a dokładniej horyzontalna dokładność pozycji HDOP określa szacunkową dokładność pozycji. Ogólnie przyjmuje się że wartość HDOP niższa od 6 jest wystarczająca by na jej podstawie dokonać decyzji np. o skręcie na skrzyżowaniu.
GSA – Overall Satellite data
Przykład:
$GPGSA,A,3,16,26,21,31,,,,,,,,,5.98,4.86,3.49*00
GSA – nagłówek;
A – automatyczny wybór pozycji, inna możliwość tutaj to M – ręczny;
3 – pozycja 3D, inne możliwości 1 – brak ustalonej pozycji, 2 – pozycja 2D, 3 – pozycja 3D;
16,26,21,31,,,,,,,, - numery satelitów wykorzystanych do wyznaczenia pozycji, miejsce na dane z 12 satelitów;
5.98 – DOP – precyzja wyznaczonej pozycji;
4.86 – HDOP – precyzja horyzontalna;
3.49 – VDOP – precyzja wertykalna;
*00 – suma kontrolna.
GSV – Detailed Satellite data
Przykład:
$GPGSV,3,1,12,02,11,045,,05,24,069,13,09,02,357,,12,03,126,*7A
GSV – nagłówek;
3 – ilość linii które powinna odczytać aplikacja w celu uzyskania pełnych danych o wszystkich satelitach. Mamy tutaj ograniczoną ilość znaków do 80 z twego powodu informacja ta jest przedstawiona w trzech liniach;
1 – aktualny numer linii – patrz wyżej;
12 – ilość aktualnie widocznych satelitów;
02 – identyfikator satelity – PRN;
11 – wyniesienie satelity nad poziom równika – wyrażone w stopniach;
045 – azymut satelity – wyrażone w stopniach;
brak danej – SNR – poziom odbieranego sygnału;
kolejne wartości określają kolejne satelity – maksymalnie możemy mieć 4 satelity opisane w jednej linii;
*7A – suma kontrolna
GLL – Lattitudal/Longitunal data
Przykład:
$GPGLL,5145.11403,N,01803.73294,E,151654.00,A,*68
GLL – nagłówek;
5145.11403,N – szerokość geograficzna 51°45.11403’N;
01803.73294,E – długość geograficzna 18°03.73294’E;
151654.00 – czas ustalenia pozycji, czas UTC;
A – aktywny status, V – nieaktywny;
*68 – suma kontrolna.
RMC – Recommended minimum of data
Przykład:
$GPRMC,151655.00,A,5145.11396,N,01803.73254,E,0.055,,300418,,,A*79
RMC – nagłówek;
151655.00 – czas ustalenia pozycji, czas UTC;
A – status, A – aktywny, V – nieaktywny:
5145.11396,N – szerokość geograficzna 51°45.11396’N;
01803.73254,E – długość geograficzna 18°03.73254’E;
0.555 – prędkość obiektu w węzłach;
brak danej – kąt poruszania się obiektu;
300418 – data 30 kwietnia 2018;
Brak danej – powinno b tutaj odchylenie magnetyczne Ziemi;
*79 – suma kontrola.
VTG – Vector track and speed over the Ground
Przykład:
$GPVTG,,T,,M,0.055,N,0.102,K*20
VTG – nagłówek;
brak danej - ścieżka poruszania się w stopniach - ,,T;
brak danej - ścieżka poruszania się na podstawie współrzędnych magnetycznych w stopniach - ,,M;
0,55N – prędkość w węzłach;
0.102K – prędkość w km/godz.;
*20 – suma kontrolna.
Trochę danych na temat naszego gotowego odbiornika GPS.
Najważniejszym elementem tutaj jest moduł NEO-6M który to zasilany jest ze stabilizatora RT9193-33 którego to maksymalne napięcie zasilania to 6VDC więc najlepiej do zasilania użyć źródła napięcia 5V. Pobór prądu wedle dokumentacji dla NEO-6M to maksymalnie 67mA ale nasz odbiornik pobiera 60mA zanim złapie „FIX`a” i ok. 50mA po złapaniu „FIX`a”. Na płytce znajdziemy też pamięć eeprom 24C32 oraz mały akumulatorek dzięki którym możemy korzystać z funkcji „ciepłego startu”. Zimny start wedle dokumentacji to 27 sekund zaś ciepły to 1 sekunda. Co oznacza pojęcie zimny i ciepły start? Zimny start to uruchomienie długo nieużywanego odbiornika i czekanie do momentu aż odbiornik ustali pozycję czyli złapie FIX`a, natomiast ciepły start to znalezienie FIX`a po chwilowej utracie sygnału lub po chwilowym zaniku zasilania. W przypadku mojego odbiornika na znalezienie FIX`a trzeba czekać ok. 15min od włączenia zasilania – czas ten zależy też od tego czy odbiornik jest w budynku czy na zewnątrz. Czym odbiornik widzi „czystsze” niebo tym szybciej złapie sygnał. W moim odbiorniku akumulatorek starcza na ok. 60min podtrzymania zasilania.
Moduł NEO-6M wyposażony jest w interfejsy takie jak UART, SPI oraz USB. Niestety w tym modelu odbiornika producent płytki daje nam do dyspozycji tylko interfejs UART gdzie jego logika jest na poziomie 3.3V, dane udostępnione przez tej interfejs są odświeżane z częstotliwością 1Hz. Na płytce mamy również złącze goldpin gdzie należy podać zasilanie – VCC, GND, wyprowadzenie dla wspomnianego już UART`u – TXD, RXD, oraz wyjście PPS – pulse per second czyli wyjście na którym pojawia nam się sygnał z częstotliwością 1Hz – dokładniej mamy tutaj stan wysoki o czasie trwania 100ms oraz stan niski o czasie trwania 900ms. Do wyjścia tego mamy podłączoną diodę LED, która po podłączeniu zasilania świeci światłem ciągłym a po złapaniu FIX`a przez odbiornik miga z częstotliwością 1Hz.
Do komunikacji z tą wersją odbiornika potrzebna będzie nam przejściówka USB-UART np. FT232.
Wymiary odbiornika to 36x24x12mm, wymiary anteny to 21x6x7mm.
Na rysunku poniżej schemat dla tego odbiornika GPS.
Cena odbiornika na Aliexpress zaczyna się od $3,33 wraz z anteną w komplecie i wysyłką. Na Allegro za identycznego odbiornik GPS trzeba wydać od 43,65zł z wysyłką. Jak widać ceny na Aliexpress są dość niskie ale należy pamiętać że te moduły NEO nie są nowe tylko są to elementy z odzysku.
Moduł który dostałem nie działał na początku. Po podłączeniu go pod zasilacz laboratoryjny ustawieniu ograniczenia prądowego na 100mA napięcie zasilania spadło z powodu zadziałania ograniczenia prądowego. Zwiększenie prądu nic nie dało – okazało się że to nie odbiornik tyle pobiera a jest na nim raczej jakieś zwarcie. Wylutowałem moduł NEO i po podłączeniu zasilania dalej działało ograniczenie prądowe zasilacza. Dało to jakąś nadzieję że moduł jednak może być sprawny i po dokładnym obejrzeniu płytki znalazłem dwa miejsca gdzie były zwarcia. Były one na pamięci eeprom.
Poniżej widać to na zdjęciach.
Jedno z nich nie miało znaczenia gdyż zwarte były nogi 1-2 ale tutaj i tak nogi 1-2-3-4 są zwarte na płytce. Zwarte były również nogi 7-8 czyli na zasilaniu pamięci. Po usunięciu tych zwarć o dziwo stabilizator działał – twarda bestia. Po wlutowaniu modułu NEO i zasilanie odbiornika w końcu zaświeciła dioda LED i można było nawiązać połączenie z odbiornikiem.
Do komunikacji z odbiornikiem wykorzystałem FT232 i program HyperTerminal. Ustawienia dla komunikacji w programie poniżej na zdjęciu.
Po skomunikowaniu się z odbiornikiem dostajemy „ramkę” danych która to przed złapaniem FIX’a wygląda następująco:
$GPGGA,173745.00,,,,,0,05,99.99,,,,,,*60
$GPGSA,A,1,10,29,27,26,16,,,,,,,,99.99,99.99,1.00*0D
$GPGSV,3,1,12,04,41,180,24,07,08,337,21,08,04,289,18,10,24,173,24*7F
$GPGSV,3,2,12,13,07,049,,15,10,081,06,16,64,256,10,20,53,103,*7A
$GPGSV,3,3,12,21,71,072,09,26,51,200,19,27,41,291,24,29,15,104,16*78
$GPGLL,,,,,173745.00,V,N*49
$GPRMC,173746.00,V,,,,,,,300418,,,N*73
$GPVTG,,,,,,,,,N*30
Po złapaniu FIX’a „ramka” wygląda tak:
$GPGGA,173747.00,5145.08762,N,01803.70069,E,1,04,12.82,184.1,M,38.3,M,,*68
$GPGSA,A,2,10,29,27,26,,,,,,,,,12.86,12.82,1.00*0D
$GPGSV,3,1,12,04,41,180,24,07,08,337,22,08,04,289,17,10,24,173,25*72
$GPGSV,3,2,12,13,07,049,,15,10,081,,16,64,256,,20,53,103,*7D
$GPGSV,3,3,12,21,71,072,08,26,51,200,19,27,41,291,25,29,15,104,17*79
$GPGLL,5145.08762,N,01803.70069,E,173747.00,A,A*64
$GPRMC,173748.00,A,5145.08837,N,01803.70165,E,0.382,,300418,,,A*77
$GPVTG,,T,,M,0.382,N,0.708,K,A*25
Po zapoznaniu się z protokołem NMEA jesteśmy w stanie na podstawie takiej ramki określić pozycję naszego odbiornika, czas oraz wysokość nad poziomem morza.
Dane te możemy np. wpisać w Google Maps do znalezienia pozycji odbiornika na mapie.
Z początku wpisywałem dane 51.4508762 18.0370069 co dawało różnicę w pomiarze o ok. 20km. Z początku myślałem że być może jest to uszkodzenie spowodowane wcześniejszym zwarciem na płytce PCB lub może jakością układu bo czego tu się spodziewać za kilkanaście złotych. Odbiornik powędrował w kąt a ja czekałem na praczkę z nowym odbiornikiem GPS. Po kilku dniach przysiadłem powrotem do tego odbiornika poszukałem danych na temat protokołu NMEA i w końcu zauważyłem gdzie jest błąd w odczycie współrzędnych z „ramki”. Na początku macie przedstawiony opis protokołu i zamianę danych na współrzędne. Poniżej jeszcze kilka innych możliwości przeliczenia współrzędnych z „ramki”.
W powyższej ramce pozycja to 51°45.08762’N, 18°03,70069’E, czas UTC 17:37:47 (19:37:47 czasu polskiego), 184,1mnpm.
51°45.08762N 18°03.70069E
Jak widać tutaj sekundy zapisane są w formie „dziesiętnej”. Można też wpisać 51°45'05.3"N 18°03'42.0"E gdzie zapis jest już w formie minut i sekund. Zapis ten bierze się z przemnożenia wartości dziesiętnej minut przez wartość 60.
0,8762x60=5,2572sek≈5,3sek
0,70069x60=42,0414sek≈42,0sek
Dane te można wpisać również w inny sposób. Możemy wartość minut podzielić przez 60.
45,08762:60=0,751460
3,70069:60=0,061678
Po czym wpisać: 51.751460N, 18.061678E
Poniżej obraz z programu HyperTerminal w czasie używania odbiornika w podczas jazdy autem.
Możecie tutaj znaleźć prędkość poruszania się. Prędkość wskazywana przez licznik auta wynosiła 110km/godz. zaś odbiornik GPS pokazywał 107km/godz. Z mojego doświadczenia mogę napisać że zawsze prędkość pokazywana przez GPS jest niższa niż pokazuje licznik auta – zazwyczaj jest to ok. 5km/godz., oczywiście zależy to od prędkości auta.
Szczerze powiedziawszy myślałem że odczyt danych z tego odbiornika będzie dużo trudniejszy a jak widać jest to dość proste.
Moduł ten potrafi gubić sygnał jeżeli np. mamy umieszczonego go w domu. Przeglądając dane odebrane poprzez UART można zauważyć że potrafi zgubić sygnał na kilkanaście sekund lub dłużej (zależy to oczywiście jak dobrze widzi niebo) po czym ponownie znaleźć sygnał. Nie zauważyłem podobnych objawów gdy moduł pracuje „na świeżym powietrzu”. W czasie używania go w aucie też nie zauważyłem gubienia sygnału gdy odbiornik był położony na desce rozdzielczej. Myślę że przy większej antenie problem ten będzie występował rzadziej i czas łapania FIX’a po pierwszym włączeniu powinien się zmniejszyć.
Moduł ten można wykorzystać przy budowie np. rejestratora pozycji łącząc taki moduł z mikrokontrolerem lub dokładając do tego zestawu moduł SIM można zbudować GPS trackera. W Google można znaleźć przykłady budowy GPS trackera z użyciem tego odbiornika, modułu SIM oraz Arduino.
W załączniku dokumentacja do modułu NEO-6.

Nie będę tutaj rozpisywał się na jakiej zasadzie działa pomiar pozycji odbiornika. Moduł NEO6-M wyposażony jest w interfejs UART TTL dzięki któremu możemy się z nim komunikować i odbierać dane z wykorzystaniem protokołu NMEA-0183.
NMEA to National Marine Electronics Association, jest to specyfikacja protokołu który umożliwia komunikację między różnego rodzaju urządzeniami pomiarowymi oraz proste połączenie odbiornika GPS z innymi urządzeniami.
Standard NMEA polega na wysyłaniu niezależnych linii danych, gdzie każda linia:
- zaczyna się od znaku $;
- posiada nagłówek;
- nie może przekraczać 80 znaków;
- każda nada oddzielona jest od następnej znakiem przecinka;
-dane w formacie liczby mogą posiadać wartości ułamkowe wyrażone po znaku kropki;
- może być zakończona sumą kontrolną w postaci zapisu w formie dwucyfrowej liczby szesnastkowej poprzedzonej znakiem gwiazdki.
Poniżej opisze kilka linii danych , nie będą to wszystkie możliwe występujące w protokole NMEA a tylko te które to nasz odbiornik NEO-6M wysyła do nas poprzez UART.
GGA – Fix information
Przykład:
$GPGGA,151654.00,5145.11403,N,01803.73294,E,1,04,4.86,131.8,M,38.3,M,,*50
GGA – identyfikator nagłówka;
151654.00 – czas o której zostały odebrane dane. 15:16:54 czasu UTC;
5145.11403,N – szerokość geograficzna, 51°45,11403’N;
01803.73294,E – długość geograficzna, 18°03,73294’E;
1 – jakość pomiaru;
04 – ilość śledzonych satelitów;
4.86 – dokładność pozycji - HDOP;
131.8,M – wysokość nad poziomem morza;
38.3M – wysokość geoidy powyżej elipsoidy WGS84;
brak danej – czas od ostatniego uaktualnienia DGPS;
brak danej – numer ID stacji DGPS;
*50 – suma kontrolna.
Jak widać powyżej brakuje nam dwóch danych. DGPS to inaczej Differential GPS, są to dane wysyłane przez stacje naziemne a akurat nasz odbiornik tego nie obsługuje.
Jakość pomiaru może mieć następujące wartości:
0 – brak pozycji lub pozycja z bardzo dużym błędem;
1 – pozycja określona na podstawie GPS;
2 – pozycja określona przy udziale DGPS;
3 – pozycja PPS;
4 – Real Time Cinematic;
5 – Float RTK;
6 – estimated;
7 – manual impet mode;
8 – tryb symulacji.
Dokładność pozycji a dokładniej horyzontalna dokładność pozycji HDOP określa szacunkową dokładność pozycji. Ogólnie przyjmuje się że wartość HDOP niższa od 6 jest wystarczająca by na jej podstawie dokonać decyzji np. o skręcie na skrzyżowaniu.
GSA – Overall Satellite data
Przykład:
$GPGSA,A,3,16,26,21,31,,,,,,,,,5.98,4.86,3.49*00
GSA – nagłówek;
A – automatyczny wybór pozycji, inna możliwość tutaj to M – ręczny;
3 – pozycja 3D, inne możliwości 1 – brak ustalonej pozycji, 2 – pozycja 2D, 3 – pozycja 3D;
16,26,21,31,,,,,,,, - numery satelitów wykorzystanych do wyznaczenia pozycji, miejsce na dane z 12 satelitów;
5.98 – DOP – precyzja wyznaczonej pozycji;
4.86 – HDOP – precyzja horyzontalna;
3.49 – VDOP – precyzja wertykalna;
*00 – suma kontrolna.
GSV – Detailed Satellite data
Przykład:
$GPGSV,3,1,12,02,11,045,,05,24,069,13,09,02,357,,12,03,126,*7A
GSV – nagłówek;
3 – ilość linii które powinna odczytać aplikacja w celu uzyskania pełnych danych o wszystkich satelitach. Mamy tutaj ograniczoną ilość znaków do 80 z twego powodu informacja ta jest przedstawiona w trzech liniach;
1 – aktualny numer linii – patrz wyżej;
12 – ilość aktualnie widocznych satelitów;
02 – identyfikator satelity – PRN;
11 – wyniesienie satelity nad poziom równika – wyrażone w stopniach;
045 – azymut satelity – wyrażone w stopniach;
brak danej – SNR – poziom odbieranego sygnału;
kolejne wartości określają kolejne satelity – maksymalnie możemy mieć 4 satelity opisane w jednej linii;
*7A – suma kontrolna
GLL – Lattitudal/Longitunal data
Przykład:
$GPGLL,5145.11403,N,01803.73294,E,151654.00,A,*68
GLL – nagłówek;
5145.11403,N – szerokość geograficzna 51°45.11403’N;
01803.73294,E – długość geograficzna 18°03.73294’E;
151654.00 – czas ustalenia pozycji, czas UTC;
A – aktywny status, V – nieaktywny;
*68 – suma kontrolna.
RMC – Recommended minimum of data
Przykład:
$GPRMC,151655.00,A,5145.11396,N,01803.73254,E,0.055,,300418,,,A*79
RMC – nagłówek;
151655.00 – czas ustalenia pozycji, czas UTC;
A – status, A – aktywny, V – nieaktywny:
5145.11396,N – szerokość geograficzna 51°45.11396’N;
01803.73254,E – długość geograficzna 18°03.73254’E;
0.555 – prędkość obiektu w węzłach;
brak danej – kąt poruszania się obiektu;
300418 – data 30 kwietnia 2018;
Brak danej – powinno b tutaj odchylenie magnetyczne Ziemi;
*79 – suma kontrola.
VTG – Vector track and speed over the Ground
Przykład:
$GPVTG,,T,,M,0.055,N,0.102,K*20
VTG – nagłówek;
brak danej - ścieżka poruszania się w stopniach - ,,T;
brak danej - ścieżka poruszania się na podstawie współrzędnych magnetycznych w stopniach - ,,M;
0,55N – prędkość w węzłach;
0.102K – prędkość w km/godz.;
*20 – suma kontrolna.
Trochę danych na temat naszego gotowego odbiornika GPS.
Najważniejszym elementem tutaj jest moduł NEO-6M który to zasilany jest ze stabilizatora RT9193-33 którego to maksymalne napięcie zasilania to 6VDC więc najlepiej do zasilania użyć źródła napięcia 5V. Pobór prądu wedle dokumentacji dla NEO-6M to maksymalnie 67mA ale nasz odbiornik pobiera 60mA zanim złapie „FIX`a” i ok. 50mA po złapaniu „FIX`a”. Na płytce znajdziemy też pamięć eeprom 24C32 oraz mały akumulatorek dzięki którym możemy korzystać z funkcji „ciepłego startu”. Zimny start wedle dokumentacji to 27 sekund zaś ciepły to 1 sekunda. Co oznacza pojęcie zimny i ciepły start? Zimny start to uruchomienie długo nieużywanego odbiornika i czekanie do momentu aż odbiornik ustali pozycję czyli złapie FIX`a, natomiast ciepły start to znalezienie FIX`a po chwilowej utracie sygnału lub po chwilowym zaniku zasilania. W przypadku mojego odbiornika na znalezienie FIX`a trzeba czekać ok. 15min od włączenia zasilania – czas ten zależy też od tego czy odbiornik jest w budynku czy na zewnątrz. Czym odbiornik widzi „czystsze” niebo tym szybciej złapie sygnał. W moim odbiorniku akumulatorek starcza na ok. 60min podtrzymania zasilania.
Moduł NEO-6M wyposażony jest w interfejsy takie jak UART, SPI oraz USB. Niestety w tym modelu odbiornika producent płytki daje nam do dyspozycji tylko interfejs UART gdzie jego logika jest na poziomie 3.3V, dane udostępnione przez tej interfejs są odświeżane z częstotliwością 1Hz. Na płytce mamy również złącze goldpin gdzie należy podać zasilanie – VCC, GND, wyprowadzenie dla wspomnianego już UART`u – TXD, RXD, oraz wyjście PPS – pulse per second czyli wyjście na którym pojawia nam się sygnał z częstotliwością 1Hz – dokładniej mamy tutaj stan wysoki o czasie trwania 100ms oraz stan niski o czasie trwania 900ms. Do wyjścia tego mamy podłączoną diodę LED, która po podłączeniu zasilania świeci światłem ciągłym a po złapaniu FIX`a przez odbiornik miga z częstotliwością 1Hz.
Do komunikacji z tą wersją odbiornika potrzebna będzie nam przejściówka USB-UART np. FT232.
Wymiary odbiornika to 36x24x12mm, wymiary anteny to 21x6x7mm.
Na rysunku poniżej schemat dla tego odbiornika GPS.

Cena odbiornika na Aliexpress zaczyna się od $3,33 wraz z anteną w komplecie i wysyłką. Na Allegro za identycznego odbiornik GPS trzeba wydać od 43,65zł z wysyłką. Jak widać ceny na Aliexpress są dość niskie ale należy pamiętać że te moduły NEO nie są nowe tylko są to elementy z odzysku.
Moduł który dostałem nie działał na początku. Po podłączeniu go pod zasilacz laboratoryjny ustawieniu ograniczenia prądowego na 100mA napięcie zasilania spadło z powodu zadziałania ograniczenia prądowego. Zwiększenie prądu nic nie dało – okazało się że to nie odbiornik tyle pobiera a jest na nim raczej jakieś zwarcie. Wylutowałem moduł NEO i po podłączeniu zasilania dalej działało ograniczenie prądowe zasilacza. Dało to jakąś nadzieję że moduł jednak może być sprawny i po dokładnym obejrzeniu płytki znalazłem dwa miejsca gdzie były zwarcia. Były one na pamięci eeprom.
Poniżej widać to na zdjęciach.


Jedno z nich nie miało znaczenia gdyż zwarte były nogi 1-2 ale tutaj i tak nogi 1-2-3-4 są zwarte na płytce. Zwarte były również nogi 7-8 czyli na zasilaniu pamięci. Po usunięciu tych zwarć o dziwo stabilizator działał – twarda bestia. Po wlutowaniu modułu NEO i zasilanie odbiornika w końcu zaświeciła dioda LED i można było nawiązać połączenie z odbiornikiem.
Do komunikacji z odbiornikiem wykorzystałem FT232 i program HyperTerminal. Ustawienia dla komunikacji w programie poniżej na zdjęciu.

Po skomunikowaniu się z odbiornikiem dostajemy „ramkę” danych która to przed złapaniem FIX’a wygląda następująco:
$GPGGA,173745.00,,,,,0,05,99.99,,,,,,*60
$GPGSA,A,1,10,29,27,26,16,,,,,,,,99.99,99.99,1.00*0D
$GPGSV,3,1,12,04,41,180,24,07,08,337,21,08,04,289,18,10,24,173,24*7F
$GPGSV,3,2,12,13,07,049,,15,10,081,06,16,64,256,10,20,53,103,*7A
$GPGSV,3,3,12,21,71,072,09,26,51,200,19,27,41,291,24,29,15,104,16*78
$GPGLL,,,,,173745.00,V,N*49
$GPRMC,173746.00,V,,,,,,,300418,,,N*73
$GPVTG,,,,,,,,,N*30
Po złapaniu FIX’a „ramka” wygląda tak:
$GPGGA,173747.00,5145.08762,N,01803.70069,E,1,04,12.82,184.1,M,38.3,M,,*68
$GPGSA,A,2,10,29,27,26,,,,,,,,,12.86,12.82,1.00*0D
$GPGSV,3,1,12,04,41,180,24,07,08,337,22,08,04,289,17,10,24,173,25*72
$GPGSV,3,2,12,13,07,049,,15,10,081,,16,64,256,,20,53,103,*7D
$GPGSV,3,3,12,21,71,072,08,26,51,200,19,27,41,291,25,29,15,104,17*79
$GPGLL,5145.08762,N,01803.70069,E,173747.00,A,A*64
$GPRMC,173748.00,A,5145.08837,N,01803.70165,E,0.382,,300418,,,A*77
$GPVTG,,T,,M,0.382,N,0.708,K,A*25
Po zapoznaniu się z protokołem NMEA jesteśmy w stanie na podstawie takiej ramki określić pozycję naszego odbiornika, czas oraz wysokość nad poziomem morza.
Dane te możemy np. wpisać w Google Maps do znalezienia pozycji odbiornika na mapie.
Z początku wpisywałem dane 51.4508762 18.0370069 co dawało różnicę w pomiarze o ok. 20km. Z początku myślałem że być może jest to uszkodzenie spowodowane wcześniejszym zwarciem na płytce PCB lub może jakością układu bo czego tu się spodziewać za kilkanaście złotych. Odbiornik powędrował w kąt a ja czekałem na praczkę z nowym odbiornikiem GPS. Po kilku dniach przysiadłem powrotem do tego odbiornika poszukałem danych na temat protokołu NMEA i w końcu zauważyłem gdzie jest błąd w odczycie współrzędnych z „ramki”. Na początku macie przedstawiony opis protokołu i zamianę danych na współrzędne. Poniżej jeszcze kilka innych możliwości przeliczenia współrzędnych z „ramki”.
W powyższej ramce pozycja to 51°45.08762’N, 18°03,70069’E, czas UTC 17:37:47 (19:37:47 czasu polskiego), 184,1mnpm.
51°45.08762N 18°03.70069E
Jak widać tutaj sekundy zapisane są w formie „dziesiętnej”. Można też wpisać 51°45'05.3"N 18°03'42.0"E gdzie zapis jest już w formie minut i sekund. Zapis ten bierze się z przemnożenia wartości dziesiętnej minut przez wartość 60.
0,8762x60=5,2572sek≈5,3sek
0,70069x60=42,0414sek≈42,0sek
Dane te można wpisać również w inny sposób. Możemy wartość minut podzielić przez 60.
45,08762:60=0,751460
3,70069:60=0,061678
Po czym wpisać: 51.751460N, 18.061678E
Poniżej obraz z programu HyperTerminal w czasie używania odbiornika w podczas jazdy autem.

Możecie tutaj znaleźć prędkość poruszania się. Prędkość wskazywana przez licznik auta wynosiła 110km/godz. zaś odbiornik GPS pokazywał 107km/godz. Z mojego doświadczenia mogę napisać że zawsze prędkość pokazywana przez GPS jest niższa niż pokazuje licznik auta – zazwyczaj jest to ok. 5km/godz., oczywiście zależy to od prędkości auta.
Szczerze powiedziawszy myślałem że odczyt danych z tego odbiornika będzie dużo trudniejszy a jak widać jest to dość proste.
Moduł ten potrafi gubić sygnał jeżeli np. mamy umieszczonego go w domu. Przeglądając dane odebrane poprzez UART można zauważyć że potrafi zgubić sygnał na kilkanaście sekund lub dłużej (zależy to oczywiście jak dobrze widzi niebo) po czym ponownie znaleźć sygnał. Nie zauważyłem podobnych objawów gdy moduł pracuje „na świeżym powietrzu”. W czasie używania go w aucie też nie zauważyłem gubienia sygnału gdy odbiornik był położony na desce rozdzielczej. Myślę że przy większej antenie problem ten będzie występował rzadziej i czas łapania FIX’a po pierwszym włączeniu powinien się zmniejszyć.
Moduł ten można wykorzystać przy budowie np. rejestratora pozycji łącząc taki moduł z mikrokontrolerem lub dokładając do tego zestawu moduł SIM można zbudować GPS trackera. W Google można znaleźć przykłady budowy GPS trackera z użyciem tego odbiornika, modułu SIM oraz Arduino.
W załączniku dokumentacja do modułu NEO-6.
Fajne! Ranking DIY