Përmbajtje:

Gjetja e rrugës tuaj me GPS: 9 hapa
Gjetja e rrugës tuaj me GPS: 9 hapa

Video: Gjetja e rrugës tuaj me GPS: 9 hapa

Video: Gjetja e rrugës tuaj me GPS: 9 hapa
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Nëntor
Anonim
Gjeni rrugën tuaj me GPS
Gjeni rrugën tuaj me GPS

Një ushtrim i shpejtë në të kuptuarit dhe aplikimin e të dhënave GPS

  • Koha e kërkuar: 2 orë
  • Kostoja: 75-150 dollarë

Për krijuesit, është bërë mjaft e lirë përfshirja e të dhënave gjeohapësinore me cilësi të lartë në projektet elektronike. Dhe në vitet e fundit, modulet e marrësve GPS (Sistemi i Pozicionimit Global) janë rritur shumë më të larmishëm, të fuqishëm dhe të lehtë për tu integruar me bordet e zhvillimit si Arduino, PIC, Teensy dhe Raspberry Pi. Nëse keni menduar të ndërtoni rreth GPS, keni zgjedhur një kohë të mirë për të filluar.

Hapi 1: Si funksionon

Një modul GPS është një marrës radio i vogël që përpunon sinjale të transmetuara në frekuenca të njohura nga një flotë satelitësh. Këta satelitë rrotullohen rreth Tokës në orbita përafërsisht rrethore, duke transmetuar pozicione jashtëzakonisht të sakta dhe të dhëna të orës në tokë më poshtë. Nëse marrësi tokësor mund të "shohë" mjaft nga këta satelitë, ai mund t'i përdorë ato për të llogaritur vendndodhjen dhe lartësinë e tij.

Kur arrin një mesazh GPS, marrësi së pari kontrollon afatin e transmetimit për të parë se kur është dërguar. Për shkak se shpejtësia e valës së radios në hapësirë është një konstante e njohur (c), marrësi mund të krahasojë kohën e transmetimit dhe të marrë për të përcaktuar distancën që sinjali ka udhëtuar. Pasi të ketë vendosur distancën e tij nga katër ose më shumë satelitë të njohur, llogaritja e pozicionit të tij është një problem mjaft i thjeshtë i trekëndëzimit 3D. Por për ta bërë këtë shpejt dhe me saktësi, marrësi duhet të jetë në gjendje të shtypë numrat nga deri në 20 rryma të të dhënave në të njëjtën kohë. Meqenëse sistemi GPS ka një qëllim të publikuar të jetë i përdorshëm kudo në Tokë, sistemi duhet të sigurojë që të paktën katër satelitë - mundësisht më shumë - janë të dukshme në çdo kohë nga çdo pikë e globit. Aktualisht janë 32 satelitë GPS që kryejnë një valle me koreografi të përpiktë në një re të rrallë 20, 000 kilometra të lartë.

Hapi 2: Fakti i tifozëve

GPS nuk mund të funksionojë pa teorinë e relativitetit të Ajnshtajnit, pasi kompensimi duhet të bëhet për 38 mikrosekonda që orët atomike në orbitë fitojnë çdo ditë nga zgjerimi i kohës në fushën gravitacionale të Tokës.

Hapi 3: Fillimi

Fillimi
Fillimi

Cilado qoftë projekti juaj, GPS është i thjeshtë për tu integruar. Shumica e moduleve të marrësit komunikojnë me një protokoll të drejtpërdrejtë serik, kështu që nëse mund të gjeni një port serik rezervë në bordin tuaj të kontrolluesit, do të duhen vetëm një pjesë e vogël e telave për të bërë lidhjen fizike. Dhe edhe nëse jo, shumica e kontrolluesve mbështesin një modalitet serial të emuluar "softuer" që mund të përdorni për t'u lidhur me kunjat arbitrare.

Për fillestarët, moduli Ultimate GPS Breakout i Adafruit është një zgjedhje e mirë. Ka shumë produkte konkurruese në treg, por Ultimate është një performues i fortë me një çmim të arsyeshëm, me vrima të mëdha që janë të lehta për t'u lidhur ose lidhur me një pjatë.

Së pari, lidhni tokën dhe fuqinë. Në termat Arduino, kjo do të thotë të lidhësh një nga kunjat e mikrokontrolluesit GND me GND të modulit, dhe kunjën +5V me VIN të modulit. Për të menaxhuar transferimin e të dhënave, gjithashtu duhet të lidhni kunjat TX dhe RX të modulit me Arduino. Unë do të zgjedh në mënyrë arbitrare kunjat Arduino 2 (TX) dhe 3 (RX) për këtë qëllim, edhe pse kunjat 0 dhe 1 janë krijuar posaçërisht për t'u përdorur si një "port serial i harduerit" ose UART. Pse? Sepse nuk dua të humbas UART-in e vetëm që kanë këto procesorë AVR të nivelit të ulët. UART e Arduino është e lidhur ngushtë me lidhësin USB në bord, dhe më pëlqen ta mbaj të lidhur me kompjuterin tim për korrigjim.

Hapi 4: Një gisht në rrjedhën e të dhënave

Një gisht në rrjedhën e të dhënave
Një gisht në rrjedhën e të dhënave

Në momentin që aplikoni energji, një modul GPS fillon të dërgojë pjesë të të dhënave të tekstit në linjën e tij TX. Mund të mos shohë ende një satelit të vetëm, aq më pak të ketë një "rregullim", por rubineti i të dhënave shfaqet menjëherë dhe është interesante të shihet se çfarë del. Skica jonë e parë e thjeshtë (më poshtë) nuk bën gjë tjetër veçse shfaq këto të dhëna të papërpunuara.

#përfshi #përcakto RXPin 2

#define TXPin 3#përcakto GPSBaud 4800

#define ConsoleBaud 115200

// Lidhja serike me pajisjen GPSSoftwareSerial ss (RXPin, TXPin);

void setup () {

Serial.filloni (ConsoleBaud);

ss.filloj (GPSBaud);

Serial.println ("Shembulli GPS 1");

Serial.println ("Shfaqja e të dhënave të papërpunuara të NMEA të transmetuara nga moduli GPS.");

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

}

lak void ()

{if (ss.disponueshme ()> 0) // Ndërsa secili karakter arrin…

Serial.shkruani (ss.lexoni ()); //… shkruajeni në tastierë

}

SH NOTNIM: Skica përcakton pinin e marrjes (RXPin) si 2, edhe pse kemi thënë më herët se kunja e transmetimit (TX) do të lidhej me pin 2. Ky është një burim i zakonshëm konfuzioni. RXPin është kunja e marrjes (RX) nga pikëpamja e Arduino. Natyrisht, duhet të lidhet me kunjin e transmetimit të modulit (TX), dhe anasjelltas.

Ngarko këtë skicë dhe hap Serial Monitor në 115, 200 baud. Nëse gjithçka funksionon, duhet të shihni një rrjedhë të dendur, të pafundme vargje teksti të ndara me presje. Secila do të duket diçka si imazhi i dytë në fillim të paragrafit.

Këto vargje dalluese njihen si fjali NMEA, të quajtura sepse formati u shpik nga Shoqata Kombëtare Elektronike Detare. NMEA përcakton një numër të këtyre fjalive për të dhëna lundrimi duke filluar nga ato thelbësore (vendndodhja dhe koha), deri tek ezoterike (raporti sinjal-zhurmë satelitore, varianca magnetike, etj.). Prodhuesit nuk janë konsistentë se cilat lloje fjalish përdorin marrësit e tyre, por GPRMC është thelbësore. Pasi moduli juaj të rregullohet, duhet të shihni një numër të drejtë të këtyre fjalive të GPRMC.

Hapi 5: Gjetja e Vetes

Nuk është e parëndësishme të shndërroni daljen e modulit të papërpunuar në informacion që programi juaj mund të përdorë në të vërtetë. Për fat të mirë, ka disa biblioteka të mëdha tashmë në dispozicion për ta bërë këtë për ju. Biblioteka popullore e Adafruit GPS e Limor Fried është një zgjedhje e përshtatshme nëse përdorni shpërthimin e tyre Ultimate. Writtenshtë shkruar për të mundësuar veçori unike për Ultimate (si regjistrimi i të dhënave të brendshme) dhe shton disa zile dhe bilbila të veçantë. Sidoqoftë, biblioteka ime e preferuar e analizës - dhe këtu jam natyrisht plotësisht e paanshme - është ajo që kam shkruar e quajtur TinyGPS ++. Unë e projektova që të ishte gjithëpërfshirës, i fuqishëm, konciz dhe i lehtë për t’u përdorur. Le ta marrim për një rrotullim.

Hapi 6: Kodimi me TinyGPS ++

Nga pikëpamja e programuesit, përdorimi i TinyGPS ++ është shumë i thjeshtë:

1) Krijoni një objekt GPS.

2) Drejtoni secilin karakter që arrin nga moduli në objekt duke përdorur gps.encode ().

3) Kur keni nevojë të dini pozicionin ose lartësinë tuaj ose kohën ose datën, thjesht pyesni objektin GPS.

#përfshi #përfshi

#përcakto RXPin 2

#përcaktoni TXPin 3

#përcaktoni GPSBaud 4800

#define ConsoleBaud 115200

// Lidhja serike me pajisjen GPSSoftwareSerial ss (RXPin, TXPin);

// Objekti TinyGPS ++

TinyGPSPlus GPS;

void setup () {

Serial.filloni (ConsoleBaud);

ss.filloj (GPSBaud);

Serial.println ("Shembulli GPS 2");

Serial.println ("Një gjurmues i thjeshtë duke përdorur TinyGPS ++.");

Serial.println ("nga Mikal Hart");

Serial.println ();

}

lak void () {

// Nëse ndonjë personazh ka mbërritur nga GPS, /

/ dërgojini ato në objektin TinyGPS ++

ndërsa (ss. në dispozicion ()> 0)

gps.ekodim (ss.lexo ());

// Le të shfaqim vendndodhjen dhe lartësinë e re

// sa herë që secila prej tyre është përditësuar

nëse (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("Vendndodhja:");

Serial.print (gps.location.lat (), 6);

Serial.print (",");

Serial.print (gps.location.lng (), 6);

Serial.print ("Lartësia:");

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

}

}

Aplikacioni ynë i dytë shfaq vazhdimisht vendndodhjen dhe lartësinë e marrësit, duke përdorur TinyGPS ++ për të ndihmuar në analizimin. Në një pajisje të vërtetë, mund t'i regjistroni këto të dhëna në një kartë SD ose t'i shfaqni në një LCD. Merrni bibliotekën dhe skiconi FindingYourself.ino (lart). Instaloni bibliotekën, si zakonisht, në dosjen e bibliotekave Arduino. Ngarko skicën në Arduino tuaj dhe hap Serial Monitor në 115, 200 baud. Ju duhet të shihni vendndodhjen dhe lartësinë tuaj duke u përditësuar në kohë reale. Për të parë saktësisht se ku qëndroni, ngjitni disa nga koordinatat gjerësi/gjatësi që rezultojnë në Google Maps. Tani lidhni laptopin tuaj dhe shkoni për një shëtitje ose një makinë. (Por mos harroni të mbani sytë drejt rrugës!)

Hapi 7: "DIMENSIONI I KATRT"

megjithëse e lidhim GPS-in me vendndodhjen në hapësirë, mos harroni se ata satelitë po transmetojnë kohë dhe vula datash, gjithashtu. Ora mesatare GPS është e saktë në një të dhjetën e milionës së sekondës, dhe kufiri teorik është edhe më i lartë. Edhe nëse keni nevojë vetëm për projektin tuaj për të mbajtur kohën, një modul GPS mund të jetë zgjidhja më e lirë dhe më e lehtë.

Për ta kthyer FindingYourself.ino në një orë super të saktë, thjesht ndryshoni rreshtat e fundit si kjo:

nëse (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "Koha është%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Hapi 8: Gjetja e rrugës suaj

Gjetja e Rrugës Tënde
Gjetja e Rrugës Tënde

Aplikimi ynë i tretë dhe i fundit është rezultat i një sfide personale për të shkruar një skicë të lexueshme TinyGPS ++, në më pak se 100 rreshta kodesh, që do të drejtonte një përdorues në një destinacion duke përdorur udhëzime të thjeshta teksti si "mbajeni drejt" ose "devijoni majtas".

#përfshi #përfshi

#përcakto RXPin 2

#përcaktoni TXPin 3

#përcaktoni GPSBaud 4800

#define ConsoleBaud 115200

// Lidhja serike me pajisjen GPSSoftwareSerial ss (RXPin, TXPin);

// Objekti TinyGPS ++ TinyGPSPlus GPS;

e pa firmosur longUpdateTime = 0;

#përcakto EIFFEL_LAT 48.85823#përcakto EIFFEL_LNG 2.29438

/* Ky shembull tregon një kuadër bazë për mënyrën se si mund të përdorni kursin dhe distancën për të udhëhequr një person (ose një dron) në një destinacion. Ky destinacion është Kulla Eifel. Ndryshojeni ashtu siç kërkohet

Mënyra më e lehtë për të marrë koordinatën lat/long është të klikoni me të djathtën në destinacionin në Google Maps (maps.google.com) dhe të zgjidhni "Çfarë ka këtu?". Kjo vendos vlerat e sakta në kutinë e kërkimit

*/

void setup () {

Serial.filloni (ConsoleBaud);

ss.filloj (GPSBaud);

Serial.println ("Shembulli GPS 3");

Serial.println ("Një Sistem Udhëzues Jo shumë i plotë");

Serial.println ("nga Mikal Hart");

Serial.println ();

}

lak void () {

// Nëse ndonjë karaktere ka mbërritur nga GPS, // dërgojini ato në objektin TinyGPS ++ ndërsa (ss.disponueshme ()> 0) gps.encode (ss.read ());

// Çdo 5 sekonda, bëni një përditësim

nëse (milis () - lastUpdateTime> = 5000)

{

lastUpdateTime = milis ();

Serial.println ();

// Vendosni statusin tonë aktual

distancë e dyfishtëToDestination = TinyGPSPlus:: distanceBetween

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

kurs i dyfishtëToDestination = TinyGPSPlus:: courseTo

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

const char *drejtimToDestination = TinyGPSPlus:: kardinal (kursToDestination);

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

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

Serial.print (courseToDestination);

Serial.print ("CurCourse:");

Serial.print (gps.course.deg ());

Serial.print ("Dir2Dest:");

Serial.print (drejtimToDestination);

Serial.print ("Kursi:");

Serial.print (courseChangeNeeded);

Serial.print ("CurSpd:");

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

// Brenda 20 metrave nga destinacioni? Ishin këtu

nëse (distanceToDestination <= 20.0)

{Serial.println ("URIME: Keni ardhur!");

dalja (1);

}

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

Serial.println ("metra për të shkuar.");

Serial.print ("UDHZIM:");

// Qëndroni në vend? Thjesht tregoni se në cilin drejtim të shkoni

nëse (gps.speed.kmph () <2.0)

{

Serial.print ("Koka");

Serial.print (drejtimToDestination);

Serial.println (".");

kthim;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Vazhdoni drejt përpara!");

tjetër nëse (kursChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Shikoni pak majtas.");

tjetër nëse (kursChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Shikoni pak në të djathtë.");

tjetër nëse (kursChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Ktheni në të majtë.");

tjetër nëse (kursChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Ktheni në të djathtë.");

tjeter

Serial.println ("Ktheni plotësisht.");

}

}

Çdo 5 sekonda kodi kap vendndodhjen dhe kursin e përdoruesit (drejtimi i udhëtimit) dhe llogarit kushinetën (drejtimi drejt destinacionit), duke përdorur metodën TinyGPS ++ courseTo (). Krahasimi i dy vektorëve gjeneron një sugjerim për të vazhduar drejt ose për t'u kthyer, siç tregohet më poshtë.

Kopjoni skicën FindingYourWay.ino (lart) dhe ngjiteni atë në Arduino IDE. Vendosni një destinacion 1 km ose 2 km larg, ngarkoni skicën në Arduino tuaj, drejtojeni atë në laptopin tuaj dhe shikoni nëse do t'ju udhëheqë atje. Por më e rëndësishmja, studioni kodin dhe kuptoni se si funksionon.

Hapi 9: Shkoni Më tej

Potenciali krijues i GPS është i madh. Një nga gjërat më të kënaqshme që kam bërë ndonjëherë ishte një kuti enigmash e aktivizuar me GPS që hapet vetëm në një vendndodhje të programuar paraprakisht. Nëse viktima juaj dëshiron të marrë thesarin e mbyllur brenda, ajo duhet të kuptojë se ku është ai vend sekret dhe ta sjellë fizikisht kutinë atje. Një ide e popullarizuar e projektit të parë është një lloj pajisjeje prerjesh që regjistron pozicionin minutë për minutë dhe lartësinë e, të themi, të një shëtitësi që ecën në Shtegun Trans-Pennine. Ose ç'të themi për njërin nga ata gjurmuesit e fshehtë magnetikë që agjentët e DEA -s në Breaking Bad ngjisin në makinat e njerëzve të këqij? Të dyja janë plotësisht të realizueshme dhe ndoshta do të ishin argëtuese për tu ndërtuar, por unë ju inkurajoj që të mendoni më gjerë, përtej gjërave që tashmë mund të blini në Amazon. It’sshtë një botë e madhe atje. Bredh aq larg sa të mundesh.

Recommended: