Përmbajtje:
- Hapi 1: Si funksionon
- Hapi 2: Fakti i tifozëve
- Hapi 3: Fillimi
- Hapi 4: Një gisht në rrjedhën e të dhënave
- Hapi 5: Gjetja e Vetes
- Hapi 6: Kodimi me TinyGPS ++
- Hapi 7: "DIMENSIONI I KATRT"
- Hapi 8: Gjetja e rrugës suaj
- Hapi 9: Shkoni Më tej
Video: Gjetja e rrugës tuaj me GPS: 9 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:24
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
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
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
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:
Dritat automatike të rrugës duke përdorur sensorin tejzanor: 3 hapa
Dritat automatike të rrugës duke përdorur sensorin tejzanor: A keni menduar ndonjëherë se si dritat e rrugës ndizen automatikisht gjatë natës dhe fiken automatikisht në mëngjes? A ka ndonjë person që ndizet/fiket këto drita? Ka disa mënyra për të ndezur dritat e rrugës, por c
Gjurmimi i rrugës GPS V2: 4 hapa (me fotografi)
Gjurmimi i Rrugës GPS V2: Projekti: Gjurmimi i Rrugës GPS V2 Data: Maj - Qershor 2020 PPRDITSIM Versioni i parë i këtij projekti, ndërsa funksiononte në parim, kishte një numër defektesh të cilat duheshin rregulluar. Së pari nuk më pëlqeu kutia, kështu që e zëvendësova me një tjetër. Së dyti th
Arduino Gjetja: 4 hapa
Arduino Gjetja: Kjo është puna ime Arduino. Kjo është një makinë që mund të më ndihmojë të gjej gjërat e mia kur zgjohem. Kur shtyp butonin, drita do të ndryshojë dhe dritat do të rrotullohen në një model
B MNI DISHOBARDIN DIGJITAL TUAJ T B BAZUAR GPS TUAJ P FORR MOTORIKC EBIKE DHE ELEKTRIKE: 13 hapa
BAKJ DASHBOARDIN DIGJITAL TUAJ TAS BASHKUAR GPS P FORR EBIKE DHE MOTORCIK ELE ELEKTRIKE: TI GJITHY Këtë herë kam dalë me një udhëzues të ri me ekran të pavarur, si dhe regjistrues duke përdorur ekranin arduino mega 2560 dhe Nextion Lcd Dhe për qëllime të përcjelljes, ju gjithashtu mund të regjistroni fjalitë NMEA në sdcard dhe natyrisht projekt
Gjetja e telekomandës së humbur të televizorit me Arduino dhe Bluetooth: 5 hapa
Gjetja e një telekomande të humbur të televizorit me Arduino & Bluetooth: Gjetja e një qarku të televizorit të humbur në distancë shumë të thjeshtë dhe kodi është kaq i thjeshtë, thjesht përdorni Arduino Nano me modul Bluetooth dhe zile të vogël me përforcues të baterisë nga 3.7v në 5v, dhe kam krijuar një aplikacion në MIT App Inventor, * mund të lidheni