====== Vizualizace pro GPS přijímač ====== ===== Zadání ===== Pomocí sériového rozhraní připojte k mikrokontroléru GPS přijímač standardu NMEA-0183 / SiRF OSP. Zvolte vhodný grafický displej a vizualizujte dostupné údaje, zejm. vlastní pozici a používané družice. Inspirujte se programem SiRFDemo. ===== Úvod ===== Globální družicový polohový systém se skládá z konstelace 24 družic které umožňují vypočítat polohu přijímače s celosvětovým pokrytím. Vzhledem k dálkoměrnému principu určování polohy je třeba ke stanovení polohy přijímat signály minimálně od čtyř družic. V dnešní době příjímače pracují se signály amerického (GPS) i ruského (GLONASS) systému a je tak zabezpečeno dobré pokrytí i v odlehlých oblastech. Příjmací zařízení na základě přijatých signálů vypočítá současnou polohu a sériovou komunikací přenáší tyto data uživateli ve formě zpráv. Běžně využívané standardy jsou SiRF OSP a NMEA0183, který byl použit při realizaci tohoto projektu. ==== Význam zpráv NMEA 0183 ==== Použitý standard NMEA je textový, jeho zpráva je tvořena ascii znaky a má následující formát: $XXYYY,a1,a2,a3,....,an*cc XX - typ vysílače, YYY - druh zprávy, a1-an - přenášená data, an*cc - kontrolní součet Pro vizualizace byla použita zpráva GGA(údaje o poloze přijímače) a GSV(údaje o poloze družic). Více informací o těchto zprávách lze nalézt např. [[http://aprs.gids.nl/nmea/|zde]]. ===== Vývojový kit STM32F429i Discovery ===== Jedná se o vývojovou desku osazenou mikroprocesorem s architekturou Cortex ARM-M4 s frekvencí 180MHz. Dále je deska osazena 2MB pamětí SDRAM a především QVGA LCD displejem, který bude použit pro vizualizaci. Z dostupných periferií je dále použito rozhraní UART5 pro komunikaci s GPS přijímačem. {{ :2016:stm32f429disco.png?400 |}} Obr.1 STM32F429i Discovery ===== GPS přijímač ===== Pro příjem GPS signálu byl vybrán kapesní přijímač BR-355S4 který umožňuje standardní příjem GPS signálu a poskytuje GGA, GSA i GSV zprávy. Komunikace probíhá po sériové lince s rychlostí 4800Bd. Protože GPS přijímač komunikuje s úrovní RS232, byl do komunikační cesty zařazen RS232->TTL převodník úrovní. {{ :2016:gps_receiver.png?200 |}} Obr.2 GPS přijímač BR-355S4 ===== Firmware ===== Pro vývoj programu bylo pro svoji rychlost a jednoduchost použito online vývojové prostředí [[https://developer.mbed.org|mbed.org]]. Odtud byly také převzaty potřebné knihovny. #include "mbed.h" #include "LCD_DISCO_F429ZI.h" #include "GPS.h" Oficiální knihovna pro použitý LCD displej LCD_DISCO_F429ZI obsahuje množství funkcí které umožňují zobrazovat na displeji text v různých formátech a jednoduché tvary. Základ pro parsování přijatých zpráv byl převzat z knihovny GPS dostupné na mbed. Tato knihovna byla dále upravena a rozšířena dle požadavků projektu. {{ :2016:gps_concept1.jpeg?400 |}} void GPS::getline() { while(_gps.getc() != '$'); // wait for the start of a line for(int i=0; i<256; i++) { msg[i] = _gps.getc(); if(msg[i] == '\r') { msg[i] = 0; return; } } error("Overflowed message limit"); } GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) { _gps.baud(4800); longitude = 0.0; latitude = 0.0; } int GPS::sample() { float time; char ns, ew; int lock; while(1) { getline(); . . . if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d", &time, &latitude, &ns, &longitude, &ew, &lock, &snum) >= 1) { . . . sprintf((char*)text, "Lat: %f %c", gps.latitude,gps.xns); lcd.DisplayStringAt(0, LINE(1), (uint8_t *)text, CENTER_MODE); sprintf((char*)text, "Lon: %f %c", gps.longitude,gps.xew); lcd.DisplayStringAt(0, LINE(2), (uint8_t *)text, CENTER_MODE); sprintf((char*)text, "Sat. in view: %d", gps.siv); lcd.DisplayStringAt(0, LINE(3), (uint8_t *)text, CENTER_MODE); Po inicializaci program čeká na přijmutí dat z GPS přijímače. Přicházející data jsou zapisována do bufferu msg[256] a po přijmutí celé zprávy je tento buffer postoupen parsování. Podle významu zprávy se pak zapíší příslušné hodnoty do proměnných k zobrazení na displej. Mačkáním talčítka lze přepínat mezi první obrazovkou s údaji o pozici přijímače a grafem s polohami družic a druhou obrazovkou s číselně vyjádřenými polohami družic. Zdrojové soubory jsou k dispozici {{ :2016:32f429_gps.rar |zde}}. ===== Videoukázka ===== {{youtube>j360Fvv9WjQ?medium}} ===== Závěr ===== V rámci projektu byl vyvinut firmware pro vizualizaci dat přijatých GPS přijímačem. Na displeji je zobrazena poloha přijímače, dále polohy viditelných satelitů absolutně a graficky relativně vzhledem k přijímači. Při práci na projektu se však nepodařilo přijmou údaje o všech družicích. Z neznámých důvodů je přijata pouze první zpráva GSV v sérii(informace o prvních čtyřech satelitech).