- Požadované komponenty
- Získávání údajů o poloze z GPS
- Kruhový diagram
- Kroky k propojení GPS s mikrokontrolérem AVR
- Vysvětlení kódu
GPS moduly jsou široce používány v aplikacích elektroniky ke sledování polohy na základě souřadnic zeměpisné délky a šířky. Systém sledování vozidel, hodiny GPS, výstražný systém detekce nehod, dopravní navigace, monitorovací systém atd. Jsou jen některé z příkladů, kde je nezbytná funkčnost GPS. GPS poskytuje nadmořskou výšku, šířku, délku, čas UTC a mnoho dalších informací o konkrétním místě, které jsou převzaty z více než jednoho satelitu. Pro čtení dat z GPS je zapotřebí mikrokontrolér, takže zde propojujeme modul GPS s mikrokontrolérem AVR Atmega16 a tiskneme zeměpisnou délku a šířku na LCD displej 16x2.
Požadované komponenty
- Atmega16 / 32
- GPS modul (GPS uBlox Neo 6M)
- Dlouhá drátová anténa
- 16x2 LCD
- 2,2k rezistor
- 1000uf kondenzátor
- 10uF kondenzátor
- Připojovací vodič
- LM7805
- DC Jack
- 12V DC adaptér
- Burgstips
- PCB nebo PCB pro všeobecné použití
Ublox Neo 6M je sériový modul GPS, který poskytuje podrobnosti o poloze prostřednictvím sériové komunikace. Má čtyři kolíky.
Kolík |
Popis |
Vcc |
Napájení 2,7 - 5V |
Gnd |
Přízemní |
TXD |
Přenos dat |
RXD |
Příjem dat |
Modul GPS Ublox neo 6M je kompatibilní s TTL a jeho specifikace jsou uvedeny níže.
Zachyťte čas |
Chladný start: 27 s, horký start: 1 s |
Komunikační protokol |
NMEA |
Sériová komunikace |
9600 b / s, 8 datových bitů, 1 stop bit, žádná parita a žádná kontrola toku |
Provozní proud |
45 mA |
Získávání údajů o poloze z GPS
Modul GPS bude přenášet data ve více řetězcích rychlostí 9600 baudů. Pokud použijeme terminál UART s přenosovou rychlostí 9600 Baud, uvidíme data přijatá GPS.
Modul GPS odesílá údaje o poloze sledování v reálném čase ve formátu NMEA (viz screenshot výše). Formát NMEA se skládá z několika vět, ve kterých jsou níže uvedeny čtyři důležité věty. Více podrobností o větě NMEA a jejím datovém formátu najdete zde.
- $ GPGGA: Údaje o opravách globálního pozičního systému
- $ GPGSV: Zobrazují se satelity GPS
- $ GPGSA: GPS DOP a aktivní satelity
- $ GPRMC: Doporučená minimální konkrétní data GPS / Transit
Další informace o datech GPS a řetězcích NMEA naleznete zde.
Toto jsou data přijatá GPS při připojení na 9600 baudech.
$ 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
Když používáme modul GPS ke sledování libovolného místa, potřebujeme pouze souřadnice a můžeme jej najít v řetězci $ GPGGA. V programech se většinou používá pouze řetězec $ GPGGA (Global Positioning System Fix Data) a ostatní řetězce jsou ignorovány.
$ GPGGA, 141848,00,2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Co znamená ten řádek?
Význam tohoto řádku je: -
1. Řetězec vždy začíná znakem „$“
2. GPGGA je zkratka pro Global Positioning System Fix Data
3. „,“ čárka označuje oddělení mezi dvěma hodnotami
4. 141848,00: GMT čas jako 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237,63306, N: Zeměpisná šířka 22 (stupeň) 37 (minuty) 63306 (s) Sever
6. 08820.86316, E: Zeměpisná délka 088 (stupeň) 20 (minuty) 86316 (s) na východ
7. 1: Fixní množství 0 = neplatná data, 1 = platná data, 2 = oprava DGPS
8. 03: Počet aktuálně zobrazených satelitů.
9. 1.0: HDOP
10. 2,56, M: Nadmořská výška (výška nad mořem v metrech)
11. 1,9, M: Výška geoidů
12. * 74: kontrolní součet
Potřebujeme tedy č. 5 a č. 6, abychom shromáždili informace o umístění modulu nebo o tom, kde se nachází. V tomto projektu jsme použili knihovnu GPS, která poskytuje některé funkce k extrahování zeměpisné šířky a délky, takže se toho nemusíme bát.
Dříve jsme GPS propojovali s jinými mikrokontroléry:
- Jak používat GPS s Arduino
- Výukový program pro propojení GPS modulu Raspberry Pi
- Propojovací modul GPS s mikrokontrolérem PIC
- Sledujte vozidlo na Google Maps pomocí Arduino, ESP8266 a GPS
Zde zkontrolujte všechny projekty související s GPS.
Kruhový diagram
Schéma zapojení GPS s mikrokontrolérem AVR Atemga16 je uvedeno níže:
Celý systém je napájen 12 V DC adaptérem, ale obvody fungují na 5 V, takže napájení je regulováno na 5 V pomocí regulátoru napětí LM7805. Displej LCD 16x2 je konfigurován ve 4bitovém režimu a jeho pinová připojení jsou zobrazena ve schématu zapojení. GPS je také napájeno 5V a jeho tx pin je přímo připojen k Rx mikrokontroléru Atmega16. K taktování mikrokontroléru se používá 8MHz krystalový oscilátor.
Kroky k propojení GPS s mikrokontrolérem AVR
- Nastavte konfigurace mikrokontroléru, které zahrnují konfiguraci oscilátoru.
- Nastavte požadovaný port pro LCD včetně registru DDR.
- Připojte modul GPS k mikrokontroléru pomocí USART.
- Inicializujte systém UART v režimu ISR s přenosovou rychlostí 9600 a LCD ve 4bitovém režimu.
- Vezměte dvě pole znaků v závislosti na délce zeměpisné šířky a délce.
- Přijímejte jeden znak po druhém a zkontrolujte, zda je spuštěn z $ nebo ne.
- Pokud je přijat $, pak je to řetězec, musíme zkontrolovat $ GPGGA, těchto 6 písmen včetně $.
- Pokud je to GPGGA, pak obdržíte kompletní řetězec a nastavíte příznaky.
- Poté extrahujte zeměpisnou šířku a délku se směry ve dvou polích.
- Nakonec vytiskněte pole zeměpisné šířky a délky na LCD.
Vysvětlení kódu
Na konci je uveden kompletní kód s ukázkovým videem, zde jsou vysvětleny některé důležité části kódu.
Nejprve zahrňte do kódu nějakou požadovanou hlavičku a poté napište MACROS bitové masky pro LCD a UART konfiguraci.
#define F_CPU 8000000ul #include #include
Nyní deklarujte a inicializujte některé proměnné a pole pro ukládání řetězce GPS, zeměpisné šířky a délky a příznaků.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char zeměpisná šířka; char logitude;
Poté máme nějakou funkci ovladače LCD pro řízení LCD.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; if (r == 1) RSHigh; else RSLow; CSVysoká; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; if (r == 1) RSHigh; else RSLow; CSVysoká; _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}; pro (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Poté jsme inicializovali sériovou komunikaci s GPS a porovnali přijatý řetězec s "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Nyní, pokud je přijatý řetězec úspěšně spárován s GPGGA, pak v extraktu hlavní funkce a zobrazte souřadnice zeměpisné šířky a délky umístění:
lcdwrite (0x80,0); lcdprint ("Lat:"); serialprint ("Latitude:"); for (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (zeměpisná šířka, 1); serialwrite (zeměpisná šířka); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); serialprint ("Logitude:"); for (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); if (i == 38) { lcdwrite ('', 1); i ++; } }
Takto lze modul GPS propojit s ATmega16 a vyhledat souřadnice polohy.
Najít kompletní kód a pracovní videa níže.