Мазмұны:

GPS көмегімен өз жолыңызды табу: 9 қадам
GPS көмегімен өз жолыңызды табу: 9 қадам

Бейне: GPS көмегімен өз жолыңызды табу: 9 қадам

Бейне: GPS көмегімен өз жолыңызды табу: 9 қадам
Бейне: ШҚО-да ұрланған жылқы табыны GPS құрылғысының көмегімен табылды 2024, Қараша
Anonim
GPS көмегімен өз жолыңызды табу
GPS көмегімен өз жолыңызды табу

GPS деректерін түсінуге және қолдануға арналған жылдам жаттығу

  • Қажетті уақыт: 2 сағат
  • Құны: 75-150 доллар

Өндірушілер үшін жоғары сапалы геокеңістіктік деректерді электроника жобаларына енгізу өте арзан болды. Соңғы бірнеше жылда GPS (Global Positioning System) қабылдағыш модульдері әлдеқайда алуан түрлі, қуатты және Arduino, PIC, Teensy және Raspberry Pi сияқты даму тақталарымен оңай біріктірілді. Егер сіз GPS айналасында құрылуды ойласаңыз, сіз бастау үшін жақсы уақытты таңдадыңыз.

1 -қадам: Бұл қалай жұмыс істейді

GPS модулі - бұл спутниктер паркі арқылы белгілі жиіліктерде таратылатын сигналдарды өңдейтін шағын радио қабылдағыш. Бұл спутниктер Жердің айналасында шамамен айналмалы орбитада айналады, өте төмен орналасқан жер мен сағат туралы мәліметтерді береді. Егер жердегі қабылдағыш осы спутниктерді жеткілікті түрде «көре» алатын болса, ол олардың көмегімен өзінің орналасқан жері мен биіктігін есептей алады.

GPS хабарламасы келгенде, ресивер алдымен оның жіберілу уақытын тексереді, ол жіберілген уақытты біледі. Кеңістіктегі радио толқынының жылдамдығы белгілі тұрақты (c) болғандықтан, қабылдағыш сигналдың жүріп өткен қашықтықты анықтау үшін хабар тарату мен қабылдау уақытын салыстыра алады. Ол төрт немесе одан да көп белгілі спутниктерден қашықтықты анықтағаннан кейін, өз орнын есептеу - 3D триангуляциясының қарапайым мәселесі. Бірақ мұны тез және дәл орындау үшін қабылдағыш бір уақытта 20 -ға дейін деректер ағынының сандарын біртіндеп қысқартуға қабілетті болуы керек. GPS жүйесі Жердің кез келген жерінде қолдануға жарамды екенін жариялағандықтан, жүйе кемінде төрт жерсеріктің болуын қамтамасыз етуі керек. - жақсырақ - жер шарының кез келген нүктесінен барлық уақытта көрінеді. Қазіргі уақытта биіктігі 20 000 км сирек бұлтта мұқият хореографиялық биді орындайтын 32 GPS спутнигі бар.

2 -қадам: Жанкүйерлік факт

GPS Эйнштейннің салыстырмалылық теориясынсыз жұмыс істей алмайды, өйткені Жердің гравитациялық өрісіндегі уақыт кеңеюінен орбиталық атомдық сағаттар күн сайын алатын 38 микросекундқа өтемақы төленуі керек.

3 -қадам: Жұмысты бастау

Бастау
Бастау

Сіздің жобаңыз қандай болса да, GPS біріктіру оңай. Көптеген қабылдағыш модульдер қарапайым сериялық протоколмен байланысады, сондықтан егер сіз контроллер тақтасында қосалқы сериялық портты таба алсаңыз, физикалық қосылым үшін бірнеше сым қажет. Тіпті болмаса да, контроллерлердің көпшілігі кездейсоқ түйреуіштерге қосылу үшін қолдануға болатын эмуляцияланған «бағдарламалық қамтамасыз ету» сериялық режимін қолдайды.

Жаңадан бастаушылар үшін Adafruit Ultimate GPS Breakout модулі жақсы таңдау болып табылады. Нарықта көптеген бәсекеге қабілетті өнімдер бар, бірақ Ultimate-бұл ұсақ тесіктері бар, ақылы бағамен берік орындаушы, олар нан пісіруге оңай қосылады.

Алдымен жер мен қуатты қосыңыз. Arduino терминінде бұл GND микроконтроллерінің біреуін GND модуліне, ал +5В түйреуішті VIN модуліне қосу дегенді білдіреді. Деректерді беруді басқару үшін модульдің TX және RX түйреуіштерін Arduino -ға қосу қажет. Мен осы мақсат үшін Arduino 2 (TX) және 3 (RX) түйреуіштерін ерікті түрде таңдаймын, дегенмен 0 және 1 түйреуіштер «аппараттық сериялық порт» немесе UART ретінде пайдалануға арналған. Не үшін? Мен AVR-дің төмен деңгейлі процессорларындағы жалғыз UART-ты ысырап еткім келмейді. Arduino UART борттық USB коннекторына қатты қосылады, мен оны жөндеу үшін компьютерге қосылып тұрғанды ұнатамын.

4 -қадам: Деректер ағынындағы саусақ

Деректер ағынындағы саусақ
Деректер ағынындағы саусақ

Қуатты қолданған сәтте GPS модулі TX желісінде мәтіндік деректердің бөліктерін жібере бастайды. Ол әлі бір спутникті көрмеуі мүмкін, оның ішінде «түзету» бар, бірақ деректер краны бірден қосылады, және оның шығатыны қызықты. Біздің бірінші қарапайым эскиз (төменде) бұл өңделмеген деректерді көрсетуден басқа ештеңе жасамайды.

#қосыңыз #RXPin 2 анықтаңыз

#TXPin 3 анықтаңыз#GPSBaud 4800 анықтаңыз

#desole ConsoleBaud 115200

// GPS deviceSoftwareSerial ss (RXPin, TXPin) сериялық қосылымы;

жарамсыз орнату () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS мысалы 1»);

Serial.println («GPS модулі арқылы берілетін NMEA деректерін көрсету.»);

Serial.println («Микал Харт»); Serial.println ();

}

бос цикл ()

{if (ss.available ()> 0) // Әр таңба келген сайын…

Serial.write (ss.read ()); // … оны консольге жазыңыз

}

ЕСКЕРТПЕ: Эскизде қабылдау түйреуіші (RXPin) 2 деп анықталады, дегенмен біз бұрын (TX) түйреуіш 2 -істікшеге қосылатынын айтқан болатынбыз. Бұл жиі шатасудың көзі болып табылады. RXPin - бұл Arduino тұрғысынан қабылдау түйіні (RX). Әрине, ол модульдің (TX) түйреуішіне қосылуы керек және керісінше.

Бұл эскизді жүктеп, Serial Monitor -ды 115, 200 bod ашыңыз. Егер бәрі жұмыс істеп тұрса, сіз үтірмен бөлінген мәтін жолдарының тығыз, шексіз ағынын көресіз. Әрқайсысы абзацтың басындағы екінші суретке ұқсайды.

Бұл ерекше жолдар NMEA сөйлемдері деп аталады, сондықтан бұл форматты Ұлттық теңіз электроникасы қауымдастығы ойлап тапқан. NMEA осы сөйлемдердің санын маңызды (орналасуы мен уақыты) эзотерикалыққа дейін (спутниктік сигналдың шуылға қатынасы, магниттік дисперсия және т.б.) дейінгі навигациялық деректер үшін анықтайды. Өндірушілер қабылдағыштар сөйлемнің қай түрін қолданатыны туралы біркелкі емес, бірақ GPRMC өте маңызды. Сіздің модуль түзетуді алғаннан кейін, сіз осы GPRMC сөйлемдерінің әділ санын көресіз.

5 -қадам: Өзіңізді табу

Шикі модуль шығысын сіздің бағдарламаңыз қолдана алатын ақпаратқа айналдыру маңызды емес. Бақытымызға орай, мұны сіз үшін жасай алатын бірнеше керемет кітапханалар бар. Лимор Фридтің танымал Adafruit GPS кітапханасы - егер сіз олардың соңғы үзілісін қолдансаңыз. Ол Ultimate -ге ғана тән мүмкіндіктерді қосу үшін жазылған (мысалы, ішкі деректерді тіркеу) және өзіне қоңырау мен ысқырықты қосады. Менің сүйікті талдау кітапханасы - және мен, әрине, мүлдем бейтараппын - мен жазған кітап TinyGPS ++. Мен оны жан -жақты, қуатты, қысқаша және қолдануға ыңғайлы етіп жасадым. Оны айналдыру үшін алайық.

6 -қадам: TinyGPS ++ көмегімен кодтау

Бағдарламашы тұрғысынан TinyGPS ++ пайдалану өте қарапайым:

1) gps нысанын жасаңыз.

2) Модульден келген әрбір таңбаны gps.encode () көмегімен объектіге бағыттаңыз.

3) Егер сіз өзіңіздің орныңызды, биіктігіңізді немесе уақытты немесе күнді білуіңіз керек болса, gps объектісін сұраңыз.

#қосу #қосу

#RXPin 2 анықтаңыз

#TXPin 3 анықтаңыз

#анықта GPSBaud 4800

#desole ConsoleBaud 115200

// GPS deviceSoftwareSerial ss (RXPin, TXPin) сериялық қосылымы;

// TinyGPS ++ нысаны

TinyGPSPlus GPS;

жарамсыз орнату () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS мысалы 2»);

Serial.println («TinyGPS ++ көмегімен қарапайым трекер.»);

Serial.println («Микал Харт»);

Serial.println ();

}

void loop () {

// Егер GPS -тен қандай да бір таңба келген болса, /

/ оларды TinyGPS ++ нысанына жіберіңіз

while (ss.available ()> 0)

gps.encode (ss.read ());

// Жаңа орын мен биіктікті көрсетейік

// олардың әрқайсысы жаңартылған кезде

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

{

Serial.print («Орналасқан жері:»);

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

Serial.print («,»);

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

Serial.print («Биіктік:»);

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

}

}

Біздің екінші қосымша үнемі талдауға көмектесу үшін TinyGPS ++ көмегімен қабылдағыштың орналасқан жері мен биіктігін көрсетеді. Нақты құрылғыда сіз бұл деректерді SD картасына тіркей аласыз немесе оны СКД экранында көрсете аласыз. Кітапхананы алып, FindingYourself.ino эскизін салыңыз (жоғарыда). Кітапхананы әдеттегідей Arduino кітапханалары қалтасына орнатыңыз. Эскизді Arduino -ға жүктеп, Serial Monitor -ды 115, 200 -ден ашыңыз. Сіз нақты уақытта сіздің орналасқан жеріңіз бен биіктігіңіздің жаңартылғанын көресіз. Сіз қай жерде екеніңізді дәл білу үшін ендік/бойлық координаттарының бір бөлігін Google картасына қойыңыз. Енді ноутбукті қосып, серуендеуге немесе көлікке барыңыз. (Бірақ көзіңізді жолда ұстауды ұмытпаңыз!)

7 -қадам: «Төртінші өлшем»

біз GPS-ті кеңістіктегі орынмен байланыстыратын болсақ та, бұл спутниктер уақыт пен уақыт белгілерін жіберетінін ұмытпаңыз. Орташа GPS сағаты секундтың он миллионнан біріне дәл келеді, ал теориялық шегі одан да жоғары. Сізге уақытты қадағалау үшін сіздің жобаңыз қажет болса да, GPS модулі ең арзан және қарапайым шешім болуы мүмкін.

FindingYourself.ino-ны өте дәл сағатқа айналдыру үшін соңғы бірнеше жолды келесідей өзгертіңіз:

егер (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, «Уақыт%02d:%02d:%02d», gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

8 -қадам: өз жолыңды табу

Сіздің жолыңызды табу
Сіздің жолыңызды табу

Біздің үшінші және соңғы қосымшамыз - «түзу жүру» немесе «солға қарай бұру» сияқты қарапайым мәтіндік нұсқауларды қолдана отырып, пайдаланушыны тағайындалған жерге жетелейтін 100 -ден аз код жолымен оқылатын TinyGPS ++ эскизін жазуға арналған жеке тапсырманың нәтижесі.

#қосу #қосу

#RXPin 2 анықтаңыз

#TXPin 3 анықтаңыз

#анықта GPSBaud 4800

#desole ConsoleBaud 115200

// GPS deviceSoftwareSerial ss (RXPin, TXPin) сериялық қосылымы;

// TinyGPS ++ нысаны TinyGPSPlus gps;

белгісіз ұзақ lastUpdateTime = 0;

#EIFFEL_LAT 48.85823 анықтаңыз#EIFFEL_LNG анықтаңыз 2.29438

/* Бұл мысалда адамды (немесе дронды) межелі жерге бағыттау үшін курс пен қашықтықты қалай қолдануға болатынын көрсететін негізгі жүйе көрсетілген. Бұл жер - Эйфель мұнарасы. Қажетіне қарай өзгертіңіз

Латын/ұзын координатаны алудың ең оңай жолы-Google Maps (maps.google.com) мекен-жайын тінтуірдің оң жақ түймесімен басып, «Мұнда не бар?». Бұл нақты мәндерді іздеу жолағына енгізеді

*/

жарамсыз орнату () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println («GPS мысалы 3»);

Serial.println («Толық емес нұсқаулық жүйесі»);

Serial.println («Микал Харт»);

Serial.println ();

}

void loop () {

// Егер GPS -тен қандай да бір таңба келген болса, // оларды TinyGPS ++ нысанына жіберу кезінде (ss.available ()> 0) gps.encode (ss.read ());

// Әр 5 секунд сайын жаңартып отырыңыз

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

Serial.println ();

// Біздің қазіргі мәртебемізді орнатыңыз

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;

// жөндеу Serial.print («ҚАТЕЛДІРУ: 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 ());

// Баратын жерінен 20 метр қашықтықта? Біз осындамыз

егер (қашықтықToDestination <= 20.0)

{Serial.println («ҚҰТТЫҚТАУ: Сіз келдіңіз!»);

шығу (1);

}

Serial.print («DISTANCE:»); Serial.print (distanceToDestination);

Serial.println («баратын метр.»);

Serial.print («НҰСҚАУ:»);

// Бір орында тұрсыз ба? Тек қай бағытта жүру керектігін көрсетіңіз

егер (gps.speed.kmph () <2.0)

{

Serial.print («Бас»);

Serial.print (directionToDestination);

Serial.println («.»);

қайтару;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println («Тура алға!»);

әйтпесе (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println («Шамалы солға қарай.»);

әйтпесе (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println («Шамалы оңға қарай.»);

әйтпесе (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println («Солға бұрылу.»);

әйтпесе (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println («Оңға бұрылу.»);

басқа

Serial.println («Толығымен айналдырыңыз.»);

}

}

Әр 5 секунд сайын код TinyGPS ++ courseTo () әдісін қолдана отырып, пайдаланушының орналасқан жері мен бағытын (жүру бағытын) түсіреді және мойынтіректі (межелі жерге қарай) есептейді. Екі векторды салыстыру төменде көрсетілгендей тура немесе бұрылуды жалғастыру туралы ұсыныс тудырады.

FindingYourWay.ino (жоғарыда) нобайын көшіріп, Arduino IDE -ге қойыңыз. Мақсатты 1 км немесе 2 км қашықтықта орнатыңыз, эскизді Arduino -ға жүктеңіз, оны ноутбукте іске қосыңыз және ол сізді сол жерге бағыттайтынын біліңіз. Бірақ одан да маңыздысы - кодты зерттеп, оның қалай жұмыс істейтінін түсіну.

9 -қадам: Әрі қарай жүріңіз

GPS -тің шығармашылық әлеуеті орасан зор. Мен жасаған ең қанағаттанарлық нәрселердің бірі-бұл тек алдын ала бағдарламаланған бір жерде ашылатын GPS қосылған жұмбақ қорабы. Егер сіздің жәбірленуші қазынаны ішіне құлыптағысы келсе, ол бұл құпия жердің қайда екенін анықтап, қорапты сол жерге әкелуі керек. Алғашқы жобаның әйгілі идеясы-бұл Транс-Пеннин соқпағымен жүрген жаяу жүрушінің биіктігін минуттық күйі мен биіктігін тіркейтін тіркеу құрылғысы. Немесе зұлым балалардың көлігіне жабысатын DEA агенттерінің жасырын магниттік іздеушілерінің бірі туралы не деуге болады? Екеуі де мүмкін және оларды салу қызықты болар еді, бірақ мен сізді Amazon -да сатып алуға болатын нәрселерден гөрі кеңірек ойлануға шақырамын. Бұл үлкен әлем. Мүмкіндігінше алыс және кең жүріңіз.

Ұсынылған: