Სარჩევი:

იპოვეთ თქვენი გზა GPS– ით: 9 ნაბიჯი
იპოვეთ თქვენი გზა GPS– ით: 9 ნაბიჯი

ვიდეო: იპოვეთ თქვენი გზა GPS– ით: 9 ნაბიჯი

ვიდეო: იპოვეთ თქვენი გზა GPS– ით: 9 ნაბიჯი
ვიდეო: ძმამ დას iphone 6 უყიდა 2024, ივლისი
Anonim
იპოვეთ თქვენი გზა GPS– ით
იპოვეთ თქვენი გზა GPS– ით

სწრაფი ვარჯიში GPS მონაცემების გაგებისა და გამოყენებისათვის

  • საჭირო დრო: 2 საათი
  • ღირებულება: $ 75-150

შემქმნელთათვის, საკმაოდ იაფი გახდა მაღალი ხარისხის გეოსივრცული მონაცემების ჩართვა ელექტრონიკის პროექტებში. და ბოლო რამდენიმე წლის განმავლობაში, GPS (გლობალური პოზიციონირების სისტემა) მიმღების მოდულები გაიზარდა ბევრად უფრო მრავალფეროვანი, ძლიერი და ადვილად ინტეგრირებული განვითარების დაფებთან, როგორიცაა Arduino, PIC, Teensy და Raspberry Pi. თუ თქვენ ფიქრობთ GPS– ის გარშემო მშენებლობაზე, თქვენ შეარჩიეთ კარგი დრო დასაწყებად.

ნაბიჯი 1: როგორ მუშაობს

GPS მოდული არის პატარა რადიო მიმღები, რომელიც ამუშავებს ცნობილ სიხშირეზე გადაცემულ სიგნალებს თანამგზავრების ფლოტით. ეს თანამგზავრები დედამიწის გარშემო ტრიალებენ უხეშად წრიულ ორბიტაზე, უკიდურესად ზუსტ პოზიციებსა და საათის მონაცემებს გადასცემენ ქვემოთ მიწას. თუ დედამიწაზე მიმღებ მიმღებს შეუძლია „დაინახოს“ამ თანამგზავრების საკმარისი რაოდენობა, მას შეუძლია გამოიყენოს ისინი საკუთარი მდებარეობისა და სიმაღლის გამოსათვლელად.

როდესაც GPS შეტყობინება მოდის, მიმღები ჯერ ამოწმებს მის მაუწყებლობის დროის ნიშნულს, რომ ნახოთ როდის გაიგზავნა. იმის გამო, რომ რადიოტალღის სიჩქარე სივრცეში არის ცნობილი მუდმივი (გ), მიმღებს შეუძლია შეადაროს მაუწყებლობისა და მიღების დრო სიგნალის გავლილი მანძილის დასადგენად. მას შემდეგ რაც მან დაადგინა მანძილი ოთხი ან მეტი ცნობილი თანამგზავრიდან, საკუთარი პოზიციის გამოთვლა არის 3D სამკუთხედის საკმაოდ მარტივი პრობლემა. მაგრამ ამის სწრაფად და ზუსტად გასაკეთებლად, მიმღებს უნდა შეეძლოს ერთდროულად 20 -მდე მონაცემთა ნაკადის ციფრების დაჭრა. მას შემდეგ, რაც GPS სისტემას აქვს გამოქვეყნებული მიზანი, რომ ის ყველგან გამოსაყენებელია დედამიწაზე, სისტემამ უნდა უზრუნველყოს, რომ სულ მცირე ოთხი თანამგზავრი - სასურველია მეტი - ხილულია ნებისმიერ დროს დედამიწის ყველა წერტილიდან. ამჟამად არის 32 GPS თანამგზავრი, რომლებიც ასრულებენ ზედმიწევნით ქორეოგრაფიულ ცეკვას იშვიათი ღრუბელში, 20 ათასი კილომეტრის სიმაღლეზე.

ნაბიჯი 2: გულშემატკივართა ფაქტი

GPS ვერ იმუშავებს აინშტაინის ფარდობითობის თეორიის გარეშე, რადგან ანაზღაურება უნდა მოხდეს 38 მიკროწამისთვის, რომელსაც ბრუნავს ატომური საათები დედამიწის გრავიტაციულ ველზე გაფართოების შედეგად.

ნაბიჯი 3: დაწყება

Ვიწყებთ
Ვიწყებთ

როგორიც არ უნდა იყოს თქვენი პროექტი, GPS ინტეგრირება მარტივია. მიმღების მოდულების უმეტესობა კომუნიკაციას უწევს პირდაპირ სერიულ პროტოკოლს, ასე რომ, თუ თქვენ შეგიძლიათ იპოვოთ სათადარიგო სერიული პორტი თქვენს კონტროლერის დაფაზე, მას უნდა დასჭირდეს მხოლოდ ერთი მავთული ფიზიკური კავშირის დასამყარებლად. და მაშინაც კი, თუ არა, კონტროლერების უმეტესობა მხარს უჭერს იმიტირებულ "პროგრამული უზრუნველყოფის" სერიულ რეჟიმს, რომლის გამოყენებაც შეგიძლიათ თვითნებურ ქინძისთავებთან დასაკავშირებლად.

დამწყებთათვის, Adafruit– ის Ultimate GPS Breakout მოდული კარგი არჩევანია. ბაზარზე ბევრი კონკურენტუნარიანი პროდუქტია, მაგრამ Ultimate არის კარგი შემსრულებელი გონივრულ ფასად, დიდი ხვრელებით, რომელთა ადვილად შედუღება ან დაკავშირება პურის დაფაზე.

პირველი, დააკავშირეთ მიწა და ძალა. არდუინოს თვალსაზრისით, ეს ნიშნავს ერთ -ერთი მიკროკონტროლერის GND ქინძისთავის დაკავშირებას მოდულის GND- თან და +5V პინს მოდულის VIN- თან. მონაცემთა გადაცემის მართვისთვის, თქვენ ასევე უნდა დააკავშიროთ მოდულის TX და RX ქინძისთავები Arduino– სთან. მე ვაპირებ Arduino- ს ქინძისთავების 2 (TX) და 3 (RX) თვითნებურად შერჩევას ამ მიზნით, მიუხედავად იმისა, რომ 0 და 1 ქინძისთავები სპეციალურად შექმნილია როგორც "ტექნიკური სერიული პორტი" ან UART. რატომ? იმიტომ, რომ მე არ მინდა დავკარგო ერთადერთი UART ამ დაბალი დონის AVR პროცესორები. Arduino– ს UART მყარად არის დაკავშირებული საბორტო USB კონექტორთან და მე მომწონს მისი დაკავშირება კომპიუტერთან გამართვის მიზნით.

ნაბიჯი 4: თითი მონაცემთა ნაკადში

თითი მონაცემთა ნაკადში
თითი მონაცემთა ნაკადში

როგორც კი ენერგიას გამოიყენებთ, GPS მოდული იწყებს ტექსტური მონაცემების გაგზავნას მის TX ხაზზე. შეიძლება მას ჯერ კიდევ არ უნახავს არც ერთი თანამგზავრი, მით უმეტეს აქვს „გამოსწორება“, მაგრამ მონაცემთა ონკანი მაშინვე ჩნდება და საინტერესოა ნახოთ რა გამოვა. ჩვენი პირველი მარტივი ესკიზი (ქვემოთ) არაფერს აკეთებს, გარდა ამ დაუმუშავებელი მონაცემების ჩვენებისა.

#ჩართეთ #განსაზღვრეთ RXPin 2

#განსაზღვრეთ TXPin 3#განსაზღვრეთ GPSBaud 4800

#განსაზღვრეთ ConsoleBaud 115200

// სერიული კავშირი GPS მოწყობილობასთან პროგრამული უზრუნველყოფა სერიული ss (RXPin, TXPin);

void setup () {

Serial.begin (ConsoleBaud);

ss. დასაწყისი (GPSBaud);

Serial.println ("GPS მაგალითი 1");

Serial.println ("GPS მოდულით გადაცემული ნედლეული NMEA მონაცემების ჩვენება.");

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

}

ბათილი მარყუჟი ()

{if (ss.available ()> 0) // თითოეული პერსონაჟის მოსვლისას…

Serial.write (ss.read ()); //… ჩაწერე კონსოლზე

}

შენიშვნა: ესკიზი განსაზღვრავს მიმღების პინს (RXPin), როგორც 2, მიუხედავად იმისა, რომ ადრე ვთქვით, რომ გადამცემი (TX) პინი დაკავშირებული იქნება პინ 2 -თან. ეს არის დაბნეულობის გავრცელებული წყარო. RXPin არის მიმღები პინი (RX) არდუინოს თვალსაზრისით. ბუნებრივია, ის უნდა იყოს დაკავშირებული მოდულის გადამცემი (TX) პინთან და პირიქით.

ატვირთეთ ესკიზი და გახსენით სერიული მონიტორი 115,200 baud– ზე. თუ ყველაფერი მუშაობს, თქვენ უნდა ნახოთ მკვრივი, გაუთავებელი ნაკადის მძიმით გამოყოფილი ტექსტური სტრიქონები. თითოეული მათგანი იქნება მეორე სურათის მსგავსი აბზაცის დასაწყისში.

ეს გამორჩეული სტრიქონები ცნობილია როგორც 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

#განსაზღვრეთ ConsoleBaud 115200

// სერიული კავშირი GPS მოწყობილობასთან პროგრამული უზრუნველყოფა სერიული ss (RXPin, TXPin);

// TinyGPS ++ ობიექტი

TinyGPSPlus GPS;

void setup () {

Serial.begin (ConsoleBaud);

ss. დასაწყისი (GPSBaud);

Serial.println ("GPS მაგალითი 2");

Serial.println ("მარტივი ტრეკერი TinyGPS ++ - ის გამოყენებით.");

Serial.println ("Mikal Hart");

Serial.println ();

}

ბათილი მარყუჟი () {

// თუ რომელიმე პერსონაჟი ჩამოვიდა 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 ბარათზე ან აჩვენოთ იგი LCD– ზე. აიღეთ ბიბლიოთეკა და ესკიზეთ FindingYourself.ino (ზემოთ). დააინსტალირეთ ბიბლიოთეკა, როგორც ყოველთვის, Arduino ბიბლიოთეკების საქაღალდეში. ატვირთეთ ესკიზი თქვენს Arduino– ში და გახსენით სერიული მონიტორი 115, 200 baud– ზე. თქვენ უნდა ნახოთ თქვენი მდებარეობისა და სიმაღლის განახლება რეალურ დროში. იმის სანახავად, თუ სად დგახართ, ჩასვით ზოგიერთი გრძედი/გრძედის კოორდინატი Google Maps- ში. ახლა შეაერთეთ თქვენი ლეპტოპი და წადით სასეირნოდ ან დისკზე. (მაგრამ დაიმახსოვრე, რომ გზაზე გქონდეს თვალი!)

ნაბიჯი 7: "მეოთხე განზომილება"

მიუხედავად იმისა, რომ ჩვენ GPS ასოცირდება ადგილმდებარეობასთან სივრცეში, არ უნდა დაგვავიწყდეს, რომ ეს თანამგზავრები ასევე გადასცემენ დროსა და მონაცემთა ნიშნებს. საშუალო GPS საათი ზუსტია წამის მეათე მემილიონედემდე და თეორიული ზღვარი კიდევ უფრო მაღალია. მაშინაც კი, თუ თქვენ გჭირდებათ თქვენი პროექტი დროის თვალყურის დევნისთვის, GPS მოდული შეიძლება იყოს ყველაზე იაფი და მარტივი გამოსავალი.

FindingYourself.ino სუპერ ზუსტ საათად გადაქცევისთვის, უბრალოდ შეცვალეთ ბოლო რამდენიმე სტრიქონი ასე:

if (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "დრო არის%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

ნაბიჯი 8: იპოვნეთ თქვენი გზა

შენი გზის პოვნა
შენი გზის პოვნა

ჩვენი მესამე და ბოლო განაცხადი არის პირადი გამოწვევის შედეგი, რომ დავწეროთ წაკითხული TinyGPS ++ ესკიზი, 100 -ზე ნაკლებ კოდის კოდში, რომელიც მომხმარებელს მიუძღვის დანიშნულების ადგილამდე მარტივი ტექსტური ინსტრუქციის გამოყენებით, როგორიცაა "შეინარჩუნე სწორი" ან "გადაუხვიე მარცხნივ".

#ჩართეთ #ჩართეთ

#განსაზღვრეთ RXPin 2

#განსაზღვრეთ TXPin 3

#განსაზღვრეთ GPSBaud 4800

#განსაზღვრეთ ConsoleBaud 115200

// სერიული კავშირი GPS მოწყობილობასთან პროგრამული უზრუნველყოფა სერიული ss (RXPin, TXPin);

// TinyGPS ++ ობიექტი TinyGPSPlus gps;

ხელმოუწერელი longUpdateTime = 0;

#განსაზღვრეთ EIFFEL_LAT 48.85823#განსაზღვრეთ EIFFEL_LNG 2.29438

/* ეს მაგალითი გვიჩვენებს ძირითად ჩარჩოს იმის შესახებ, თუ როგორ შეიძლება გამოიყენოთ კურსი და მანძილი, რომ მიგიყვანოთ ადამიანი (ან დრონი) დანიშნულების ადგილას. დანიშნულების ადგილი არის ეიფელის კოშკი. შეცვალეთ როგორც საჭიროა

Lat/long კოორდინატის მისაღებად უმარტივესი გზაა Google Maps- ში (maps.google.com) დანიშნულების ადგილის მარჯვენა ღილაკით და აირჩიეთ "რა არის აქ?". ეს აყენებს ზუსტ მნიშვნელობებს საძიებო ველში

*/

void setup () {

Serial.begin (ConsoleBaud);

ss. დასაწყისი (GPSBaud);

Serial.println ("GPS მაგალითი 3");

Serial.println ("არც თუ ისე ყოვლისმომცველი სახელმძღვანელო სისტემა");

Serial.println ("Mikal Hart");

Serial.println ();

}

ბათილი მარყუჟი () {

// თუ რაიმე სიმბოლო ჩამოვიდა GPS– დან, // გაუგზავნეთ ისინი TinyGPS ++ ობიექტს სანამ (ss.available ()> 0) gps.encode (ss.read ());

// ყოველ 5 წამში გააკეთეთ განახლება

if (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = მილი ();

Serial.println ();

// დაადგინეთ ჩვენი ამჟამინდელი სტატუსი

ორმაგი მანძილი ToDestination = TinyGPSPlus:: distanceBetween

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

ორმაგი courseToDestination = TinyGPSPlus:: courseTo

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

const char *directionToDestination = TinyGPSPlus:: კარდინალური (courseToDestination);

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

// გამართვა Serial.print ("DEBUG: Course2Dest:");

Serial.print (courseToDestination);

Serial.print ("კურსი:");

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 კმ მანძილზე, ატვირთეთ ესკიზი თქვენს არდუინოში, გაუშვით ლეპტოპზე და ნახეთ მიგიყვანთ თუ არა იქ. მაგრამ რაც მთავარია, შეისწავლეთ კოდი და გაიგეთ როგორ მუშაობს იგი.

ნაბიჯი 9: წინ წასვლა

GPS– ის შემოქმედებითი პოტენციალი უზარმაზარია. ერთ – ერთი ყველაზე დამაკმაყოფილებელი რამ, რაც კი ოდესმე გამიკეთებია, იყო GPS– ით ჩართული თავსატეხი, რომელიც იხსნება მხოლოდ ერთ წინასწარ დაპროგრამებულ ადგილას. თუ თქვენს მსხვერპლს სურს საგანძურის ჩაკეტვა შიგნით, მან უნდა გაარკვიოს სად არის ეს საიდუმლო ადგილმდებარეობა და ფიზიკურად მიიტანოს ყუთი იქ. პოპულარული პროექტის პირველი იდეა არის ხე-ტყის დამუშავების მოწყობილობა, რომელიც აღრიცხავს წუთ წუთს პოზიციასა და სიმაღლეზე, ვთქვათ, მთამსვლელებზე, რომლებიც დადიან ტრანს-პენინის ბილიკზე. ან რა შეიძლება ითქვას ერთ -ერთ ეშმაკურ მაგნიტურ ტრეკერზე, DEA– ს აგენტებზე Breaking Bad– ში ჯოხების მანქანებზე ჯოხი? ორივე სავსებით შესაძლებელია და ალბათ სახალისო იქნებოდა მშენებლობა, მაგრამ მე გირჩევთ უფრო ფართოდ იფიქროთ, იმ ნივთების მიღმა, რომლის ყიდვაც უკვე შეგიძლიათ ამაზონზე. ეს არის დიდი სამყარო. იხეტიალეთ რაც შეიძლება შორს და ფართოდ.

გირჩევთ: