GPS för lata gamla nördar (3 / 5 steg)

Steg 3: Min GPS program



jag tänker inte försöka lära någon att skriva program i Visual Express. Mitt program är ett exempel på hur du kan anpassa GPS-programvara för din enda behov.
Vad jag kommer att täcka är några av de problem och lösningar i allmänhet termer.

Programmet mål:
Prata med GPS och exempel GPS-data.
Visa latitud, longitud, höjd.
Beräkna en löpande genomsnittlig ovan.

Etapp 2: Jag ville se hur exakt min GPS var. Se nästa steg.

Problem: Prata med GPS. BU-353 är en USB-enhet. Det mottar + 5V på USB-anslutningen. En av de trevliga funktionerna är att när det har makt, det börjar sända NMEA 0183 seriella data på 4800 baud automatiskt varje sekund.
Lösning: Så VB Express har redan en kontroll kallas Serialport. Ställa in den till 4800 baud, sätta den till rätt Com nummer och öppna den.

Problem: GPS exempeldata. Om du har ett sätt att se på den seriella data från BU-353, skulle en rad vara ungefär så här:
$GPGGA, 233632.000, 3913.9963, N, 10844.2590, W, 2, 09, 0,9, 1424.3, M,-16.7, M, 0,8, 0000 * 79

Här är hur NMEA 0183 definierar detta:
GGA - viktiga fix uppgifter som ger 3D-läge och korrekta data.
$GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0,9, 545.4, M, 46,9, M,, * 47

Var:
GGA Global Positioning System Fix Data
123519 fix vid 12:35:19 UTC (Coordinated Universal Time)
4807.038, N latitud 48 deg 07.038' N
01131.000, E longitud 11 deg 31.000' E
1 fix kvalitet: 0 = ogiltig
1 = GPS-fix (SPS)
2 = DGPS fix (detta betyder att WAAS aktiverad och arbetande)
08 antal satelliter som spåras
0,9 horisontella utspädning av position (något att göra med noggrannhet)
545.4, M höjd, meter över havsytan
46,9, M höjd GeoID (havsnivån) ovanför WGS84 ellipsoid
(tomma fält) tid i sekunder efter sista DGPS-uppdateringen
(tomma fält) DGPS station ID-nummer
* 47 checksum data, börjar alltid med *

Tips: Jag lärde mig något om latitud och longitud. Latitude kan bara gå från 0 till 90. longitud kan gå från 0 till 180. Det är därför latitude värdet ovan har fyra siffror före decimaltecknet och longituden har fem. I exemplet ovan skrivs 11 grader 011.

NMEA 0183 protokoll definieras över hela Internet. Här är en:
http://biostatmatt.com/uploads/DescriptionNMEA.pdf
Detta protokoll är inte bara för GPS så inte alla meningar är relevanta.

SubproblemA: BU-353 sänder flera data stränger varje sekund. Programmet tar emot seriella dataströmmen men inte vet var det "börjar." (Detta kallas asynkron kommunikation).
SolutionA: Vad programmet har att göra är ständigt titta på strömmen av data tills den ser "$GPGGA", då det vet relevanta uppgifter kommer att följa.

SubproblemB: $GPGGA data är en rad med data. Datorn måste att dela data i olika delar.
SolutionB: I programmeringsspråk kallas detta parsning. NMEA-protokollet har ganska stränga regler om hur strängarna definieras. Varje element i en angiven position och avgränsade med kommatecken. Så programmet har att gå igenom data och extrahera vad den vill och strunta i resten. För mina syften, jag läste ner till höjd och hoppade över resten av raden.
FYI: Kontrollsumman är ett sätt att kontrollera om datasträng är skadad eller intakt. I allmänhet får du skadade data, blir oftast det oläsbara ändå. Jag ignorera bara kontrollsummorna.

Problem: Visa latitud, longitud, höjd. Vid denna punkt, är alla data i tecken. Det kan enkelt visas i textrutor. Men för mina syften, det finns två problem. En är datorer är dumma, de kan inte genomsnitt tecken, de måste använda nummer. Jag använder ett antal typ "dubbel" vilket innebär att det kan inkludera ett decimaltecken, som 545.4. Det andra problemet är att latitud och longitud anges i formatet grader och minuter i ett nummer. 4807.038 är 48 deg 07.038'. Datorer är dumma de inte kan förstå detta.

Oroa dig inte om följande inte meningsfullt för dig.
Lösning: De flesta programmeringsspråk har ett sätt att konvertera tecken till en dubbel. I VB uttryckliga använde jag detta:
dLat = Convert.ToDouble(lineArr(2))

Konvertera att latitude är lite svårare, jag gjorde detta
grader = Int(dLat / 100) //This tar de två första siffrorna och konverterar dem till ett heltal (tal utan decimaler)
decimaldegrees = (dLat - (100 * grader)) / 60,0 / / Detta tar originalnummer,
subtraherar grader portion och
omvandlar den till ett decimaltal
fullLat = grader + decimaldegrees //This kombinerar de två

T.ex. om dLat = 4807.038
grader = Int(4807.038 / 100)
grader = Int(48.07038)
grader = 48

decimaldegrees = (dLat - (100 * grader)) / 60,0
decimaldegrees = (4807.038 - (100 * 48)) / 60,0
decimaldegrees = (4807.038 - (4800)) / 60,0
decimaldegrees = (7.038) / 60,0
decimaldegrees = 0.1173

fullLat = grader + decimaldegrees
fullLat = 48 + 0.1173
fullLat = 48.1173

Så är inte programmering roligt? Nej! Det är inte! Den goda nyheten är när du får programmet rätt, datorn kommer att göra alla beräkningar utan ansträngning. De dåliga nyheterna är om programmet (algoritm) är fel, det kommer att göra det fel utan ansträngning. Eftersom jag inte nästan perfekt, måste jag göra en hel del felsökning.

Karta läge: Jag kopierade denna funktion från en annan programmerare (jag önskar jag kom ihåg var jag hittade det). Om du har en Internetanslutning och en bra CPU, kommer att tryck på denna knapp öppna upp Google Maps och Visa din GPS-position. Detta är inte mycket användbart för mig. Om jag använder min Pentium III laptop i min bil, det är för långsamt att visa detta och jag skulle vanligtvis har inte internet-anslutning på vägen ändå.

Problem: Beräkna en löpande genomsnittlig ovan.
Lösning: Detta är relativt lätt, bara att hålla addera värdena och dividera med antalet prover.

Jag har tagit två versioner av programvaran.

För att använda den första, publish.zip, behöver du en internet-anslutning. (Jag har inte testat detta) Spara zip-filen till din dator, kör setup.exe. Om detta fungerar hur det använder till, kommer den hämta alla stödfiler och installera programmet. Du bör kunna använda den här med alla USB GPS som stöder NMEA 0183 protokoll.
Den andra versionen, Michaels GPS.zip innehåller alla källkoden. Jag föreslår att du installerar Microsoft Visual Basic Express 2010 först, sedan kopiera mina filer i projektkatalogen. Mine ser ut så här:
\\MICHAEL-PC\Users\Michael\Documents\Visual studio 2010\Projects\

Körbara är under projektnamnet, ner några kataloger... \bin\release. Teoretiskt kan du köra .exe-filen. Anledningen till att jag föreslog är installera Microsoft Visual Basic uttrycka 2010, att det installeras alla .NET grejer behövs i programmet. Om det inte fungerar, kan du också starta VB-express och öppna projektet och köra den.

Setup: Ange rätt Comm port för USB GPS. Klicka på Uppdatera. Data bör börja uppdatera. Om du får ett felmeddelande, Stoppa uppdateringar och Uppdatera igen.

Se Steg
Relaterade Ämnen

Näringsämne kalkylator

näringsmässiga kalkylator: om du anger i vad du ätit under en dag, det kommer att beräkna hur många kalorier, kolhydrater, fibrer, fett och kolesterol du ätit. Detta kan vara användbart för någon typ av kost.Varning: Detta Instructable kommer utan ga...

Arduino Ublox GPS

Så var denna lata gamla Geek (S.T.O.C.K.:S) söker en GPS för en Arduino projekt. Tja, hittade jag denna UBLOX-NEO - 6M GPS på ebay:http://www.ebay.com/ITM/Ublox-Neo-6m-GPS-module-with-EEPROM-and-Built-in-Active-Atenna-APM2-5-APM2-0-com-/251548034492?...

Kapsla Box för Little Owl - för "Gamla världen" beslutsfattare bara

varning: innan du börjar ivrigt att läsa och även till att du inte ska känna sig som lurade i slutet jag vill bara varna alla som inte bor i Eurasien och Nordafrika att denna holken Instructable är anpassad design för Little Owl (Athene noctua) - en...

Renovera din AVHÄRDARE och spara Big $$$

Uppdatera. Detta instructable var 8 år sedan (nu 2016). Jag hade någon maila mig och fråga om det. Jag hjälpte det bästa jag kunde men det var en lång tid sedan. Dessutom 6 månader efter jag fixade det motorn sluta på mig, det fungerade bra fram till...

GPS bil-enhet med hjälp av Arduino och smartphone

I slutet av 2013 identifierades mer än 7,2 miljoner fordon över hela världen som stulit så det är mycket viktigt att skydda din bil från stöld.i detta projekt hjälper vi dig :)du behöver inte köpa några dyra komponenter som GSM-modul eller GPS-enhet....

Arduino Wind Chill maskin

Problem: så jag har tagit promenader med min hund, Marcus och min Arduino stegräknare.Ute i höga öknen i januari, det blir här kallt och lite vind skapar en kall vind chill factor. Jag är en lat gamla nörd och skulle vilja veta vad den wind chill fak...

En annan Teenage blodsugare

nu är tid på året till vampyr upp dina nära och kära, eller för att visa dina oälskad och kära vad du verkligen tycker om dem. För denna bild använde jag Adobe Photoshop CS5. Men du kan enkelt använda stegen på vad foto verktyg du fungerar bäst i. Ja...

Lätt Laptop Stand

Problem: så här lata gamla Geek slutade min sängram med massor av förvaring. Att vara lat och gamla, jag gillar att ligga ner mer än sitta upp och att vara en nörd, jag gillar att surfa på internet och spela på min laptop. AHA! Jag behöver en laptop...

IP-Time Clock del 1

KRAV: WiFi Access med SSID och lösenord om det behövsSå denna lata gamla Geek (logg) har ett par klockor i mitt sovrum. En av dem förlorar tid när strömmen bryts. Den andra är delvis smart och justeras automatiskt för sommartid. Tyvärr, det gör detta...

DIY PC komponent urval

/ * formatmallsdefinitioner * / bord. MsoNormalTable {mso-stil-namn: "Tabell Normal"; mso-tstyle-rowband-storlek: 0; mso-tstyle-colband-storlek: 0; mso-stil-noshow:yes; mso-stil-förälder: ""; MSO-stoppning-alt: 0 i 5.4pt 0 i 5.4pt; MSO...

Arduino 3.3V

Denna lata gamla Geek (S.T.O.C.K.:S) älskar Arduinos. Jag har märkt att många av sensorer, som GPS, LCD-skärmar, Magnetometrar är 3.3Vdc sensorer. Men standard Arduinos, Uno, RBBB 5Vdc moduler.Så jag bestämde mig för ska jag göra mer av min Arduino p...

Min skyddskrets

Som många av er kanske vet älskar detta lata gamla Geek Arduinos. Många av mina projekt är portable som behöver ett batteri Källa:Så, jag har använt Adafruit 6 AA batteri innehavaren $5,00https://www.adafruit.com/products/248med 6 AA uppladdningsbara...

Arduino USB

LOG: Gjorde en korrigering/ändring steg 3 och lagt till en bild steg 5.Så många Arduino användare har RBBBs (riktigt nakna ben Board (Arduino)) eller Anarduinos eller Boarduinos som kan använda en USB-gränssnitt till program och driva dem. men inte v...

Arduino elektronik 101

Arduinos är fantastiska små enheter och människor (Instructablers) har gjort några fantastiska saker med dem.Jag är nyfiken. Jag vilja veta hur saker fungerar. För de nyfikna, kommer att detta Instructable försöka förklara några av Arduino elektronik...

Arduino stegräknare

Problem: så min nutritionist (inte alla har en nutritionist) föreslog jag ska öka min motion som främst består av gå min hund. Hon gav mig ett diagram av aktiviteter och brända kalorier. Här är ett exempel.http://www.nutristrategy.com/caloriesburned....

Arduino batteri

Som många av er kanske vet älskar detta lata gamla Geek Arduinos. Många av mina projekt är bärbara och behöver ett batteri Källa:Alla priser var fast besluten om början av 2012.Så, jag har använt Adafruit 6 AA batteri innehavaren $5,00https://www.ada...

Spotter Scope

Så beslutat denna lata gamla Geek (logg) att bygga en Spotter Scope. Eftersom jag är en nörd beslutat jag att lägga en Arduino.Nu är detta inte helt oseriöst. Jag delar WiFi med min kusin vars hus är cirka 780 fötter från min. Jag använder riktnings...

Temperaturen Wand

De flesta av er har hört uttrycket "Varmluft stiger". Jo, stämmer det.Så i din typiska hus, det kommer att vara hetare nära taket än nära golvet. Hur mycket varmare?Tja, ville att vara en lat gamla nörd, jag veta hur mycket. Tja, det är lätt, ja...

Automatisk utjämning Laser Cross

/ * formatmallsdefinitioner * / bord. MsoNormalTable {mso-stil-namn: "Tabell Normal"; mso-tstyle-rowband-storlek: 0; mso-tstyle-colband-storlek: 0; mso-stil-noshow:yes; mso-stil-förälder: ""; MSO-stoppning-alt: 0 i 5.4pt 0 i 5.4pt; MSO...