INHOUDSOPGAWE:
- Stap 1: Hoe dit werk
- Stap 2: Aanhangerfeit
- Stap 3: Aan die gang
- Stap 4: 'n Toe in die Datastream
- Stap 5: vind jouself
- Stap 6: Kodering met TinyGPS ++
- Stap 7: Die "VIERDE DIMENSIE"
- Stap 8: Vind jou weg
- Stap 9: Gaan verder
Video: Vind u pad met GPS: 9 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
'N Vinnige oefening om GPS -data te verstaan en toe te pas
- Tyd benodig: 2 uur
- Koste: $ 75 - $ 150
Vir vervaardigers is dit redelik goedkoop om geospatiale data van hoë gehalte in elektroniese projekte op te neem. En in die afgelope paar jaar het GPS -ontvanger -modules (Global Positioning System) baie meer divers, kragtig en maklik om te integreer met ontwikkelingsborde soos Arduino, PIC, Teensy en Raspberry Pi gegroei. As u daaraan gedink het om met GPS te bou, het u 'n goeie tyd gekies om aan die gang te kom.
Stap 1: Hoe dit werk
'N GPS -module is 'n klein radio -ontvanger wat seine verwerk wat op bekende frekwensies deur 'n vloot satelliete uitgesaai word. Hierdie satelliete wentel om die aarde in ongeveer sirkelvormige wentelbane en stuur uiters presiese posisie- en klokdata na die grond daaronder. As die aarde -ontvanger genoeg van hierdie satelliete kan "sien", kan dit dit gebruik om sy eie ligging en hoogte te bereken.
As 'n GPS -boodskap kom, inspekteer die ontvanger eers die uitsaaitydstempel om te sien wanneer dit gestuur is. Omdat die snelheid van 'n radiogolf in die ruimte 'n bekende konstante (c) is, kan die ontvanger uitsending- en ontvangstye vergelyk om die afstand wat die sein afgelê het, te bepaal. Sodra dit sy afstand van vier of meer bekende satelliete bepaal het, is die berekening van sy eie posisie 'n redelik eenvoudige probleem van 3D -triangulasie. Maar om dit vinnig en akkuraat te doen, moet die ontvanger in staat wees om getalle van tot 20 datastrome tegelyk te krimp. Aangesien die GPS -stelsel 'n gepubliseerde doelwit het om oral op aarde bruikbaar te wees, moet die stelsel verseker dat ten minste vier satelliete - verkieslik meer - is te alle tye sigbaar vanaf elke punt op die aarde. Daar is tans 32 GPS -satelliete wat 'n noukeurig gechoreografeerde dans uitvoer in 'n yl wolk van 20 000 kilometer hoog.
Stap 2: Aanhangerfeit
GPS kan nie werk sonder Einstein se relatiwiteitsteorie nie, want daar moet vergoed word vir die 38 mikrosekondes wat die atoomklokke elke dag kry weens tydsverruiming in die aarde se gravitasieveld.
Stap 3: Aan die gang
Wat ook al u projek, GPS is eenvoudig om te integreer. Die meeste ontvangermodules kommunikeer met 'n eenvoudige seriële protokol, dus as u 'n ekstra seriële poort op u beheerbord kan vind, moet dit net 'n handjievol drade neem om die fisiese verbinding te maak. En selfs al ondersteun dit nie, die meeste beheerders ondersteun 'n nagemaakte 'sagteware' seriële modus wat u kan gebruik om aan willekeurige penne te koppel.
Vir beginners is Adafruit se Ultimate GPS Breakout -module 'n goeie keuse. Daar is baie mededingende produkte op die mark, maar die Ultimate is 'n stewige kunstenaar teen 'n redelike prys, met groot deurgate wat maklik is om te soldeer of aan 'n broodbord te koppel.
Koppel eers grond en krag. In Arduino -terme beteken dit dat een van die GND -penne van die mikrobeheerder aan die GND van die module gekoppel word, en die +5V -pen aan die module se VIN. Om data -oordrag te bestuur, moet u ook die TX- en RX -penne van die module aan die Arduino koppel. Ek gaan willekeurig Arduino -penne 2 (TX) en 3 (RX) kies vir hierdie doel, alhoewel penne 0 en 1 spesifiek ontwerp is vir gebruik as 'n "hardeware -seriële poort" of UART. Waarom? Omdat ek nie die enigste UART wat hierdie lae-end AVR-verwerkers het, wil mors nie. Arduino se UART is met die USB-aansluiting aan boord verbind, en ek hou daarvan om dit aan my rekenaar gekoppel te hou vir ontfouting.
Stap 4: 'n Toe in die Datastream
Die oomblik dat u krag toepas, begin 'n GPS -module stukke teksdata op sy TX -lyn stuur. Dit sien moontlik nog nie 'n enkele satelliet nie, nog minder 'n 'oplossing', maar die datakraan kom dadelik aan, en dit is interessant om te sien wat uitkom. Ons eerste eenvoudige skets (hieronder) het niks anders as om hierdie onverwerkte data te vertoon nie.
#sluit #definieer RXPin 2 in
#definieer TXPin 3#definieer GPSBaud 4800
#definieer ConsoleBaud 115200
// Die reeksverbinding met die GPS -toestel SoftwareSerial ss (RXPin, TXPin);
ongeldige opstelling () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS -voorbeeld 1");
Serial.println ("Wys die rou NMEA -data wat deur die GPS -module gestuur word.");
Serial.println ("deur Mikal Hart"); Serial.println ();
}
leemte lus ()
{if (ss.available ()> 0) // Soos elke karakter kom …
Serial.write (ss.read ()); // … skryf dit aan die konsole
}
LET WEL: die skets definieer die ontvangspennetjie (RXPin) as 2, alhoewel ons vroeër gesê het dat die stuurpen (TX) met pen 2 gekoppel sou word. Dit is 'n algemene bron van verwarring. RXPin is die ontvangspeld (RX) vanuit die oogpunt van die Arduino. Uiteraard moet dit gekoppel wees aan die module se stuurpen (TX), en omgekeerd.
Laai hierdie skets op en maak Serial Monitor oop op 115, 200 baud. As alles werk, moet u 'n digte, eindelose stroom met komma-geskeide teksstringe sien. Elkeen sal iets soos die tweede prent aan die begin van die paragraaf lyk.
Hierdie kenmerkende snare staan bekend as NMEA -sinne, so genoem omdat die formaat uitgevind is deur die National Maritime Electronics Association. NMEA definieer 'n aantal van hierdie sinne vir navigasie data, wat wissel van die essensiële (ligging en tyd) tot die esoteriese (satellietsein-ruisverhouding, magnetiese variansie, ens.). Vervaardigers is nie in ooreenstemming oor watter sinsoorte hulle ontvangers gebruik nie, maar GPRMC is noodsaaklik. Sodra u module herstel is, behoort u 'n redelike aantal van hierdie GPRMC -sinne te sien.
Stap 5: vind jouself
Dit is nie triviaal om die uitset van die rou module te omskep in inligting wat u program eintlik kan gebruik nie. Gelukkig is daar al 'n paar wonderlike biblioteke beskikbaar om dit vir u te doen. Limor Fried se gewilde Adafruit GPS -biblioteek is 'n maklike keuse as u hul Ultimate breakout gebruik. Dit is geskryf om funksies wat uniek is aan die Ultimate (soos interne data -aanmelding) moontlik te maak en voeg 'n paar snaakse klokke en fluitjies van sy eie by. My gunsteling ontledingsbiblioteek - en hier is ek natuurlik heeltemal onbevooroordeeld - is die een wat ek geskryf het, TinyGPS ++. Ek het dit ontwerp om omvattend, kragtig, bondig en maklik te gebruik. Kom ons vat 'n draai.
Stap 6: Kodering met TinyGPS ++
Vanuit die oogpunt van die programmeerder is die gebruik van TinyGPS ++ baie eenvoudig:
1) Skep 'n voorwerp gps.
2) Lei elke karakter wat uit die module kom na die voorwerp met behulp van gps.encode ().
3) As u u posisie of hoogte of tyd of datum moet weet, moet u eenvoudig die GPS -voorwerp navraag doen.
#include #include
#definieer RXPin 2
#definieer TXPin 3
#definieer GPSBaud 4800
#definieer ConsoleBaud 115200
// Die reeksverbinding met die GPS -toestel SoftwareSerial ss (RXPin, TXPin);
// Die TinyGPS ++ - voorwerp
TinyGPSPlus gps;
ongeldige opstelling () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS -voorbeeld 2");
Serial.println ("'n Eenvoudige spoorsnyer wat TinyGPS ++ gebruik.");
Serial.println ("deur Mikal Hart");
Serial.println ();
}
leemte -lus () {
// As daar karakters van die GPS af kom, /
/ stuur dit na die TinyGPS ++ - voorwerp
terwyl (ss.available ()> 0)
gps.encode (ss.read ());
// Kom ons vertoon die nuwe ligging en hoogte
// wanneer een van hulle opgedateer is
as (gps.location.isUpdated () || gps.altitude.isUpdated ())
{
Serial.print ("Location:");
Serial.print (gps.location.lat (), 6);
Serial.print (",");
Serial.print (gps.location.lng (), 6);
Serial.print ("Hoogte:");
Serial.println (gps.altitude.meters ());
}
}
Ons tweede toepassing vertoon voortdurend die ligging en hoogte van die ontvanger, met behulp van TinyGPS ++ om te help met ontleding. Op 'n regte toestel kan u hierdie data op 'n SD -kaart aanmeld of op 'n LCD vertoon. Gryp die biblioteek en skets FindingYourself.ino (bo). Installeer die biblioteek, soos gewoonlik, in die gids Arduino biblioteke. Laai die skets op na u Arduino en maak Serial Monitor oop op 115, 200 baud. U moet u ligging en hoogte in real -time opdateer. Om presies te sien waar u staan, plak 'n paar van die resulterende breedtegraad/lengte -koördinate in Google Maps. Sluit nou u skootrekenaar aan en gaan stap of ry. (Maar onthou om u oë op die pad te hou!)
Stap 7: Die "VIERDE DIMENSIE"
Alhoewel ons GPS met ligging in die ruimte assosieer, moenie vergeet dat die satelliete ook tyd- en datastempels stuur nie. Die gemiddelde GPS-klok is akkuraat tot 'n tienmiljoenste van 'n sekonde, en die teoretiese limiet is selfs hoër. Selfs as u slegs u projek nodig het om tyd by te hou, is 'n GPS -module moontlik steeds die goedkoopste en maklikste oplossing.
Om FindingYourself.ino in 'n super-akkurate klok te verander, verander net die laaste paar reëls soos volg:
as (gps.time.isUpdated ()) {
char buf [80];
sprintf (buf, "Die tyd is%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);
}
Stap 8: Vind jou weg
Ons derde en laaste aansoek is die gevolg van 'n persoonlike uitdaging om 'n leesbare TinyGPS ++ skets in minder as 100 reëls kode te skryf, wat 'n gebruiker na 'n bestemming kan lei deur eenvoudige teksinstruksies soos 'hou reguit' of 'links weg'.
#include #include
#definieer RXPin 2
#definieer TXPin 3
#definieer GPSBaud 4800
#definieer ConsoleBaud 115200
// Die reeksverbinding met die GPS -toestel SoftwareSerial ss (RXPin, TXPin);
// Die TinyGPS ++ voorwerp TinyGPSPlus gps;
ongetekende lang lastUpdateTime = 0;
#definieer EIFFEL_LAT 48.85823#definieer EIFFEL_LNG 2.29438
/* Hierdie voorbeeld toon 'n basiese raamwerk vir hoe u koers en afstand kan gebruik om 'n persoon (of 'n hommeltuig) na 'n bestemming te lei. Hierdie bestemming is die Eiffeltoring. Verander dit soos benodig
Die maklikste manier om die lat/lang koördinaat te kry, is om met die rechtermuisknop op die bestemming in Google Maps (maps.google.com) te klik en "Wat is hier?" Te kies. Dit plaas die presiese waardes in die soekkassie
*/
ongeldige opstelling () {
Serial.begin (ConsoleBaud);
ss.begin (GPSBaud);
Serial.println ("GPS -voorbeeld 3");
Serial.println ("'n nie-so omvattende leidingstelsel");
Serial.println ("deur Mikal Hart");
Serial.println ();
}
leemte -lus () {
// As daar karakters van die GPS af kom, // stuur dit na die TinyGPS ++ - voorwerp terwyl (ss.available ()> 0) gps.encode (ss.read ());
// Maak elke 5 sekondes 'n opdatering
if (millis () - lastUpdateTime> = 5000)
{
lastUpdateTime = millis ();
Serial.println ();
// Stel ons huidige status vas
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;
// ontfout Serial.print ("DEBUG: Course2Dest:");
Serial.print (courseToDestination);
Serial.print ("CurCourse:");
Serial.print (gps.course.deg ());
Serial.print ("Dir2Dest:");
Serial.print (directionToDestination);
Serial.print ("RelCourse:");
Serial.print (courseChangeNeeded);
Serial.print ("CurSpd:");
Serial.println (gps.speed.kmph ());
// Binne 20 meter van bestemming? Was hier
as (distanceToDestination <= 20.0)
{Serial.println ("BAIE GELUK: U het gekom!");
uitgang (1);
}
Serial.print ("AFSTAND:"); Serial.print (distanceToDestination);
Serial.println ("meters te gaan.");
Serial.print ("INSTRUKSIE:");
// Stilstaan? Dui net aan watter kant toe
as (gps.speed.kmph () <2.0)
{
Serial.print ("kop");
Serial.print (directionToDestination);
Serial.println (".");
terugkeer;
}
if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Hou reguit vorentoe!");
anders as (courseChangeNeeded> = 315 && courseChangeNeeded <345)
Serial.println ("Veer effens na links.");
anders as (courseChangeNeeded> = 15 && courseChangeNeeded <45)
Serial.println ("Veer effens na regs.");
anders as (courseChangeNeeded> = 255 && courseChangeNeeded <315)
Serial.println ("Draai na links.");
anders as (courseChangeNeeded> = 45 && courseChangeNeeded <105)
Serial.println ("Draai na regs.");
anders
Serial.println ("Draai heeltemal om.");
}
}
Elke 5 sekondes vang die kode die gebruiker se ligging en koers (rigting) en bereken die peiling (rigting na die bestemming) met behulp van die TinyGPS ++ courseTo () -metode. Die vergelyking van die twee vektore gee 'n voorstel om reguit of draai te hou, soos hieronder getoon.
Kopieer die skets FindingYourWay.ino (hierbo) en plak dit in die Arduino IDE. Stel 'n bestemming op 1 km of 2 km weg, laai die skets op na u Arduino, voer dit op u skootrekenaar en kyk of dit u daarheen kan lei. Maar nog belangriker, bestudeer die kode en verstaan hoe dit werk.
Stap 9: Gaan verder
Die kreatiewe potensiaal van GPS is groot. Een van die mees bevredigende dinge wat ek ooit gemaak het, was 'n GPS-raaiselkas wat slegs op een vooraf geprogrammeerde plek oopmaak. As u slagoffer die skat binne wil sluit, moet sy uitvind waar die geheime plek is en die boks fisies daarheen bring. 'N Gewilde eerste projekidee is 'n soort aanmeldapparaat wat die posisie van minuut vir minuut en hoogte van byvoorbeeld 'n stapper wat die Trans-Pennine-roete loop, aanteken. Of wat van een van die skelm magnetiese spoorsnyers wat die DEA -agente in Breaking Bad op die karre se motors plak? Albei is heeltemal haalbaar, en dit sal waarskynlik lekker wees om dit te bou, maar ek moedig u aan om meer uitgebreid na te dink as wat u reeds op Amazon kan koop. Dit is 'n groot wêreld daar buite. Loop so ver as wat jy kan.
Aanbeveel:
Vind uit wanneer iemand 'n kamer binnegaan met behulp van radarsensor Xyc-wb-dc: 7 stappe
Vind uit wanneer iemand 'n kamer betree met behulp van Radarsensor Xyc-wb-dc: In hierdie tutoriaal leer ons hoe om uit te vind wanneer iemand 'n kamer binnegekom het met behulp van RTC-module, radarsensor xyc-wb-dc, OLED-skerm en arduino. demonstrasie video
Maak 'n eenvoudige robot uit dinge wat u in u huis kan vind (hotwheel -weergawe): 5 stappe
Maak 'n eenvoudige robot uit dinge wat u in u huis kan vind (weergawe hotwheel): hierdie instruksies sal u wys hoe u 'n warmwiel kan maak wat vanself werk en op dubbele A-batterye werk. U hoef slegs dinge te gebruik wat u waarskynlik in u huis kan vind. Let daarop dat hierdie robot waarskynlik nie presies reguit gaan nie, 'n
Die gebruik van Hope se borsuitbreiding om onvolledige tempelverordening in u stamboom te vind op gesinsondersoek: 11 stappe
Deur die borsuitbreiding van Hope te gebruik om onvolledige tempelverordeningswerk in u stamboom te vind op gesinsondersoek: Die doel van hierdie instruksies is om aan te toon hoe u u stamboom in Family Search kan soek na voorvaders met onvolledige tempelverordeningswerk met behulp van die Hope's Chest -uitbreiding. Die gebruik van Hope's Chest kan u soektog na onbevoegdheid aansienlik versnel
Vind 'n verlore TV -afstandsbediening met Arduino en Bluetooth: 5 stappe
Soek 'n verlore TV -afstandsbediening met Arduino en Bluetooth: vind 'n verlore televisie -afstandsbediening, 'n baie eenvoudige stroombaan, en die kode is so eenvoudig: ek gebruik slegs Arduino Nano met 'n Bluetooth -module en 'n klein zoemer met 'n batteryversterker van 3,7v tot 5v, en ek het 'n app gemaak in MIT App Inventor, * kan u
Vind winskopies met Froogle: 4 stappe
Vind winskopies met Froogle: FroogleFroogle-'n woordspeling op spaarsaamheid en Google is 'n draai by Google vir kamparatiewe inkopiedienste soos Mysimon en bizrate. Net soos die meeste ander Google -dienste, bied dit die geleentheid om gespesialiseerde aanlyninhoud te blaai en te soek, in hierdie geval