Sisällysluettelo:

Reitin löytäminen GPS: n avulla: 9 vaihetta
Reitin löytäminen GPS: n avulla: 9 vaihetta

Video: Reitin löytäminen GPS: n avulla: 9 vaihetta

Video: Reitin löytäminen GPS: n avulla: 9 vaihetta
Video: 5G yhteiskunnassa - hyödyntäjien puheenvuoroja 2024, Marraskuu
Anonim
Reitin löytäminen GPS: n avulla
Reitin löytäminen GPS: n avulla

Nopea harjoitus GPS -tietojen ymmärtämiseksi ja soveltamiseksi

  • Tarvittava aika: 2 tuntia
  • Hinta: 75-150 dollaria

Valmistajille on tullut melko halpaa sisällyttää korkealaatuinen paikkatieto elektroniikkaprojekteihin. Ja viime vuosina GPS (Global Positioning System) -vastaanotinmoduulit ovat kasvaneet paljon monipuolisemmiksi, tehokkaammiksi ja helposti integroitaviksi kehityskorteille, kuten Arduino, PIC, Teensy ja Raspberry Pi. Jos olet ajatellut rakentaa GPS: n ympärille, olet valinnut hyvän ajan aloittaaksesi.

Vaihe 1: Näin se toimii

GPS -moduuli on pieni radiovastaanotin, joka käsittelee satelliittikannan tunnetuilla taajuuksilla lähettämiä signaaleja. Nämä satelliitit pyörittelevät maapalloa suunnilleen pyöreillä kiertoradilla lähettäen äärimmäisen tarkkoja sijainti- ja kellotietoja alla olevaan maahan. Jos maanpäällinen vastaanotin voi "nähdä" tarpeeksi näitä satelliitteja, se voi laskea niiden avulla oman sijaintinsa ja korkeutensa.

Kun GPS -viesti saapuu, vastaanotin tarkistaa ensin lähetyksen aikaleiman nähdäkseen, milloin se lähetettiin. Koska radioaallon nopeus avaruudessa on tunnettu vakio (c), vastaanotin voi verrata lähetys- ja vastaanottoaikoja määrittääkseen signaalin kulkeman matkan. Kun se on määrittänyt etäisyytensä neljästä tai useammasta tunnetusta satelliitista, oman sijaintinsa laskeminen on melko yksinkertainen 3D -kolmiomittauksen ongelma. Mutta jotta tämä voidaan tehdä nopeasti ja tarkasti, vastaanottimen on kyettävä murskaamaan nopeasti numerot jopa 20 datavirrasta kerralla. - mieluiten enemmän - näkyvät aina maapallon jokaisesta pisteestä. Tällä hetkellä on 32 GPS -satelliittia, jotka suorittavat tarkasti koreografisen tanssin harvassa 20 000 kilometrin korkeudessa.

Vaihe 2: Fani -fakta

GPS ei voisi toimia ilman Einsteinin suhteellisuusteoriaa, koska kompensoidaan 38 mikrosekunnista, jotka kiertävät atomikellot saavat joka päivä maapallon painovoimakentän ajan laajenemisesta.

Vaihe 3: Aloittaminen

Päästä alkuun
Päästä alkuun

Olipa projektisi mikä tahansa, GPS on helppo integroida. Useimmat vastaanotinmoduulit kommunikoivat suoraviivaisen sarjaprotokollan kanssa, joten jos löydät vara -sarjaportin ohjainkortiltasi, fyysisen yhteyden muodostaminen kestää vain kourallisen johtoja. Ja vaikka ei, useimmat ohjaimet tukevat emuloitua "ohjelmisto" -sarjatilaa, jonka avulla voit muodostaa yhteyden mielivaltaisiin nastoihin.

Aloittelijoille Adafruitin Ultimate GPS Breakout -moduuli on hyvä valinta. Markkinoilla on paljon kilpailevia tuotteita, mutta Ultimate on vankka suorituskykyinen kohtuulliseen hintaan, ja siinä on suuret läpireiät, jotka on helppo juottaa tai liittää leipälautaan.

Liitä ensin maa ja virta. Arduinolla tämä tarkoittaa yhden mikrokontrollerin GND -nastan kytkemistä moduulin GND -liittimeen ja +5V -nasta moduulin VIN -numeroon. Tiedonsiirron hallitsemiseksi sinun on myös liitettävä moduulin TX- ja RX -nastat Arduinoon. Aion valita mielivaltaisesti Arduino -nastat 2 (TX) ja 3 (RX) tähän tarkoitukseen, vaikka nastat 0 ja 1 on suunniteltu erityisesti käytettäväksi "laitteiston sarjaporttina" tai UART: na. Koska en halua tuhlata ainoita UART-laitteita, joita näillä edullisilla AVR-prosessoreilla on. Arduinon UART on kytketty kiinteästi sisäiseen USB-liitäntään, ja pidän sen kytkettynä tietokoneeseen virheenkorjausta varten.

Vaihe 4: Varvas Datastreamissa

Varvas Datastreamissa
Varvas Datastreamissa

Heti kun kytket virran, GPS -moduuli alkaa lähettää palasia tekstidataa lähetyslinjalleen. Se ei ehkä vielä näe yhtä satelliittia, tai vielä vähemmän "korjausta", mutta datan hana käynnistyy heti, ja on mielenkiintoista nähdä, mitä tulee ulos. Ensimmäinen yksinkertainen luonnoksemme (alla) ei muuta kuin näyttää nämä käsittelemättömät tiedot.

#sisältää #määrittele RXPin 2

#define TXPin 3#define GPSBaud 4800

#define ConsoleBaud 115200

// Sarjayhteys GPS -laitteeseenSoftwareSerial ss (RXPin, TXPin);

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -esimerkki 1");

Serial.println ("Näytetään GPS -moduulin lähettämä raaka NMEA -data.");

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

}

tyhjä silmukka ()

{if (ss.available ()> 0) // Kun jokainen merkki saapuu…

Serial.write (ss.read ()); //… kirjoita se konsoliin

}

HUOMAUTUS: Luonnos määrittelee vastaanottotapin (RXPin) 2: ksi, vaikka sanoimme aiemmin, että lähetys (TX) -tappi liitetään nastaan 2. Tämä on yleinen sekaannuksen lähde. RXPin on vastaanottotappi (RX) Arduinon näkökulmasta. Luonnollisesti se on kytkettävä moduulin lähetysnastaan (TX) ja päinvastoin.

Lataa tämä luonnos ja avaa Serial Monitor 115, 200 baudilla. Jos kaikki toimii, sinun pitäisi nähdä tiheä, loputon pilkuilla erotettujen merkkijonojen virta. Jokainen näyttää samanlaiselta kuin toinen kuva kappaleen alussa.

Nämä erottuvat merkkijonot tunnetaan NMEA -lauseina, joita kutsutaan siksi, että muoto on National Maritime Electronics Associationin keksimä. NMEA määrittelee useita näistä lauseista navigointitiedoille aina olennaisesta (sijainti ja aika) esoteeriseen (satelliittisignaalin ja kohinan suhde, magneettinen vaihtelu jne.). Valmistajat ovat epäjohdonmukaisia siitä, mitä lauseita vastaanottimet käyttävät, mutta GPRMC on välttämätön. Kun moduulisi on korjattu, sinun pitäisi nähdä kohtuullinen määrä näitä GPRMC -lauseita.

Vaihe 5: Löydä itsesi

Ei ole vähäpätöistä muuttaa raaka -moduulilähtöä tiedoksi, jota ohjelma voi todella käyttää. Onneksi on jo olemassa hienoja kirjastoja, jotka voivat tehdä tämän puolestasi. Limor Friedin suosittu Adafruit -GPS -kirjasto on kätevä valinta, jos käytät heidän lopullista purkautumistaan. Se on kirjoitettu ottamaan käyttöön Ultimate -ominaisuuksille ominaisia ominaisuuksia (kuten sisäinen tiedonkeruu) ja lisää omituisia kelloja ja pillejä. Kirjoittamani TinyGPS ++ on kuitenkin suosikkikirjasto - ja tässä olen tietysti täysin puolueeton. Suunnittelin sen kattavaksi, tehokkaaksi, ytimekkääksi ja helppokäyttöiseksi. Otetaan se kierrokselle.

Vaihe 6: Koodaus TinyGPS ++: lla

Ohjelmoijan näkökulmasta TinyGPS ++: n käyttö on hyvin yksinkertaista:

1) Luo objekti gps.

2) Reititä jokainen moduulista saapuva merkki objektille käyttämällä gps.encode ().

3) Kun haluat tietää sijaintisi tai korkeutesi tai kellonajan tai päivämäärän, kysy vain gps -objektilta.

#Sisällytä #Sisällytä

#define RXPin 2

#define TXPin 3

#määritä GPSBaud 4800

#define ConsoleBaud 115200

// Sarjayhteys GPS -laitteeseenSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ -objekti

TinyGPSPlus GPS;

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -esimerkki 2");

Serial.println ("Yksinkertainen seuranta, joka käyttää TinyGPS ++: ta.");

Serial.println ("Mikal Hart");

Sarja.println ();

}

void loop () {

// Jos GPS -laitteesta on tullut merkkejä, /

/ lähetä ne TinyGPS ++ -objektiin

kun taas (ss. available ()> 0)

gps.enkoodi (ss.read ());

// Näytämme uuden sijainnin ja korkeuden

// aina, kun jompikumpi niistä on päivitetty

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

{

Serial.print ("Sijainti:");

Sarjajälki (gps.location.lat (), 6);

Serial.print (",");

Sarjanjälki (gps.location.lng (), 6);

Serial.print ("Korkeus:");

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

}

}

Toinen sovelluksemme näyttää jatkuvasti vastaanottimen sijainnin ja korkeuden käyttämällä TinyGPS ++ -palvelua jäsentämiseen. Todellisessa laitteessa voit kirjata nämä tiedot SD -kortille tai näyttää ne nestekidenäytöllä. Tartu kirjastoon ja luonnostele FindingYourself.ino (yllä). Asenna kirjasto tavalliseen tapaan Arduino -kirjastojen kansioon. Lataa luonnos Arduinollesi ja avaa Serial Monitor 115, 200 baudilla. Sinun pitäisi nähdä sijaintisi ja korkeutesi päivittyminen reaaliajassa. Jos haluat nähdä tarkalleen missä seisot, liitä osa tuloksena olevista leveys- ja pituuskoordinaateista Google Mapsiin. Liitä nyt kannettava tietokone ja lähde kävelylle tai ajamaan. (Mutta muista pitää katseesi tiellä!)

Vaihe 7: "NELJÄ MITTA"

vaikka yhdistämme GPS: n sijaintiin avaruudessa, älä unohda, että myös satelliitit lähettävät aika- ja päiväleimoja. Keskimääräinen GPS-kello on kymmenen miljoonasosa sekunnin tarkkuudella, ja teoreettinen raja on vielä suurempi. Vaikka tarvitset projektiasi vain ajan seurantaan, GPS -moduuli voi silti olla halvin ja helpoin ratkaisu.

Jos haluat muuttaa FindingYourself.ino: n huipputarkkaksi kelloksi, muuta vain viimeiset rivit seuraavasti:

if (gps.time.isUpdated ()) {

char buf [80];

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

}

Vaihe 8: Tien löytäminen

Tien löytäminen
Tien löytäminen

Kolmas ja viimeinen sovelluksemme on seurausta henkilökohtaisesta haasteesta kirjoittaa luettava TinyGPS ++ -luonnos alle 100 koodiriville, jotka ohjaisivat käyttäjän määränpäähän yksinkertaisten tekstin ohjeiden, kuten "pidä suoraan" tai "käänny vasemmalle", avulla.

#Sisällytä #Sisällytä

#define RXPin 2

#define TXPin 3

#määritä GPSBaud 4800

#define ConsoleBaud 115200

// Sarjayhteys GPS -laitteeseenSoftwareSerial ss (RXPin, TXPin);

// TinyGPS ++ -objekti TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* Tämä esimerkki näyttää peruskehyksen siitä, miten voit käyttää kurssia ja etäisyyttä ohjataksesi henkilön (tai dronin) määränpäähän. Tämä kohde on Eiffel -torni. Vaihda se tarpeen mukaan

Helpoin tapa saada leveys-/pituuskoordinaatti on napsauttaa kohdetta hiiren kakkospainikkeella Google Mapsissa (maps.google.com) ja valita "Mitä täällä on?". Tämä asettaa tarkat arvot hakukenttään

*/

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("GPS -esimerkki 3");

Serial.println ("Ei kovin kattava ohjausjärjestelmä");

Serial.println ("Mikal Hart");

Sarja.println ();

}

void loop () {

// Jos GPS -merkkejä on tullut, // lähetä ne TinyGPS ++ -objektiin, kun (ss.available ()> 0) gps.encode (ss.read ());

// Tee päivitys 5 sekunnin välein

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Sarja.println ();

// Vahvista nykyinen tila

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;

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

Serial.print (courseToDestination);

Serial.print ("Kurssi:");

Sarjajälki (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (directionToDestination);

Serial.print ("RelCourse:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

Sarja.println (gps.speed.kmph ());

// 20 metrin säteellä määränpäästä? Olivat täällä

jos (distanceToDestination <= 20,0)

{Serial.println ("ONNEA: Olet saapunut!");

poistuminen (1);

}

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

Serial.println ("metriä jäljellä");

Serial.print ("OHJE:");

// Paikallaan olo? Ilmoita vain mihin suuntaan mennä

jos (gps.speed.kmph () <2.0)

{

Serial.print ("Pää");

Serial.print (directionToDestination);

Sarja.println (".");

palata;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Jatka suoraan eteenpäin!");

muuten jos (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Veer hieman vasemmalle.");

muuten jos (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Veer hieman oikealle.");

muuten jos (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Käänny vasemmalle.");

muuten jos (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Käänny oikealle.");

muu

Serial.println ("Käänny täysin ympäri.");

}

}

Viiden sekunnin välein koodi tallentaa käyttäjän sijainnin ja kurssin (ajosuunta) ja laskee suuntiman (suunnan määränpäähän) käyttäen TinyGPS ++ courseTo () -menetelmää. Kahden vektorin vertailu antaa ehdotuksen jatkaa suoraan tai kääntyä alla olevan kuvan mukaisesti.

Kopioi luonnos FindingYourWay.ino (yllä) ja liitä se Arduino IDE: hen. Aseta määränpää 1 km: n tai 2 km: n päähän, lataa luonnos Arduinoosi, suorita se kannettavalla tietokoneellasi ja katso, opastavatko ne sinne. Mutta mikä tärkeintä, tutki koodia ja ymmärrä, miten se toimii.

Vaihe 9: Siirry pidemmälle

GPS: n luova potentiaali on laaja. Yksi tyydyttävimmistä asioista, joita olen koskaan tehnyt, oli GPS-yhteensopiva palapelilaatikko, joka avautuu vain yhteen esiohjelmoituun paikkaan. Jos uhrisi haluaa lukita aarteen sisälle, hänen on selvitettävä, missä tämä salainen sijainti on, ja tuoda laatikko fyysisesti sinne. Suosittu ensimmäinen projektiidea on jonkinlainen lokilaite, joka tallentaa minuutti minuutilta sijainnin ja korkeuden esimerkiksi Trans-Pennine Trail -reitillä kulkevalta retkeilijältä. Tai entä yksi niistä salaperäisistä magneettiseurantalaitteista, joita DEA -agentit Breaking Badissa pitävät pahojen ihmisten autoissa? Molemmat ovat täysin toteuttamiskelpoisia, ja niiden rakentaminen olisi luultavasti hauskaa, mutta kehotan teitä ajattelemaan laajemmin, paitsi Amazonista jo ostettavista tavaroista. Siellä on suuri maailma. Kulje niin pitkälle kuin mahdollista.

Suositeltava: