Lekce 26 - Arduino a GPS

23.11.2013 17:34

Translate to English

Pro dnešní lekci jsem si vybral modul přijímače GPS signálu od firmy SKYLAB typ SKM53. Tento je již integrován na desku s plošnými spoji a je zde i anténa, takže je modul připravený okamžitě k použití. GPS modul komunikuje pomocí seriového rozhraní (RX, TX) takže k jeho zapojení není třeba nějakých složitých postupů. 

Já jsem modul použil ve spojení spolu s Arduinem UNO. Napájen je přímo z Arduina z 5V a GND pinu a Rx je zapojen na pin 2 a Tx na pin 3. Záměrně jsem ho nepřipojim na pin 1 a 0, kde již je sériový port, protože si tento port vytvoříme softwarově jinde a to právě na pinu 2 a 3. Odpadne nám tím problém při programování a nutnost odpojovat modul vždy, když do Arduina nahráváme program. 

K celému programovaní pro základní fungovaní budeme potřebovat 2 knihovny. A to SoftwareSerial.h a TinyGPS.h. SoftwareSerial využijeme pro vytvoření sériové linky na pinech 2 a 3 a TinyGPS pro samotnou komunikaci s GPS modulem a získávání dat z něho. Nejsem si jist, ale knihovna SoftwareSerial je již součástí knihoven Arduina a stáhneme si pouze knihovnu pro práci s GPS. Na internetu se nalézá mnoho verzí. Mě fungovala až tato a je ke stažení zde

Jako program pro otestování modulu vybyreme z příkladu knihovny. Tedy File --> Examples --> TinyGPS --> Examples --> simple_test . Tento program otestuje samotnou komunikaci s modulem, pro ty jež nechtějí vybírat z příkladů tak je zde:

Po spuštění SerialMonitoru, by jsme měli vidět výstup na obrazovce takto:

Program vypisuje po zobrazení informací o autorovi knihovny 3 údaje. První je CHARS - udáj o přijatých datech (pokud je číslo 0, zařízení nekomunikuje - zkuste obrátit Tx a Rx), Potom je to SENTENCES - platné informace o platných přijatých údajích modulem GPS (pokud je číslo 0 je to logické protože v budově nemáme signál - neřešíme) a jako poslední je to CSUM ERR - číslo, které by mělo být za každých okolností 0. Takže nami sledovaný a potřebný údaj je pro CHARS vždy nějaké číslo větší než 0 a CSUM ERR by naopak měla vždy být 0. Pokud tyto údaje máte jako na mém obrázku, modul komunikuje s Arduinem správně. Pokud vidíte na CHARS, že přijímáme z modulu data, ale cSUM ERR není nula, zkuste změnit rychlost SoftwareSerial na 9600 nebo jinou uvedenou výrobcem. Můj modul komunikuje právě na rychlosti 9600 a trvalo mi dlouho, než jsem zjistil proč mi to kvůli tomu nefunguje.     

V dalším kroku si do Arduina nahrajeme program, který již bude vyhodnocovat data ze samotného modulu. Postup jse stejný, jen rozdíl je v tom, že vybereme jiný příklad a to: File --> Examples --> TinyGPS --> Examples --> test_with_gps_device.

Pokud ovšem budeme testovat modul uvnitř místnosti, signál nebude skoro žádný a přesnou polohu nezískláme. Doporučuji tedy dát modu alespoň za okno i třeba s Arduinem a spojit tento s delším USB kabelem s počítačem. 

Kdo má dobré oči z obrázku může vyčíst, že se nám na seriový port vypisují hodnoty a to:

- počet satelitů, HDOP (přesnost - čím menší číslo tím lepší), LAT a LON (údaje o poloze), čas, stáří fixu pozice, nadmořská výška a další hodnoty jako vzdálenost k městu Londýn jakož i kurz ve stupních a světovou stanu, kde se od Vás nachází. RX a Fail jsme si vysvětlili před tímto příkladem.

Já záměrně nerozepisuji kód z předešlého příkladu na ten se podívejte sami protože pouze sloužil k otestování získání polohy z modulu. Nyní se se podíváme na minimum kódu, který je nutný pro komunikaci a zístzkání informace z modulu:

Výstup z programu:

Nejsou to zrovna dva řádky kódu v programu, ale pro minimální funkčnost a pochopení důležité. Já vysvětlím nejprve funkci feedGPS(), ta čeká až přestane modul komunikovat. Kdyby jsme nečekali a například vypisovali údaje na modul LCD, budou se na něho generovat nesmyslné znaky a dále to může způsobovat chyby v programu a jejich funkcích. To by bylo k tomuto a jako další asi ta nejdůležitější funkce, která je 

gps.get_position(&lat, &lon);  - tato připisuje proměným lat a lon data o pozici ve statisícinách stupnů (pro zobrazení vysledků ve stupních nutno vydělit číslem 100000

samozřejmě knihovna, kterou jsme použili pro modul GPS toho zvládne daleko více než jen toto. Po prozkoumání souboru v knihovně TinyGPS.cpp zjistíme spousty dalších funkcí jako:

void f_get_position(float *latitude, float *longitude, unsigned long *fix_age) - vrací pozici již ve stupních

float f_altitude() - vrací nadmořskou výšku

float f_course() - vrací kurz pohybu

float f_speed_knots() - vrací rychlost v uzlech

float f_speed_mph() - vrací rychlost v mílích/ hod

float f_speed_kmph()  - vrací rychlost v km/hod

 void crack_datetime(int *year, byte *month, byte *day, byte *hour, byte *minute, byte *second, byte *hundredths, unsigned long *age)
        - vrací čas a datum ze satelitů
 
float distance_between (float lat1, float long1, float lat2, float long2)  - vrací vzdálenost mezi dvěma body

 

S těmito informace již dokážeme nějaký hezký program, který využijeme i prakticky. Já jsem si za úkol postavil přístroj s tímto modulem, který má displej z NOKIE5110, ukazuje kde jsem. Má jedno tlačítko, které slouží, když ho podržíme déle jak 5 sekund, k uložení mojí polohy do paměti EEPROM v Arduinu. Poté můžeme i třeba můj "Navigátor" vypnout až poté po zapnutí někde jinde mi ukáže vzdálenost k onomu místu i s kurzem ve stupních. 

Zpět

Diskusní téma: Lekce 26 - Arduino a GPS

Datum
Vložil
Titulek

Přesnost

pardon kamil.raus@seznam.cz

Datum
Vložil
Titulek

Přesnost

Dobrý den, s jakou odchylkou gps je třeba počítat, uvažuji o stavbě arduino sekačky na trávu.
děkuji za info

Datum
Vložil
Titulek

Re: Přesnost

Také by mě zajímalo

Datum
Vložil
Titulek

gps

wé wé wé .aliexpress.com/

Datum
Vložil
Titulek

GPS + LCD nokia

Dobrý den,
v závěru píšete o svém projektu GPS+LCD Nokia. Byl by jste ochoten se podělit o kód?
děkuji

Datum
Vložil
Titulek

Re: GPS + LCD nokia

Ano zkoušel jsem, vznikly tam nějaké problémy tak jsem toho zanechal. Ale funkční to bylo, nicméně nic vhodného a vyladěného ke zveřejnění.

Datum
Vložil
Titulek

Dotaz na modul GPS SKM53

Dobrý den,
můžete mi prosím sdělit, kde jste výše uvedený modul koupil?
Předem moc děkuji.

Datum
Vložil
Titulek

Re: Dotaz na modul GPS SKM53

mám dobrou zkušenost s xxxxxxx (odkaz na komerční stránky smazán adminem), napiště jim na email, objednají vám v podstatě cokoliv. GPS mám od nich za 890 Kč.

Datum
Vložil
Titulek

Re: Re: Dotaz na modul GPS SKM53

Poprosil bych o odkaz, kdyžtak na mail jan.sima.honza@seznam.cz tady to admin maže. Díky

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.