- Απαιτούμενα στοιχεία
- Ενότητα GPS
- Καρφίτσωμα από το STM32F103C8
- Διάγραμμα κυκλώματος και συνδέσεις
- Προγραμματισμός STM32F103C8 για διασύνδεση μονάδας GPS
- Εύρεση γεωγραφικού πλάτους και μήκους με GPS και STM32
Το GPS σημαίνει Global Positioning System και χρησιμοποιείται για την ανίχνευση του γεωγραφικού πλάτους και μήκους οποιασδήποτε θέσης στη Γη, με ακριβή ώρα UTC (Universal Time Coordinated). Αυτή η συσκευή λαμβάνει τις συντεταγμένες από τον δορυφόρο για κάθε δευτερόλεπτο, με ώρα και ημερομηνία. Το GPS προσφέρει μεγάλη ακρίβεια και παρέχει και άλλα δεδομένα εκτός από τις συντεταγμένες θέσης.
Όλοι γνωρίζουμε ότι το GPS είναι μια πολύ χρήσιμη συσκευή και χρησιμοποιείται πολύ συχνά σε κινητά τηλέφωνα και άλλες φορητές συσκευές για την παρακολούθηση της τοποθεσίας. Διαθέτει πολύ μεγάλο εύρος εφαρμογών σε κάθε πεδίο, από την κλήση του ταξί στο σπίτι σας έως την παρακολούθηση του υψομέτρου των αεροπλάνων. Ακολουθούν μερικά χρήσιμα έργα που σχετίζονται με το GPS, που δημιουργήσαμε προηγουμένως:
- Σύστημα παρακολούθησης οχημάτων
- Ρολόι GPS
- Σύστημα ειδοποίησης ανίχνευσης ατυχημάτων
- Tutorial Interfacing Module GPS Raspberry Pi
- Διασύνδεση μονάδας GPS με μικροελεγκτή PIC
Εδώ σε αυτό το σεμινάριο, θα συνδέσουμε μια μονάδα GPS με μικροελεγκτή STM32F103C8 για να βρούμε τις συντεταγμένες θέσης και να τις εμφανίσουμε σε οθόνη LCD 16x2.
Απαιτούμενα στοιχεία
- Μικροελεγκτής STM32F103C8
- Ενότητα GPS
- Οθόνη LCD 16x2
- Ψωμί
- Σύνδεση καλωδίων
Ενότητα GPS
Είναι μια μονάδα GPS GY-NEO6MV2 XM37-1612. Αυτή η μονάδα GPS διαθέτει τέσσερις ακίδες + 5V, GND, TXD και RXD. Επικοινωνεί χρησιμοποιώντας τις σειριακές ακίδες και μπορεί να συνδεθεί εύκολα με τη σειριακή θύρα του STM32F103C8.
Η μονάδα GPS στέλνει τα δεδομένα σε μορφή NMEA (δείτε το παρακάτω στιγμιότυπο οθόνης). Η μορφή NMEA αποτελείται από πολλές προτάσεις, στις οποίες χρειαζόμαστε μόνο μία πρόταση. Αυτή η πρόταση ξεκινά από $ GPGGA και περιέχει τις συντεταγμένες, την ώρα και άλλες χρήσιμες πληροφορίες. Αυτό το GPGGA αναφέρεται σε δεδομένα επιδιόρθωσης συστήματος καθολικής τοποθέτησης. Μάθετε περισσότερα για την ανάγνωση δεδομένων GPS και τις συμβολοσειρές του εδώ.
Ακολουθεί ένα δείγμα συμβολοσειράς $ GPGGA, μαζί με την περιγραφή του:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, γεωγραφικό πλάτος, N, γεωγραφικό μήκος, E, FQ, NOS, HDP, υψόμετρο, M, ύψος, M,, δεδομένα αθροίσματος
Αλλά εδώ σε αυτό το σεμινάριο, χρησιμοποιούμε μια βιβλιοθήκη GPS TinyGPSPlus που εξάγει όλες τις απαιτούμενες πληροφορίες από την πρόταση NMEA και απλώς πρέπει να γράψουμε μια απλή γραμμή κώδικα για να λάβουμε το γεωγραφικό πλάτος και μήκος, το οποίο θα δούμε αργότερα στο σεμινάριο.
Καρφίτσωμα από το STM32F103C8
Οι θύρες σειριακής επικοινωνίας USART STM32F103C8 (BLUE PILL) εμφανίζονται στην παρακάτω εικόνα pin out. Αυτά έχουν μπλε χρώμα που έχουν (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Διαθέτει τρία τέτοια κανάλια επικοινωνίας.
Διάγραμμα κυκλώματος και συνδέσεις
Συνδέσεις κυκλώματος μεταξύ μονάδας GPS & STM32F103C8
Ενότητα GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Συνδέσεις μεταξύ 16x2 LCD & STM32F103C8
Κωδικός LCD αριθ |
Όνομα Pin LCD |
Όνομα Pin STM32 |
1 |
Έδαφος (Gnd) |
Έδαφος (G) |
2 |
VCC |
5V |
3 |
VEE |
Καρφίτσα από το Κέντρο Ποτενσιόμετρου |
4 |
Εγγραφή Επιλογή (RS) |
PB11 |
5 |
Ανάγνωση / εγγραφή (RW) |
Έδαφος (G) |
6 |
Ενεργοποίηση (EN) |
PB10 |
7 |
Bit δεδομένων 0 (DB0) |
Χωρίς σύνδεση (NC) |
8 |
Bit δεδομένων 1 (DB1) |
Χωρίς σύνδεση (NC) |
9 |
Bit δεδομένων 2 (DB2) |
Χωρίς σύνδεση (NC) |
10 |
Bit δεδομένων 3 (DB3) |
Χωρίς σύνδεση (NC) |
11 |
Bit δεδομένων 4 (DB4) |
PB0 |
12 |
Bit δεδομένων 5 (DB5) |
PB1 |
13 |
Bit δεδομένων 6 (DB6) |
PC13 |
14 |
Bit δεδομένων 7 (DB7) |
PC14 |
15 |
Θετικό LED |
5V |
16 |
Αρνητικό LED |
Έδαφος (G) |
Η όλη ρύθμιση θα μοιάζει παρακάτω:
Προγραμματισμός STM32F103C8 για διασύνδεση μονάδας GPS
Πλήρες πρόγραμμα για την εύρεση τοποθεσίας χρησιμοποιώντας μονάδα GPS χρησιμοποιώντας STM32 παρέχεται στο τέλος αυτού του έργου. Το STM32F103C8 μπορεί να προγραμματιστεί χρησιμοποιώντας το Arduino IDE απλώς συνδέοντάς το σε υπολογιστή μέσω θύρας USB. Φροντίστε να αφαιρέσετε τις καρφίτσες TX και RX κατά τη μεταφόρτωση κώδικα και να τις συνδέσετε μετά τη μεταφόρτωση.
Για διασύνδεση GPS με STM32, πρώτα πρέπει να κατεβάσετε μια βιβλιοθήκη από τον σύνδεσμο GitHub TinyGPSPlus. Μετά τη λήψη της βιβλιοθήκης, μπορεί να συμπεριληφθεί στο Arduino IDE από το Sketch -> Include Library -> Add.zip Library. Η ίδια βιβλιοθήκη μπορεί να χρησιμοποιηθεί για διασύνδεση GPS με Arduino.
Πρώτα, λοιπόν, συμπεριλάβετε τα απαραίτητα αρχεία βιβλιοθήκης και ορίστε καρφίτσες για 16x2 LCD:
#περιλαμβάνω
Στη συνέχεια, δημιουργήστε ένα αντικείμενο με το όνομα gps της κλάσης TinyGPSPlus.
TinyGPSPlus gps;
Στη συνέχεια, στην κενή ρύθμιση , ξεκινήστε τη σειριακή επικοινωνία με τη μονάδα GPS χρησιμοποιώντας το Serial1.begin (9600). Το Serial1 χρησιμοποιείται ως θύρα Serial 1 (Pins-PA9, PA10) του STM32F103C8.
Serial1.begin (9600);
Στη συνέχεια, εμφανίστε το μήνυμα καλωσορίσματος για κάποιο χρονικό διάστημα.
lcd.begin (16,2); lcd.print ("Κύκλωμα Digest"); lcd.setCursor (0,1); lcd.print ("STM32 με GPS"); καθυστέρηση (4000) lcd.clear ();
Στη συνέχεια, στον κεντρικό βρόχο (), λαμβάνουμε γεωγραφικό πλάτος και μήκος από το GPS και ελέγχουμε εάν τα δεδομένα που λαμβάνονται είναι έγκυρα ή όχι και εμφανίζουν πληροφορίες στη σειριακή οθόνη και στην οθόνη LCD.
Έλεγχος εάν τα διαθέσιμα δεδομένα τοποθεσίας είναι έγκυρα ή όχι
loc_valid = gps.location.isValid ();
Λαμβάνει τα δεδομένα γεωγραφικού πλάτους
lat_val = gps.location.lat ();
Λαμβάνει δεδομένα γεωγραφικού μήκους
lng_val = gps.location.lng ();
Εάν ληφθούν μη έγκυρα δεδομένα, εμφανίζεται η ένδειξη "*****" στη σειριακή οθόνη και εμφανίζεται η ένδειξη "αναμονή" σε LCD.
εάν (! loc_valid) { lcd.print ("Αναμονή"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Γεωγραφικό μήκος:"); Serial.println ("*****"); καθυστέρηση (4000) lcd.clear (); }
Εάν ληφθούν έγκυρα δεδομένα, το πλάτος και το μήκος εμφανίζονται στην σειριακή οθόνη καθώς και στην οθόνη LCD.
lcd.clear (); Serial.println ("ΑΝΑΓΝΩΣΗ GPS:"); Serial.print ("Latitude:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Γεωγραφικό μήκος:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); καθυστέρηση (4000)
Η συνάρτηση που ακολουθεί παρέχει την καθυστέρηση στην ανάγνωση των δεδομένων. Συνεχίζει να ψάχνει τα δεδομένα στη σειριακή θύρα.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); κάντε το { while (Serial1.available ()) gps.encode (Serial1.read ()); } ενώ (millis () - έναρξη <ms); }
Εύρεση γεωγραφικού πλάτους και μήκους με GPS και STM32
Αφού δημιουργήσετε τη ρύθμιση και ανεβάσετε τον κωδικό, βεβαιωθείτε ότι έχετε τοποθετήσει τη μονάδα GPS σε ανοιχτή περιοχή για να λαμβάνετε γρήγορα το σήμα. Μερικές φορές χρειάζονται λίγα λεπτά για να λάβετε σήμα, οπότε περιμένετε λίγο. Το LED θα αρχίσει να αναβοσβήνει στη μονάδα GPS όταν αρχίσει να λαμβάνει σήμα και οι συντεταγμένες θέσης θα εμφανίζονται στην οθόνη LCD.
Μπορείτε να επαληθεύσετε το γεωγραφικό πλάτος και το μήκος της τοποθεσίας χρησιμοποιώντας τους χάρτες Google. Απλώς Μεταβείτε στους χάρτες Google με ενεργοποιημένο το GPS και κάντε κλικ στην μπλε κουκκίδα. Θα δείξει τη διεύθυνση με το γεωγραφικό πλάτος και μήκος όπως φαίνεται στην παρακάτω εικόνα
Ο πλήρης κωδικός και το βίντεο επίδειξης δίνεται παρακάτω.