- Komponente potrebne
- Dohvaćanje podataka o lokaciji s GPS-a
- Kružni dijagram
- Koraci za povezivanje GPS-a s AVR mikrokontrolerom
- Objašnjenje koda
GPS moduli se široko koriste u elektroničkim aplikacijama za praćenje lokacije na temelju koordinata dužine i širine. Sustav za praćenje vozila, GPS sat, Sustav upozorenja za otkrivanje nezgoda, prometna navigacija, nadzorni sustav itd. Nekoliko su primjera gdje je GPS funkcionalnost bitna. GPS pruža nadmorsku visinu, širinu, dužinu, UTC vrijeme i mnoge druge informacije o određenom mjestu koje se uzimaju s više od jednog satelita. Za čitanje podataka s GPS-a potreban je mikrokontroler, pa ovdje povezujemo GPS modul s AVR mikrokontrolerom Atmega16 i ispisujemo dužinu i širinu na LCD zaslonu 16x2.
Komponente potrebne
- Atmega16 / 32
- GPS modul (uBlox Neo 6M GPS)
- Dugačka žičana antena
- LCD 16x2
- Otpornik 2.2k
- Kondenzator 1000uf
- Kondenzator od 10uF
- Spojna žica
- LM7805
- DC Jack
- DC adapter 12v
- Burgstips
- PCB ili PCB opće namjene
Ublox Neo 6M je serijski GPS modul koji pruža detalje o lokaciji putem serijske komunikacije. Ima četiri pribadače.
|
Prikvači |
Opis |
|
Vcc |
2,7 - 5V napajanje |
|
Gnd |
Prizemlje |
|
TXD |
Prijenos podataka |
|
RXD |
Primanje podataka |

Ublox neo 6M GPS modul kompatibilan je s TTL-om i njegove su specifikacije navedene u nastavku.
|
Snimite vrijeme |
Cool početak: 27s, Vrući start: 1s |
|
Komunikacijski protokol |
NMEA |
|
Serijska komunikacija |
9600 bps, 8 podatkovnih bitova, 1 zaustavni bit, bez pariteta i bez kontrole protoka |
|
Radna struja |
45mA |
Dohvaćanje podataka o lokaciji s GPS-a
GPS modul će prenositi podatke u više nizova brzinom od 9600 Baud. Ako koristimo UART terminal sa brzinom prijenosa 9600 Baud, možemo vidjeti podatke primljene od GPS-a.
GPS modul šalje podatke o položaju praćenja u stvarnom vremenu u NMEA formatu (pogledajte gornju snimku zaslona). NMEA format sastoji se od nekoliko rečenica, u kojima su u nastavku navedene četiri važne rečenice. Pojedinosti o rečenici NMEA i formatu podataka možete pronaći ovdje.
- $ GPGGA: Podaci o popravku sustava globalnog pozicioniranja
- $ GPGSV: GPS sateliti na vidiku
- $ GPGSA: GPS DOP i aktivni sateliti
- $ GPRMC: Preporučeni minimalni specifični GPS / Transit podaci
Ovdje saznajte više o GPS podacima i NMEA nizovima.
Ovo su podaci koje GPS prima kada je povezan brzinom od 9600 prijenosa.
GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2.75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820,86316, E, 141848,00, A, A * 65
Kada koristimo GPS modul za praćenje bilo kojeg mjesta, trebaju nam samo koordinate i to možemo pronaći u $ GPGGA nizu. U programima se uglavnom koristi samo $ GPGGA (Global Fix System Fix Data) niz, a ostali se nizovi zanemaruju.
GPGGA, 141848,00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Što je značenje te crte?
Značenje tog retka je: -
1. Niz uvijek započinje znakom "$"
2. GPGGA je kratica za Global Positioning System Fix Data
3. "," Zarez označava razdvajanje dviju vrijednosti
4. 141848,00: GMT vrijeme kao 14 (hr): 18 (min): 48 (sek): 00 (ms)
5. 2237.63306, N: Latitude 22 (stupanj) 37 (minute) 63306 (sec) sjever
6. 08820.86316, E: Zemljopisna dužina 088 (stupanj) 20 (minute) 86316 (sek) Istok
7. 1: Fiksna količina 0 = nevaljani podaci, 1 = važeći podaci, 2 = DGPS popravak
8. 03: Broj trenutno pregledanih satelita.
9. 1.0: HDOP
10. 2,56, M: Nadmorska visina (visina nadmorske visine u metrima)
11. 1.9, M: Visina geoida
12. * 74: kontrolna suma
Dakle, trebamo br. 5 i 6 da bismo prikupili informacije o mjestu modula ili o tome gdje se nalazi. U ovom smo projektu koristili GPS knjižnicu koja pruža neke funkcije za izdvajanje zemljopisne širine i dužine, tako da se o tome ne moramo brinuti.
Prethodno smo GPS povezivali s drugim mikrokontrolerom:
- Kako koristiti GPS s Arduinom
- Vodič za povezivanje modula Raspberry Pi GPS
- Povezivanje GPS modula s PIC mikrokontrolerom
- Pratite vozilo na Google kartama koristeći Arduino, ESP8266 i GPS
Ovdje provjerite sve projekte povezane s GPS-om.
Kružni dijagram
Dijagram sklopa za GPS povezivanje s AVR Atemga16 mikrokontrolerom dat je u nastavku:

Cijeli sustav napaja se 12v DC adapterom, ali krugovi rade na 5v pa napajanje regulira LM7805 regulator napona na 5v. LCD 16x2 konfiguriran je u 4-bitnom načinu, a njegovi pin priključci prikazani su na shemi spojeva. GPS se također napaja 5v, a njegov tx pin izravno je povezan s Rx Atmega16 mikrokontrolera. Kristalni oscilator od 8 MHz koristi se za usmjeravanje mikrokontrolera.

Koraci za povezivanje GPS-a s AVR mikrokontrolerom
- Postavite konfiguracije mikrokontrolera koje uključuju konfiguraciju oscilatora.
- Postavite željeni priključak za LCD, uključujući DDR registar.
- Povežite GPS modul s mikrokontrolerom pomoću USART-a.
- Inicijalizirajte UART sustava u ISR načinu, sa 9600 brzina prijenosa i LCD u 4-bitnom načinu.
- Uzmite dva niza znakova, ovisno o duljini zemljopisne širine i dužine.
- Primajte po jedan bit znakova i provjeravajte je li pokrenut od $ ili ne.
- Ako je primljen $, to je niz, moramo provjeriti $ GPGGA, ovih 6 slova uključujući i $.
- Ako je GPGGA, primite cijeli niz i postavite zastavice.
- Zatim izvucite zemljopisnu širinu i dužinu s uputama u dva polja.
- Na kraju ispišite polja zemljopisne širine i dužine na LCD.

Objašnjenje koda
Kompletni kod s demonstracijskim videozapisom dan je na kraju, ovdje su objašnjeni neki važni dijelovi koda.
Prije svega uključite neko potrebno zaglavlje u kôd, a zatim napišite MAKROS bitmaske za LCD i UART konfiguraciju.
#define F_CPU 8000000ul #include #include
Sada prijavite i inicirajte neke varijable i nizove za pohranu GPS niza, zemljopisne širine i dužine i zastave.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char latitude; char logitude;
Nakon nje imamo funkciju LCD Driver za vožnju LCD-a.
praznina lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; ako je (r == 1) RSHigh; inače RSLow; VISOKO; _zakašnjenje_ms (1); NISKO; _zakašnjenje_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; ako je (r == 1) RSHigh; inače RSLow; VISOKO; _zakašnjenje_ms (1); NISKO; _zakašnjenje_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ kašnjenje_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; za (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Nakon toga smo inicijalizirali serijsku komunikaciju s GPS-om i usporedili primljeni niz s "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Ako se primljeni niz uspješno podudara s GPGGA, onda u glavnoj funkciji izdvojite i prikažite koordinate geografske širine i dužine mjesta:
lcdwrite (0x80,0); lcdprint ("Lat:"); serijski otisak ("Latitude:"); za (int i = 15; i <27; i ++) { zemljopisna širina = buf; lcdwrite (zemljopisna širina, 1); serijski zapis (zemljopisna širina); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Zapisnik:"); serijski otisak ("Logitude:"); za (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (zemljopisna širina, 1); serijski zapis (logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Dakle, ovo je način na koji se GPS modul može povezati s ATmega16 kako bi se pronašle koordinate mjesta.
Kompletni kod i radni video pronađite u nastavku.
