Διαφήμιση
Η διατήρηση του χρόνου στα έργα Arduino δεν είναι τόσο εύκολη όσο νομίζετε: όταν δεν υπάρχει σύνδεση με τον υπολογιστή, το μη εξουσιοδοτημένο Arduino σταματά να λειτουργεί, συμπεριλαμβανομένου του εσωτερικού του.
Για να διατηρήσετε το Arduino σας σε συγχρονισμό με τον κόσμο γύρω του, θα χρειαστείτε αυτό που ονομάζεται "ενότητα πραγματικού ρολογιού". Δείτε πώς χρησιμοποιείται ένα.
Ποιο είναι το νόημα ενός ρολογιού πραγματικού χρόνου (RTC);
Ο υπολογιστής σας πιθανότατα συγχρονίζει το χρόνο του με το Διαδίκτυο, αλλά εξακολουθεί να έχει ένα εσωτερικό ρολόι που συνεχίζει ακόμη και χωρίς σύνδεση στο Διαδίκτυο ή η τροφοδοσία είναι απενεργοποιημένη. Όταν χρησιμοποιείτε ένα Arduino συνδεδεμένο σε υπολογιστή, έχει πρόσβαση σε ακριβή χρόνο που παρέχεται από το ρολόι του συστήματός σας. Αυτό είναι αρκετά χρήσιμο, αλλά τα περισσότερα έργα Arduino έχουν σχεδιαστεί για να χρησιμοποιούνται μακριά από έναν υπολογιστή - στον οποίο σημείο, κάθε φορά που το ρεύμα αποσυνδέεται ή το Arduino ξαναρχίζει, δεν θα έχει απολύτως ιδέα για το τι ώρα είναι. Το εσωτερικό ρολόι θα επαναφερθεί και θα αρχίσει να μετρά ξανά από το μηδέν την επόμενη φορά που θα ενεργοποιηθεί.
Εάν το έργο σας έχει σχέση με την ανάγκη του χρόνου - όπως το δικό μου ξυπνητήρι νυχτερινού φωτός και ανατολής Έργο Arduino Night Light και Sunrise AlarmΣήμερα, θα φτιάχνουμε ένα ξυπνητήρι, το οποίο θα σας ξυπνήσει απαλά και αργά χωρίς να καταφύγετε σε μια επιθετική μηχανή θορύβου. Διαβάστε περισσότερα - πρόκειται σαφώς για ένα ζήτημα. Σε αυτό το έργο, επιλύσαμε το ζήτημα ρυθμίζοντας χειροκίνητα την ώρα κάθε βράδυ σε ένα μάλλον αργό τρόπος - ο χρήστης θα πατήσει το κουμπί επαναφοράς λίγο πριν πάτε για ύπνο, παρέχοντας χειροκίνητο χρόνο συγχρονισμός Είναι σαφές ότι δεν είναι μια ιδανική λύση για μεγάλο χρονικό διάστημα
Μια μονάδα RTC είναι ένα επιπλέον κομμάτι κυκλώματος, που απαιτεί μια μικρή μπαταρία νομισμάτων, η οποία συνεχίζει να μετρά τον χρόνο ακόμη και όταν το Arduino είναι απενεργοποιημένο. Αφού ρυθμιστεί μία φορά - θα διατηρήσει αυτόν τον χρόνο για τη διάρκεια ζωής της μπαταρίας, συνήθως μια καλή χρονιά.
TinyRTC
Το πιο δημοφιλές RTC για το Arduino ονομάζεται TinyRTC και μπορεί να αγοραστεί για περίπου $ 5- $ 10 στο eBay. Πιθανότατα θα πρέπει να παρέχετε τη δική σας μπαταρία (είναι παράνομο να τα μεταφέρετε στο εξωτερικό σε πολλά μέρη) και ορισμένες κεφαλίδες (οι καρφίτσες που εισάγονται στις τρύπες, τις οποίες θα πρέπει να κολλήσετε μόνοι σας).
Αυτή είναι η ενότητα που έχω:

Διαθέτει ακόμη και έναν ενσωματωμένο αισθητήρα θερμοκρασίας, αν και η μπαταρία θα διαρκέσει περισσότερο αν δεν τη χρησιμοποιείτε.
Ο αριθμός των τρυπών σε αυτό το πράγμα φαίνεται αρκετά τρομακτικό, αλλά χρειάζεστε μόνο τέσσερις από αυτές. GND, VCC, SCL και SDA - μπορείτε να χρησιμοποιήσετε τις σχετικές καρφίτσες και στις δύο πλευρές της μονάδας RTC. Μιλάτε με το ρολόι χρησιμοποιώντας Πρωτόκολλο I2C, που σημαίνει ότι χρησιμοποιούνται μόνο δύο ακίδες - μία για το "ρολόι" (ένα ρολόι δεδομένων σειριακής επικοινωνίας, δεν έχει σχέση με το χρόνο) και ένα για τα δεδομένα. Στην πραγματικότητα, μπορείτε ακόμη και να συνδέσετε έως και 121 συσκευές I2C στις ίδιες δύο καρφίτσες - δείτε αυτήν τη σελίδα Adafruit για μια επιλογή άλλων συσκευών I2C που θα μπορούσατε να προσθέσετε, επειδή υπάρχουν πολλά!
Ξεκινώντας
Συνδέστε τη μονάδα TinyRTC σύμφωνα με το παρακάτω διάγραμμα - η ροζ γραμμή DS δεν απαιτείται, όπως ισχύει για τον αισθητήρα θερμοκρασίας.

Στη συνέχεια, κατεβάστε το χρόνος και DS1307RTC βιβλιοθήκες και τοποθετήστε τους φακέλους που προκύπτουν /libraries ντοσιέ.
Έξοδος και επανεκκίνηση του περιβάλλοντος Arduino για φόρτωση στις βιβλιοθήκες και παραδείγματα.
Θα βρείτε δύο παραδείγματα στο μενού DS1307RTC: μεταφόρτωση και εκτέλεση του Ρύθμιση ώρας πρώτο παράδειγμα - αυτό θα ρυθμίσει το RTC στη σωστή ώρα. Ο πραγματικός κώδικας δεν αξίζει να εξεταστεί λεπτομερώς, απλώς ξέρετε ότι πρέπει να τον εκτελέσετε μία φορά για να εκτελέσετε τον αρχικό συγχρονισμό χρόνου.
Στη συνέχεια, δείτε το παράδειγμα χρήσης με Διαβάστε το τεστ.
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω άκυρη ρύθμιση () {Serial.begin (9600); ενώ (! Serial); // περιμένετε για σειριακή καθυστέρηση (200) Serial.println ("DS1307RTC ανάγνωση δοκιμής"); Serial.println (""); } άκυρος βρόχος () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Ωρα); Serial.write (':'); print2digits (tm. Λεπτό); Serial.write (':'); print2digits (tm. Δεύτερος); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Ημέρα); Serial.write ('/'); Serial.print (tm. Μήνας); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Ετος)); Serial.println (); } αλλιώς {if (RTC.chipPresent ()) {Serial.println ("Το DS1307 έχει σταματήσει. Εκτελέστε το SetTime "); Serial.println ("παράδειγμα για την προετοιμασία του χρόνου και την έναρξη της εκτέλεσης."); Serial.println (); } αλλιώς {Serial.println ("DS1307 σφάλμα ανάγνωσης! Ελέγξτε το κύκλωμα. "); Serial.println (); } καθυστέρηση (9000) } καθυστέρηση (1000) } άκυρο print2digits (αριθμός int) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (αριθμός); }
Λάβετε υπόψη ότι έχουμε συμπεριλάβει επίσης τον πυρήνα Wire.h βιβλιοθήκη - έρχεται με το Arduino και χρησιμοποιείται για επικοινωνία μέσω I2C. Ανεβάστε τον κωδικό, ανοίξτε τη σειριακή κονσόλα στα 9600 baud και παρακολουθήστε και το Arduino σας εξάγει την τρέχουσα ώρα κάθε δευτερόλεπτο. Θαυμάσιος!
Ο πιο σημαντικός κώδικας στο παράδειγμα είναι η δημιουργία ενός tmElements_t tm - αυτό α δομή ότι θα συμπληρωθούμε με την τρέχουσα ώρα. και το RTC.read (tm) Η συνάρτηση, η οποία παίρνει την τρέχουσα ώρα από τη μονάδα RTC, την βάζει στο δικό μας τμ δομή και επιστρέφει αληθινή αν όλα πήγαν καλά. Προσθέστε τον κωδικό εντοπισμού σφαλμάτων ή τη λογική σας μέσα σε αυτήν τη δήλωση "if", όπως εκτύπωση του χρόνου ή αντίδραση σε αυτήν.
Τώρα που ξέρετε πώς να αποκτήσετε τη σωστή στιγμή με το Arduino, θα μπορούσατε να δοκιμάσετε να ξαναγράψετε το έργο συναγερμού sunrise ή να δημιουργήσετε ένα ρολόι λέξεων LED - οι πιθανότητες είναι ατελείωτες! Τι θα φτιάξεις;
Συντελεστές εικόνας: Snootlab Μέσω του Flickr
Ο James έχει πτυχίο Τεχνητής Νοημοσύνης και είναι πιστοποιημένο με CompTIA A + και Network +. Είναι ο κύριος προγραμματιστής του MakeUseOf και περνά τον ελεύθερο χρόνο του παίζοντας VR paintball και boardgames. Δημιουργεί υπολογιστές από τότε που ήταν παιδί.