Διατηρώντας χρόνο σε έργα Arduino δεν είναι τόσο εύκολο όσο ίσως να σκεφτείτε: μόλις η σύνδεση με τον υπολογιστή δεν είναι εκεί, ο απροσδόκητος Arduino απλά σταματά να τρέχει, συμπεριλαμβανομένου του εσωτερικού του ticker.
Για να διατηρήσετε το Arduino σας σε συγχρονισμό με τον κόσμο γύρω του, θα χρειαστείτε αυτό που ονομάζεται "Ρολόι πραγματικού χρόνου". Ακολουθεί ο τρόπος χρήσης ενός.
Ποιο είναι το σημείο ενός ρολογιού πραγματικού χρόνου (RTC);
Ο υπολογιστής σας πιθανότατα συγχρονίζει το χρόνο του με το Διαδίκτυο, αλλά εξακολουθεί να έχει ένα εσωτερικό ρολόι που συνεχίζει ακόμα και χωρίς σύνδεση στο Internet ή όταν η συσκευή είναι απενεργοποιημένη. Όταν χρησιμοποιείτε ένα Arduino συνδεδεμένο σε έναν υπολογιστή, έχει πρόσβαση στον ακριβή χρόνο που παρέχεται από το ρολόι του συστήματός σας. Αυτό είναι πολύ χρήσιμο, αλλά τα περισσότερα έργα Arduino σχεδιάζονται για να χρησιμοποιηθούν μακριά από έναν υπολογιστή - σε ποιο σημείο, οποιαδήποτε στιγμή η εξουσία είναι αποσυνδεδεμένη ή το Arduino επανεκκίνηση, δεν θα έχει καμία απολύτως ιδέα για το πότε είναι. Το εσωτερικό ρολόι θα επαναρυθμιστεί και θα αρχίσει να μετράει από το μηδέν και πάλι τη στιγμή που θα τροφοδοτηθεί.
Εάν το σχέδιό σας έχει οτιδήποτε έχει να κάνει με την ανάγκη του χρόνου - όπως το νυχτερινό φως και το ρολόι ανατολής του ηλίου Arduino Night Light και Sunrise Alarm Project Το Arduino Night Light και Sunrise Alarm Project Σήμερα, θα φτιάξουμε ξυπνητήρι, Σας ξυπνάω αργά χωρίς να καταφύγετε σε μια επιθετική μηχανή θορύβου. Διαβάστε περισσότερα - πρόκειται σαφώς για ένα θέμα. Σε αυτό το έργο, πήραμε το ζήτημα ρυθμίζοντας χειροκίνητα την ώρα κάθε βράδυ με έναν αρκετά αργό τρόπο - ο χρήστης θα πιέσει το κουμπί επαναφοράς λίγο πριν να πάει για ύπνο, παρέχοντας ένα χειροκίνητο συγχρονισμό χρόνου. Είναι σαφές ότι δεν είναι μια ιδανική λύση για μεγάλο χρονικό διάστημα.
Μια μονάδα RTC είναι ένα πρόσθετο κομμάτι του κυκλώματος, που απαιτεί μια μικρή μπαταρία νομισμάτων, η οποία συνεχίζει να μετράει το χρόνο ακόμη και όταν το Arduino σας είναι απενεργοποιημένο. Μετά τη ρύθμιση μία φορά - θα κρατήσει εκείνη την ώρα για τη ζωή της μπαταρίας, συνήθως ένα καλό χρονικό διάστημα περίπου.
TinyRTC
Το πιο δημοφιλές RTC για Arduino ονομάζεται TinyRTC και μπορεί να αγοραστεί για περίπου $ 5- $ 10 στο eBay. Πιθανότατα θα χρειαστεί να προμηθευτείτε τη δική σας μπαταρία (είναι παράνομο να μεταφέρετε αυτά τα υπερπόντια προϊόντα σε πολλά μέρη) και κάποιες κεφαλίδες (οι καρφίτσες που μπαίνουν στις τρύπες, που θα χρειαστεί να κολλήσετε στον εαυτό σας).
Αυτή είναι η ενότητα που έχω:
Έχει ακόμη και έναν ενσωματωμένο αισθητήρα θερμοκρασίας, αν και η μπαταρία θα διαρκέσει περισσότερο εάν δεν τη χρησιμοποιείτε.
Ο αριθμός των τρυπών σε αυτό το πράγμα φαίνεται αρκετά τρομακτικό, αλλά χρειάζεστε μόνο τέσσερα από αυτά? GND, VCC, SCL και SDA - μπορείτε να χρησιμοποιήσετε τις αντίστοιχες ακίδες σε κάθε πλευρά της μονάδας RTC. Μιλάτε στο ρολόι χρησιμοποιώντας το πρωτόκολλο I2C, που σημαίνει ότι χρησιμοποιούνται μόνο δύο ακίδες - ένα για το "ρολόι" (ένα ρολόι σειριακών επικοινωνιών, τίποτα δεν έχει σχέση με το χρόνο) και ένα για τα δεδομένα. Στην πραγματικότητα, μπορείτε να συνδέσετε ακόμη και 121 συσκευές I2C στις ίδιες δύο ακίδες - δείτε αυτή τη σελίδα του Adafruit για μια επιλογή από άλλες συσκευές I2C που θα μπορούσατε να προσθέσετε, επειδή υπάρχουν πολλά!
Ξεκινώντας
Συνδέστε τη μονάδα TinyRTC σύμφωνα με το διάγραμμα παρακάτω - η ροζ γραμμή DS δεν χρειάζεται, όπως συμβαίνει στον αισθητήρα θερμοκρασίας.
Στη συνέχεια, κάντε λήψη των βιβλιοθηκών Time and DS1307RTC και τοποθετήστε τους φακέλους που προκύπτουν στον φάκελό σας / βιβλιοθήκες .
Έξοδος και επανεκκίνηση του περιβάλλοντος Arduino για φόρτωση στις βιβλιοθήκες και παραδείγματα.
Θα βρείτε δύο παραδείγματα στο μενού DS1307RTC: μεταφορτώστε και τρέξτε πρώτα το παράδειγμα SetTime - αυτό θα ρυθμίσει το RTC στη σωστή ώρα. Ο πραγματικός κώδικας δεν αξίζει να μπει σε λεπτομέρεια με, απλά ξέρετε ότι πρέπει να το εκτελέσετε μία φορά για να εκτελέσετε τον αρχικό συγχρονισμό ώρας.
Στη συνέχεια, δείτε το παράδειγμα χρήσης με το ReadTest .
#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number
Σημειώστε ότι έχουμε συμπεριλάβει επίσης τη βασική βιβλιοθήκη Wire.h - αυτή έρχεται με Arduino και χρησιμοποιείται για επικοινωνία μέσω I2C. Μεταφορτώστε τον κώδικα, ανοίξτε τη σειριακή κονσόλα στα 9600 baud και παρακολουθήστε και το Arduino σας εξάγει την τρέχουσα ώρα κάθε δευτερόλεπτο. Θαυμάσιος!
Ο πιο σημαντικός κώδικας στο παράδειγμα είναι η δημιουργία ενός tmElements_t tm - μια δομή που θα γεμίσει με την τρέχουσα ώρα. και η συνάρτηση RTC.read (tm), η οποία παίρνει την τρέχουσα ώρα από τη μονάδα RTC, την τοποθετεί στη δομή μας tm και επιστρέφει αλήθεια αν όλα πάνε καλά. Προσθέστε τον κώδικα εντοπισμού σφαλμάτων ή τον λογικό σας κώδικα μέσα σε αυτή τη δήλωση "if", όπως την εκτύπωση του χρόνου ή την αντίδραση σε αυτό.
Τώρα που ξέρετε πώς μπορείτε να πάρετε την κατάλληλη στιγμή με τον Arduino, θα μπορούσατε να δοκιμάσετε να ξαναγράψετε το έργο συναγερμού ανατολής ή να δημιουργήσετε ένα ρολόι λέξεων LED - οι δυνατότητες είναι ατελείωτες! Τι θα κάνετε;
Συντελεστές εικόνας: Snootlab Via Flickr