Υπάρχουν πολλοί δορυφόροι GPS γύρω από τη Γη που χρησιμοποιούνται για να παρέχουν την ακριβή τοποθεσία οπουδήποτε. Μαζί με τις συντεταγμένες τοποθεσίας (γεωγραφικό πλάτος και μήκος), παρέχει επίσης άλλα δεδομένα όπως ώρα, ημερομηνία, υψόμετρο, γωνία παρακολούθησης κατεύθυνσης κ.λπ. Έχουμε ήδη μάθει να διαβάζουμε αυτά τα δεδομένα GPS από το δορυφόρο χρησιμοποιώντας το Arduino. Έτσι θα φτιάξουμε ένα ρολόι GPS χρησιμοποιώντας τα δεδομένα «Ώρα και ημερομηνία» από τον δορυφόρο GPS. Το Ενημερωμένο Ρολόι GPS είναι πολύ ακριβές και παρέχει στα δεδομένα πραγματικού χρόνου ακρίβεια χιλιοστών του δευτερολέπτου.
Συστατικά:
- Arduino Uno
- Ενότητα GPS
- LCD 16x2
- Σύνδεση καλωδίων
- Παροχή ηλεκτρικού ρεύματος
Επεξήγηση εργασίας:
Η μονάδα GPS στέλνει τα δεδομένα σε μορφή NMEA, δείτε την έξοδο των δεδομένων GPS στο παρακάτω στιγμιότυπο οθόνης. Η μορφή NMEA αποτελείται από αρκετές προτάσεις, στις οποίες χρειαζόμαστε μία πρόταση για να εξαγάγουμε την ημερομηνία και την ώρα. Αυτή η πρόταση ξεκινά από $ GPRMC και περιέχει τις συντεταγμένες, την ώρα και άλλες χρήσιμες πληροφορίες. Αυτό το $ GPRMC αναφέρεται σε Προτεινόμενα ελάχιστα συγκεκριμένα δεδομένα GPS / Transit και το μήκος αυτής της συμβολοσειράς είναι περίπου 70 χαρακτήρες. Στο παρελθόν έχουμε εξαγάγει συμβολοσειρά $ GPGGA στο Vehicle Tracking System για να βρούμε τις συντεταγμένες γεωγραφικού πλάτους και μήκους. Εδώ είναι η έξοδος GPS:
Και η συμβολοσειρά $ GPRMC περιέχει κυρίως ταχύτητα, ώρα, ημερομηνία και θέση
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, γεωγραφικό πλάτος, N, γεωγραφικό μήκος, E, ταχύτητα, γωνία, ημερομηνία, MV, W, CMD
Αναγνωριστικό |
Περιγραφή |
RMC |
Συνιστώμενη Ελάχιστη πρόταση Γ |
HHMMSS.SSS |
Μορφή χρόνου σε δευτερόλεπτα λεπτών και χιλιοστών του δευτερολέπτου |
ΕΝΑ |
Κατάσταση // A = ενεργό και V = άκυρο |
Γεωγραφικό πλάτος |
Γεωγραφικό πλάτος 49 βαθμοί 16.45 λεπτά Βόρειος |
Ν |
Κατεύθυνση N = Βόρεια, S = Νότια |
Γεωγραφικό μήκος |
Γεωγραφικό μήκος (Συντεταγμένος) |
μι |
Κατεύθυνση E = Ανατολή, Δ = Δυτικά |
Ταχύτητα |
ταχύτητα σε κόμβους |
Γωνία |
Γωνία παρακολούθησης σε μοίρες |
Ημερομηνία |
DATE σε UTC |
MV |
Μαγνητική παραλλαγή |
Δ |
Κατεύθυνση παραλλαγής E / W |
CMD (* 6Α) |
Δεδομένα Checksum |
Μπορούμε να εξαγάγουμε Ώρα και Ημερομηνία από συμβολοσειρά $ GPRMC μετρώντας τα κόμματα στη συμβολοσειρά. Με τη βοήθεια του Arduino και του προγραμματισμού, βρίσκουμε συμβολοσειρά $ GPRMC και την αποθηκεύουμε σε μια σειρά, τότε η ώρα (μορφή 24 ωρών) μπορεί να βρεθεί μετά από ένα κόμμα και η ημερομηνία μπορεί να βρεθεί μετά από εννέα κόμματα. Η ώρα και η ημερομηνία αποθηκεύονται περαιτέρω σε χορδές.
Ένας δορυφόρος GPS παρέχει ώρα και ημερομηνία σε συντονισμένη καθολική ώρα (UTC), οπότε πρέπει να τον μετατρέψουμε ανάλογα. Για μετατροπή σύμφωνα με την ώρα της Ινδίας, έχουμε προσθέσει 5:30 ώρα UTC, καθώς η ώρα της Ινδίας είναι 5 και μισή ώρα πριν από την ώρα UTC / GMT
Διάγραμμα κυκλώματος:
Οι συνδέσεις κυκλώματος του Arduino GPS Clock είναι απλές. Το Arduino χρησιμοποιείται για τον έλεγχο ολόκληρης της διαδικασίας, λαμβάνει τα δεδομένα GPS από δορυφόρο μέσω μονάδας GPS, εξάγει την ημερομηνία και την ώρα από τη συμβολοσειρά $ GPRMC και το εμφανίζει σε οθόνη LCD.
Οι καρφίτσες δεδομένων D4, D5, D6, D7 των 16x2 LCD συνδέονται με τον αριθμό pin. Τα 5, 4, 3, 2 του Arduino και ο πείρος εντολών RS και EN της LCD συνδέονται με τον πείρο 7 και 6 του Arduino αντίστοιχα. Ο ακροδέκτης GPS Module Tx pin είναι συνδεδεμένος με τον ακροδέκτη Rx 10 του Arduino. Το επίγειο PIN του Arduino και του GPS συνδέονται μεταξύ τους. Εδώ έχουμε χρησιμοποιήσει τη μονάδα GPS SKG13BL, που λειτουργεί με ρυθμό baud 9800 bps. Το Arduino διαμορφώνεται επίσης με ρυθμό baud 9800 bps χρησιμοποιώντας τη λειτουργία "Serial.begin (9800)".
Επεξήγηση προγραμματισμού:
Στο μέρος προγραμματισμού πρώτα συμπεριλαμβάνουμε βιβλιοθήκες και καθορίζουμε καρφίτσες για σειριακή επικοινωνία LCD & λογισμικού. Ορίστε επίσης κάποια μεταβλητή με πίνακες για την αποθήκευση δεδομένων. Χρησιμοποιώντας εδώ το λογισμικό Serial Library, επιτρέψαμε τη σειριακή επικοινωνία στους ακροδέκτες 10 και 11, και τις κάναμε Rx και Tx αντίστοιχα. Από προεπιλογή, τα Pin 0 και 1 του Arduino χρησιμοποιούνται για σειριακή επικοινωνία, αλλά χρησιμοποιώντας τη βιβλιοθήκη SoftwareSerial, μπορούμε να επιτρέψουμε τη σειριακή επικοινωνία σε άλλες ψηφιακές καρφίτσες του Arduino
#περιλαμβάνω
Μετά από αυτό έχουμε αρχικοποιήσει σειριακή επικοινωνία και LCD σε λειτουργία εγκατάστασης και δείξαμε ένα μήνυμα καλωσορίσματος στην οθόνη LCD.
Στη συνέχεια, έχουμε εξαγάγει την ώρα και την ημερομηνία από τη ληφθείσα συμβολοσειρά.
ενώ (x
Στη συνέχεια, μετατρέψτε την ώρα και την ημερομηνία σε δεκαδικό και τροποποιήστε την στην ινδική ώρα (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int Second = UTC_second.toInt (); int Ημερομηνία = UTC_date.toInt (); int Μήνας = UTC_month.toInt ();……………
Και τέλος, η ώρα και η ημερομηνία εμφανίστηκαν στην οθόνη LCD χρησιμοποιώντας τη λειτουργία lcd.print , ελέγξτε τον πλήρη κώδικα παρακάτω.