- Potrebne komponente
- Pridobivanje lokacijskih podatkov iz GPS-a
- Shema vezja
- Koraki do vmesnika GPS z mikrokrmilnikom AVR
- Razlaga kode
Moduli GPS se pogosto uporabljajo v elektronskih aplikacijah za sledenje lokaciji na podlagi koordinat zemljepisne dolžine in širine. Sistem za sledenje vozil, ura GPS, sistem opozarjanja na zaznave nesreč, prometna navigacija, nadzorni sistem itd. So nekateri primeri, ko je funkcionalnost GPS bistvenega pomena. GPS zagotavlja nadmorsko višino, širino, dolžino, UTC čas in številne druge informacije o določeni lokaciji, ki so posnete z več kot enega satelita. Za branje podatkov iz GPS je potreben mikrokrmilnik, zato tukaj povezujemo modul GPS z mikrokrmilnikom AVR Atmega16 in na LCD zaslon 16x2 tiskamo zemljepisno dolžino in širino.
Potrebne komponente
- Atmega16 / 32
- GPS modul (uBlox Neo 6M GPS)
- Dolgožična antena
- 16x2 LCD
- 2.2k upor
- 1000uf kondenzator
- 10uF kondenzator
- Priključna žica
- LM7805
- DC Jack
- 12v enosmerni adapter
- Burgstips
- PCB ali PCB za splošne namene
Ublox Neo 6M je serijski GPS modul, ki prek serijske komunikacije zagotavlja podrobnosti o lokaciji. Ima štiri nožice.
Pin |
Opis |
Vcc |
2,7 - 5V napajalnik |
Gnd |
Tla |
TXD |
Pošlji podatke |
RXD |
Prejemanje podatkov |
GPS modul Ublox neo 6M je združljiv s TTL in njegove specifikacije so navedene spodaj.
Čas zajemanja |
Kul start: 27s, vroč start: 1s |
Komunikacijski protokol |
NMEA |
Zaporedna komunikacija |
9600 bps, 8 podatkovnih bitov, 1 stop bit, brez parnosti in brez nadzora pretoka |
Obratovalni tok |
45mA |
Pridobivanje lokacijskih podatkov iz GPS-a
Modul GPS bo podatke prenašal v več nizih s hitrostjo 9600 baudov. Če uporabimo terminal UART s hitrostjo 9600 baudov, lahko vidimo podatke, ki jih prejme GPS.
Modul GPS pošilja podatke o položaju za sledenje v realnem času v obliki NMEA (glejte zgornji posnetek zaslona). Oblika NMEA je sestavljena iz več stavkov, v katerih so spodaj navedeni štirje pomembni stavki. Podrobnejše informacije o stavku NMEA in njegovi obliki podatkov najdete tukaj.
- $ GPGGA: podatki o popravkih sistema za globalno določanje položaja
- $ GPGSV: na ogled sateliti GPS
- $ GPGSA: GPS DOP in aktivni sateliti
- $ GPRMC: Priporočeni minimalni specifični podatki GPS / tranzita
Več o podatkih GPS in nizih NMEA lahko preberete tukaj.
To so podatki, ki jih GPS prejme, ko je povezan s hitrostjo 9600 baudov.
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
Ko za sledenje katere koli lokacije uporabljamo modul GPS , potrebujemo le koordinate in to lahko najdemo v nizu $ GPGGA. V programih se večinoma uporablja samo niz $ GPGGA (Global Positioning System Fix Data), drugi nizi pa so prezrti.
$ GPGGA, 141848,00, 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Kaj pomeni ta vrstica?
Pomen te vrstice je:
1. Niz se vedno začne z znakom "$"
2. GPGGA je kratica za Global Positioning System Fix Data
3. "," Vejica označuje ločitev med dvema vrednostma
4. 141848,00: GMT čas kot 14 (h): 18 (min): 48 (sek): 00 (ms)
5. 2237,63306, N: zemljepisna širina 22 (stopinja) 37 (minute) 63306 (sek) sever
6. 08820.86316, E: Zemljepisna dolžina 088 (stopinja) 20 (minute) 86316 (sek) vzhod
7. 1: Popravi količino 0 = neveljavni podatki, 1 = veljavni podatki, 2 = popravek DGPS
8. 03: Število trenutno gledanih satelitov.
9. 1.0: HDOP
10. 2,56, M: Nadmorska višina (višina nadmorske višine v metrih)
11. 1.9, M: Višina geoidov
12. * 74: kontrolna vsota
Torej potrebujemo številki 5 in 6, da zberemo informacije o lokaciji modula ali o tem, kje se nahaja. V tem projektu smo uporabili knjižnico GPS, ki ponuja nekatere funkcije za pridobivanje zemljepisne širine in dolžine, tako da nam tega ni treba skrbeti.
Pred tem smo že vmesniki GPS z drugimi mikrokrmilniki:
- Kako uporabljati GPS z Arduinom
- Vadnica za povezovanje modulov Raspberry Pi GPS
- Povezava modula GPS z mikrokrmilnikom PIC
- Sledite vozilu v Google Zemljevidih z uporabo Arduino, ESP8266 in GPS
Tukaj preverite vse projekte, povezane z GPS.
Shema vezja
Shema vezja za povezavo GPS z mikrokrmilnikom AVR Atemga16 je podana spodaj:
Celoten sistem napaja 12v enosmerni adapter, vendar vezja delujejo na 5v, zato napajanje regulira napetost LM7805 na 5v. LCD 16x2 je konfiguriran v 4-bitnem načinu in njegove pin povezave so prikazane v vezju. GPS napaja tudi 5v, njegov tx pin pa je neposredno povezan z Rx mikrokrmilnika Atmega16. Za krmiljenje mikrokrmilnika se uporablja 8MHz kristalni oscilator.
Koraki do vmesnika GPS z mikrokrmilnikom AVR
- Nastavite konfiguracije mikrokrmilnika, ki vključujejo oscilator.
- Nastavite želena vrata za LCD, vključno z registrom DDR.
- Modul GPS povežite z mikrokrmilnikom s pomočjo USART.
- Inicializirajte sistem UART v načinu ISR s hitrostjo prenosa 9600 baudov in zaslonom LCD v 4-bitnem načinu.
- Vzemite dve vrsti znakov, odvisno od dolžine zemljepisne širine in dolžine.
- Prejemajte po en znakovni bit naenkrat in preverite, ali se začne iz $ ali ne.
- Če je $ prejet, je to niz, moramo preveriti $ GPGGA, teh 6 črk, vključno z $.
- Če je GPGGA, potem prejmite celoten niz in nastavite zastavice.
- Nato v dveh nizih izvlecite zemljepisno širino in dolžino z navodili.
- Na koncu natisnite polja zemljepisne širine in dolžine na LCD.
Razlaga kode
Na koncu je podana celotna koda z demonstracijskim videoposnetkom, tukaj so razloženi nekateri pomembni deli kode.
V kodo najprej vključite nekaj zahtevane glave in nato napišite MAKROS bitne maske za konfiguracijo LCD in UART.
#define F_CPU 8000000ul #include #include
Zdaj prijavite in inicializirajte nekaj spremenljivk in nizov za shranjevanje niza GPS, zemljepisne širine in dolžine ter zastavic.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; zemljepisna širina; char logitude;
Po njem imamo nekaj funkcij gonilnika LCD za pogon LCD-ja.
prazen lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; če (r == 1) RSHigh; sicer RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; če (r == 1) RSHigh; sicer RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ zakasnitev_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; za (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Po tem smo serijsko komunikacijo inicializirali z GPS-om in prejeti niz primerjali z "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Zdaj, če se prejeti niz uspešno ujema z GPGGA, potem v glavni funkciji izvlecite in prikažite koordinate zemljepisne širine in dolžine lokacije:
lcdwrite (0x80,0); lcdprint ("Lat:"); serijski tisk ("Latitude:"); for (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (zemljepisna širina, 1); serijski zapis (zemljepisna širina); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Dnevnik:"); serialprint ("Logitude:"); za (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (zemljepisna širina, 1); serialwrite (logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Tako lahko modul GPS povežemo z ATmega16, da poiščemo koordinate lokacije.
Spodaj poiščite celotno kodo in delovni video.