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

Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp: 11 Βήματα
Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp: 11 Βήματα

Βίντεο: Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp: 11 Βήματα

Βίντεο: Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp: 11 Βήματα
Βίντεο: Lesson 99: Building Arduino Digital Clock using DS3231 LCD and Seven Segment Display 2024, Νοέμβριος
Anonim
Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp
Arduino Ημερομηνία/Plρα Σχεδιάζοντας/Καταγράφοντας χρησιμοποιώντας το Millis () και το PfodApp

Δεν απαιτείται προγραμματισμός Arduino ή Android. Υποστηρίζονται επίσης μονάδες RTC και GPS. Αυτόματη διόρθωση για ζώνες ώρας, μετατόπιση RTC και GPS που λείπουν άλματα δευτερολέπτου

Εισαγωγή

Αυτό το σεμινάριο σας δείχνει πώς να χρησιμοποιήσετε τις χρονικές σφραγίδες Arduino millis () για να σχεδιάσετε δεδομένα σε σχέση με την ημερομηνία και την ώρα στο κινητό σας Android χρησιμοποιώντας το pfodApp.

Δεν απαιτείται προγραμματισμός Arduino ή Android. Το pfodApp καταγράφει επίσης επαρκή δεδομένα, ώστε να μπορείτε αργότερα να αναπαράγετε τα γραφήματα ημερομηνίας/ώρας σε ένα υπολογιστικό φύλλο.

ΔΕΝ απαιτείται μονάδα RTC ή GPS, ωστόσο εάν το έργο σας Arduino διαθέτει RTC (Ρολόι πραγματικού χρόνου) ή μονάδα GPS μπορούν επίσης να χρησιμοποιηθούν. Σε αυτές τις περιπτώσεις, τα διαγράμματα pfodApp θα διορθωθούν αυτόματα για τη ζώνη ώρας, τη μετατόπιση RTC και το GPS που λείπουν από το άλμα δευτερολέπτων. Δεν απαιτείται ειδικός κώδικας Arduino για αυτές τις διορθώσεις. Όπως πάντα με το pfodApp, τα δεδομένα που λαμβάνονται καταγράφονται όπως ακριβώς είναι, δεν διορθώνονται, ωστόσο το αρχείο καταγραφής περιέχει επίσης επαρκείς πληροφορίες που θα σας επιτρέψουν να εφαρμόσετε αυτές τις διορθώσεις μόνοι σας όταν κατεβάζετε τα αρχεία καταγραφής στον υπολογιστή σας. Δείτε παρακάτω παραδείγματα αυτής της μετα-επεξεργασίας.

Υποστηρίζεται μεγάλη ποικιλία μορφοποίησης άξονα Χ ώρας και ημερομηνίας, τα οποία ελέγχονται πλήρως από μικρές συμβολοσειρές κειμένου στο σκίτσο του Arduino. Δεν απαιτείται προγραμματισμός Android.

Το pfodApp θα συνδεθεί μέσω WiFi, Bluetooth Classic, BLE και SMS. Το δωρεάν pfodDesigner δημιουργεί πλήρη σκίτσα Arduino για σχεδίαση/καταγραφή ημερομηνίας/ώρας για σύνδεση με μεγάλη ποικιλία πινάκων. Δεν απαιτείται προγραμματισμός Arduino.

Αυτό το εκπαιδευτικό θα χρησιμοποιήσει ένα Adafruit Feather52 ως παράδειγμα πίνακα Arduino, ο οποίος συνδέεται μέσω BLE.

Αυτό το εκπαιδευτικό κάλυμμα καλύπτει τρεις περιπτώσεις:- 1) Το έργο μικροεπεξεργαστή σας έχει χρονικές σημάνσεις χιλιοστών του δευτερολέπτου- millis () 2) Το έργο του μικροεπεξεργαστή σας διαθέτει ρολόι πραγματικού χρόνου (RTC)- το pfodApp διορθώνει αυτόματα το drift. 3) Το έργο μικροεπεξεργαστή σας διαθέτει μονάδα GPS - το pfodApp διορθώνει αυτόματα για άλματα δευτερολέπτου καθώς εμφανίζονται (επί του παρόντος 18 δευτερόλεπτα το 2018).

Βήμα 1: Χρήση Arduino Millisecond Timestamps, Millis ()

Υπάρχουν δύο μέρη για τη χρήση χιλιοστών του δευτερολέπτου για ημερομηνία και ώρα. Το ένα είναι για τη σχεδίαση των δεδομένων είτε με την πάροδο του χρόνου είτε με την ημερομηνία/ώρα και το άλλο μέρος δημιουργεί εκ νέου την ημερομηνία και την ώρα από τις καταγεγραμμένες χρονικές σημάνσεις ωρών δεδομένων χιλιοστών του δευτερολέπτου. Το pfodApp δεν τροποποιεί τα ακατέργαστα δεδομένα που λαμβάνονται από το pfodDevice (το μικρό Arduino micro). Απλώς καταγράφει ακριβώς τα byte που έλαβε.

Χρησιμοποιήστε πρώτα το δωρεάν pfodDesigner για να δημιουργήσετε ένα σκίτσο Arduino για το micro σας που θα στείλει τα χιλιοστά του δευτερολέπτου και τις μετρήσεις δεδομένων στο pfodApp για σχεδίαση/καταγραφή. Αυτό το παράδειγμα δημιουργεί ένα μενού για την πλακέτα Adafruit Feather 52 BLE που γράφει A0. Το σεμινάριο για το Adafruit Feather nRF52 LE - Custom Controls with pfodApp περνάει από τα βήματα pfodDesigner για να δημιουργήσει ένα μενού για το Feather nRF52 που περιλαμβάνει ένα κουμπί Διάγραμμα, οπότε ελέγξτε το για περισσότερες λεπτομέρειες. Σε αυτό το σεμινάριο θα προσθέσουμε μόνο ένα κουμπί γραφήματος και θα χρησιμοποιήσουμε τις νέες επιλογές μορφής άξονα Χ για να σχεδιάσουμε τις αναγνώσεις A0 σε σχέση με την παρελθούσα ώρα και ημερομηνία/ώρα.

Το πρώτο μέρος αυτού του σεμιναρίου θα χρησιμοποιηθεί από το δωρεάν pfodDesigner για να δημιουργήσετε ένα δείγμα γραφήματος ημερομηνίας/ώρας στο κινητό σας Android. Όταν είστε ικανοποιημένοι με την οθόνη, μπορείτε να δημιουργήσετε το σκίτσο Arduino που θα το αναπαράγει όταν συνδέεστε με το pfodApp. Δεν απαιτείται προγραμματισμός Android και εφόσον το pfodDesigner δημιουργεί πλήρη σκίτσα Arduino για μεγάλη ποικιλία πινάκων Arduino, δεν απαιτείται ούτε προγραμματισμός Arduino.

Βήμα 2: Προσθήκη γραφήματος στο μενού

Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού
Προσθήκη γραφήματος στο μενού

Κατεβάστε την εφαρμογή pfodDesigner από το Google Play, ανοίξτε την και κάντε κλικ στο "Έναρξη νέου μενού"

Κάντε κλικ στο "Σειρά στόχου" και, στη συνέχεια, στο κουμπί "Bluetooth Low Energy" για να εμφανίσετε τη λίστα με περίπου 11 πίνακες BLE (κάντε κύλιση προς τα κάτω για να δείτε τις άλλες επιλογές). Επιλέξτε στο Adafruit Bluefruit Feather52.

Επιστρέψτε στο μενού Επεξεργασία και κάντε κλικ στο "Επεξεργασία προτροπής" και ορίστε μια κατάλληλη προτροπή για αυτό το μενού, π.χ. "Feather52" και κείμενο με έντονη γραφή και μέγεθος +7. Το χρώμα του φόντου αφέθηκε ως το "προεπιλεγμένο" Λευκό

Επιστρέψτε και κάντε κλικ στο "Προσθήκη στοιχείου μενού", μετακινηθείτε προς τα κάτω και επιλέξτε "Κουμπί γραφήματος" που ανοίγει την οθόνη επεξεργασίας του κουμπιού γραφήματος. Μπορείτε να κάνετε οποιαδήποτε αλλαγή στην εμφάνιση του κουμπιού εδώ. Σε αυτήν την περίπτωση, το κείμενο του κουμπιού άλλαξε σε "Ημερομηνία/plotρα γραφής του A0" και οι άλλες προεπιλογές αφέθηκαν ως έχουν.

Αυτό σας δίνει ένα κουμπί στο μενού που θα ανοίξει την οθόνη γραφήματος.

Βήμα 3: Επεξεργασία της πηγής και των πινάκων γραφήματος

Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος
Επεξεργασία της πηγής και των πινάκων γραφήματος

Κάντε κλικ στο κουμπί "Ημερομηνία/plotρα του A0" για να ανοίξετε την οθόνη Επεξεργασία γραφημάτων, όπου μπορείτε να αποκτήσετε πρόσβαση στην ετικέτα γραφήματος, τη μορφή άξονα Χ, το διάστημα δεδομένων γραφήματος και (με κύλιση προς τα κάτω) τις ίδιες τις ρυθμίσεις του γραφήματος. Επεξεργαστείτε την ετικέτα γραφήματος σε κάτι κατάλληλο, π.χ. "A0 Volts".

Κάντε κύλιση προς τα κάτω και για τα Οικόπεδα 2 και 3 ανοίξτε την Επεξεργασία σχεδίου και κάντε κλικ στην Απόκρυψη σχεδίου για να τα αφαιρέσετε από την εμφάνιση του γραφήματος.

Στη συνέχεια, κάντε κλικ στο "Επεξεργασία γραφήματος 1" και ορίστε μια ετικέτα γραφήματος (π.χ. A0), μονάδες yAxis (π.χ. Volts), εμφανίστε μέγιστο 3,6V και συνδεθείτε με τον ακροδέκτη I/O A0.

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

Για όλα τα χρονικά διαστήματα, οι μηδενικές μονάδες που εμφανίζονται δεν εμφανίζονται, οπότε σε αυτό το διάγραμμα εμφανίζονται μόνο τα χρονικά διαστήματα> 1 λεπτών.

Βήμα 4: Επιλογή μορφής ημερομηνίας/ώρας

Επιλογή μορφής ημερομηνίας/ώρας
Επιλογή μορφής ημερομηνίας/ώρας
Επιλογή μορφής ημερομηνίας/ώρας
Επιλογή μορφής ημερομηνίας/ώρας
Επιλογή μορφής ημερομηνίας/ώρας
Επιλογή μορφής ημερομηνίας/ώρας

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

Στη συνέχεια, κάντε κλικ στην προεπισκόπηση γραφήματος για να εμφανίσετε τα ίδια δεδομένα δείγματος, αλλά τώρα με διαστήματα 15 λεπτών μεταξύ των δειγμάτων. Όπως μπορείτε να δείτε τα λεπτά των mm: ss συνεχίζουν να αυξάνονται.

Τώρα επιστρέψτε και κάντε κλικ στο κουμπί του άξονα Χ για να εμφανίσετε μια μικρή επιλογή από όλες τις πιθανές μορφές δεδομένων/χρόνου άξονα Χ (κάντε κύλιση προς τα κάτω για περισσότερα)

Πάνω είναι μια επιλογή προεπισκοπήσεων γραφημάτων χρησιμοποιώντας διαφορετικές μορφές άξονα Χ.

Τα γραφήματα ημερομηνίας/ώρας που εμφανίζονται εδώ βρίσκονται στην «τοπική» ζώνη ώρας. Υπάρχουν επίσης επιλογές μορφοποίησης για την απεικόνιση ημερομηνίας/ώρας σε UTC. Για ένα πλήρες σύνολο πιθανών επιλογών μορφής ημερομηνίας/ώρας, ανατρέξτε στο pfodSpecification.pfd.

Βήμα 5: Δημιουργήστε και δοκιμάστε το σκίτσο Arduino

Δημιουργήστε και δοκιμάστε το σκίτσο Arduino
Δημιουργήστε και δοκιμάστε το σκίτσο Arduino
Δημιουργήστε και δοκιμάστε το σκίτσο Arduino
Δημιουργήστε και δοκιμάστε το σκίτσο Arduino

Μόλις είστε ικανοποιημένοι με τη μορφή και το διάστημα δεδομένων του γραφήματός σας, μπορείτε να μεταβείτε στην οθόνη "Editing Menu_1" και να κάνετε κύλιση προς τα κάτω και "Generate Code" για τον επιλεγμένο πίνακα προορισμού. Ακολουθεί ένα δείγμα σκίτσου για το Adafruit Feather52 με χρήση διαστημάτων δεδομένων 1 δευτερολέπτου και μια μορφή χρόνου mm: ss, pfodFeather52_timeplot.ino

Πάνω είναι ένα οικόπεδο Α0 από το Φτερό52

Η αλλαγή της μορφής σε Ημέρες της εβδομάδας hr: mins: sec (~ E HH: mm: ss) και η εκ νέου δημιουργία του κώδικα (pfodFeather52_dateplot.ino) δίνει μια γραφική παράσταση όπως η δεύτερη παραπάνω.

Μπορείτε να επεξεργαστείτε τη μορφή του άξονα Χ απευθείας στο σκίτσο του Arduino, όπως περιγράφεται στη συνέχεια.

Βήμα 6: Πώς το PfodApp σχεδιάζει ημερομηνία/ώρα από το Millis ();

Όταν συνδέεται το pfodApp, θυμάται την «τοπική» ώρα και την ώρα UTC και ζητά τις τρέχουσες χρονικές σφραγίδες δεδομένων του σχεδίου του pfodDevice (του πίνακα Arduino). Χρησιμοποιώντας αυτές τις πληροφορίες, το pfodApp μπορεί στη συνέχεια να σχεδιάσει χρονικές σφραγίδες χιλιοστών του δευτερολέπτου είτε να έχει μετατραπεί σε χιλιοστά του δευτερολέπτου σε ώρες mins sec κ.λπ., είτε να σχεδιάσει την ημερομηνία και την ώρα που αντιπροσωπεύουν οι χρονικές σημάνσεις χιλιοστών του δευτερολέπτου σε σχέση με το πότε έγινε η σύνδεση και ζητήθηκε η τρέχουσα ώρα της συσκευής pfodDevice.

Κοιτάζοντας το σκίτσο που δημιουργήθηκε από το Arduino (π.χ. pfodFeather52_dateplot.ino), υπάρχουν τρία μικρά κομμάτια κώδικα που χειρίζονται την πλευρά Arduino των γραφημάτων.

Η ενότητα κώδικα βρόχου () που χειρίζεται το τρέχον αίτημα του pfodApp {@}

// χειρισμός {@} request} else if ('@' == cmd) {// pfodApp ζήτησε 'τρέχουσα' ώρα plot_mSOffset = millis (); // καταγραφή τρέχοντος millis ως offset rawdata timestamps parser.print (F ("{@` 0} ")); // επιστροφή `0 ως 'τρέχοντα' ακατέργαστα δεδομένα χιλιοστά του δευτερολέπτου

Θα μπορούσατε απλώς να επιστρέψετε την τρέχουσα τιμή του millis (), αλλά το millis () αναδιπλώνεται στο 0 κάθε 49,7 ημέρες, γεγονός που θα κάνει το διάγραμμα να πηδήξει προς τα πίσω. Επομένως, ο κώδικας θυμάται την τρέχουσα τιμή millis () όταν υποβλήθηκε το αίτημα {@} και επιστρέφει {@`0}, δηλαδή μια τρέχουσα χρονική σήμανση χιλιοστού του μηδενός. Στη συνέχεια, κατά την αποστολή των σημείων rawdata, το σκίτσο χρησιμοποιεί

plot_1_var = analogRead (A0); // ανάγνωση εισόδου στο διάγραμμα // plot_2_var οικόπεδο Κρυμμένο έτσι ώστε να μην έχουν εκχωρηθεί δεδομένα εδώ // plot_3_var οικόπεδο Κρυφό ώστε να μην εκχωρούνται δεδομένα εδώ // αποστολή δεδομένων σχεδίου σε μορφή CSV parser.print (millis ()-plot_mSOffset); // χρόνος σε χιλιοστά του δευτερολέπτου ….

έτσι ώστε η χρονική σήμανση χιλιοστών του δευτερολέπτου που αποστέλλεται με τα δεδομένα ξεκινά από το 0 και αυξάνεται έως 49,7 ημέρες. Εάν παραμένετε συνεχώς συνδεδεμένοι για 49,7 ημέρες, τότε θα δείτε την πλοκή να πηδά προς τα πίσω κατά 50 ~ ημέρες. Η αποσύνδεση και η επανασύνδεση μία φορά κάθε 49,7 ημέρες το αποφεύγει αυτό.

Το τρίτο μέρος της πλοκής ημερομηνίας/ώρας είναι το μήνυμα πλοκής.

} else if ('A' == cmd) {// user pressed - 'Date/Time plot of A0' // στο κύριο μενού του Menu_1 // επιστροφή γραφήματος msg. parser.print (F ("{= A0 Volts ~ E HH: mm: ss | date | A0 ~~~ Volts ||}"));

Όταν ο χρήστης πατήσει το κουμπί "Ημερομηνία/plotρα του A0", το pfodApp στέλνει το {A} cmd στο pfodDevice και το pfodDevice απαντά με το μήνυμα γραφήματος, {=… {= A0 Volts ~ E HH: mm: ss | ημερομηνία | A0 ~~~ Volts ||} που περιέχει τη μορφή άξονα Χ E HH: mm: ss

Οι μορφές Java SimpleDateFormat είναι αποδεκτές εδώ. Το αρχείο καταγραφής και σχεδίασης δεδομένων pfodApp και το pfodSpecification.pdf έχουν περισσότερες λεπτομέρειες σχετικά με το μήνυμα γραφήματος.

Βήμα 7: Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας

Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας
Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας
Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας
Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας
Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας
Αναπαραγωγή γραφημάτων ημερομηνίας/ώρας στον υπολογιστή σας

Από προεπιλογή, το pfodApp καταγράφει όλα τα εισερχόμενα ακατέργαστα δεδομένα σε ένα αρχείο καταγραφής στο κινητό σας, εκτός εάν έχετε απενεργοποιήσει αυτήν την καταγραφή στην οθόνη επεξεργασίας σύνδεσης, δείτε το pfodAppForAndroidGettingStarted.pdf

Όταν επεξεργάζεστε το pfodApp, εμφανίζεται ένα σύντομο μήνυμα με τη θέση και το όνομα του αρχείου καταγραφής, π.χ. /pfodAppRawData/pfod_bluefruit52.txt Αυτό το αρχείο είναι σε μορφή CSV, οριοθετημένο με κόμμα και αφού το μεταφέρετε στον υπολογιστή σας (δείτε τις επιλογές μεταφοράς pfodAppForAndroidGettingStarted.pdf), μπορείτε να το ανοίξετε σε υπολογιστικό φύλλο για να σχεδιάσετε τα δεδομένα.

Ακολουθούν οι πρώτες γραμμές ενός αρχείου καταγραφής.

// pfodApp V3.0.360, τοπική ώρα, UTC, mS ανά ημέρα, pfod bluefruit52 τρέχουσα ώρα (mS), pfod bluefruit52 τρέχουσα ώρα, // συνδεδεμένο στις, 2019/04/20 11: 32: 50.238, 2019/04/20 01: 32: 50.238, 86400000, 0, 366, 0.25,, 1366, 0.29,, 2366, 0.31,, 3366, 0.33,, 4366, 0.33,, Παρακάτω μπορείτε να δείτε την «τοπική» ώρα και την ώρα UTC που η pfodApp συνέδεσε στο Feather52 και την τρέχουσα ώρα στο mS που ανέφερε το Feather52 μέσω της απάντησης {@..}. Η τελευταία στήλη είναι κενή, επειδή δεν υπάρχει RTC ή GPS και έτσι δεν αναφέρθηκε τρέχουσα ώρα σε εεε/ΜΜ/ηη ώρα από το Feather52.

Για να σχεδιάσετε τα δεδομένα έναντι του χρόνου που έχει παρέλθει, αφαιρέστε τον τρέχοντα χρόνο (mS) από τη χρονική σφραγίδα χιλιοστών του δευτερολέπτου και, στη συνέχεια, διαιρέστε με την τιμή mS ανά ημέρα. Ακολουθεί το υπολογιστικό φύλλο με τον τύπο που προστέθηκε και το αποτέλεσμα γραφικό. Το υπολογιστικό φύλλο, παρακάτω, (pfod_bluefruit52.xls) είναι ένα υπολογιστικό φύλλο OpenOffice που έχει αποθηκευτεί σε μορφή Excel.

Στο OpenOffice, το γράφημα είναι διάγραμμα διασποράς και ο άξονας x του σχεδίου διαμορφώθηκε σε HH: MM: SS Σημείωση: οι μορφές ημερομηνίας/ώρας του υπολογιστικού φύλλου ΔΕΝ είναι οι ίδιες με τις μορφές γραφήματος που χρησιμοποιούνται από το pfodApp. Για παράδειγμα, στο pfodApp, το MM είναι μήνες και το mm είναι λεπτά.

Για να σχεδιάσετε την ημερομηνία και την ώρα, χρειάζεται μόνο να προσθέσετε την ώρα σύνδεσης στην ώρα του υπολογιστικού φύλλου και να την επαναλάβετε. (pfod_bluefruit52_date.xls)

Σημείωση: Η τοπική ώρα και το UTC εισήχθησαν ως κείμενο στο υπολογιστικό φύλλο μου, οπότε χρειάστηκε να αφαιρέσω την κορυφή πριν τα χρησιμοποιήσω σε έναν τύπο.

Βήμα 8: Πώς να αποφύγετε το όριο 49,7 ημερών Millis () και γιατί δεν πρέπει

Όπως αναφέρθηκε παραπάνω στο Πώς ο σχεδιασμός pfodApp Ημερομηνία/fromρα από millis ();, εάν παραμείνετε συνδεδεμένοι συνεχώς για περισσότερες από 49,7 ημέρες, οι χρονικές σημάνσεις χιλιοστών του δευτερολέπτου θα τυλιχτούν ξανά στο μηδέν. Λίγες γραμμές κώδικα μπορούν να το αποφύγουν, αλλά δεν συνιστάται.

Πρώτα πώς να αποφύγετε το περιτύλιγμα. Προσθέστε μια άλλη μη υπογεγραμμένη μεταβλητή int για να παρακολουθείτε τον αριθμό των φορτώσεων των χρονικών σημάνσεων και να εκτυπώσετε το συνδυασμένο αποτέλεσμα σε HEX.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… Plot_1_var = analogRead (A0); // ανάγνωση εισόδου στο οικόπεδο // plot_2_var οικόπεδο Κρυμμένο έτσι ώστε να μην έχουν εκχωρηθεί δεδομένα εδώ // plot_3_var οικόπεδο Κρυφό ώστε να μην εκχωρούνται δεδομένα εδώ // αποστολή δεδομένων σχεδίου σε μορφή CSV uint32_t timeStamp = millis ()-plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp τυλιγμένο πίσω στο 0 mSwrapCount ++; // προσθέστε ένα στο count} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // χρόνος σε χιλιοστά του δευτερολέπτου στο HEX….

Κατά την επιστροφή της απάντησης {@.. διαγράψτε και το mSwrapCount.

// χειρισμός {@} request} else if ('@' == cmd) {// pfodApp ζήτησε 'τρέχουσα' ώρα plot_mSOffset = millis (); // καταγραφή τρέχοντος millis ως offset rawdata timestamps mSwrapCount = 0; // καθαρός αριθμός περιτυλίξεων. parser.print (F ("{@` 0} ")); // επιστρέφει `0 ως 'τρέχον' ακατέργαστα δεδομένα χιλιοστά του δευτερολέπτου

Οι χρονικές σφραγίδες θα δίνουν τώρα τη «σωστή» τιμή για τις επόμενες 40,7 ημέρες * 65536 ~ = 7308 έτη.

Το pfodApp θα μετατρέψει αυτόματα τις δεκαεξαδικές χρονικές σημάνσεις για σχεδίαση και θα τις καταγράψει ακριβώς όπως λαμβάνονται, δηλαδή σε εξάγωνο. Στο υπολογιστικό φύλλο (OpenOffice) χρησιμοποιείτε αυτόν τον τύπο για να μετατρέψετε τη δεκαεξαδική συμβολοσειρά, στο A2, σε mS (όπου το A1 είναι οποιοδήποτε κενό κελί) = HEX2DEC (ΑΝΤΙΚΑΤΑΣΤΑΣΗ (A2; 1; 2; A1))

Γιατί δεν θέλεις να το κάνεις αυτό

Όπως φαίνεται παραπάνω, είναι εύκολο να επεκταθεί η χρονική σήμανση mS σε περισσότερο από 50 ημέρες. Ωστόσο, πιθανότατα δεν θέλετε να το κάνετε αυτό επειδή γίνονται όλο και πιο ακριβείς. Ένας τυπικός κρύσταλλος 16 Mhz που χρησιμοποιείται για τη δημιουργία των αποτελεσμάτων millis () στο μικρό έχει ακρίβεια pp 50ppm (μέρη ανά εκατομμύριο). Αυτό σημαίνει ότι μετά από 49,7 ημέρες η χρονική σήμανση του χιλιοστού του δευτερολέπτου μπορεί να βγει κατά 3 ½ λεπτά και αυτό αγνοεί την επίδραση της θερμοκρασίας στην ακρίβεια των κρυστάλλων.

Σε σύντομες περιόδους σύνδεσης, αυτή η ακρίβεια δεν αποτελεί πρόβλημα καθώς η απάντηση {@.. συγχρονίζει εκ νέου τη χρονική σήμανση χιλιοστών του δευτερολέπτου με την ημερομηνία/ώρα του κινητού σε κάθε επανασύνδεση. Ωστόσο, εάν θέλετε να παραμείνετε συνδεδεμένοι για μεγάλα χρονικά διαστήματα (ημέρες) και να καταγράφετε συνεχώς τα δεδομένα, τότε θα πρέπει να χρησιμοποιήσετε κάτι πιο ακριβές από το ενσωματωμένο millis (), όπως μια μονάδα RTC ή GPS.

Βήμα 9: Χρήση RTC (Ρολόι σε πραγματικό χρόνο)

Χρήση RTC (Ρολόι σε πραγματικό χρόνο)
Χρήση RTC (Ρολόι σε πραγματικό χρόνο)
Χρήση RTC (Ρολόι σε πραγματικό χρόνο)
Χρήση RTC (Ρολόι σε πραγματικό χρόνο)

Υπάρχει διαθέσιμος αριθμός μονάδων RTC, μία από τις πιο ακριβείς είναι η DS3231 π.χ. Η μονάδα DS3231 της Adafruit. Η δηλωμένη ακρίβεια είναι +/- 2ppm πάνω από 0 έως 40C. δηλ. ~ +/- 5 δευτ./μήνα.

Εάν θέλετε να σχεδιάσετε δεδομένα που έχουν χρονικές σημάνσεις ημερομηνίας/ώρας, π.χ. 2019/04/19 20: 4: 34, τότε πρέπει να τροποποιήσετε την απάντηση {@ για να επιστρέψετε την τρέχουσα ημερομηνία/ώρα, π.χ. {@`0 ~ 2019/4/19 3: 33: 5}. Ακολουθούν ορισμένες τροποποιήσεις δείγματος κώδικα που πρέπει να εφαρμοστούν στο σκίτσο που δημιουργείται από το pfodDesigner για τη χρήση μιας μονάδας RTC, υποθέτοντας ότι χρησιμοποιείτε τη βιβλιοθήκη RTClib και έχετε προσθέσει τον κωδικό προετοιμασίας της μονάδας RTC.

// χειρισμός {@} request} else if ('@' == cmd) {// pfodApp ζήτησε 'τρέχουσα' ώρα plot_mSOffset = millis (); // καταγραφή τρέχοντος millis ως offset rawdata timestamps parser.print (F ("{@" 0 "}) ημερομηνία/ώρα DateTime τώρα = rtc.now () sendDateTime (& now); // αποστολή εεεε/Μ/η/η: m: s στο parser.print, διεύθυνση διέλευσης & ως arg. parser.print ('}'); // τέλος της {@ απάντησης π.χ. {@ `0 ~ 2019/4/19 3: 33: 5}….

// αποστολή ώρας ημερομηνίας στο parser printvoid sendDateTime (DateTime* dt) {parser.print (dt-> έτος (), DEC); parser.print ('/'); parser.print (dt-> μήνα (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> ώρα (), DEC); parser.print (':'); parser.print (dt-> λεπτό (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // επανεκκίνηση χρονομέτρου δεδομένων γραφήματος, χωρίς μετατόπιση // εκχωρήστε τιμές σε μεταβλητές γραφικών από τις μεταβλητές βρόχου σας ή διαβάστε εισόδους ADC plot_1_var = analogRead (A0); // ανάγνωση εισόδου στο διάγραμμα // plot_2_var οικόπεδο Κρυμμένο, ώστε να μην έχουν εκχωρηθεί δεδομένα εδώ // plot_3_var οικόπεδο Κρυφό, ώστε να μην έχουν εκχωρηθεί δεδομένα εδώ // αποστολή δεδομένων σχεδίου σε μορφή CSV DateTime now = rtc.now (); sendDateTime (& τώρα); // αποστολή εεεε/Μ/η/η: m: s στο parser.print, διεύθυνση διεύθυνσης & ως arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Το οικόπεδο 2 είναι κρυφό. Δεν στάλθηκαν δεδομένα. parser.print (','); // Το οικόπεδο 3 είναι κρυφό. Δεν στάλθηκαν δεδομένα. parser.println (); // τέλος της εγγραφής δεδομένων CSV}}

Το τμήμα/2019/4/19 3: 33: 5 της απάντησης {@ επιτρέπει στο pfodApp να γνωρίζει τι πιστεύει ότι η συσκευή pfodDevice είναι η τρέχουσα ημερομηνία και ώρα. Στη συνέχεια, το σκίτσο σας μπορεί να στείλει δεδομένα με χρονικές σφραγίδες yMd Hms και το pfodApp θα τα σχεδιάσει είτε ως χρόνος που πέρασε από την ώρα σύνδεσης είτε ως ημερομηνία και ώρα, ανάλογα με τη μορφή άξονα Χ που έχετε καθορίσει.

Όταν σχεδιάζετε με βάση την ημερομηνία και την ώρα, η ρουτίνα σχεδίασης pfodApp διορθώνει κάθε "μετατόπιση" στο RTC συγκρίνοντας την αναφερόμενη τρέχουσα ώρα του pfodDevice με την τρέχουσα ώρα του κινητού. Αυτή η διόρθωση χειρίζεται επίσης τη ρύθμιση του RTC σε διαφορετική ζώνη ώρας από την τοπική ζώνη ώρας του κινητού σας. millis () timestamps συνεχίζουν να λειτουργούν όπως στη Χρήση χρονικών σημάνσεων Arduino millisecond, βήμα 5 παραπάνω.

Ακολουθεί ένα παράδειγμα υπολογιστικού φύλλου θερμοκρασιών δωματίου σε διάστημα 8 ημερών, Office_Temp.xls Όταν εισήχθη το αρχείο καταγραφής, η πρώτη στήλη επισημάνθηκε ως YMD για τη μετατροπή του κειμένου σε ημερομηνία/ώρα. Πρέπει ακόμα να αφαιρέσετε την κορυφαία από την τοπική ώρα, τις καταχωρήσεις τρέχουσας ώρας UTC και Office Temp, ώστε το υπολογιστικό φύλλο να τις ερμηνεύσει ως ημερομηνίες και ώρες.

Για να λάβετε το ίδιο διάγραμμα που εμφανίζει το pfodApp, πρέπει να υπολογίσετε την "Διορθωμένη ημερομηνία/ώρα". Σε αυτήν την περίπτωση, ο χρόνος RTC είναι 2 δευτερόλεπτα πίσω από την τοπική ώρα του κινητού, οπότε σε κάθε χρονική σήμανση RTC προστίθεται (τοπική ώρα - τρέχουσα ώρα Office Temp) για να λάβετε την πραγματική τοπική ώρα.

Για τα χρονικά διαστήματα που έχουν παρέλθει, δημιουργήστε μια νέα στήλη που περιέχει την (χρονική σήμανση ημερομηνίας/ώρας-τρέχουσα ώρα του Office Time) και χρησιμοποιήστε τον ως άξονα Χ στο γράφημα (Office_TempElapsed.xls) Στην πραγματικότητα, σε αυτήν την περίπτωση, το pfodApp παράγει ωραιότερα χρονοδιαγράμματα που έχουν περάσει σε ημέρες ώρες: λεπτά: δευτ.

Βήμα 10: Χρήση μονάδας GPS

Η χρήση μιας μονάδας GPS είναι παρόμοια με τη χρήση μιας μονάδας RTC, με την εξαίρεση ότι οι μονάδες GPS διαθέτουν χιλιοστά του δευτερολέπτου, τα έτη ξεκινούν από το 2000 και ο χρόνος λείπει από τα άλματα δευτερολέπτου UTC (δείτε https://tycho.usno.navy.mil/leapsec.html) Η ημερομηνία και η ώρα GPS είναι επί του παρόντος 18 δευτερόλεπτα πριν από το UTC, τον Ιανουάριο του 2018.

Η βιβλιοθήκη Adafruit GPS για το Adafruit Ultimate GPS, σε αντίθεση με το RTClib, δεν προσθέτει την αντιστάθμιση 2000 ετών στα έτη GPS, οπότε πρέπει να προστεθεί κατά την αποστολή της ημερομηνίας και της ώρας χρονικής σήμανσης. Επίσης, παρόλο που η βιβλιοθήκη GPS παρέχει χιλιοστά του δευτερολέπτου που έχουν πολύ καλή μακροπρόθεσμη ακρίβεια, δεν είναι πολύ ακριβή. Οι ενημερώσεις χρόνου GPS είναι μόνο μία φορά κάθε 100mS και στη συνέχεια υπάρχει μια επιπλέον καθυστέρηση λήψης των σειριακών δεδομένων με αργό 9600 baud και άλλη καθυστέρηση στην ανάλυση τους. Όλα αυτά προστίθενται με ακρίβεια σε χιλιοστά του δευτερολέπτου κατά την ανάγνωση δεδομένων χρονικής σήμανσης.

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

// χειρισμός {@} request} else if ('@' == cmd) {// pfodApp ζήτησε 'τρέχουσα' ώρα plot_mSOffset = millis (); // καταγραφή τρέχοντος millis ως offset rawdata timestamps parser.print (F ("{@" 0 "}) ημερομηνία/ώρα sendDateTime (& GPS); // αποστολή εεεε/Μ/η/η: m: s στο parser.print, διεύθυνση διέλευσης & ως arg. parser.print ('}'); // τέλος της {@ απάντησης π.χ. {@`0 ~ 2019/4/19 3: 33: 5}….

// αποστολή ημερομηνίας ώρας στο parser printvoid sendDateTime (Adafruit_GPS* gps) {parser.print (F ("20"); // 20.. έτος parser.print (gps-> έτος, DEC); parser.print ('/ '); parser.print (gps-> μήνα, DEC); parser.print ('/'); parser.print (gps-> day, DEC); parser.print (' '); parser.print (gps- > ώρα, DEC); parser.print (':'); parser.print (gps-> λεπτό, DEC); parser.print (':'); parser.print (gps-> second, DEC), // parser.print ('.'); αν στέλνετε χιλιοστά του δευτερολέπτου // εάν θέλετε να στείλετε mS πρέπει να τοποθετήσετε την τιμή gps-> χιλιοστά του δευτερολέπτου με κορυφαία μηδενικά // δηλαδή το 3 πρέπει να τοποθετηθεί στο 003}

void sendData () {if (plotDataTimer.isFinished ()) {plotDataTimer.repeat (); // επανεκκίνηση χρονομέτρου δεδομένων γραφήματος, χωρίς μετατόπιση // εκχωρήστε τιμές σε μεταβλητές γραφικών από τις μεταβλητές βρόχου σας ή διαβάστε εισόδους ADC plot_1_var = analogRead (A0); // ανάγνωση εισόδου στο οικόπεδο // plot_2_var οικόπεδο Κρυμμένο, ώστε να μην έχουν εκχωρηθεί δεδομένα εδώ // plot_3_var οικόπεδο Κρυφό, έτσι δεν έχουν εκχωρηθεί δεδομένα εδώ // αποστολή δεδομένων σχεδίου σε μορφή CSV sendDateTime (& GPS); // αποστολή εεεε/Μ/η/η: m: s στο parser.print, διεύθυνση διεύθυνσης & ως arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Το οικόπεδο 2 είναι κρυφό. Δεν στάλθηκαν δεδομένα. parser.print (','); // Το οικόπεδο 3 είναι κρυφό. Δεν στάλθηκαν δεδομένα. parser.println (); // τέλος της εγγραφής δεδομένων CSV}}

Όταν σχεδιάζετε την ημερομηνία και την ώρα, το pfodApp διορθώνει αυτόματα για άλματα δευτερόλεπτα. Τον Ιανουάριο του 2018, ο χρόνος GPS είναι 18 δευτερόλεπτα μπροστά από το UTC. Το pfodApp το διορθώνει συγκρίνοντας την ημερομηνία/ώρα που επιστρέφεται από το GPS κατά τη σύνδεση, μέσω της απόκρισης {@, με την ημερομηνία και ώρα UTC του κινητού. Η δημιουργία σχεδίων σε ένα υπολογιστικό φύλλο από το αρχείο καταγραφής pfodApp είναι η ίδια όπως για τις λειτουργικές μονάδες RTC, παραπάνω. Η προσθήκη (τοπική ώρα - τρέχουσα ώρα Office Temp) στις χρονικές σημάνσεις GPS διορθώνει τα άλματα δευτερόλεπτα.

millis () timestamps συνεχίζουν να λειτουργούν όπως στη Χρήση χρονικών σημάνσεων Arduino millisecond, βήμα 5 παραπάνω.

Βήμα 11: Συμπέρασμα

Η χρήση του pfodApp σε κινητά Android σάς επιτρέπει να σχεδιάζετε δεδομένα με βάση την ημερομηνία και την ώρα ή το χρόνο που έχει παρέλθει, χρησιμοποιώντας μόνο τη συνάρτηση millis () του Arduino. Χρησιμοποιώντας το αρχείο καταγραφής pfodApp, μπορείτε να δημιουργήσετε εκ νέου αυτά τα γραφήματα ημερομηνίας/ώρας σε ένα υπολογιστικό φύλλο. Εάν το έργο σας Arduino διαθέτει μονάδα RTC, μπορείτε να καταγράψετε και να σχεδιάσετε την ημερομηνία και τις χρονικές σημάνσεις ώρας RTC, διορθώνοντας αυτόματα για την «μετατόπιση» του RTC. Εάν το έργο Arduino διαθέτει μονάδα GPS, μπορείτε να συνδεθείτε και να σχεδιάσετε τις πολύ ακριβείς χρονικές σημάνσεις του και το pfodApp θα διορθώσει αυτόματα τα άλματα του GPS που λείπουν.

Σε όλες τις περιπτώσεις τα ακατέργαστα δεδομένα από το έργο σας Arduino καταγράφονται ακριβώς όπως παραλήφθηκαν, χωρίς διόρθωση. Ωστόσο, το αρχείο καταγραφής pfodApp περιλαμβάνει επιπλέον δεδομένα για να σας επιτρέψει να δημιουργήσετε εκ νέου αυτές τις διορθώσεις σε ένα υπολογιστικό φύλλο από το αρχείο καταγραφής που έχετε κατεβάσει.

Δεν απαιτείται κωδικοποίηση Android. Όλες οι μορφές σχεδίου καθορίζονται από μικρές συμβολοσειρές κειμένου στο σκίτσο του Arduino. Το δωρεάν pfodDesigner δημιουργεί πλήρη καταγραφή δεδομένων Arduino και σκίτσα σχεδίασης για μεγάλη ποικιλία πινάκων Arduino που συνδέονται μέσω WiFi, Classic Bluetooth, BLE και SMS

Συνιστάται: