Sisukord:

GPS -i abil tee leidmine: 9 sammu
GPS -i abil tee leidmine: 9 sammu

Video: GPS -i abil tee leidmine: 9 sammu

Video: GPS -i abil tee leidmine: 9 sammu
Video: How to Set Up & Demo TeeJet Matrix 430 2024, November
Anonim
GPS -i abil tee leidmine
GPS -i abil tee leidmine

Kiire harjutus GPS -andmete mõistmiseks ja rakendamiseks

  • Nõutav aeg: 2 tundi
  • Maksumus: 75-150 dollarit

Tootjate jaoks on muutunud üsna odavaks kvaliteetsete georuumiliste andmete kaasamine elektroonikaprojektidesse. Ja viimase paari aasta jooksul on GPS (Global Positioning System) vastuvõtumoodulid muutunud palju mitmekesisemaks, võimsamaks ja hõlpsasti integreeritavaks selliste arendusplaatidega nagu Arduino, PIC, Teensy ja Raspberry Pi. Kui olete mõelnud GPS -i ümber ehitada, valisite alustamiseks hea aja.

1. toiming: kuidas see toimib

GPS -moodul on pisike raadiovastuvõtja, mis töötleb satelliitide pargi poolt teadaolevatel sagedustel edastatavaid signaale. Need satelliidid keerlevad ümber Maa umbes ringikujulistel orbiitidel, edastades maapinnale ülitäpseid asukoha- ja kellaandmeid. Kui maapealne vastuvõtja suudab neid satelliite piisavalt näha, saab ta neid kasutada oma asukoha ja kõrguse arvutamiseks.

Kui GPS -sõnum saabub, kontrollib vastuvõtja esmalt oma eetrisse saatmise ajatemplit, et näha, millal see saadeti. Kuna raadiolaine kiirus ruumis on teadaolev konstant (c), saab vastuvõtja võrrelda saate- ja vastuvõtuaegu, et teha kindlaks signaali läbitud vahemaa. Kui see on kindlaks määranud oma kauguse neljast või enamast teadaolevast satelliidist, on oma asukoha arvutamine 3D -kolmnurga üsna lihtne probleem. Kuid selleks, et seda kiiresti ja täpselt teha, peab vastuvõtja suutma kiirelt krõmpsutada numbreid kuni 20 andmevoost korraga. Kuna GPS -süsteemi eesmärk on olla kasutatav kõikjal Maal, peab süsteem tagama, et vähemalt neli satelliiti - soovitavalt rohkem - on kogu aeg maakera igast kohast nähtavad. Praegu on 32 GPS -satelliiti, kes esitavad 20 000 kilomeetri kõrguses hõredas pilves põhjalikult koreograafilist tantsu.

2. samm: fännide fakt

GPS ei saaks töötada ilma Einsteini relatiivsusteooriata, kuna tuleb kompenseerida 38 mikrosekundi eest, mille orbiidil olevad aatomkellad saavad iga päev Maa gravitatsioonivälja laienemisest.

3. samm: alustamine

Alustamine
Alustamine

Olgu teie projekt milline tahes, GPS -i on lihtne integreerida. Enamik vastuvõtumooduleid suhtlevad lihtsa jadaprotokolliga, nii et kui leiate oma kontrollerplaadilt varu -jadaporti, peaks füüsilise ühenduse loomiseks kuluma vaid käputäis juhtmeid. Ja isegi kui mitte, toetab enamik kontrollereid emuleeritud „tarkvara” jadarežiimi, mida saate kasutada suvaliste tihvtidega ühenduse loomiseks.

Algajatele on Adafruit Ultimate GPS Breakout moodul hea valik. Turul on palju konkureerivaid tooteid, kuid Ultimate on mõistliku hinnaga kindel esitaja, suurte läbivate aukudega, mida on lihtne jootma või leivaplaadiga ühendada.

Esiteks ühendage maandus ja toide. Arduino mõistes tähendab see ühe mikrokontrolleri GND kontakti ühendamist mooduli GND -ga ja +5 V kontakti mooduli VIN -iga. Andmeedastuse haldamiseks peate ühendama ka mooduli TX- ja RX -tihvtid Arduinoga. Ma valin selleks meelevaldselt Arduino tihvtid 2 (TX) ja 3 (RX), kuigi tihvtid 0 ja 1 on spetsiaalselt ette nähtud kasutamiseks „riistvaralise jadapordina” või UART -na. Miks? Kuna ma ei taha raisata ainsat UART-i, mis neil madala kvaliteediga AVR-protsessoritel on. Arduino UART on sisseehitatud USB-pistikuga kõvasti ühendatud ja mulle meeldib see silumiseks silmatorkavalt arvutiga ühenduses hoida.

4. samm: varba andmevoos

Varvas andmevoos
Varvas andmevoos

Toite sisselülitamisel alustab GPS -moodul oma TX -liinile tekstitükkide saatmist. See ei pruugi veel üht satelliiti näha, veel vähem "parandust", kuid andmesegisti hakkab kohe tööle ja on huvitav näha, mis välja tuleb. Meie esimene lihtne visand (allpool) ei tee muud, kui kuvab need töötlemata andmed.

#kaasas #määratle RXPin 2

#define TXPin 3#define GPSBaud 4800

#defineeri ConsoleBaud 115200

// jadaühendus GPS -seadmegaSoftwareSerial ss (RXPin, TXPin);

tühine seadistus () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -näide 1");

Serial.println ("GPS -mooduli edastatud NMEA töötlemata andmete kuvamine.");

Serial.println ("Mikal Hart"); Serial.println ();

}

tühine tsükkel ()

{if (ss.available ()> 0) // Iga tähemärgi saabudes…

Serial.write (ss.read ()); //… kirjutage see konsoolile

}

MÄRKUS. Visand määratleb vastuvõtutihvti (RXPin) väärtuseks 2, kuigi me juba ütlesime, et edastus (TX) tihvt ühendatakse tihvtiga 2. See on tavaline segaduse allikas. RXPin on Arduino vaatenurgast vastuvõtunõel (RX). Loomulikult peab see olema ühendatud mooduli edastus (TX) kontaktiga ja vastupidi.

Laadige see visand üles ja avage jadamonitor 115, 200 baudiga. Kui kõik töötab, peaksite nägema tihedat lõputut komaga eraldatud tekstistringide voogu. Igaüks näeb välja nagu lõigu alguses olev teine pilt.

Neid iseloomulikke stringe tuntakse NMEA lausetena, nii et selle vormi leiutas riiklik mereelektroonika assotsiatsioon. NMEA määratleb mitmeid neid lauseid navigeerimisandmetele alates olulisest (asukoht ja aeg) kuni esoteerikani (satelliidi signaali ja müra suhe, magnetiline dispersioon jne). Tootjad on vastuolulised selles, milliseid lausetüüpe nende vastuvõtjad kasutavad, kuid GPRMC on hädavajalik. Kui teie moodul on parandatud, peaksite nägema päris palju neid GPRMC lauseid.

Samm: leidke ennast

Mooduli toores väljundi muutmine teabeks, mida teie programm tegelikult kasutada saab, pole tühine. Õnneks on selle jaoks teie jaoks juba saadaval suurepäraseid raamatukogusid. Limor Friedi populaarne Adafruit GPS -raamatukogu on mugav valik, kui kasutate nende ülimat läbimurret. See on kirjutatud selleks, et lubada Ultimatele ainulaadseid funktsioone (nt sisemine andmete logimine) ja lisab mõningaid nutikaid kellasid ja vilesid. Minu lemmik parsimisraamatukogu - ja siin ma olen muidugi täiesti erapooletu - on see, mille ma kirjutasin, nimega TinyGPS ++. Ma kujundasin selle terviklikuks, võimsaks, sisutihedaks ja hõlpsasti kasutatavaks. Võtame selle keerutamiseks.

6. samm: kodeerimine TinyGPS ++ abil

Programmeerija seisukohast on TinyGPS ++ kasutamine väga lihtne:

1) Loo objekt gps.

2) Suunake iga moodulist saabuv märk objekti, kasutades gps.encode ().

3) Kui peate teadma oma asukohta või kõrgust või kellaaega või kuupäeva, küsige lihtsalt gps -objektilt päringut.

#kaasama #kaasama

#defineeri RXPin 2

#defineeri TXPin 3

#define GPSBaud 4800

#defineeri ConsoleBaud 115200

// jadaühendus GPS -seadmegaSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ objekt

TinyGPSPlus gps;

tühine seadistus () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS Näide 2");

Serial.println ("Lihtne jälgija TinyGPS ++ abil.");

Serial.println ("Mikal Hart");

Serial.println ();

}

void loop () {

// Kui GPS -ist on saabunud märke, /

/ saatke need TinyGPS ++ objektile

samas (ss. saadaval ()> 0)

gps.encode (ss.read ());

// Kuvame uue asukoha ja kõrguse

// kui kumbki neist on uuendatud

if (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Asukoht:");

Seeriaprint (gps.location.lat (), 6);

Serial.print (",");

Seeriaprint (gps.location.lng (), 6);

Serial.print ("Kõrgus:");

Serial.println (gps.altitude.meters ());

}

}

Meie teine rakendus kuvab pidevalt vastuvõtja asukohta ja kõrgust, kasutades parsimisel TinyGPS ++. Päris seadmes võite need andmed SD -kaardile logida või kuvada LCD -ekraanil. Haarake raamatukogu ja visandage FindingYourself.ino (ülal). Installige raamatukogu, nagu tavaliselt, kausta Arduino teegid. Laadige eskiis üles oma Arduino ja avage jadamonitor 115, 200 baudiga. Te peaksite nägema oma asukoha ja kõrguse värskendamist reaalajas. Täpselt oma asukoha nägemiseks kleepige mõned saadud laius-/pikkuskraadid Google Mapsi. Nüüd ühendage sülearvuti ja minge jalutama või sõitma. (Kuid pidage silmas teed!)

Samm: NELJAS MÕÕTME

kui me seostame GPS-i asukohaga ruumis, ärge unustage, et need satelliidid edastavad ka aja- ja kuupäevatemplid. Keskmine GPS-kella täpsus on kümne miljoni sekundis ja teoreetiline piir on veelgi suurem. Isegi kui vajate oma projekti ainult aja jälgimiseks, võib GPS -moodul olla siiski odavaim ja lihtsaim lahendus.

Et muuta FindingYourself.ino ülitäpseks kellaks, muutke paar viimast rida järgmiselt:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "Aeg on%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Seeria.println (buf);

}

8. samm: tee leidmine

Oma tee leidmine
Oma tee leidmine

Meie kolmas ja viimane rakendus on isikliku väljakutse tulemus, et kirjutada loetav TinyGPS ++ visand vähem kui 100 koodireale, mis juhataks kasutaja sihtkohta, kasutades lihtsaid tekstilisi juhiseid, nagu „hoia sirgelt” või „pööra vasakule”.

#kaasama #kaasama

#defineeri RXPin 2

#defineeri TXPin 3

#define GPSBaud 4800

#defineeri ConsoleBaud 115200

// jadaühendus GPS -seadmegaSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ objekt TinyGPSPlus gps;

allkirjastamata pikk lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* See näide näitab põhiraamistikku selle kohta, kuidas saaksite inimese (või drooni) sihtkohta suunamiseks kasutada kurssi ja kaugust. See sihtkoht on Eiffeli torn. Muutke seda vastavalt vajadusele

Lihtsaim viis lati/pika koordinaadi saamiseks on paremklõps sihtkohal Google Mapsis (maps.google.com) ja valida „Mis siin on?”. See paneb otsinguväljale täpsed väärtused

*/

tühine seadistus () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -näide 3");

Serial.println ("Mitte nii põhjalik juhendamissüsteem");

Serial.println ("Mikal Hart");

Serial.println ();

}

void loop () {

// Kui GPS -ist on saabunud mingeid märke, // saatke need TinyGPS ++ objektile, samal ajal kui (ss.available ()> 0) gps.encode (ss.read ());

// Tehke värskendus iga 5 sekundi järel

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Tehke kindlaks meie praegune staatus

double distanceToDestination = TinyGPSPlus:: distanceBetween

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

double courseToDestination = TinyGPSPlus:: courseTo

gps.location.lat (), gps.location.lng (), EIFFEL_LAT, EIFFEL_LNG);

const char *directionToDestination = TinyGPSPlus:: cardinal (courseToDestination);

int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ()) % 360;

// silumine Serial.print ("DEBUG: Course2Dest:");

Serial.print (courseToDestination);

Serial.print ("Kursus:");

Seeriaprint (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

Serial.println (gps.kiirus.kmph ());

// 20 meetri raadiuses sihtkohast? Olid siin

if (distanceToDestination <= 20,0)

{Serial.println ("PALJU ÕNNE: Saabusid!");

väljapääs (1);

}

Serial.print ("DISTANCE:"); Serial.print (distanceToDestination);

Serial.println ("meetrit minna.");

Serial.print ("JUHEND:");

// Paigal seisma? Lihtsalt märkige, mis suunas liikuda

kui (gps.kiirus.kmph () <2.0)

{

Serial.print ("Pea");

Serial.print (directionToDestination);

Serial.println (".");

tagasipöördumine;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Jätka otse!");

muidu kui (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Veer veidi vasakule.");

muidu kui (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Veer veidi paremale.");

muidu kui (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Pöörake vasakule.");

muidu kui (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Pööra paremale.");

muidu

Serial.println ("Pöörake täielikult ümber.");

}

}

Iga 5 sekundi järel jäädvustab kood kasutaja asukoha ja kursi (sõidusuund) ning arvutab suuna (sihtpunkti suund), kasutades meetodit TinyGPS ++ courseTo (). Kahe vektori võrdlemine annab soovituse jätkata sirget või pööret, nagu allpool näidatud.

Kopeerige visand FindingYourWay.ino (ülal) ja kleepige see Arduino IDE -sse. Määrake sihtkoht 1 km või 2 km kaugusele, laadige eskiis üles oma Arduinosse, käivitage see sülearvutis ja vaadake, kas see juhatab teid sinna. Kuid mis veelgi olulisem - uurige koodi ja mõistke, kuidas see toimib.

9. samm: minge kaugemale

GPSi loominguline potentsiaal on tohutu. Üks kõige rahuldustpakkuvamaid asju, mida ma kunagi teinud olen, oli GPS-toega mõistatuste kast, mis avaneb ainult ühes eelprogrammeeritud kohas. Kui teie ohver soovib aarde enda sisse lukustada, peab ta välja selgitama, kus see salajane asukoht asub, ja tooma kasti füüsiliselt kohale. Populaarne esimese projekti idee on mingi metsaraieseade, mis salvestab näiteks minutite kaupa Trans-Pennine Trailil kõndiva matkaja asukoha ja kõrguse. Või mis saab ühest neist salakavalatest magnetjälgijatest, mille DEA agendid Breaking Badis kurjade poiste autodele kleepivad? Mõlemad on täiesti teostatavad ja neid oleks ilmselt lõbus ehitada, kuid julgustan teid mõtlema laiemalt, peale selle, mida saate Amazonist juba osta. Seal on suur maailm. Liikuge nii kaugele kui võimalik.

Soovitan: