Arduino απλό ρολόι. Ρολόι στο Arduino χωρίς να χρησιμοποιήσετε τη μονάδα RTC

Καλή μέρα. Στο σημερινό άρθρο θα παράγει ασυνήθιστα δυαδικά ρολόγια με βάση το Arduino Ατακτος Χεριών. Έχοντας κατανοηθεί με τη διαδικασία δημιουργίας ενός παρόμοιου χειροτεχνίαΣτο μέλλον μπορείτε να επαναλάβετε τα δυαδικά ρολόγια οποιουδήποτε σχεδίου.

Βήμα 1: Τι είναι το δυαδικό ρολόι;

Για να ξεκινήσουμε, ας θυμηθούμε ότι ένας τέτοιος δυαδικός (δυαδικός) αριθμός είναι ο αριθμός που παρουσιάζεται στο δυαδικό σύστημα λογισμικού, Αριθμητικές τιμέςΌτι χρησιμοποιούνται μόνο δύο σύμβολα: 0 (μηδέν) και 1 (ένα).

Το δυαδικό ρολόι είναι ένα ρολόι που εμφανίζει το χρόνο σε δυαδική μορφή. Το έργο χρησιμοποιεί 6 στήλες LED για την εμφάνιση μηδενικών και μονάδων. Κάθε στήλη εμφανίζει ένα ψηφίο / εκφόρτιση, μια τέτοια μορφή είναι γνωστή ως Δυαδικός-δεκαδικός αριθμός (Ddh). Κάθε γραμμή εμφανίζει ένα βαθμό, από 2 ^ 0 (ή 1), σε 2 ^ 3 (ή 8). Ως εκ τούτου, όλα όσα χρειάζονται όταν η ανάγνωση πληροφοριών από το ρολόι είναι να συνοψίσουμε τις τιμές των ηχείων με τα leds. Για παράδειγμα, η πρώτη στήλη περιλαμβάνει το 4ο και το 1ο LED. Προσθέτουμε 8 έως 1 και λαμβάνουμε 9 (ο αριθμός των δευτερολέπτων είναι 9). Η επόμενη στήλη του δέκατου δευτερολέπτου, μόνο η 3η λυχνία LED είναι λαμπερή σε αυτήν, οπότε η γενική τιμή θα είναι 49 δευτερόλεπτα, ακριβώς με λεπτά και ώρες. Παρακαλείστε να σημειώσετε ότι το παρακάτω ρολόι εμφανίζει το χρόνο στην 24ωρη μορφή.

Βήμα 2: Σύνθετα μέρη

  • Arduino. Pro. Μίνι. 328 5 V. Χρησιμοποιείται μια τέτοια χρέωση, αλλά στην πραγματικότητα μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο. Εάν δεν έχετε χρησιμοποιήσει ποτέ Pro Mini.τότε πιθανότατα θα χρειαστείτε CP.2102 (προγραμματιστής) Για να συνδέσετε την πλακέτα στον υπολογιστή.

  • Ds.1302 - Ενότητα Ρολόγου σε πραγματικό χρόνο;

  • 20-mm διάχυτες "ζεστές" LED(Σας συμβουλεύω να πάρετε με ένα αποθεματικό).

  • 20 αντιστάσεις με βαθμολογία αντοχής 10Ω.

  • 2 κουμπιά ρολογιού.

  • 2 αντιστάσεις με τιμή αντοχής 10k (που χρησιμοποιείται ως αντιστάσεις φορτίου).

Βήμα 3: Παραγωγή του πρωτοτύπου

Ας αρχίσουμε να κάνουμε το πρωτότυπο του μέλλοντος χειροτεχνία. Κατ 'αρχήν, αυτό δεν αποτελεί προϋπόθεση, αλλά είναι απαραίτητο να εξετάσουμε τον τρόπο με τον οποίο θα λειτουργήσει ο οδηγημένος Matrix, Arduino και η μονάδα ρολογιού. Σε πρωτότυπα, χρησιμοποίησα Arduino Mega και απλά κόκκινα LED. Όλα λειτουργούν καλά όπως αναμένεται.

Βήμα 4: Θήκη

Στέγαση selfeeckers(αποτελείται από δύο μισά ) Θα γίνει ξύλο. Θα φανεί αντίθεση με το φόντο των δυαδικών ρολογιών και να δώσει σκάφος Ρετρό στυλ.

Βήμα 5: Σχέδιο

Οι λυχνίες LED ομαδοποιούνται στη μήτρα για τη μείωση του αριθμού των συμπερασμάτων Conded Arduino. Στην περίπτωσή μας, τα 9 συμπεράσματα ανατίθενται στο Matrix. Αφού πραγματοποιήσουμε το LED Matrix, εξάγουμε εξόδους στο Arduino, τότε η μονάδα ρολογιού, τα κουμπιά για τη ρύθμιση του χρόνου και στο τέλος της τροφοδοσίας.

Βήμα 6: Κωδικός

Δεδομένου ότι η βάση του κώδικα λαμβάνεται από ένα παράδειγμα με το Arduino Playgroud Post για τη μονάδα ρολογιού DS1302. Μετά από αυτό, έγιναν αλλαγές για την εμφάνιση του χρόνου στη μήτρα LED.

Χρειάστηκε κάπως να κάνει μεγάλο Ρολόι τοίχου Με αυτόματη φωτεινότητα.

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

Κάνετε ένα τέτοιο μεγάλο ρολόι τοίχου δεν υποβάλλει σοβαρές δυσκολίες χρησιμοποιώντας αυτές τις οδηγίες.


Για να εκτιμήσετε το μέγεθος του ρολογιού, μπορείτε να πάρετε το γεγονός ότι ένα τμήμα ρολογιού θα είναι το μέγεθος του χαρτιού μορφής A4, το οποίο θα διευκολύνει το πλαίσιο της χρήσης του πλαισίου για φωτογραφίες του κατάλληλου μεγέθους.

Βήμα 1. Σύνθετα μέρη μεγάλων ρολογιών τοίχου.

Καλώδια, συγκόλληση, συγκόλληση σιδήρου, οδήγησε κορδέλα Arduino Nano. Μετατροπέας DC-DC LM2596
4 μέτρα LED ταινία WS2811 φωτοανιχνευτής Ρολόι πραγματικού χρόνου DS3231
Μικροσκοπικά

Τι χρησιμοποίησα για αυτό το έργο:

Βήμα 8. Προγραμματίζουμε το ρολόι.

Έχουν λίγο, κατάφερα να πάρω ένα ρολόι πλήρως ικανοποιώντας τις ανάγκες μου. Είμαι βέβαιος ότι θα μπορέσετε να κάνετε το καλύτερό μου.

Ο κώδικας είναι καλά προετοιμασμένος και δεν θα είστε δύσκολο για να κατανοήσετε, τα μηνύματα εντοπισμού σφαλμάτων σχολιάζουν επίσης πολύ καλά.

Εάν πρέπει να αλλάξετε το χρώμα του ρολογιού τοίχου, πρέπει να αλλάξετε τη μεταβλητή στη γραμμή 22 ( int ledcolor \u003d 0x0000ff; // Χρώμα χρώματος (σε hex)). Μπορείτε να βρείτε μια λίστα με χρώματα και τους κωδικούς τους στο Hex στη σελίδα: https: //github.com/fasted/fasted/wiki/pixel-refe ...

Εάν έχετε προβλήματα κατά τη λήψη, χρησιμοποιήστε τον καθρέφτη: http: //bit.ly/1qjtgg0

Το τελικό σκίτσο μου μπορεί να μεταφορτωθεί.

Βήμα 9. Κάνουμε αριθμούς χρησιμοποιώντας πολυστυρένιο.

Ίδρυση κοπής Εργαζόμενος κοπής Γενική άποψη του κόπτη
Το αποτέλεσμα του έργου του κόπτη

Κόψτε κάθε τμήμα στο πρότυπο που εκτυπώνεται στην αρχή.
Το πολυστυρένιο μπορεί να κοπεί με ένα αιχμηρό μαχαίρι, το οποίο είναι αρκετά δύσκολο, ή ένα μη ολισθηρό εξάρτημα από το καλώδιο του Nichrome ή μια συμβολοσειρά κιθάρας και πολλά τμήματα της σόμπας OSB.

Μπορείτε να δείτε πώς έκανα στις παραπάνω εικόνες.

Για να τροφοδοτήσετε τον κόπτη, χρησιμοποίησα την τροφοδοσία ισχύος 12V.

Ως αποτέλεσμα, οι περικοπές πρέπει να είναι τέσσερα τμήματα για μεγάλα ρολόγιαΈνα από τα οποία εμφανίζεται στη φωτογραφία.

Βήμα 10. Κλείνετε τους αριθμούς και κλείνουμε όλα τα διαστήματα. Τελικά μεγάλα ρολόγια τοίχου.

Ημέρα λάμψης Λάμψη νύχτα

Μετά την περικοπή και τα τέσσερα ψηφία και τα σημεία των ρολογιών τοίχου, τα κολλάμε όλα στο χαρτόνι με οδήγησε κορδέλες (για να απλοποιήσει τη διαδικασία, χρησιμοποίησα αμφίδρομη κολλητική ταινία)

Προκειμένου να διαλύσει ένα σκληρό Φως LED Χρησιμοποίησα δύο φύλλα χαρτιού πάνω από ψηφία πολυστυρένιο. Για ευκολία και αισθητική, χρησιμοποίησα το μέγεθος του A2, διπλωμένο δύο φορές.

Μετά την ολοκλήρωση όλων αυτών των βημάτων, έβαλα το συναρμολόγητο συναρμολόγησης μεγάλων ρολογιών τοίχου στο αντίστοιχο μεγάλο πλαίσιο φωτογραφιών.

Αυτό το ρολόι αποδείχθηκε πολύ θεαματικό και προσελκύει τα μάτια. Νομίζω ότι αυτό το μεγάλο ρολόι τοίχου θα διακοσμήσει τέλεια πολλά δωμάτια.

Σε επαφή με

Έτσι, το ρολόι σε πραγματικό χρόνο. Αυτό το χρήσιμο πράγμα λύνει τις περισσότερες από τις χρήσιμες εργασίες που σχετίζονται με το χρόνο. Ας υποθέσουμε τη διαχείριση του πότισμα στις 5 π.μ. στη χώρα. Ή ενεργοποιήστε και απενεργοποιήστε το φως σε ένα συγκεκριμένο σημείο. Μέχρι την ημερομηνία, μπορείτε να εκτελέσετε θέρμανση σε κάποιο σπίτι. Το πράγμα είναι πολύ ενδιαφέρον και χρήσιμο. Και πιο συγκεκριμένα; Θα εξετάσουμε το ρολόι DS1302 σε πραγματικό χρόνο για τη δημοφιλή πλατφόρμα Arduino.

Από αυτό το άρθρο θα μάθετε:

Καλή μέρα, αγαπητοί αναγνώστες Kip-World Block! Πώς είσαι; Γράψτε στα σχόλια, σας αρέσει η ρομποτική; Τι σημαίνει αυτό το θέμα για εσάς;

Δεν αφήνω την ιδέα για ένα λεπτό γι 'αυτό. Κοιμάμαι και βλέπω όταν τελικά έρχονται στο γεγονός ότι όλοι μπορούν να αντέξουν οικονομικά να αγοράσουν ένα προσωπικό ρομπότ - βοηθός. Δεν έχει σημασία τι θα κάνει, καθαρισμός σκουπιδιών, χλοοτάπητα κούρεμα, πλύσιμο αυτοκινήτων.

Φαντάζομαι μόνο πόσο δύσκολους αλγόριθμους θα πρέπει να περιέχουν στο "μυαλό τους".

Μετά από όλα, θα έρθουμε στο γεγονός ότι θα αναβοσβήσουμε επίσης το λογισμικό με τους προσωπικούς υπολογιστές. Επίσης κατεβάστε τα εφαρμοσμένα προγράμματα. Ράφια, πόδια, αλλαγή νύχια, χειριστές.

Κοιτάξτε τις ταινίες "i-ρομπότ", " Τεχνητή νοημοσύνη"," Αστέρι πολεμιστές ".

Οι Ιάπωνες έχουν εφαρμόσει καιρό τις εξελίξεις τους. Τι είναι χειρότερο; Έχουμε πολύ αδύναμη δημοτικότητα. Ξέρω λίγους προγραμματιστές. Για τα δάχτυλα να επανυπολογούν. Ασχολούμαστε με άλλους. Είμαστε έμποροι. Αγοράζουμε μόνο έτοιμα σύνολα, ρομπότ - παιχνίδια και όλα τα τρίψιμο.

Γιατί δεν το αναπτύσσετε:

Ή αυτό είναι:

Τελείωσα τις σκέψεις μου δυνατά. Ας μιλήσουμε για να συνδέσετε το χρονοδιακόπτη σε πραγματικό χρόνο DS1302 στο Arduino.

Πραγματικός χρόνος ds1302

Ο ελεγκτής Arduino δεν έχει τις δικές του ώρες. Επομένως, εάν είναι απαραίτητο, πρέπει να συμπληρώσετε το ειδικό μικροκυττάρου DS1302.

Με τη διατροφή, αυτές οι σανίδες μπορούν να χρησιμοποιήσουν τις μπαταρίες τους ή να αναφέρονται απευθείας από το τέλος Arduino.

Πίνακας PINOUT:

Σύνδεση Διάγραμμα C Arduino Uno:


Μέθοδος προγραμματισμού Arduino για την εργασία με το DS1302

Βεβαιωθείτε ότι έχετε λήξει μια έγκυρη βιβλιοθήκη από αξιόπιστες πηγές.

Η βιβλιοθήκη σάς επιτρέπει να διαβάσετε και να γράψετε παραμέτρους σε πραγματικό χρόνο. Μικρή περιγραφή που αναφέρω παρακάτω:

#Περιλαμβάνω. // Συνδέστε τη βιβλιοθήκη.
oparduino_rtc. ΕΝΑ ΑΝΤΙΚΕΙΜΕΝΟ (Τίτλος [, Output_st [, Output_clk [, Output_dat]]] ); // Δημιουργήστε ένα αντικείμενο.

Λειτουργία να αρχίσει (); // Αρχικοποίηση της λειτουργίας της μονάδας RTC.

Λειτουργία Οίκος (Sec [min [, ώρα [, ημέρα [, μήνα [, έτος [, ημέρα]]]]]] ); // Ρύθμιση χρόνου.

Λειτουργία gettime ([Γραμμή] ); // χρόνος διαβασματός.

λειτουργία blinktime ([Συχνότητα] Παράμετρος ); // προκαλεί τη λειτουργία gettime να "flash" την καθορισμένη παράμετρο ώρας.

λειτουργία περίοδος (Λεπτά ); // Υποδεικνύει την ελάχιστη περίοδο αναφοράς στην ενότητα σε λεπτά.

Μεταβλητός Δευτερόλεπτα.// επιστρέφει δευτερόλεπτα από 0 έως 59.

Μεταβλητός Λεπτά.// επιστρέφει λεπτά από 0 έως 59.

Μεταβλητός Ωρες// Επιστρέφει το ρολόι από 1 έως 12.

Μεταβλητός Ωρες// Επιστρέφει το ρολόι από 0 έως 23.

Μεταβλητός Μεσημέρι.// επιστρέφει το μεσημέρι 0 ή 1 (0-AM, 1-μ.μ.).

Μεταβλητός Ημέρα.// Επιστρέφει την ημέρα του μήνα από 1 έως 31.

Μεταβλητός Καθημερινή.// Επιστρέφει την ημέρα της εβδομάδας από 0 έως 6 (0-Κυριακή, 6-Σάββατο).

Μεταβλητός ΜΗΝΑΣ.// επιστρέφει ένα μήνα από 1 έως 12.

Μεταβλητός έτος.// επιστρέφει το έτος από το 0 έως 99.

Γράφουμε ένα απλό πρόγραμμα. Ορίστε την τρέχουσα ώρα στη μονάδα RTC (DS1302):

Arduino.

#Περιλαμβάνω. Χρόνος ovarduino_rtc (RTC_DS1302,6,7,7); κενή εγκατάσταση () (καθυστέρηση (300) · Serial.begin (9600) · Time.Begin () · Time.Settime (0,51,21,27,10,15,2); // 0 δευτερόλεπτα, 51 λεπτά, 21 ώρες , 27, Οκτώβριος, 2015, Τρίτη) Void Loop () (αν (Millis ()% 1000 \u003d\u003d 0) (// Εάν 1 δευτερόλεπτο serial.println (Time.GeTTime ("DMY, H: I: S, D" )) · // πάρτε τη χρονική καθυστέρηση (1) · // αναστολή από 1 ms, έτσι ώστε να μην εξάγουμε τον χρόνο αρκετές φορές για 1 ms))

#Περιλαμβάνω.

ovarduino _ RTCTime (RTC_DS1302, 6, 7, 8).

κενή εγκατάσταση () (

Καθυστέρηση (300).

Κατα συρροη. Ξεκινήστε (9600).

Χρόνος. να αρχίσει ();

Χρόνος. Ρύθμιση (0, 51, 21, 27, 10, 15, 2). // 0 δευτερόλεπτα, 51 λεπτά, 21 ώρες, 27, Οκτώβριος, 2015, Τρίτη

κενό βρόχο () (

Εάν (Millis ()% 1000 \u003d\u003d 0) ( // αν περάσει 1 δευτερόλεπτο

Κατα συρροη. Println (χρόνος. Λήψη ("d-m-y, H: i: s, d")); // Πάρε χρόνο

Καθυστέρηση (1); // αναστέλλουν από 1 ms, έτσι ώστε να μην εξάγουμε τον χρόνο αρκετές φορές για 1 ms

Διαβάστε την τρέχουσα ώρα με τη μονάδα RTC (DS1302) και εμφανίστε μια "σειριακή θύρα":

#Περιλαμβάνω. Χρόνος ovarduino_rtc (RTC_DS1302,6,7,7); κενή εγκατάσταση () (καθυστέρηση (300). serial.begin (9600) · time.begin () ·) κενό βρόχο () (αν (millis ()% 1000 \u003d\u003d 0) (// αν 1 δευτερόλεπτο serial.println πέρασε (Time.EgetTime ("DMY, H: I: S, D")); // Πάρτε τη χρονική καθυστέρηση (1); // αναστέλλει σε 1 ms, έτσι ώστε να μην εξάγουμε τον χρόνο αρκετές φορές για 1 ms))

Στο άρθρο θα εξοικειωθείτε με μια εξαιρετική μονάδα ρολογιού σε πραγματικό χρόνο στην μπαταρία.

Με αυτήν την ενότητα, μπορείτε να παρακολουθήσετε το χρόνο στα έργα σας στο Arduino, ακόμη και σε περίπτωση επαναπρογραμματισμού ή απενεργοποίησης. Αυτό είναι ένα από τα απαραίτητα στοιχεία για τα έργα ξυπνητήρι, συναγερμοί, αφαίρεση των αναγνώσεων από αισθητήρες σε πραγματικό χρόνο. Ένα από τα πιο δημοφιλή μοντέλα της μονάδας ρολογιού σε πραγματικό χρόνο είναι το DS1307. Είναι σε αυτό που θα σταματήσουμε. Η μονάδα συνδυάζεται τέλεια με τους μικροελεγκτές Arduino, στις οποίες η διατροφή της λογικής είναι 5 V.

Χαρακτηριστικά της ενότητας από τον κατασκευαστή του Adafruit (η κινεζική προσφορά προσφέρει παρόμοιες επιλογές σε τρεις ή τέσσερις φθηνότερες):

  • All inclusive: τσιπ, ταινία, μπαταρία;
  • Εύκολα και εύκολο στη χρήση.
  • Είναι εγκατεστημένο σε οποιαδήποτε παρτίδα ή συνδεθεί άμεσα χρησιμοποιώντας καλώδια.
  • υπάρχει Εξαιρετικές βιβλιοθήκες και σκιαγραφικά παραδείγματα.
  • Δύο οπές για τοποθέτηση.
  • Διάρκεια εργασίας - Περίπου πέντε χρόνια!

Η μονάδα ρολογιού σε πραγματικό χρόνο μπορεί να είναι ήδη πασπαλισμένο και μπορεί να πωληθεί με τη μορφή μεμονωμένων εξαρτημάτων, των οποίων η συγκόλληση θα διαρκέσει περίπου 15 λεπτά, όχι περισσότερο.

Τι είναι το ρολόι πραγματικού χρόνου;

Παρακολουθήστε πολύ χρόνο είναι ... ώρες. Η ενότητα εκτελείται από το αυτόνομο τροφοδοτικό - μπαταρίες και συνεχίζει να μετράει το χρόνο, ακόμα και αν το έργο σας έχει πάει στο Arduino. Χρησιμοποιώντας την ενότητα σε πραγματικό χρόνο, μπορείτε να παρακολουθείτε χρόνο, ακόμα και αν θέλετε να κάνετε αλλαγές στο σκίτσο σας και να επαναπρογραμματίσετε τον μικροελεγκτή.

Στις περισσότερους μικροελεγκτές, συμπεριλαμβανομένου του Arduino, υπάρχει ένας ενσωματωμένος χρονικός μετρητής, ο οποίος ονομάζεται Millis (). Υπάρχουν χρονομετρητές ενσωματωμένοι στο τσιπ που μπορούν να παρακολουθήσουν μεγαλύτερες περιόδους (λεπτά ή ημέρες). Γιατί λοιπόν έχετε μια ξεχωριστή μονάδα ωρών; Το κύριο πρόβλημα είναι ότι το Millis () παρακολουθεί το χρόνο μόνο από την παροχή ρεύματος στο Arduino. Δηλαδή, μόλις αποσυνδεθεί το διοικητικό συμβούλιο, ο χρονομετρητής εκκενώνεται στο 0. Το Prosh Arduino δεν το ξέρει ότι τώρα, για παράδειγμα, την Πέμπτη ή την 8η Μαρτίου. Το μόνο που μπορείτε να φτάσετε από τον ενσωματωμένο μετρητή είναι ότι "14.000 χιλιοστά του δευτερολέπτουν έχουν περάσει από την τελευταία ένταξη".

Για παράδειγμα, δημιουργήσατε ένα πρόγραμμα και θέλετε να μετρήσετε το χρόνο από τώρα και στο εξής. Εάν απενεργοποιήσετε τη δύναμη του μικροελεγκτή, ο μετρητής χρόνου θα αγοράσει. Για τον τρόπο που συμβαίνει με το φθηνό Κινέζικο ρολόι: Όταν η μπαταρία κάθεται, αρχίζουν να αναβοσβήνουν με τη μαρτυρία των 12:00.

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

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

Θα εξετάσουμε ένα παράδειγμα χρήσης ρολογιού σε πραγματικό χρόνο DS1307. Πρόκειται για μια φτηνή, εύχρηστη μονάδα που λειτουργεί για αρκετά χρόνια από μια μικρή μπαταρία.

Ενώ η μπαταρία στην ίδια τη μονάδα δεν εξαντλήσει τη φόρτιση, το DS1307 θα πραγματοποιήσει αντίστροφη μέτρηση, ακόμη και αν το Arduino αποσυνδεθεί από την ισχύ ή τον επαναπρογραμματισμένο.

Κόμβοι από τους οποίους η μονάδα ρολογιού σε πραγματικό χρόνο αποτελείται

DS1307 Λεπτομέρειες ενότητας σε πραγματικό χρόνο από το Adafruit
Εικόνα Ονομασία Περιγραφή Κατασκευαστής αριθμός
IC2. Τσιπ σε πραγματικό χρόνο DS1307. 1
Q1. 32.768 KHz, 12,5 PF Crystal Γενικός. 1
R1, R2. 1/4 W 5% 2.2 COM Αντίσταση κόκκινο, κόκκινο, κόκκινο, χρυσό Γενικός. 2
C1. 0,1 μf κεραμικό συμπυκνωτή Γενικός. 1
Σιδηρόδρομος για 5 επαφές (1x5) Γενικός. 1
Μπαταρία 12 mm 3 σε μπαταρία λιθίου CR1220. 1
12mm κάτοχος κυττάρων κέρματος Keystone 3001. 1
Πληρωμή Βιομηχανίες Adafruit. 1

Συναρμολόγηση της μονάδας ρολογιού σε πραγματικό χρόνο

Συλλογή ρολογιού σε πραγματικό χρόνο DS1307 Adafruit
φωτογραφία Εξηγήσεις

Προετοιμαστείτε για τη συναρμολόγηση. Ελέγξτε όλα τα απαραίτητα εξαρτήματα και εργαλεία. Τοποθετήστε την πλακέτα κυκλώματος στο VICE.

Εφαρμόστε μια μικρή συγκόλληση σε επαφή με αρνητική μπαταρία.

Τοποθετήστε τις δύο αντιστάσεις 2.2 COM και κεραμικού πυκνωτή. Πώς ακριβώς θα τους τοποθετήσετε - δεν έχει σημασία. Η πολικότητα δεν έχει σημασία. Μετά από αυτό, ρυθμίστε τον κρύσταλλο (επίσης συμμετρικά), τον κάτοχο (εκμετάλλευση) για την μπαταρία και το τσιπ πραγματικού ρολογιού. Το τσιπ σε πραγματικό χρόνο πρέπει να ρυθμιστεί έτσι ώστε το σήμα (Groove) στο τσιπ να βρίσκεται σύμφωνα με την ονομασία στην πλακέτα κυκλώματος. Προσεκτικά κοιτάξτε τη φωτογραφία στα αριστερά, το τσιπ έχει εγκατασταθεί σωστά.


Έτσι ώστε η εκμετάλλευση για την μπαταρία να μην πέσει έξω, είναι καλύτερο να το συγκόλλουμε από πάνω. Μετά από αυτό, γυρίστε την σανίδα και και συγχωρείτε τις υπόλοιπες επαφές.

Αφαιρέστε τα υπολείμματα επαφών από αντιστάσεις, κρύσταλλο και πυκνωτή.

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

Τοποθετήστε την μπαταρία. Το επίπεδο μέρος της μπαταρίας πρέπει να είναι πάνω. Κατά μέσο όρο, η μπαταρία θα χρησιμεύσει για περίπου 5 χρόνια. Ακόμη και αν η μπαταρία βρίσκεται κάτω, μην αφήνετε την υποδοχή για το κενό.

Arduino βιβλιοθήκη για εργασία με DS1307

Το DS1307 συνδέεται εύκολα σε οποιοδήποτε μικροελεγκτή με 5 V λογικές και δυνατότητες I2C. Θα εξετάσουμε τη σύνδεση και τη χρήση αυτής της ενότητας με το Arduino.

Θα χρησιμοποιήσουμε τη βιβλιοθήκη RTCLIB για να λάβετε και να διαμορφώσετε τις αναγνώσεις από το DS1307. Εάν έχετε ερωτήσεις για να διατηρήσετε πρόσθετες βιβλιοθήκες Arduino - ελέγξτε αυτές τις οδηγίες.

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

  • Αγοράστε Arduino Uno R3;
  • Αγοράστε το Breadboard.
  • Αγοράστε τη μονάδα ρολογιού σε πραγματικό χρόνο DS1307.

Στο ρολόι πραγματικών Premune 5 Pins: 5V, GND, SCL, SDA και SQW.

  • Το 5V χρησιμοποιείται για να τροφοδοτήσει το τσιπ πραγματικού χρόνου όταν κάνετε ένα αίτημα σε αυτό για να λάβετε δεδομένα χρόνου. Εάν το σήμα 5V δεν φτάσει, το τσιπ μπαίνει στη λειτουργία "ύπνου".
  • GND - συνολική γη. Βεβαιωθείτε ότι συνδέεστε στο κύκλωμα.
  • SCL - Επαφή ρολόι I2C - Απαιτείται για την ανταλλαγή δεδομένων με ρολό σε πραγματικό χρόνο.
  • SDA - Επαφή για τα οποία τα δεδομένα από το I2C μεταδίδονται από το ρολόι σε πραγματικό χρόνο.
  • Το SQW καθιστά δυνατή τη ρύθμιση παραμέτρων παραγωγής δεδομένων ως τετράγωνο κύμα. Στις περισσότερες περιπτώσεις, αυτή η επαφή δεν χρησιμοποιείται.

Εάν ρυθμίσετε το αναλογικό PIN 3 (ψηφιακό 17) σε λειτουργία εξόδου και υψηλής λειτουργίας και αναλογική PIN 2 (ψηφιακή 16) στην έξοδο και χαμηλή λειτουργία, μπορείτε να αποθηκεύσετε ώρες σε πραγματικό χρόνο απευθείας από αυτές τις επαφές!

Συνδέστε το αναλογικό PIN 4 στο Arduino στο SDA. Αναλογικό PIN 5 στο Arduino Connect to SCL.


Σκίτσο για το Arduino.

Επαλήθευση ρολογιών σε πραγματικό χρόνο

Το πρώτο σκίτσο, το οποίο αξίζει να τρέξει είναι ένα πρόγραμμα που θα διαβάσει τα δεδομένα από τη μονάδα πραγματικού χρόνου μία φορά ανά δευτερόλεπτο.

Για έναρξη, ας δούμε τι θα συμβεί αν αφαιρέσουμε την μπαταρία και την αντικαταστήσουμε στο άλλο μέχρι να συνδεθεί το Arduino στο USB. Περιμένετε 3 δευτερόλεπτα και αφαιρέστε την μπαταρία. Ως αποτέλεσμα, το τσιπ θα επανεκκινηθεί σε ρολόι σε πραγματικό χρόνο. Μετά από αυτό, τοποθετήστε τον κωδικό που εμφανίζεται παρακάτω (ο κώδικας μπορεί επίσης να εκφορτωθεί στα Παραδείγματα → RTCLIB → DS1307 μενού Arduino ide) Και να το κατεβάσετε στο Arduino.

Θα χρειαστείτε επίσης μια βιβλιοθήκη onewire.h, μπορείτε να το κατεβάσετε

.

// Λειτουργίες ημερομηνίας και ώρας χρησιμοποιώντας το ρολόι πραγματικού χρόνου DS1307 που συνδέονται μέσω I2C. Το σκίτσο χρησιμοποιεί τη βιβλιοθήκη Wire Lib

#Include & ltwire.h & gt

#Include "rtclib.h"

Serial.begin (57600);

αν (! rtc.isrunning ()) (

Serial.println ("RTC δεν εκτελείται!");

// rtc.adjust (dateime (__ date__, __time__));

DateTime τώρα \u003d RTC.Now ();

Serial.print ("/");

Serial.print ("/");

Serial.print (τώρα.day (), DEC);

Serial.print ("");

Serial.print (":");

Serial.print (":");

Serial.println ();

Serial.print (now.unixtime ());

Serial.print ("s \u003d");

Serial.println ("d");

// Υπολογίστε την ημερομηνία: 7 ημέρες και 30 δευτερόλεπτα

Μέλλον DateTime (now.unixtime () + 7 * 86400L + 30).

Serial.Print ("NOW + 7D + 30S:");

Serial.print (μέλλον.Έως (), Δεκ);

Serial.print ("/");

Serial.print (future.month (), dec);

Serial.print ("/");

Serial.print (μέλλον.day (), DEC);

Serial.print ("");

Serial.print (future.hour (), dec);

Serial.print (":");

Serial.print (future.minute (), DEC);

Serial.print (":");

Serial.print (μέλλον.Second (), DEC);

Serial.println ();

Serial.println ();

Τώρα ανοίξτε το παράθυρο Serial Monitor και βεβαιωθείτε ότι ο ρυθμός μεταφοράς δεδομένων έχει ρυθμιστεί σωστά: σε 57600 bps.

Ως αποτέλεσμα, θα πρέπει να δείτε τα ακόλουθα στο παράθυρο Serial Monitor:


Εάν υπάρχει τροφοδοτικό σε πραγματικό χρόνο, εμφανίζεται 0: 0: 0. Δευτερόλεπτα θα κλείσει. Μετά τη ρύθμιση του χρόνου, θα πάνε μια νέα μέτρηση. Για το λόγο αυτό είναι αδύνατο να αφαιρεθεί η μπαταρία κατά τη λειτουργία της τρέχουσας μονάδας χρόνου.

Ρύθμιση χρόνου στη μονάδα ρολογιού

Στο ίδιο σκίτσο, Unavoat τη γραμμή που ξεκινά με το RTC.AdJust:

// Η παρακάτω γραμμή χρησιμοποιείται για να ρυθμίσετε την ημερομηνία και την ώρα του ρολογιού

RTC.ADJust (DateTime (__ Date__, __TIME__));

Η διαδικασία ρύθμισης της ημερομηνίας και της ώρας είναι πολύ κομψή. Αυτή η γραμμή περιλαμβάνει δεδομένα από το πάγκο σας σε Προσωπικός υπολογιστής (Κατά τη στιγμή των συγχαρητήσεων του κώδικα). Αυτά τα δεδομένα χρησιμοποιούνται για την υλικολογισμικό της μονάδας ρολογιού σε πραγματικό χρόνο. Δηλαδή, εάν ο χρόνος στον υπολογιστή σας έχει ρυθμιστεί λανθασμένα, συνιστούμε πρώτα να διορθώσετε αυτό το σφάλμα και, στη συνέχεια, μεταβείτε στο υλικολογισμικό της μονάδας ρολογιού για το Arduino.

Μετά τη ρύθμιση, ανοίξτε τη σειριακή οθόνη και βεβαιωθείτε ότι το ρολόι έχει ρυθμιστεί σωστά:


Τα παντα. Από αυτό το σημείο, τα επόμενα χρόνια, το DS1307 δεν χρειάζεται να ρυθμίσει.

Ανάγνωση χρόνου ανάγνωσης με DS1307

Μετά τη ρύθμιση του ρολογιού Real-Time DS1307, μπορεί να στείλει αιτήματα σε αυτούς. Ας εξετάσουμε μέρος του σκίτσου, στο οποίο εφαρμόζονται αυτά τα αιτήματα.

DateTime τώρα \u003d RTC.Now ();

Serial.print (now.year (), dec);

Serial.print ("/");

Serial.print (Now.Month (), DEC);

Serial.print ("/");

Serial.print (τώρα.day (), DEC);

Serial.print ("");

Serial.print (now.hour (), dec);

Serial.print (":");

Serial.print (NOWS.Minute (), DEC);

Serial.print (":");

Serial.print (now.second (), dec);

Serial.println ();

Στην ουσία, υπάρχει μια επιλογή για το χρόνο χρησιμοποιώντας το ρολόι πραγματικού χρόνου. Για να το κάνετε αυτό, χρησιμοποιήστε τη λειτουργία τώρα (), η οποία επιστρέφει το αντικείμενο DateTime. Αυτή η εγκατάσταση περιέχει πληροφορίες για το έτος, μήνα, ημέρα, ώρα, λεπτό και δεύτερο.

Υπάρχουν πολλές βιβλιοθήκες για ρολόι σε πραγματικό χρόνο, οι οποίες παρέχουν λειτουργίες όπως το RTC.Year () και το RTC.Hour (). Αυτές οι λειτουργίες τεντώνονται χωριστά το χρόνο και μία ώρα. Αλλά η χρήση τους συνδέεται με διάφορα προβλήματα: αν κάνετε ένα αίτημα για την παραγωγή λεπτών τη στιγμή του χρόνου, για παράδειγμα, 3:14:59, δηλαδή, ακριβώς πριν από τη μαρτυρία των λεπτών πρέπει να είναι ίση με " 15 "(3:15:00), τα ληφθέντα δεδομένα θα είναι ίσα με 3:14:00 - δηλαδή, χάνετε ένα λεπτό.

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

Υπάρχει μια άλλη μορφή δεδομένων που μπορούμε να μάθουμε - τον αριθμό των δευτερολέπτων από τα μεσάνυχτα, την 1η Ιανουαρίου 1970. Για να το κάνετε αυτό, χρησιμοποιήστε τη λειτουργία UnixTime ():

Serial.print ("από το 1970 \u003d");

Serial.print (now.unixtime ());

Serial.print ("s \u003d");

Serial.print (now.unixtime () / 86400l);

Serial.println ("d");

Δεδομένου ότι σε μια μέρα 60 * 60 * 24 \u003d 86400 δευτερόλεπτα, μπορείτε να μεταφράσετε την προκύπτουσα τιμή σε ημέρες και χρόνια. Πολύ βολική επιλογή, αν θέλετε να παρακολουθήσετε, πόσο χρόνο έχει περάσει από το τελευταίο αίτημα. Για παράδειγμα, εάν έχουν περάσει 5 λεπτά από την τελευταία λαβή Arduino στο ρολόι πραγματικού χρόνου DS1307, η τιμή που θα επιστρέψει το unixtime () στο 300.

Αφήστε τα σχόλια, τις ερωτήσεις και μοιραστείτε την προσωπική σας εμπειρία παρακάτω. Νέες ιδέες και έργα γεννήθηκαν συχνά στη συζήτηση!

Σε πολλά έργα, ο Arduino πρέπει να παρακολουθεί και να διορθώσει τον χρόνο της εμφάνισης ορισμένων γεγονότων. Η μονάδα ρολογιού σε πραγματικό χρόνο, εξοπλισμένο με πρόσθετες μπαταρίες, σας επιτρέπει να αποθηκεύσετε την τρέχουσα ημερομηνία, δεν εξαρτώνται από τη διαθεσιμότητα ισχύος της ίδιας της συσκευής. Σε αυτό το άρθρο θα μιλήσουμε για τις πιο κοινές μονάδες RTC DS1307, DS1302, DS3231, οι οποίες μπορούν να χρησιμοποιηθούν με την πλακέτα Arduino.

Η μονάδα ρολογιών είναι ένα μικρό ποσό που περιέχει, κατά κανόνα, ένα από τα τσιπ DS1307, DS1302, DS3231.Come, στο διοικητικό συμβούλιο, μπορείτε να βρείτε σχεδόν τον μηχανισμό εγκατάστασης μπαταρίας. Τέτοιες σανίδες χρησιμοποιούνται συχνά για να λογοδοτούν για το χρόνο, την ημερομηνία, την ημέρα της εβδομάδας και άλλες χρονικές παραμέτρους. Οι ενότητες λειτουργούν από αυτόνομη ισχύ - μπαταρίες, μπαταρίες και συνεχίστε να μετράτε, ακόμα και αν η ισχύς απενεργοποιήθηκε στο Ardioino. Τα πιο συνηθισμένα μοντέλα ρολογιού είναι DS1302, DS1307, DS3231. Βασίζονται στη μονάδα RTC που συνδέονται με το Arduino (Ρολόι σε πραγματικό χρόνο).

Το ρολόι βασίζεται σε μονάδες που είναι άνετα σε ένα συνηθισμένο άτομο - λεπτά, ώρες, ημέρες της εβδομάδας και άλλοι, σε αντίθεση με τους συνηθισμένους μετρητές και τις γεννήτριες ρολογιού, οι οποίες διαβάζουν "τσιμπούρια". Το Arduino είναι διαθέσιμο Ειδική λειτουργία Millis (), η οποία μπορεί επίσης να διαβάσει διαφορετικά χρονικά διαστήματα. Αλλά το κύριο μειονέκτημα αυτής της λειτουργίας πέφτει στο μηδέν όταν ο χρονομετρητής είναι ενεργοποιημένος. Με αυτό, μπορείτε να μετρήσετε μόνο το χρόνο, να ορίσετε την ημερομηνία ή την ημέρα της εβδομάδας είναι αδύνατη. Για την επίλυση αυτού του προβλήματος και χρησιμοποιούνται μονάδες ρολογιού σε πραγματικό χρόνο.

Το ηλεκτρονικό κύκλωμα περιλαμβάνει ένα τσιπ, τροφοδοτικό, ένα συντονιστή και αντιστάσεις χαλαζία. Ο συντονιστής χαλαζία λειτουργεί με συχνότητα 32768 Hz, το οποίο είναι βολικό για ένα κανονικό δυαδικό μετρητή. Το σχήμα DS3231 περιέχει ενσωματωμένο χαλαζία και θερμοσταθμίσεις που σας επιτρέπουν να λάβετε τιμές υψηλής ακρίβειας.

Σύγκριση των δημοφιλών μονάδων RTC DS1302, DS1307, DS3231

Σε αυτό το τραπέζι οδηγήσαμε τον κατάλογο των πιο δημοφιλών ενοτήτων και τα κύρια χαρακτηριστικά τους.

Ονομα Συχνότητα Ακρίβεια Υποστηριζόμενα πρωτόκολλα
DS1307. 1 Hz, 4.096 kHz, 8.192 kHz, 32.768 kHz Εξαρτάται από το χαλαζία - συνήθως η τιμή φτάνει τα 2,5 δευτερόλεπτα την ημέρα, είναι αδύνατο να επιτευχθεί ακρίβεια πάνω από 1 δευτερόλεπτο την ημέρα. Επίσης, η ακρίβεια εξαρτάται από τη θερμοκρασία. I2c.
DS1302. 32.768 kHz 5 δευτερόλεπτα την ημέρα I2c, spi
Ds3231 Δύο έξοδοι - το πρώτο έως 32.768 kHz, το δεύτερο προγραμματιζόμενο από το 1 Hz έως 8.192 kHz ± 2 ppm σε θερμοκρασίες από 0с έως 40c.

± 3,5 ppm σε θερμοκρασίες από -40C έως 85C.

Μετρητική ακρίβεια της θερμοκρασίας - ± 3c

I2c.

Ενότητα DS1307.

Το DS1307 είναι μια μονάδα που χρησιμοποιείται για να παραιτηθεί ο χρόνος. Συναρμολογείται με βάση το τσιπ DS1307ZN, το φαγητό προέρχεται από μια μπαταρία λιθίου για υλοποίηση Αυτόνομη εργασία Για μεγάλο χρονικό διάστημα. Η μπαταρία στην πλακέτα συνδέεται με Πίσω πλευρά. Η ενότητα έχει ένα τσιπ AT24C32 - αυτό είναι μια μη πτητική μνήμη EEPROM κατά 32 KB. Και τα δύο τσιπ είναι διασυνδεδεμένα από το λεωφορείο I2C. Το DS1307 έχει χαμηλή κατανάλωση ενέργειας και περιέχει ώρες και ημερολόγιο σε 2100 χρόνια.

Η ενότητα έχει τις ακόλουθες παραμέτρους:

  • Τρόφιμα - 5V;
  • Εύρος θερμοκρασίας λειτουργίας από -40C έως 85C.
  • 56 byte μνήμης;
  • Μπαταρία λιθίου LIR2032;
  • Εφαρμόζει λειτουργίες 12 και 24 ωρών.
  • Υποστήριξη διεπαφής I2C.

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

Η αλληλεπίδραση με άλλες συσκευές και ανταλλαγή μαζί τους γίνεται χρησιμοποιώντας τη διεπαφή I2C από τις επαφές SCL και SDA. Το σχήμα έχει αντιστάσεις που σας επιτρέπουν να δώσετε το απαραίτητο επίπεδο σήματος. Επίσης, στο διοικητικό συμβούλιο υπάρχει ένα ειδικό μέρος για τη στερέωση του αισθητήρα θερμοκρασίας DS18B20. Οι επαφές κατανέμονται σε 2 ομάδες, βήμα 2,54 mm. Η πρώτη ομάδα επαφών είναι τα ακόλουθα συμπεράσματα:

  • DS - Έξοδος για τον αισθητήρα DS18B20.
  • SCL - Tactline;
  • SDA - γραμμή δεδομένων;
  • VCC - 5V;

Στη δεύτερη ομάδα επαφών είναι:

  • SQ - 1 MHz;
  • Bat - Εισαγωγή για μπαταρία λιθίου.

Για να συνδεθείτε με την πλακέτα Arduino, το ίδιο το Διοικητικό Συμβούλιο είναι απαραίτητο (σε αυτή την περίπτωση, το Arduino Uno θεωρείται), το COLDULE COTCOURE RAD-TIME RTC DS1307, καλώδια και καλώδιο USB.

Για να συνδέσετε τον ελεγκτή στο Arduino, χρησιμοποιούνται 4 ακίδες - VCC, Earth, SCL, SDA .. VCC από το ρολόι συνδέεται με 5V στο Arduino, Γη από ώρες στη Γη με Arduino, SDA - A4, SCL - A5.

Για να αρχίσετε να εργάζεστε με τη μονάδα ρολογιού, πρέπει να εγκαταστήσετε τις βιβλιοθήκες DS1307RTC, Timelib και καλωδίων. Μπορείτε να χρησιμοποιήσετε για εργασία και rtclib.

Έλεγχος της μονάδας RTC

Κατά την έναρξη του πρώτου κώδικα, το πρόγραμμα θα διαβάσει τα δεδομένα από τη μονάδα μία φορά ανά δευτερόλεπτο. Μπορείτε πρώτα να δείτε πώς συμπεριφέρεται το πρόγραμμα, αν λάβετε μια μπαταρία από την ενότητα και αντικαταστήστε ένα άλλο ενώ το πλακέτα Arduino δεν είναι συνδεδεμένο στον υπολογιστή. Πρέπει να περιμένετε λίγα δευτερόλεπτα και να τραβήξετε την μπαταρία, ως αποτέλεσμα, το ρολόι θα επανεκκινήσει. Στη συνέχεια, πρέπει να επιλέξετε ένα παράδειγμα στα Παραδείγματα → RTCLIB → DS1307 μενού. Είναι σημαντικό να διορθώσετε το ποσοστό μεταφοράς σε 57600 bps.

Όταν ανοίγετε το παράθυρο Serial Monitor, πρέπει να εμφανιστούν οι ακόλουθες γραμμές:

Θα εμφανιστεί ο χρόνος 0: 0: 0. Αυτό οφείλεται στο γεγονός ότι η ώρα εξαφανίζεται στο ρολόι και η αντίστροφη μέτρηση θα σταματήσει. Για το λόγο αυτό, δεν μπορείτε να τραβήξετε την μπαταρία κατά τη διάρκεια της λειτουργίας της μονάδας.

Για να ρυθμίσετε το χρόνο παραμέτρων στην ενότητα, πρέπει να βρείτε τη σειρά στο σκίτσο

RTC.ADJust (DateTime (__ Date__, __TIME__));

Αυτή η γραμμή θα περιέχει δεδομένα από έναν υπολογιστή που χρησιμοποιεί το υλικολογισμικό της μονάδας ρολογιού σε πραγματικό χρόνο. Για Σωστή εργασία Πρέπει πρώτα να ελέγξετε την ορθότητα της ημερομηνίας και της ώρας στον υπολογιστή και στη συνέχεια να αρχίσετε να αναβοσβήνει τη μονάδα ρολογιού. Μετά τη ρύθμιση στην οθόνη, θα εμφανιστούν τα ακόλουθα δεδομένα:

Η ρύθμιση εκτελείται σωστά και επιπρόσθετα αναδιαμορφώστε το ρολόι σε πραγματικό χρόνο δεν χρειάζεται να.

Χρόνος ανάγνωσης. Μόλις διαμορφωθεί η ενότητα, μπορείτε να στείλετε αιτήματα για το χρόνο. Αυτό χρησιμοποιεί τη λειτουργία τώρα () που επιστρέφει το αντικείμενο DateTime, το οποίο περιέχει πληροφορίες σχετικά με το χρόνο και την ημερομηνία. Υπάρχουν πολλές βιβλιοθήκες που χρησιμοποιούνται για την ανάγνωση του χρόνου. Για παράδειγμα, RTC.Year () και RTC.Hour () - λαμβάνουν ξεχωριστά πληροφορίες για το έτος και την ώρα. Όταν εργάζεστε μαζί τους, μπορεί να υπάρχει κάποιο πρόβλημα: για παράδειγμα, ένα αίτημα για παραγωγή χρόνου θα γίνει στις 1:19:59. Πριν εμφανιστεί ο χρόνος 1:20:00, το ρολόι θα φέρει χρόνο 1:19:00, δηλαδή, στην πραγματικότητα, ένα λεπτό θα χαθεί. Ως εκ τούτου, αυτές οι βιβλιοθήκες συνιστάται στη χρήση σε περιπτώσεις όπου η ανάγνωση συμβαίνει σπάνια - μία φορά λίγες ημέρες. Υπάρχουν και άλλες λειτουργίες για να καλέσετε χρόνο, αλλά αν χρειαστεί να μειώσετε ή να αποφύγετε σφάλματα, είναι καλύτερο να χρησιμοποιήσετε τώρα () και από αυτό να τραβήξετε ήδη τις απαραίτητες αναγνώσεις.

Παράδειγμα ενός έργου με μονάδα ρολογιού I2C και οθόνη οθόνης

Το έργο είναι το συνηθισμένο ρολόι, ο ακριβής χρόνος θα εμφανιστεί στην ένδειξη και το κόλον μεταξύ των αριθμών θα αναβοσβήνει στο διάστημα μία φορά σε ένα δευτερόλεπτο. Για την εφαρμογή του έργου, θα απαιτηθεί η κάρτα Arduino UNO, ένας ψηφιακός δείκτης, ένα ρολόι πραγματικού χρόνου (σε αυτή την περίπτωση, η μονάδα DS1307 που περιγράφεται παραπάνω), η ασπίδα για σύνδεση (σε αυτή την περίπτωση, χρησιμοποιείται η ασπίδα Troyka), το Χρησιμοποιείται μπαταρία για ρολόγια και καλώδια.

Το έργο χρησιμοποιεί έναν απλό τετραψήφιο δείκτη στο τσιπ TM1637. Η συσκευή έχει διεπαφή δύο καλωδίων και παρέχει 8 επίπεδα φωτεινότητας οθόνης. Χρησιμοποιείται μόνο για να εμφανιστεί χρόνος στη μορφή ρολογιού: λεπτά. Ο δείκτης είναι εύκολος στη χρήση και εύκολα συνδέεται. Είναι ευεργετικό να το εφαρμόσετε για έργα όταν δεν απαιτεί αναμνηστική ή ωριαία επαλήθευση δεδομένων. Για περισσότερα περισσότερα Πλήρεις πληροφορίες Σχετικά με την ώρα και την ημερομηνία χρησιμοποιούνται οθόνες υγρών κρυστάλλων.

Η μονάδα ρολογιού συνδέεται με τις επαφές SCL / SDA, οι οποίες αναφέρονται στο δίαυλο I2C. Πρέπει επίσης να συνδέσετε τη γη και τη διατροφή. Το Arduino συνδέει το ίδιο όπως περιγράφεται παραπάνω: SDA - A4, SCL - A5, Γη από τη μονάδα στη γη με Arduino, VCC -5V.

Ο δείκτης είναι απλά συνδεδεμένος - τα συμπεράσματα από την CLK και το DIO συνδέονται με οποιοδήποτε ψηφιακό πείρο στο διοικητικό συμβούλιο.

Σκίτσο. Για να γράψετε τον κώδικα, χρησιμοποιήστε τη λειτουργία ρύθμισης, η οποία σας επιτρέπει να αρχικοποιήσετε το ρολόι και τον δείκτη, καταγράψτε τον χρόνο σύνταξης. Η έξοδος χρόνου στην οθόνη θα πραγματοποιηθεί χρησιμοποιώντας βρόχο.

#Περιλαμβάνω. #include "tm1637.h" #include "ds1307.h" // Πρέπει να ενεργοποιήσετε όλες τις απαραίτητες βιβλιοθήκες να λειτουργούν με το ρολόι και την οθόνη. char compiletome \u003d __time__; // χρόνος σύνταξης. #Define display_clk_pin 10 #define display_dio_pin 11 // Αριθμοί από τις εξόδους Arduino στις οποίες ενώνει η οθόνη. κενή εγκατάσταση () (αποκαλύφτη.Set (); display.init (); // Σύνδεση και διαμόρφωση της οθόνης. Clock.Begin (); // Ενεργοποίηση ωρών. Byte ώρα \u003d getint (compiletime , 2); byte δευτερόλεπτο \u003d getint (compiletime, 4); // να πάρει το χρόνο. Ρολόι.FillByhms (ώρα, λεπτό, δευτερόλεπτο); // Προετοιμασία για εγγραφή στη μονάδα χρόνου. Clock.Settime (); // πληροφορίες στο Εσωτερική μνήμη, Ξεκινήστε το χρόνο ανάγνωσης. ) Void Loop () (INT8_T TimeDisp, // εμφανίζεται σε κάθε ένα από τα τέσσερα ψηφία. Clock.GetTime (); // Αίτηση για το χρόνο. TimeDisp \u003d clock.hour / 10; timeDisp \u003d clock.hour% 10; timeDisp \u003d ρολόι .mine / 10; TimeDisp \u003d ρολόι.Minute% 10; // Διάφορες λειτουργίες για δεκάδες, μονάδες ωρών, λεπτά, και ούτω καθεξής. Display.Display (TimeDisp); // Έξοδος στην οθόνη εμφάνισης. % 2; point_on: point_off); // ενεργοποιήστε και απενεργοποιήστε το παχέος εντέρου μετά από ένα δευτερόλεπτο.) Char getint (επιστροφή int (string - 0 ") * 10 + int (string) -" 0 "; // Ο σωστός χρόνος εγγραφής σε διψήφιο ακέραιο. Διαφορετικά, απλά το ζεύγος χαρακτήρων θα εμφανιστεί στην οθόνη.)

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

Το πρόγραμμα μπορεί να αναβαθμιστεί ελαφρά. Όταν η τροφοδοσία είναι απενεργοποιημένη παραπάνω, το γραπτό σκίτσο θα οδηγήσει στο γεγονός ότι μετά την ενεργοποίηση στην οθόνη, ο χρόνος που είχε ρυθμιστεί να καταρτίσει. Στη λειτουργία ρύθμισης, κάθε φορά που θα υπολογιστεί ο χρόνος, ο οποίος πέρασε από τις 00:00:00 πριν από την έναρξη της συλλογής. Αυτό το hash θα συγκριθεί με αυτό που αποθηκεύεται στο EEPROM, οι οποίες αποθηκεύονται όταν η ισχύς είναι απενεργοποιημένη.

Για να γράψετε και να διαβάσετε χρόνο σε μη πτητική μνήμη ή από αυτό πρέπει να προσθέσετε τις λειτουργίες του eepromwriteint και του eepromreadint. Απαιτούνται για να ελέγξουν την αναντιστοιχία σύμπτωση / hash με Hashe που καταγράφηκε στο EEPROM.

Το έργο μπορεί να βελτιωθεί. Εάν χρησιμοποιείτε μια οθόνη υγρών κρυστάλλων, μπορείτε να δημιουργήσετε ένα έργο που θα εμφανίσει την ημερομηνία και την ώρα στην οθόνη. Η σύνδεση όλων των στοιχείων εμφανίζεται στο σχήμα.

Ως αποτέλεσμα, στον κώδικα θα χρειαστεί να υποδείξει Νέα βιβλιοθήκη (Για οθόνες υγρών κρυστάλλων, είναι υγρόCrystal) και προσθέστε στη λειτουργία βρόχου () για να αποκτήσετε την ημερομηνία.

Ο αλγόριθμος εργασίας έχει ως εξής:

  • Συνδέστε όλα τα εξαρτήματα.
  • Ο έλεγχος - στην οθόνη οθόνης πρέπει να αλλάξει κάθε δεύτερη ώρα και ημερομηνία. Εάν εμφανιστεί στην οθόνη Λάθος στιγμήΠρέπει να προσθέσετε ένα rtc.write (tmelements_t tm) στο σκίτσο. Τα προβλήματα με εσφαλμένα καθορισμένο χρόνο σχετίζονται με το γεγονός ότι η μονάδα ρολογιού επαναφέρει την ημερομηνία και την ώρα στις 00:00 π.μ. 01/01/2000 όταν απενεργοποιείται.
  • Η λειτουργία εγγραφής σας επιτρέπει να έχετε μια ημερομηνία και ώρα από τον υπολογιστή, μετά την οποία θα εμφανιστούν οι σωστές παράμετροι στην οθόνη.

συμπέρασμα

Οι μονάδες ρολογιού χρησιμοποιούνται σε πολλά έργα. Απαιτούνται για συστήματα καταγραφής δεδομένων, όταν δημιουργούν χρονομετρητές και συσκευές ελέγχου που λειτουργούν σε συγκεκριμένο χρονοδιάγραμμα, στο Οικιακές συσκευές. Με τη βοήθεια ευρέως διαδεδομένων και φθηνών ενοτήτων, μπορείτε να δημιουργήσετε έργα όπως ξυπνητήρι ή συσκευή εγγραφής δεδομένων από αισθητήρες, εγγραφή πληροφοριών σε κάρτα SD ή εμφανίζοντας χρόνο στην οθόνη της οθόνης. Σε αυτό το άρθρο, εξετάσαμε τυπικά σενάρια της χρήσης και επιλογές για τη σύνδεση των πιο δημοφιλών μοντέλων.

Συνεχίζοντας το θέμα:
Λειτουργός

Έχω μια υπηρεσία Web που εγγράφηκα μέσω "Προσθέστε έναν σύνδεσμο στην υπηρεσία" για την οποία απαιτείται https και πιστοποιητικό. Παρακάτω είναι ο κώδικας μου για τη δημιουργία μιας στιγμής ...

Νέα άρθρα
/
Δημοφιλής