- Szükséges alkatrészek
- Helyadatok lekérése GPS-ről
- Kördiagramm
- A GPS interfészének lépései az AVR mikrokontrollerrel
- Kód Magyarázat
A GPS modulokat széles körben használják az elektronikai alkalmazásokban a hely követésére a hosszúsági és szélességi koordináták alapján. A járműkövető rendszer, a GPS-óra, a baleset-felderítési riasztórendszer, a közlekedési navigáció, a megfigyelő rendszer stb. A GPS magasságot, szélességet, hosszúságot, UTC-időt és sok más információt szolgáltat az adott helyről, amelyek több műholdról származnak. Az adatok GPS-beolvasásához mikrovezérlőre van szükség, ezért itt összekapcsoljuk a GPS-modult az AVR Atmega16 mikrovezérlővel, és kinyomtatjuk a hosszúságot és a szélességet 16x2 LCD-kijelzőre.
Szükséges alkatrészek
- Atmega16 / 32
- GPS modul (uBlox Neo 6M GPS)
- Hosszú vezetékes antenna
- 16x2 LCD
- 2.2k ellenállás
- 1000uf kondenzátor
- 10uF kondenzátor
- Csatlakozó vezeték
- LM7805
- DC Jack
- 12v DC adapter
- Burgstips
- NYÁK vagy Általános rendeltetésű NYÁK
Az Ublox Neo 6M egy soros GPS modul, amely soros kommunikációval szolgáltatja a hely adatait. Négy csap van rajta.
Pin |
Leírás |
Vcc |
2,7 - 5 V tápegység |
Gnd |
Talaj |
TXD |
Adatok továbbítása |
RXD |
Adatok fogadása |
Az Ublox neo 6M GPS modul TTL kompatibilis, és specifikációit az alábbiakban adjuk meg.
Rögzítési idő |
Hűvös indítás: 27 mp, Hot start: 1 mp |
Kommunikációs protokoll |
NMEA |
Soros kommunikáció |
9600 bps, 8 adatbit, 1 stopbit, nincs paritás és áramlásszabályozás |
Működési áram |
45mA |
Helyadatok lekérése GPS-ről
A GPS modul több húrban továbbítja az adatokat 9600 átviteli sebességgel. Ha 9600 átviteli sebességű UART terminált használunk, láthatjuk a GPS által kapott adatokat.
A GPS modul a valós idejű követési pozíció adatokat NMEA formátumban küldi (lásd a fenti képernyőképet). Az NMEA formátum több mondatból áll, amelyekben az alábbiakban négy fontos mondatot adunk meg. Az NMEA mondatról és annak adatformátumáról további részletek találhatók itt.
- $ GPGGA: Globális helymeghatározó rendszer javítási adatai
- $ GPGSV: GPS műholdak láthatók
- $ GPGSA: GPS DOP és aktív műholdak
- $ GPRMC: Ajánlott minimális specifikus GPS / Tranzit adat
Tudjon meg többet a GPS-adatokról és az NMEA-karakterláncokról itt.
Ez az az adat, amelyet a GPS fogad, ha 9600 baud sebességgel csatlakozik.
$ 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
Ha GPS modult használunk bármely hely nyomon követésére, akkor csak koordinátákra van szükségünk, és ezt a $ GPGGA karakterláncban találhatjuk meg. Csak a $ GPGGA (globális helymeghatározó rendszer javító adatai) karakterláncokat használják többnyire a programokban, és az egyéb karakterláncokat figyelmen kívül hagyják.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Mit jelent ez a vonal?
A vonal jelentése: -
1. A karakterlánc mindig „$” jellel kezdődik
2. A GPGGA a Globális Helymeghatározó Rendszer Fix Adatait jelenti
3. A „,” vessző két érték elválasztását jelzi
4. 141848.00: GMT idő, mint 14 (óra): 18 (perc): 48 (másodperc): 00 (ms)
5. 2237,63306, N: 22 szélességi fok (fok) 37 (perc) 63306 (mp) északi
6. 08820.86316, E: 088 hosszúság (fok) 20 (perc) 86316 (mp) kelet
7. 1: Fix mennyiség 0 = érvénytelen adat, 1 = érvényes adat, 2 = DGPS javítás
8. 03: A jelenleg megtekintett műholdak száma.
9. 1.0: HDOP
10. 2.56, M: Tengerszint feletti magasság (tengerszint feletti magasság méterben)
11. 1.9, M: Geoidok magassága
12. * 74: ellenőrző összeg
Szükségünk van tehát az 5. és a 6. helyre, hogy információkat gyűjtsünk a modul helyéről vagy annak helyéről. Ebben a projektben egy GPS könyvtárat használtunk, amely bizonyos funkciókat biztosít a szélesség és hosszúság kinyerésére, így nem kell aggódnunk emiatt.
Korábban már csatlakoztattuk a GPS-t más mikrovezérlőkhöz:
- Hogyan kell használni a GPS-t az Arduinóval
- Raspberry Pi GPS modul interfész bemutató
- Interfacing GPS modul és PIC mikrokontroller
- Kövesse nyomon a járművet a Google Térképen az Arduino, az ESP8266 és a GPS segítségével
Itt ellenőrizheti az összes GPS-hez kapcsolódó projektet.
Kördiagramm
Az AVR Atemga16 mikrovezérlővel való GPS interfész kapcsolási rajza az alábbiakban található:
Az egész rendszert egy 12 V DC adapter táplálja, de az áramkörök 5 V-on működnek, így az áramellátást 5 V-ra szabályozza az LM7805 feszültségszabályozó. A 16x2 LCD-t 4 bites módban konfigurálják, és a csatlakozói az áramköri ábrán láthatók. A GPS-t szintén az 5v táplálja, és a tx-tűje közvetlenül csatlakozik az Atmega16 mikrokontroller Rx-jéhez. Egy 8 MHz-es kristályoszcillátort használnak a mikrovezérlő órajelezéséhez.
A GPS interfészének lépései az AVR mikrokontrollerrel
- Állítsa be a mikrokontroller konfigurációit, amelyek tartalmazzák az oszcillátor konfigurációját.
- Állítsa be a kívánt portot az LCD-hez, beleértve a DDR regisztert is.
- Csatlakoztassa a GPS modult a mikrovezérlőhöz az USART segítségével.
- Inicializálja a rendszer UART-ját ISR módban, 9600 baud sebességgel és LCD-vel 4bit módban.
- Vegyen két karaktertömböt a szélességi és hosszúsági hosszúságtól függően.
- Egyszerre kapjon egy karakterbitet, és ellenőrizze, hogy az $ -tól kezdődik-e vagy sem.
- Ha $ megkapta, akkor ez egy karakterlánc, ellenőriznünk kell a $ GPGGA-t, ezt a 6 betűt, beleértve a $ -t is.
- Ha GPGGA, akkor fogadja meg a teljes karakterláncot és állítsa be a jelzőket.
- Ezután vonja ki a szélességi és hosszúsági irányokat két tömbben.
- Végül nyomtassa ki a szélességi és hosszúsági tömböt az LCD-n.
Kód Magyarázat
A végén egy teljes kód és egy bemutató videó található, itt a kód néhány fontos részét ismertetjük.
Először is írjon be néhány kötelező fejlécet a kódba, majd írja be a MACROS bitmaszkot az LCD és az UART konfigurációhoz.
#define F_CPU 8000000ulul #include #include
Most deklaráljon és inicializáljon néhány változót és tömböt a GPS karakterlánc, szélességi hosszúság és zászlók tárolására.
char buf; illékony char ind, flag, stringFogadott; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; szén szélesség; char logitude;
Utána van néhány LCD meghajtó funkció az LCD meghajtására.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; if (r == 1) RSHigh; másként RSLow; ENMagas; _ késedelem_ms (1); ENLow; _ késedelem_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; if (r == 1) RSHigh; másként RSLow; ENMagas; _ késedelem_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ késleltetés_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; for (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Ezt követően inicializáltuk a soros kommunikációt a GPS-szel, és összehasonlítottuk a kapott karakterláncot a "GPGGA" -val:
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Most, ha a fogadott karakterláncot sikeresen egyezteti a GPGGA-val, akkor a fő funkcióban vonja ki és jelenítse meg a hely szélességi és hosszúsági koordinátáit:
lcdwrite (0x80,0); lcdprint ("Lat:"); sorozatnyomtatás ("Szélesség:"); for (int i = 15; i <27; i ++) { szélesség = buf; lcdwrite (szélesség, 1); sorosírás (szélesség); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Napló:"); sorozatnyomtatás ("Logitude:"); for (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Így a GPS modul összekapcsolható az ATmega16-tal a helykoordináták megtalálásához.
Az alábbiakban megtalálja a teljes kódot és a működő videót.