GPS modem je uređaj koji prima signale sa satelita, a obezbeđuje informacije o trenutnoj poziciji (geografska širina i dužina), nadmorskoj visini, vremenu itd. Ovaj modem poseduje antenu kojom prima signale. Nakon prijema, on ih i konvertuje u korisne informacije i šalje ih ka izlazu, najčešće u RS232 logičkom fomratu. Informacije o geografskoj širini, dužini itd se šalju neprekidno, u pratnji identifikacionog stringa.
U ovom članku pokazaćemo kako da povežete jedan GPS modem sa AVR mikrokontrolerom. Koristićemo ATmega16 kontroler. Očitane podatke ćemo prikazati na LCD displeju.
Veza GPS modema i mikrokontrolera (ATmega16) data je na slici 1. GND pinovi kola MAX232 i GPS modemu su povezani. Treba povezati i drugi pin MAX232 sa trećim pinom GPS modema, kao i treći pin MAX232 i drugi pin modema. Ovo je serijski ‘cross cable’ tip komunikacije. Većina GPS modema koristi upravo ovaj vid komunikacije. Izlazni signal se sastoji od niza stringova koji će u nastavku biti detaljno opisani.
Slika 1. Električna šema uređaja
Format dolaznog signala
U nastavku je dat primer izlaznog signala sa GPS modema sa detaljnim objašnjenjima. Ovaj izlazni string sadrži informacije o geografskim širinama i dužinama, nadmorskoj visini, vremenu itd. Primer jednog izlaznog stringa dat je u nastavku:
$GPGGA,100156.000,2650.9416,N,07547.8441,E,1,08,1.0,442.8,M,-42.5,M,,0000*71
- String uvek počinje znakom $
- GPGGA – nepromenljivi podaci GPS-a
- ‘,’ – zarez služi za razdvajanje dve vrednosti
- 100156.000 – GMT vreme kao: 10(sati):01(minuta):56(sekundi):000(ms)
- 2650.9416,N – geografska širina kao 26(stepeni) 50(minuta) 9416 (sekundi) NORTH (Severno)
- 07547.8441,E – geografska dužina kao 075(stepeni) 47(minuta) 8441 (sekundi) EAST (Istočno)
- 1 – nepromenljiva kontrolna vrednost, 0 – neispravan podatak, 1 – ispravan podatak, 2 – DGPS
- 08 – broj satelita koji su trenutno dostupni
- 1.0 – HDOP
- 442.8,M – nadmosrka visina u metrima
- -42.5,M – geoid visina
- _ – DGPS podaci
- 0000 – DGPS podaci
- *71 – provera
Kako bismo sa modema dobili potrebne informacije o geografskoj širini i dužini primenićemo sledeći algoritam:
- Preuzeti podatke i uporediti prvi bajt sa ‘$’. Ako se poklapaju, preći u naredni korak, u suprotnom tražiti nove podatake;
- Uzimati podatke bajt po bajt i proveriti da li su bajtovi jednaki ‘GPGGA’;
- Ako se u drugom koraku bajtovi jednaki, preći na četvrti korak, u suprotnom, vratiti se na prvi korak;
- Pošto nam nije potrebno vreme, preskočiti prvi zarez i sačekati naredni;
- Početi sa preuzimanjem podataka o širini i smeštanjem u niz ‘lati_value[]’ do sledećeg zareza;
- Preuzeti pravac u promenljivoj lati_dir;
- Uraditi isto i za dužinu;
- Ispisati podatke o širini i dužini na LCD, a potom se vratiti u prvi korak.
Source kod i šemu uređaja možete preuzeti ovde.