- Súčasti sú povinné
- Získavanie údajov o polohe z GPS
- Schéma zapojenia
- Kroky na prepojenie GPS s mikrokontrolérom AVR
- Vysvetlenie kódu
Moduly GPS sa často používajú v elektronických aplikáciách na sledovanie polohy na základe súradníc zemepisnej dĺžky a šírky. Systém sledovania vozidiel, hodiny GPS, výstražný systém detekcie nehôd, dopravná navigácia, sledovací systém atď. Sú len niektoré z príkladov, kde je nevyhnutná funkčnosť systému GPS. GPS poskytuje nadmorskú výšku, zemepisnú šírku, zemepisnú dĺžku, čas UTC a mnoho ďalších informácií o konkrétnom mieste, ktoré sú prevzaté z viac ako jedného satelitu. Na čítanie údajov z GPS je potrebný mikrokontrolér, takže tu prepájame modul GPS s mikrokontrolérom AVR Atmega16 a tlačíme zemepisnú šírku a šírku na LCD displej 16x2.
Súčasti sú povinné
- Atmega16 / 32
- GPS modul (GPS uBlox Neo 6M)
- Dlhá drôtová anténa
- 16x2 LCD
- 2,2k rezistor
- 1000uf kondenzátor
- 10uF kondenzátor
- Pripojovací drôt
- LM7805
- DC Jack
- 12V adaptér
- Burgstipy
- PCB alebo PCB na všeobecné účely
Ublox Neo 6M je sériový modul GPS, ktorý poskytuje podrobnosti o polohe prostredníctvom sériovej komunikácie. Má štyri špendlíky.
Pripnúť |
Popis |
Vcc |
Napájanie 2,7 - 5V |
Gnd |
Uzemnenie |
TXD |
Prenos údajov |
RXD |
Príjem dát |
Modul GPS Ublox neo 6M je kompatibilný s TTL a jeho technické parametre sú uvedené nižšie.
Zachyťte čas |
Chladný štart: 27 s, horúci štart: 1 s |
Komunikačný protokol |
NMEA |
Sériová komunikácia |
9600 b / s, 8 dátových bitov, 1 stop bit, žiadna parita a žiadna kontrola toku |
Prevádzkový prúd |
45 mA |
Získavanie údajov o polohe z GPS
Modul GPS bude prenášať údaje vo viacerých reťazcoch rýchlosťou 9600 baudov. Ak používame terminál UART s rýchlosťou 9600 Baud, môžeme vidieť údaje prijaté pomocou GPS.
GPS modul odosiela údaje o polohe sledovania v reálnom čase vo formáte NMEA (pozri snímku obrazovky vyššie). Formát NMEA pozostáva z niekoľkých viet, v ktorých sú nižšie uvedené štyri dôležité vety. Viac podrobností o vete NMEA a jej dátovom formáte nájdete tu.
- $ GPGGA: Údaje o opravách globálneho pozičného systému
- $ GPGSV: Zobrazujú sa satelity GPS
- $ GPGSA: GPS DOP a aktívne satelity
- $ GPRMC: Odporúčané minimálne konkrétne údaje GPS / Tranzit
Viac informácií o údajoch GPS a reťazcoch NMEA sa dozviete tu.
Toto sú dáta prijaté GPS pri pripojení na 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
Keď na sledovanie ľubovoľného miesta používame modul GPS , potrebujeme iba súradnice, ktoré nájdeme v reťazci $ GPGGA. V programoch sa väčšinou používa iba reťazec $ GPGGA (Global Positioning System Fix Data) a ostatné reťazce sú ignorované.
$ GPGGA, 141848,00 2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Aký význam má tento riadok?
Význam tohto riadku je: -
1. Reťazec sa vždy začína znakom „$“
2. GPGGA je skratka pre Global Fixing System Fix Data
3. „,“ čiarka označuje oddelenie medzi dvoma hodnotami
4. 141848,00: GMT čas ako 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237,63306, N: Zemepisná šírka 22 (stupeň) 37 (minúty) 63306 (s) sever
6. 08820.86316, E: Zemepisná dĺžka 088 (stupeň) 20 (minúty) 86316 (s) Východ
7. 1: Množstvo opravy 0 = neplatné údaje, 1 = platné údaje, 2 = oprava DGPS
8. 03: Počet aktuálne zobrazených satelitov.
9. 1.0: HDOP
10. 2,56, M: Nadmorská výška (výška nad hladinou mora v metroch)
11. 1,9, M: Výška geoidov
12. * 74: kontrolný súčet
Potrebujeme teda č. 5 a č. 6, aby sme zhromaždili informácie o umiestnení modulu alebo o tom, kde sa nachádza. V tomto projekte sme použili knižnicu GPS, ktorá poskytuje niektoré funkcie na extrahovanie zemepisnej šírky a dĺžky, takže si s tým nemusíme robiť starosti.
Už sme predtým používali rozhranie GPS s inými mikrokontrolérmi:
- Ako používať GPS s Arduino
- Výukový program pre modul GPS Raspberry Pi
- Prepojovací modul GPS s mikrokontrolérom PIC
- Sledujte vozidlo na Mapách Google pomocou technológií Arduino, ESP8266 a GPS
Skontrolujte všetky projekty týkajúce sa GPS tu.
Schéma zapojenia
Schéma zapojenia systému GPS s mikrokontrolérom AVR Atemga16 je uvedená nižšie:
Celý systém je napájaný 12V jednosmerným adaptérom, ale obvody fungujú na 5V, takže napájanie je regulované na 5V regulátorom napätia LM7805. 16x2 LCD je nakonfigurovaný v 4-bitovom režime a jeho pinové pripojenia sú zobrazené v schéme zapojenia. GPS je tiež napájané z 5v a jeho tx pin je priamo pripojený k Rx mikrokontroléra Atmega16. Na taktovanie mikrokontroléra sa používa 8MHz kryštálový oscilátor.
Kroky na prepojenie GPS s mikrokontrolérom AVR
- Nastavte konfiguráciu mikrokontroléra, ktorá obsahuje konfiguráciu oscilátora.
- Nastavte požadovaný port pre LCD vrátane registra DDR.
- Pripojte modul GPS k mikrokontroléru pomocou USART.
- Inicializujte systém UART v režime ISR s prenosovou rýchlosťou 9600 a LCD v 4bitovom režime.
- Vytvorte dve polia znakov v závislosti od dĺžky a zemepisnej šírky.
- Prijímajte po jednom bite a kontrolujte, či je spustený z $ alebo nie.
- Ak dostaneme $, jedná sa o reťazec, musíme skontrolovať $ GPGGA, týchto 6 písmen vrátane $.
- Ak je to GPGGA, potom dostanete celý reťazec a nastavíte príznaky.
- Potom extrahujte zemepisnú šírku a dĺžku so smermi do dvoch polí.
- Nakoniec vytlačte polia zemepisnej šírky a dĺžky na LCD.
Vysvetlenie kódu
Na konci je uvedený kompletný kód s ukážkovým videom, kde sú vysvetlené niektoré dôležité časti kódu.
Najskôr do kódu zahrňte požadovanú hlavičku a potom napíšte MACROS bitovej masky pre LCD a UART konfiguráciu.
#define F_CPU 8000000ul #include #include
Teraz deklarujte a inicializujte niektoré premenné a polia na ukladanie reťazca GPS, zemepisnej šírky a dĺžky.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char zemepisná šírka; char logitude;
Potom máme k dispozícii funkciu ovládača LCD na ovládanie LCD.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; if (r == 1) RSHigh; else RSLow; SKVysoká; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; if (r == 1) RSHigh; else RSLow; SKVysoká; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; pre (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Potom sme inicializovali sériovú komunikáciu s GPS a porovnali prijatý reťazec s „GPGGA“:
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Teraz, ak je prijatý reťazec úspešne priradený k GPGGA, potom v extrakte hlavnej funkcie a zobrazte súradnicu zemepisnej šírky a dĺžky miesta:
lcdwrite (0x80,0); lcdprint ("Lat:"); serialprint ("Latitude:"); pre (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (zemepisná šírka, 1); serialwrite (zemepisná šírka); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Denník:"); serialprint ("Logitude:"); pre (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Takto je možné prepojiť modul GPS s ATmega16, aby sa našli súradnice polohy.
Nájsť kompletný kód a pracovné videá nižšie.