- Απαιτούμενα στοιχεία
- Λήψη δεδομένων τοποθεσίας από GPS
- Διάγραμμα κυκλώματος
- Βήματα για τη διασύνδεση GPS με τον μικροελεγκτή AVR
- Επεξήγηση κώδικα
Οι μονάδες GPS χρησιμοποιούνται ευρέως σε εφαρμογές ηλεκτρονικών για την παρακολούθηση της θέσης βάσει συντεταγμένων γεωγραφικού μήκους και πλάτους. Το σύστημα παρακολούθησης οχημάτων, το ρολόι GPS, το σύστημα ειδοποίησης ανίχνευσης ατυχημάτων, η πλοήγηση κυκλοφορίας, το σύστημα παρακολούθησης κ.λπ. είναι μερικά από τα παραδείγματα όπου η λειτουργικότητα του GPS είναι απαραίτητη. Το GPS παρέχει υψόμετρο, πλάτος, μήκος, ώρα UTC και πολλές άλλες πληροφορίες σχετικά με τη συγκεκριμένη τοποθεσία, οι οποίες λαμβάνονται από περισσότερους από έναν δορυφόρους. Για να διαβάσετε δεδομένα από το GPS, απαιτείται μικροελεγκτής, οπότε εδώ συνδέουμε τη μονάδα GPS με τον μικροελεγκτή AVR Atmega16 και εκτυπώνουμε το μήκος και το πλάτος στην οθόνη LCD 16x2.
Απαιτούμενα στοιχεία
- Atmega16 / 32
- Μονάδα GPS (uBlox Neo 6M GPS)
- Μακρύ σύρμα κεραίας
- LCD 16x2
- 2.2k Αντίσταση
- Πυκνωτής 1000uf
- Πυκνωτής 10uF
- Καλώδιο σύνδεσης
- LM7805
- DC Τζακ
- Προσαρμογέας 12v DC
- Μπάμπερτς
- PCB ή PCB γενικού σκοπού
Το Ublox Neo 6M είναι μια σειριακή μονάδα GPS που παρέχει λεπτομέρειες τοποθεσίας μέσω σειριακής επικοινωνίας. Έχει τέσσερις καρφίτσες.
Καρφίτσα |
Περιγραφή |
Vcc |
2.7 - Τροφοδοσία 5V |
Gnd |
Εδαφος |
TXD |
Διαβίβαση δεδομένων |
RXD |
Λήψη δεδομένων |
Η μονάδα GPS Ublox neo 6M είναι συμβατή με TTL και οι προδιαγραφές της δίνονται παρακάτω.
Καταγράψτε το χρόνο |
Cool start: 27s, Hot start: 1s |
Πρωτόκολλο επικοινωνίας |
ΝΜΕΑ |
Σειριακή επικοινωνία |
9600bps, 8 bit δεδομένων, 1 bit διακοπής, χωρίς ισοτιμία και χωρίς έλεγχο ροής |
Λειτουργικό ρεύμα |
45mA |
Λήψη δεδομένων τοποθεσίας από GPS
Η μονάδα GPS θα μεταδώσει δεδομένα σε πολλές συμβολοσειρές με 9600 Baud Rate. Εάν χρησιμοποιήσουμε ένα τερματικό UART με ρυθμό Baud 9600, μπορούμε να δούμε τα δεδομένα που λαμβάνονται από το 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 που παρέχει ορισμένες λειτουργίες για την εξαγωγή του γεωγραφικού πλάτους και μήκους, οπότε δεν χρειάζεται να ανησυχούμε για αυτό.
Έχουμε προηγουμένως διασυνδέσει GPS με άλλους μικροελεγκτές:
- Πώς να χρησιμοποιήσετε το GPS με το Arduino
- Tutorial Interfacing Module GPS Raspberry Pi
- Διασύνδεση μονάδας GPS με μικροελεγκτή PIC
- Παρακολουθήστε ένα όχημα στους Χάρτες Google χρησιμοποιώντας Arduino, ESP8266 & GPS
Δείτε όλα τα έργα που σχετίζονται με το GPS εδώ.
Διάγραμμα κυκλώματος
Το διάγραμμα κυκλώματος για διασύνδεση GPS με μικροελεγκτή AVR Atemga16 δίνεται παρακάτω:
Ολόκληρο το σύστημα τροφοδοτείται από έναν προσαρμογέα DC 12v, αλλά τα κυκλώματα λειτουργούν σε 5v, οπότε η παροχή ισχύος ρυθμίζεται στα 5v από τον ρυθμιστή τάσης LM7805. Μια οθόνη LCD 16x2 έχει διαμορφωθεί σε λειτουργία 4-bit και οι συνδέσεις των ακίδων εμφανίζονται στο διάγραμμα κυκλώματος. Το GPS τροφοδοτείται επίσης από 5v και ο ακροδέκτης tx του συνδέεται απευθείας με τον μικροελεγκτή Rx του Atmega16. Χρησιμοποιείται ένας κρυσταλλικός ταλαντωτής 8MHz για το ρολόι του μικροελεγκτή.
Βήματα για τη διασύνδεση GPS με τον μικροελεγκτή AVR
- Ορίστε τις διαμορφώσεις του μικροελεγκτή που περιλαμβάνουν διαμόρφωση Oscillator.
- Ρυθμίστε την επιθυμητή θύρα για LCD συμπεριλαμβανομένου του μητρώου DDR.
- Συνδέστε τη μονάδα GPS στον μικροελεγκτή χρησιμοποιώντας το USART.
- Αρχικοποιήστε το σύστημα UART σε λειτουργία ISR, με ρυθμό baud 9600 και LCD σε λειτουργία 4bit.
- Λάβετε δύο πίνακες χαρακτήρων ανάλογα με το μήκος του πλάτους και το μήκος.
- Λάβετε ένα bit χαρακτήρα κάθε φορά και ελέγξτε αν ξεκινά από $ ή όχι.
- Εάν ληφθεί το $ τότε είναι μια συμβολοσειρά, πρέπει να ελέγξουμε το $ GPGGA, αυτά τα 6 γράμματα συμπεριλαμβανομένων των $.
- Εάν είναι GPGGA, λάβετε την πλήρη συμβολοσειρά και ορίστε σημαίες.
- Στη συνέχεια, εξαγάγετε το γεωγραφικό πλάτος και μήκος με κατευθύνσεις σε δύο συστοιχίες.
- Τέλος, εκτυπώστε τους πίνακες γεωγραφικού πλάτους και μήκους σε LCD.
Επεξήγηση κώδικα
Ο πλήρης κώδικας με ένα βίντεο επίδειξης δίνεται στο τέλος, εδώ επεξηγούνται ορισμένα σημαντικά μέρη του κώδικα.
Πρώτα απ 'όλα περιλαμβάνουν κάποια απαιτούμενη κεφαλίδα στον κώδικα και, στη συνέχεια, γράψτε MACROS bitmask για διαμόρφωση LCD και UART.
# καθορισμός F_CPU 8000000ul #include #include
Τώρα δηλώστε και αρχικοποιήστε μερικές μεταβλητές και πίνακες για την αποθήκευση συμβολοσειράς GPS, γεωγραφικού μήκους και σημαιών.
char buf; πτητικό char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; γεωγραφικό πλάτος; char λογικότητα;
Μετά από αυτό έχουμε κάποια λειτουργία προγράμματος οδήγησης LCD για την οδήγηση LCD.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; αν (r == 1) RSHigh; αλλιώς RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; αν (r == 1) RSHigh; αλλιώς RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); } άκυρο lcdprint (char * str) { ενώ (* str) { lcdwrite (* str ++, DATA); // __ καθυστέρηση_ms (20); } } άκυρο lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; για (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Μετά από αυτό θα προετοιμαστεί η σειριακή επικοινωνία με το GPS και συνέκρινε την έλαβε string με «GPGGA»:
άκυρο serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Τώρα, εάν η ληφθείσα συμβολοσειρά ταιριάζει επιτυχώς με το GPGGA, τότε στην κύρια λειτουργία εξαγωγής και εμφανίστε τη συντεταγμένη γεωγραφικού πλάτους και μήκους της τοποθεσίας:
lcdwrite (0x80,0); lcdprint ("Lat:"); σειριακό αποτύπωμα ("Latitude:"); για (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (γεωγραφικό πλάτος, 1); serialwrite (γεωγραφικό πλάτος); αν (i == 24) { lcdwrite (", 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); σειριακό αποτύπωμα ("Logitude:"); για (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (λογικότητα, 1); serialwrite (λογικότητα); αν (i == 38) { lcdwrite ('', 1); i ++; } }
Έτσι λοιπόν, η μονάδα GPS μπορεί να διασυνδεθεί με το ATmega16 για να βρει τις συντεταγμένες θέσης.
Βρείτε τον πλήρη κώδικα και το βίντεο εργασίας παρακάτω.