- Απαιτούμενα στοιχεία:
- Διάγραμμα κυκλώματος και επεξήγηση: -
- Λήψη δεδομένων τοποθεσίας από το GPS:
- Βήματα για διασύνδεση GPS με μικροελεγκτή PIC: -
- Επεξήγηση κώδικα:
Το GPS είναι η σύντομη μορφή του Global Positioning System. Είναι ένα σύστημα που παρέχει ακριβή υψόμετρο, γεωγραφικό πλάτος, μήκος, χρόνο UTC και πολλές περισσότερες πληροφορίες, οι οποίες λαμβάνονται από 2, 3, 4 ή περισσότερους δορυφόρους. Για να διαβάσουμε δεδομένα από το GPS, χρειαζόμαστε κάποιον Μικροελεγκτή και έχουμε ήδη διασυνδέσει το GPS με το Arduino και με το Raspberry Pi.
Επιλέξαμε το G7020 GPS module το οποίο κατασκευάζεται από το U-blox. Θα λάβουμε το μήκος και το πλάτος μιας συγκεκριμένης θέσης από τον δορυφόρο και θα εμφανίσουμε το ίδιο σε μια οθόνη LCD 16x2 χαρακτήρων. Εδώ λοιπόν θα συνδέσουμε το GPS με τον μικροελεγκτή PIC16F877A από μικροτσίπ.
Απαιτούμενα στοιχεία:
- Πακέτο Pic16F877A - PDIP40
- Πίνακας ψωμιού
- Pickit-3
- Προσαρμογέας 5V
- LCD JHD162A
- Μονάδα GPS uBLOX-G7020
- Καλώδια για σύνδεση περιφερειακών.
- 4.7k Αντίσταση
- 10k ποτ
- 20mHz κρύσταλλο
- 2 τεμ κεραμικοί πυκνωτές 33pF
Διάγραμμα κυκλώματος και επεξήγηση: -
Η οθόνη LCD 16x2 χαρακτήρων συνδέεται μέσω μικροελεγκτή PIC16F877A, στον οποίο τα RB0, RB1, RB2 συνδέονται αντίστοιχα με τον ακροδέκτη LCD που είναι RS, R / W και E., D6, D7. Η οθόνη LCD είναι συνδεδεμένη σε λειτουργία 4bit ή nibble. Μάθετε περισσότερα σχετικά με τη διασύνδεση της οθόνης LCD με τον μικροελεγκτή PIC.
Ένας κρυσταλλικός ταλαντωτής 20MHz με δύο κεραμικούς πυκνωτές 33pF συνδεδεμένους σε ακίδες OSC1 και OSC2. Θα παρέχει σταθερή συχνότητα ρολογιού 20 MHz στον μικροελεγκτή.
uBlox-G7020 μονάδα GPS, λήψη και μετάδοση δεδομένων χρησιμοποιώντας UART. Το PIC16F877A αποτελείται από ένα πρόγραμμα οδήγησης USART μέσα στο τσιπ, θα λάβουμε δεδομένα από τη μονάδα GPS από το USART, οπότε θα πραγματοποιηθεί διασταύρωση από τον ακροδέκτη μικροελεγκτή Rx στον ακροδέκτη Tx του GPS και τον ακροδέκτη λήψης USART συνδεδεμένο μέσω του ακροδέκτη μετάδοσης GPS.
Το uBlox-G7020 έχει κωδικό χρώματος για τις καρφίτσες. Ο θετικός πείρος ή ο πείρος 5V είναι σε κόκκινο χρώμα, ο αρνητικός ή ο πείρος GND είναι σε μαύρο χρώμα και ο πείρος μετάδοσης είναι σε μπλε χρώμα.
Έχω συνδέσει όλα αυτά στο breadboard.
Λήψη δεδομένων τοποθεσίας από το GPS:
Ας δούμε πώς να διασυνδέσετε το GPS χρησιμοποιώντας το USART και να δούμε το αποτέλεσμα σε LCD 16x2 χαρακτήρων.
Η Ενότητα θα μεταδώσει δεδομένα σε πολλές συμβολοσειρές με 9600 Baud Rate. Εάν χρησιμοποιήσουμε ένα τερματικό UART με ρυθμό 9600 Baud, θα δούμε τα δεδομένα που λαμβάνονται από το GPS.
Η μονάδα GPS στέλνει τα δεδομένα θέσης παρακολούθησης σε πραγματικό χρόνο σε μορφή NMEA (δείτε το παραπάνω στιγμιότυπο οθόνης). Η μορφή NMEA αποτελείται από διάφορες προτάσεις, στις οποίες δίνονται τέσσερις σημαντικές προτάσεις παρακάτω. Περισσότερες λεπτομέρειες σχετικά με την πρόταση NMEA και τη μορφή δεδομένων της μπορείτε να βρείτε εδώ.
- $ GPGGA: Παγκόσμιο σύστημα εντοπισμού θέσης δεδομένων
- $ GPGSV: Προβολή δορυφόρων GPS
- $ GPGSA: GPS DOP και ενεργοί δορυφόροι
- $ GPRMC: Συνιστώμενα ελάχιστα συγκεκριμένα δεδομένα GPS / Transit
Μάθετε περισσότερα σχετικά με τα δεδομένα GPS και τις συμβολοσειρές NMEA εδώ.
Αυτά είναι τα δεδομένα που λαμβάνονται από το GPS όταν συνδέονται με ρυθμό baud 9600.
$ GPRMC, 141848.00, A, 2237.63306, N, 08820.86316, E, 0.553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0.553, N, 1.024, K, A * 27 $ GPGGA, 141848.00, 2237.63306, N, 08820.86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820,86316, E, 141848,00, Α, Α * 65
Όταν χρησιμοποιούμε μονάδα GPS για παρακολούθηση οποιασδήποτε τοποθεσίας, χρειαζόμαστε μόνο συντεταγμένες και μπορούμε να το βρούμε σε συμβολοσειρά $ GPGGA. Μόνο η συμβολοσειρά $ GPGGA (Global Positioning System Fix Data) χρησιμοποιείται συνήθως σε προγράμματα και άλλες συμβολοσειρές αγνοούνται.
GPGGA $, 141848,00,2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Ποια είναι η έννοια αυτής της γραμμής;
Η έννοια αυτής της γραμμής είναι: -
1. Η συμβολοσειρά ξεκινά πάντα με το σύμβολο "$"
2. Το GPGGA σημαίνει δεδομένα καθολικής τοποθέτησης συστήματος
3. "," Το κόμμα δείχνει τον διαχωρισμό μεταξύ δύο τιμών
4. 141848.00: ώρα GMT ως 14 (hr): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, Β: Γεωγραφικό πλάτος 22 (βαθμός) 37 (λεπτά) 63306 (δευτ.) Βόρεια
6. 08820.86316, E: Γεωγραφικό μήκος 088 (βαθμός) 20 (λεπτά) 86316 (δευτ.) Ανατολικά
7. 1: Διόρθωση ποσότητας 0 = μη έγκυρα δεδομένα, 1 = έγκυρα δεδομένα, 2 = διόρθωση DGPS
8. 03: Αριθμός δορυφόρων που προβάλλονται αυτήν τη στιγμή.
9. 1.0: HDOP
10. 2.56, M: Υψόμετρο (ύψος πάνω από την επιφάνεια της θάλασσας σε μέτρο)
11. 1.9, M: Ύψος Geoids
12. * 74: άθροισμα ελέγχου
Επομένως, χρειαζόμαστε τα Νο. 5 και Νο. 6 για να συλλέξουμε πληροφορίες σχετικά με την τοποθεσία της ενότητας ή, όπου βρίσκεται.
Βήματα για διασύνδεση GPS με μικροελεγκτή PIC: -
- Ορίστε τις διαμορφώσεις του μικροελεγκτή που περιλαμβάνουν διαμόρφωση Oscillator.
- Ρυθμίστε την επιθυμητή θύρα για LCD συμπεριλαμβανομένου του μητρώου TRIS.
- Συνδέστε τη μονάδα GPS στον μικροελεγκτή χρησιμοποιώντας το USART.
- Αρχικοποιήστε το σύστημα USART σε λειτουργία συνεχούς λήψης, με ρυθμό baud 9600 και LCD με λειτουργία 4bit.
- Λάβετε δύο πίνακες χαρακτήρων ανάλογα με το μήκος του πλάτους και το μήκος.
- Λάβετε ένα bit χαρακτήρα κάθε φορά και ελέγξτε αν ξεκινά από $ ή όχι.
- Εάν το $ Receive τότε είναι μια συμβολοσειρά, πρέπει να ελέγξουμε το GPGGA, αυτά τα 5 γράμματα και το κόμμα.
- Εάν είναι GPGGA, τότε θα παραλείψουμε τον χρόνο και θα αναζητήσουμε το γεωγραφικό πλάτος και μήκος, θα αποθηκεύσουμε το γεωγραφικό πλάτος και μήκος σε δύο χαρακτήρες έως ότου N (Βόρεια) και Ε (Ανατολικά) δεν ληφθούν.
- Θα εκτυπώσουμε τη σειρά σε LCD.
- Διαγράψτε τον πίνακα.
Επεξήγηση κώδικα:
Ας δούμε τον κωδικό γραμμή προς γραμμή. Οι πρώτες λίγες γραμμές είναι για τη ρύθμιση bit διαμόρφωσης που εξηγήθηκαν στο προηγούμενο σεμινάριο, οπότε τα παραλείπω για τώρα. Ο πλήρης κώδικας δίνεται στο τέλος αυτού του σεμιναρίου.
Αυτές οι πέντε γραμμές χρησιμοποιούνται για τη συμπερίληψη αρχείων κεφαλίδας βιβλιοθήκης, lcd.h και το eusart.h είναι για LCD και USART αντίστοιχα. Και το xc.h είναι για το αρχείο κεφαλίδας μικροελεγκτή.
#περιλαμβάνω
Στην κενή συνάρτηση () , το system_init () ; Η λειτουργία χρησιμοποιείται για την προετοιμασία των LCD και USART.
Κενό κεντρικό (άκυρο) { TRISB = 0x00; // Ορισμός ως σύστημα εξόδου_init ();
Το lcd_init (); και EUSART_Intialize (); καλείται από τις δύο βιβλιοθήκες lcd.h και eusart.h
void system_init (void) { lcd_init (); // Αυτό θα προετοιμάσει το lcd EUSART1_Initialize (); // Αυτό θα ξεκινήσει το Eusart }
Κατά τη διάρκεια του βρόχου, σπάζουμε τη συμβολοσειρά GPGGA για να λάβουμε τη συντεταγμένη γεωγραφικού μήκους και πλάτους. Λαμβάνουμε ένα bit κάθε φορά και το συγκρίνουμε με μεμονωμένους χαρακτήρες που υπάρχουν στη συμβολοσειρά GPGGA.
Σπάζουμε τους κωδικούς που θα λάβουμε: -
incomer_data = EUSART1_Διαβάστε (); // Ελέγξτε τη συμβολοσειρά "$ GPGGA," / * ------------------------------ Βρείτε βήμα προς βήμα την εύρεση της γραμμής GPGGA- --------------------------- * / if (incomer_data == '$') {// Η πρώτη δήλωση των δεδομένων GPS ξεκινά με ένα $ sign incomer_data = EUSART1_Read (); // Εάν το πρώτο αν γίνει αληθινό, τότε η επόμενη φάση εάν (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); εάν (incomer_data == 'G') { incomer_data = EUSART1_Read (); εάν (incomer_data == 'A') { incomer_data = EUSART1_Read (); εάν (incomer_data == ',') {// πρώτα, ελήφθη incomer_data = EUSART1_Διαβάστε (); // Σε αυτό το στάδιο ολοκληρώθηκε ο τελικός έλεγχος, βρέθηκε το GPGGA.
Χρησιμοποιώντας αυτόν τον κωδικό παραλείπουμε την ώρα UTC.
ενώ (incomer_data! = ',') {// παραλείποντας το GMT Time incomer_data = EUSART1_Read (); }
Αυτός ο κωδικός προορίζεται για την αποθήκευση δεδομένων γεωγραφικού πλάτους και μήκους στη σειρά χαρακτήρων.
incomer_data = EUSART1_Διαβάστε (); γεωγραφικό πλάτος = incomer_data; ενώ (incomer_data! = ',') { για (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); γεωγραφικό πλάτος = incomer_data; // Αποθηκεύστε τα δεδομένα Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { για (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); γεωγραφικό μήκος = incomer_data; // Αποθηκεύστε τα δεδομένα γεωγραφικού μήκους } }
Τέλος, εκτυπώσαμε μήκος και πλάτος στην οθόνη LCD.
array_count = 0; lcd_com (0x80); // Επιλογή γραμμής 1 LCD ενώ (array_count <12) {// Τα δεδομένα της σειράς Latitude είναι 11 ψηφία lcd_data (γεωγραφικό πλάτος). // Εκτυπώστε τον πίνακα δεδομένων Latitude_count ++; } array_count = 0; lcd_com (0xC0); // Lcd γραμμή δύο επιλογή ενώ (array_count <13) {// Η σειρά δεδομένων μήκους είναι 12 ψηφία lcd_data (γεωγραφικό μήκος); // Εκτυπώστε τον πίνακα δεδομένων Longitude_count ++; }
Με αυτόν τον τρόπο μπορούμε να συνδέσουμε τη μονάδα GPS με τον μικροελεγκτή PIC για να λάβουμε το γεωγραφικό πλάτος και μήκος της τρέχουσας θέσης.
Παρακάτω δίνονται πλήρη αρχεία κώδικα και κεφαλίδας.