Πίνακας περιεχομένων:

Βρείτε τον δρόμο σας με GPS: 9 βήματα
Βρείτε τον δρόμο σας με GPS: 9 βήματα

Βίντεο: Βρείτε τον δρόμο σας με GPS: 9 βήματα

Βίντεο: Βρείτε τον δρόμο σας με GPS: 9 βήματα
Βίντεο: Πως να ΜΗΝ χάσεις ΤΙΠΟΤΑ ΞΑΝΑ ⚪️ | AirTags Review Greek 2024, Νοέμβριος
Anonim
Βρείτε τον δρόμο σας με GPS
Βρείτε τον δρόμο σας με GPS

Μια γρήγορη άσκηση για την κατανόηση και την εφαρμογή δεδομένων GPS

  • Απαιτούμενος χρόνος: 2 ρες
  • Κόστος: $ 75 - $ 150

Για τους κατασκευαστές, έχει γίνει αρκετά φθηνό να ενσωματωθούν γεω-χωρικά δεδομένα υψηλής ποιότητας σε έργα ηλεκτρονικής. Και τα τελευταία χρόνια, οι μονάδες δέκτη GPS (Global Positioning System) έγιναν πολύ πιο διαφορετικές, ισχυρές και εύκολες στην ενσωμάτωσή τους σε πίνακες ανάπτυξης όπως το Arduino, το PIC, το Teensy και το Raspberry Pi. Αν σκεφτόσασταν να δημιουργήσετε γύρω από το GPS, έχετε επιλέξει μια καλή στιγμή για να ξεκινήσετε.

Βήμα 1: Πώς λειτουργεί

Η μονάδα GPS είναι ένας μικροσκοπικός δέκτης ραδιοφώνου που επεξεργάζεται σήματα που εκπέμπονται σε γνωστές συχνότητες από ένα στόλο δορυφόρων. Αυτοί οι δορυφόροι στροβιλίζονται γύρω από τη Γη σε περίπου κυκλικές τροχιές, μεταδίδοντας εξαιρετικά ακριβή δεδομένα θέσης και ρολογιού στο έδαφος παρακάτω. Εάν ο δέκτης στη γη μπορεί να "δει" αρκετά από αυτούς τους δορυφόρους, μπορεί να τους χρησιμοποιήσει για να υπολογίσει τη δική του τοποθεσία και υψόμετρο.

Όταν φτάνει ένα μήνυμα GPS, ο δέκτης επιθεωρεί πρώτα τη χρονική σήμανση της εκπομπής του για να δει πότε στάλθηκε. Επειδή η ταχύτητα ενός ραδιοκύματος στο διάστημα είναι γνωστή σταθερά (γ), ο δέκτης μπορεί να συγκρίνει τους χρόνους μετάδοσης και λήψης για να καθορίσει την απόσταση που έχει διανύσει το σήμα. Μόλις καθορίσει την απόστασή του από τέσσερις ή περισσότερους γνωστούς δορυφόρους, ο υπολογισμός της δικής του θέσης είναι ένα αρκετά απλό πρόβλημα της τρισδιάστατης τριγωνοποίησης. Αλλά για να γίνει αυτό γρήγορα και με ακρίβεια, ο δέκτης πρέπει να είναι σε θέση να τσακίζει με ευκολία αριθμούς από έως και 20 ροές δεδομένων ταυτόχρονα. Δεδομένου ότι το σύστημα GPS έχει δημοσιευμένο στόχο να είναι χρήσιμο παντού στη Γη, το σύστημα πρέπει να διασφαλίσει ότι τουλάχιστον τέσσερις δορυφόροι - κατά προτίμηση περισσότερα - είναι ορατά ανά πάσα στιγμή από κάθε σημείο του πλανήτη. Αυτή τη στιγμή υπάρχουν 32 δορυφόροι GPS που εκτελούν έναν σχολαστικά χορογραφημένο χορό σε ένα αραιό σύννεφο ύψους 20.000 χιλιομέτρων.

Βήμα 2: Fan Fact

Το GPS δεν θα μπορούσε να λειτουργήσει χωρίς τη θεωρία της σχετικότητας του Αϊνστάιν, καθώς πρέπει να γίνει αντιστάθμιση για τα 38 μικροδευτερόλεπτα που κερδίζουν καθημερινά τα ατομικά ρολόγια σε τροχιά από τη διαστολή στο βαρυτικό πεδίο της Γης.

Βήμα 3: Ξεκινώντας

Ξεκινώντας
Ξεκινώντας

Όποιο και αν είναι το έργο σας, η ενσωμάτωση του GPS είναι απλή. Οι περισσότερες μονάδες δέκτη επικοινωνούν με ένα απλό σειριακό πρωτόκολλο, οπότε αν μπορείτε να βρείτε μια εφεδρική σειριακή θύρα στον πίνακα του ελεγκτή σας, θα χρειαστεί μόνο μια χούφτα καλωδίων για να πραγματοποιήσετε τη φυσική σύνδεση. Και ακόμη κι αν όχι, οι περισσότεροι ελεγκτές υποστηρίζουν μια σειριακή λειτουργία προσομοίωσης "λογισμικού" που μπορείτε να χρησιμοποιήσετε για να συνδεθείτε σε αυθαίρετες ακίδες.

Για αρχάριους, η ενότητα Ultimate GPS Breakout του Adafruit είναι μια καλή επιλογή. Υπάρχουν πολλά ανταγωνιστικά προϊόντα στην αγορά, αλλά το Ultimate είναι μια καλή απόδοση σε λογική τιμή, με μεγάλες διαμπερείς οπές που είναι εύκολο να κολληθούν ή να συνδεθούν σε ένα breadboard.

Πρώτον, συνδέστε τη γείωση και την τροφοδοσία. Με όρους Arduino, αυτό σημαίνει τη σύνδεση μίας από τις ακίδες GND του μικροελεγκτή στο GND της μονάδας και τον πείρο +5V στο VIN της μονάδας. Για να διαχειριστείτε τη μεταφορά δεδομένων, πρέπει επίσης να συνδέσετε τις καρφίτσες TX και RX της μονάδας στο Arduino. Θα επιλέξω αυθαίρετα τις καρφίτσες Arduino 2 (TX) και 3 (RX) για το σκοπό αυτό, παρόλο που οι ακίδες 0 και 1 έχουν σχεδιαστεί ειδικά για χρήση ως "σειριακή θύρα υλικού" ή UART. Γιατί; Επειδή δεν θέλω να σπαταλήσω το μόνο UART που διαθέτουν αυτοί οι χαμηλού επιπέδου επεξεργαστές AVR. Το UART του Arduino είναι συνδεδεμένο με την ενσωματωμένη υποδοχή USB και μου αρέσει να το διατηρώ συνδεδεμένο στον υπολογιστή μου για εντοπισμό σφαλμάτων.

Βήμα 4: Ένα δάχτυλο στο ρεύμα δεδομένων

Ένα δάχτυλο στο Datastream
Ένα δάχτυλο στο Datastream

Μόλις εφαρμόσετε ισχύ, μια μονάδα GPS αρχίζει να στέλνει κομμάτια δεδομένων κειμένου στη γραμμή TX. Μπορεί να μην βλέπει ακόμη έναν μόνο δορυφόρο, πολύ περισσότερο να έχει μια "διόρθωση", αλλά η βρύση δεδομένων ανοίγει αμέσως και είναι ενδιαφέρον να δούμε τι θα βγει. Το πρώτο μας απλό σκίτσο (παρακάτω) δεν κάνει παρά να εμφανίζει αυτά τα ανεπεξέργαστα δεδομένα.

#include #define RXPin 2

#define TXPin 3#define GPSBaud 4800

#define ConsoleBaud 115200

// Η σειριακή σύνδεση με τη συσκευή GPSSoftwareSerial ss (RXPin, TXPin)

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Παράδειγμα GPS 1");

Serial.println ("Εμφάνιση των ακατέργαστων δεδομένων NMEA που μεταδίδονται από μονάδα GPS.");

Serial.println ("του Mikal Hart"); Serial.println ();

}

κενός βρόχος ()

{if (ss.available ()> 0) // Καθώς φτάνει κάθε χαρακτήρας…

Serial.write (ss.read ()); //… γράψτε το στην κονσόλα

}

ΣΗΜΕΙΩΣΗ: Το σκίτσο ορίζει τον ακροδέκτη λήψης (RXPin) ως 2, παρόλο που είπαμε νωρίτερα ότι ο πείρος μετάδοσης (TX) θα συνδεθεί με τον ακροδέκτη 2. Αυτή είναι μια κοινή πηγή σύγχυσης. Το RXPin είναι ο πείρος λήψης (RX) από την άποψη του Arduino. Φυσικά, πρέπει να συνδεθεί με τον πείρο μετάδοσης της μονάδας (TX) και αντίστροφα.

Ανεβάστε αυτό το σκίτσο και ανοίξτε το Serial Monitor στα 115, 200 baud. Εάν όλα λειτουργούν, θα πρέπει να δείτε μια πυκνή, ατελείωτη ροή συμβολοσειρών κειμένου που διαχωρίζονται με κόμμα. Το καθένα θα μοιάζει με τη δεύτερη εικόνα στην αρχή της παραγράφου.

Αυτές οι διακριτικές χορδές είναι γνωστές ως προτάσεις NMEA, οι οποίες ονομάζονται επειδή η μορφή εφευρέθηκε από την Εθνική Ένωση Θαλάσσιων Ηλεκτρονικών. Το NMEA καθορίζει μια σειρά από αυτές τις προτάσεις για δεδομένα πλοήγησης που κυμαίνονται από το ουσιαστικό (τοποθεσία και ώρα), έως το εσωτερικό (λόγος δορυφορικού σήματος προς θόρυβο, μαγνητική διακύμανση κ.λπ.). Οι κατασκευαστές είναι ασυνεπείς ως προς τους τύπους προτάσεων που χρησιμοποιούν οι δέκτες τους, αλλά το GPRMC είναι απαραίτητο. Μόλις διορθωθεί η μονάδα σας, θα πρέπει να δείτε έναν δίκαιο αριθμό αυτών των προτάσεων GPRMC.

Βήμα 5: Βρίσκοντας τον εαυτό σας

Δεν είναι ασήμαντο να μετατρέψετε την ακατέργαστη έξοδο μονάδας σε πληροφορίες που μπορεί πραγματικά να χρησιμοποιήσει το πρόγραμμά σας. Ευτυχώς, υπάρχουν μερικές εξαιρετικές βιβλιοθήκες που είναι ήδη διαθέσιμες για να το κάνουν αυτό για εσάς. Η δημοφιλής βιβλιοθήκη Adafruit GPS της Limor Fried είναι μια βολική επιλογή εάν χρησιμοποιείτε το Ultimate breakout. Είναι γραμμένο για να ενεργοποιεί λειτουργίες μοναδικές για το Ultimate (όπως η καταγραφή εσωτερικών δεδομένων) και προσθέτει μερικά δικά του καμπανάκια και σφυρίγματα. Η αγαπημένη μου βιβλιοθήκη ανάλυσης, ωστόσο - και εδώ είμαι φυσικά εντελώς αμερόληπτος - είναι αυτή που έγραψα και ονομάζεται TinyGPS ++. Το σχεδίασα για να είναι περιεκτικό, ισχυρό, περιεκτικό και εύκολο στη χρήση. Ας το πάρουμε για μια περιστροφή.

Βήμα 6: Κωδικοποίηση με TinyGPS ++

Από την άποψη του προγραμματιστή, η χρήση του TinyGPS ++ είναι πολύ απλή:

1) Δημιουργήστε ένα αντικείμενο gps.

2) Δρομολογήστε κάθε χαρακτήρα που φτάνει από τη μονάδα στο αντικείμενο χρησιμοποιώντας το gps.encode ().

3) Όταν πρέπει να γνωρίζετε τη θέση ή το υψόμετρο ή την ώρα ή την ημερομηνία, απλά ρωτήστε το αντικείμενο gps.

#συμπεριλάβω #συμπεριλάβω

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Η σειριακή σύνδεση με τη συσκευή GPSSoftwareSerial ss (RXPin, TXPin)

// Το αντικείμενο TinyGPS ++

TinyGPSPlus gps;

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Παράδειγμα GPS 2");

Serial.println ("Ένας απλός ιχνηλάτης χρησιμοποιώντας TinyGPS ++.");

Serial.println ("του Mikal Hart");

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 ή να τα εμφανίσετε σε μια οθόνη LCD. Πιάστε τη βιβλιοθήκη και σχεδιάστε το FindingYourself.ino (παραπάνω). Εγκαταστήστε τη βιβλιοθήκη, ως συνήθως, στο φάκελο βιβλιοθηκών Arduino. Ανεβάστε το σκίτσο στο Arduino σας και ανοίξτε το Serial Monitor στα 115, 200 baud. Θα πρέπει να δείτε την τοποθεσία και το υψόμετρο να ενημερώνονται σε πραγματικό χρόνο. Για να δείτε ακριβώς πού βρίσκεστε, επικολλήστε μερικές από τις συντεταγμένες γεωγραφικού πλάτους/γεωγραφικού μήκους που προκύπτουν στους Χάρτες Google. Συνδέστε τώρα το φορητό υπολογιστή σας και κάντε μια βόλτα ή μια οδήγηση. (Αλλά θυμηθείτε να έχετε τα μάτια σας στο δρόμο!)

Βήμα 7: Η "ΤΕΤΑΡΤΗ ΔΙΑΣΤΑΣΗ"

Αν και συσχετίζουμε το GPS με τη θέση στο διάστημα, μην ξεχνάτε ότι αυτοί οι δορυφόροι μεταδίδουν επίσης χρονικές σφραγίδες. Το μέσο ρολόι GPS είναι ακριβές στο ένα δέκατο εκατομμυριοστό του δευτερολέπτου και το θεωρητικό όριο είναι ακόμη υψηλότερο. Ακόμα κι αν χρειάζεστε το έργο σας μόνο για να παρακολουθείτε τον χρόνο, μια μονάδα GPS μπορεί να είναι η φθηνότερη και ευκολότερη λύση.

Για να μετατρέψετε το FindingYourself.ino σε ένα εξαιρετικά ακριβές ρολόι, απλώς αλλάξτε τις τελευταίες γραμμές όπως αυτή:

εάν (gps.time.isUpdated ()) {

char buf [80];

sprintf (buf, "The time is%02d:%02d:%02d", gps.time.hour (), gps.time.minute (), gps.time.second ()); Serial.println (buf);

}

Βήμα 8: Βρείτε τον δρόμο σας

Βρίσκοντας τον δρόμο σας
Βρίσκοντας τον δρόμο σας

Η τρίτη και τελευταία εφαρμογή μας είναι το αποτέλεσμα μιας προσωπικής πρόκλησης να γράψουμε ένα ευανάγνωστο σκίτσο TinyGPS ++, σε λιγότερες από 100 γραμμές κώδικα, το οποίο θα οδηγούσε τον χρήστη σε έναν προορισμό χρησιμοποιώντας απλές οδηγίες κειμένου, όπως «παραμείνετε ευθεία» ή «στρίψτε αριστερά».

#συμπεριλάβω #συμπεριλάβω

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// Η σειριακή σύνδεση με τη συσκευή GPSSoftwareSerial ss (RXPin, TXPin)

// Το αντικείμενο TinyGPS ++ TinyGPSPlus gps;

unsigned long lastUpdateTime = 0;

#define EIFFEL_LAT 48.85823#define EIFFEL_LNG 2.29438

/* Αυτό το παράδειγμα δείχνει ένα βασικό πλαίσιο για το πώς μπορείτε να χρησιμοποιήσετε πορεία και απόσταση για να καθοδηγήσετε ένα άτομο (ή ένα drone) σε έναν προορισμό. Αυτός ο προορισμός είναι ο Πύργος του Άιφελ. Αλλάξτε το όπως απαιτείται

Ο ευκολότερος τρόπος για να λάβετε τη συντεταγμένη lat/long είναι να κάνετε δεξί κλικ στον προορισμό στους Χάρτες Google (maps.google.com) και να επιλέξετε "Τι υπάρχει εδώ;". Αυτό βάζει τις ακριβείς τιμές στο πλαίσιο αναζήτησης

*/

void setup () {

Serial.begin (ConsoleBaud);

ss.begin (GPSBaud);

Serial.println ("Παράδειγμα GPS 3");

Serial.println ("Ένα όχι και τόσο ολοκληρωμένο σύστημα καθοδήγησης")

Serial.println ("από τον Mikal Hart");

Serial.println ();

}

void loop () {

// Εάν κάποιοι χαρακτήρες έχουν φτάσει από το GPS, // στείλτε τους στο αντικείμενο TinyGPS ++ ενώ (ss.available ()> 0) gps.encode (ss.read ());

// Κάθε 5 δευτερόλεπτα, κάντε μια ενημέρωση

εάν (millis () - lastUpdateTime> = 5000)

{

lastUpdateTime = millis ();

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:: cardinal (courseToDestination);

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

// εντοπισμός σφαλμάτων 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 ());

// Σε απόσταση 20 μέτρων από τον προορισμό; Ήταν εδώ

εάν (απόστασηToDestination <= 20,0)

{Serial.println ("ΣΥΓΧΑΡΗΤΗΡΙΑ: arrivedρθατε!");

έξοδος (1)?

}

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

Serial.println ("μέτρα για να πάει.");

Serial.print ("ΟΔΗΓΙΕΣ:");

// Μένοντας ακίνητος? Απλώς υποδείξτε ποια κατεύθυνση πρέπει να πάτε

εάν (gps.speed.kmph () <2,0)

{

Serial.print ("Head");

Serial.print (directionToDestination);

Serial.println (".");

ΕΠΙΣΤΡΟΦΗ;

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Συνεχίστε ευθεία!");

else if (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("Veer ελαφρώς προς τα αριστερά.");

else if (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("Veer ελαφρώς προς τα δεξιά.");

else if (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("Στρίψτε αριστερά.");

else if (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("Στρίψτε δεξιά.");

αλλού

Serial.println ("Γυρίστε εντελώς.");

}

}

Κάθε 5 δευτερόλεπτα ο κωδικός καταγράφει την τοποθεσία και την πορεία του χρήστη (κατεύθυνση ταξιδιού) και υπολογίζει το ρουλεμάν (κατεύθυνση προς τον προορισμό), χρησιμοποιώντας τη μέθοδο TinyGPS ++ courseTo (). Η σύγκριση των δύο διανυσμάτων δημιουργεί μια πρόταση να συνεχίσετε ευθεία ή να στρίψετε, όπως φαίνεται παρακάτω.

Αντιγράψτε το σκίτσο FindingYourWay.ino (παραπάνω) και επικολλήστε το στο Arduino IDE. Ορίστε έναν προορισμό 1χλμ ή 2χλμ μακριά, ανεβάστε το σκίτσο στο Arduino σας, εκτελέστε το στο φορητό σας υπολογιστή και δείτε αν θα σας καθοδηγήσει εκεί. Αλλά το πιο σημαντικό, μελετήστε τον κώδικα και κατανοήστε πώς λειτουργεί.

Βήμα 9: Προχωρώντας παραπέρα

Το δημιουργικό δυναμικό του GPS είναι τεράστιο. Ένα από τα πιο ικανοποιητικά πράγματα που έφτιαξα ποτέ ήταν ένα κουτί παζλ με δυνατότητα GPS που ανοίγει μόνο σε μια προ-προγραμματισμένη τοποθεσία. Εάν το θύμα σας θέλει να πάρει τον θησαυρό κλειδωμένο μέσα, πρέπει να καταλάβει πού βρίσκεται αυτή η μυστική τοποθεσία και να φέρει φυσικά το κουτί εκεί. Μια δημοφιλής πρώτη ιδέα έργου είναι ένα είδος συσκευής καταγραφής που καταγράφει τη στιγμή λεπτό τη θέση και το υψόμετρο, ας πούμε, ενός πεζοπόρου που περπατά στο Trans-Pennine Trail. What τι γίνεται με έναν από αυτούς τους ύπουλους μαγνητικούς ιχνηλάτες που οι πράκτορες της DEA στο Breaking Bad κολλάνε στα αυτοκίνητα των κακών; Και τα δύο είναι απολύτως εφικτά και πιθανότατα θα ήταν διασκεδαστικά, αλλά σας ενθαρρύνω να σκεφτείτε πιο εκτεταμένα, πέρα από πράγματα που μπορείτε ήδη να αγοράσετε στο Amazon. Είναι ένας μεγάλος κόσμος εκεί έξω. Περιπλανηθείτε όσο πιο μακριά μπορείτε.

Συνιστάται: