Μεγάλο ηλεκτρονικό ρολόι δωματίου χρησιμοποιώντας arduino. Δυαδικό ρολόι με βάση το Arduino το κάνετε μόνοι σας

Καλησπέρα, σήμερα θα μοιραστώ τις οδηγίες για την κατασκευή ρολογιών με θερμόμετρο δωματίου ( Ρολόι στο Arduino το κάνετε μόνοι σας). Το ρολόι λειτουργεί στο Arduino Uno, μια γραφική οθόνη WG12864B χρησιμοποιείται για την εμφάνιση χρόνου και θερμοκρασίας. Ως αισθητήρας θερμοκρασίας - DS18B20. Σε αντίθεση με τις περισσότερες άλλες ώρες, δεν θα χρησιμοποιήσω το RTS (ρολόι πραγματικού χρόνου) και θα προσπαθήσω να το κάνω χωρίς αυτή την πρόσθετη ενότητα.

Τα συστήματα στο Arduino διακρίνονται από την απλότητα τους και μπορούν να αρχίσουν να μαθαίνουν τον Arduino-Conder. Σχετικά με τον τρόπο σύνδεσης των βιβλιοθηκών και το Flash Arduino μπορεί να διαβαστεί στο άρθρο μας.

Ας προχωρήσουμε.

Για να δημιουργήσετε ώρες δεδομένων που χρειαζόμαστε:

Arduino Uno (ή οποιαδήποτε άλλη συμβατή χρέωση Arduino)
- Γραφική οθόνη Wg12864b.
- Αισθητήρας θερμοκρασίας DS18B20
- Αντίσταση 4.7 COM 0,25 W
- Αντίσταση 100 ohm 0,25 w
- διαμέρισμα μπαταριών για 4 μπαταρίες τύπου AA τύπου "δάχτυλο"
- Fit box
- μικρό αρχείο.
- Βερνίκι νυχιών (μαύρο ή το σώμα του σώματος)
- ένα μικρό λεπτό πλαστικό ή χαρτόνι
-
- Σύνδεση καλωδίων
- Ηλεκτρονική πλακέτα
- Κουμπιά
- Σίδερο συγκόλλησης
- συγκόλληση, rosin
- Ταινία διπλής όψης

Πάθηση γραφικών οθόνης.
Με τη σύνδεση της οθόνης, με την πρώτη ματιά, υπάρχουν πολλά προβλήματα και δυσκολίες. Αλλά αν ασχολείστε πρώτα με τις απόψεις τους, θα είναι πολύ πιο εύκολο και σαφέστερο. Υπάρχουν πολλές ποικιλίες και τύποι οθονών στον ελεγκτή KS0107 / KS0108. Όλες οι οθόνες γίνονται για τη διαίρεση 4 τύπων:
Επιλογή Α: HDM64GS12L-4, CSSTAFONTZ CFAG12864B, Sparkfun LCD-00710cm, Electronics NKC LCD-0022, WINSTAR WG12864B-TML-T
Παραλλαγή Β: HDM64GS12L-5, FUTEX LCM-S12864GSF, FUTURLEC LCM-S12864GSF, AZ DISPLAYS AGM1264F, DISPLAYTECH 64128A BC, Adafruit GLCD, DATAVISION DG12864-88, TOPWAY LM12864DW, DIGITRON SG12864J4, QY-12864F, TM12864L-2, 12864J-1
Επιλογή C: Shenzhen Jinghua Εμφανίζει CO Ltd. JM12864.
Επιλογή D: Wintek- Cascades WD-G1906G, WINTEK - GEN / WD-G1906G / KS0108B, WINTEK / WD-G1906G / S6B0108A, TECDIS / Y19061 / HD61202, VARITRONIX / MGLS19264 / HD61202

Η λίστα δεν είναι πλήρης, υπάρχουν πολλά από αυτά. Το πιο κοινό και, κατά τη γνώμη μου, ένα βολικό WG12864B3 V2.0. Η οθόνη μπορεί να συνδεθεί με το Arduino σε μια σειριακή ή παράλληλη θύρα. Όταν χρησιμοποιείται με το Arduino Uno, είναι καλύτερο να επιλέξετε μια σύνδεση σε μια σειριακή θύρα - τότε χρειαζόμαστε μόνο 3 εξόδους μικροελεγκτών, αντί τουλάχιστον 13 γραμμών όταν συνδέονται μέσω μιας παράλληλης θύρας. Συνδέει τα πάντα είναι αρκετά απλή. Υπάρχει μια άλλη απόχρωση, μπορείτε να βρείτε δύο επιλογές για οθόνες, με ενσωματωμένο ποτενσιόμετρο (για προσαρμογή της αντίθεσης) και χωρίς αυτό. Επιλέξαμε και σας συμβουλεύω να σας φτιάξω, με ενσωματωμένο.


Αυτό μειώνει τον αριθμό των τμημάτων και του χρόνου της συγκόλλησης. Αξίζει επίσης να τοποθετήσετε μια αντίσταση περιορισμένης κυκλοφορίας με μια τιμή προσώπου 100 ohms για να επισημανθεί. Σύνδεση άμεσα 5 βολτ, υπάρχει κίνδυνος καύσης οπίσθιου φωτισμού.
WG12864B - Arduino Uno
1 (GND) - GND
2 (VCC) - + 5V
4 (Rs) - 10
5 (R / W) - 11
6 (ε) - 13
15 (PSB) - GND
19 (BLA) - μέσω της αντίστασης - + 5V
20 (BLK) - GND

Το πιο βολικό, όλα αυτά συγκεντρώνουν ένα πίσω μέρος της οθόνης και εξάγουν 5 καλώδια σύνδεσης με το Arduino Uno. Στο τέλος, θα πρέπει να αποδειχθεί κάτι τέτοιο:


Για όσους εξακολουθούν να επιλέγουν μια παράλληλη σύνδεση θα δώσουν έναν πίνακα σύνδεσης.

Και το σχέδιο για τις οθόνες της επιλογής Β:



Αρκετοί αισθητήρες μπορούν να συμπεριληφθούν σε μία γραμμή επικοινωνίας. Για το ρολόι μας, κάποιος είναι αρκετός. Συνδέουμε το καλώδιο από την επαφή "DQ" DS18B20 σε "PIN 5" Arduino Uno.

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


Συνδεθείτε ως εξής: Το κοινό καλώδιο και για τα τρία κουμπιά συνδέονται με το "GND" Arduino. Το πρώτο κουμπί, χρησιμεύει για να εισάγετε τη λειτουργία ρύθμισης χρόνου και να αλλάξετε την ώρα και την ημερομηνία, συνδεθείτε στο "PIN 2". Το δεύτερο, το κουμπί μεγέθυνσης - στο "PIN 3" και το τρίτο, το κουμπί μείωσης της τιμής σε "PIN 4".

Συναρμολόγηση όλων από κοινού.
Να αποφύγω βραχυκύκλωμα, Θα πρέπει να σχεδιάσετε την οθόνη. Σε έναν κύκλο, είμαστε τυλιγμένοι με μια ταινία, και στο πίσω μέρος της προσκόλλησης στην ταινία δύο όψεων, σκαλισμένα σε μέγεθος, τη ράβδο από το μονωτικό υλικό. Ένα πυκνό χαρτόνι ή λεπτό πλαστικό είναι κατάλληλο. Επέστρεψα από το πλαστικό από το δισκίο για χαρτί. Αποδείχθηκε τα εξής:


Μπροστά από την οθόνη στην άκρη της διπλής ταινίας κόλλας στη βάση αφρού, κατά προτίμηση μαύρο.


Συνδέστε την οθόνη στο Arduino:


Επιπλέον από τη θήκη μπαταριών, συνδεθείτε στο "Vin" Arduino, μείον το "GND". Τοποθετήστε το πίσω από το Arduino. Πριν από την εγκατάσταση στην περίπτωση, μην ξεχάσετε να συνδέσετε τον αισθητήρα θερμοκρασίας και την πλακέτα με τα κουμπιά.


Προετοιμασία και πλήρωση σκίτσο.
Για αισθητήρα θερμοκρασίας, χρειάζεστε μια βιβλιοθήκη onewire.

Η έξοδος στην οθόνη πραγματοποιείται μέσω της βιβλιοθήκης U8GLIB:

Για να επεξεργαστείτε και να γεμίσετε το σκίτσο, πρέπει να εγκαταστήσετε αυτές τις δύο βιβλιοθήκες. Αυτό μπορεί να γίνει με δύο τρόπους. Απλά αποσυσκευάστε αυτά τα αρχεία και τοποθετήστε τα αποσυσκευασμένα αρχεία στο φάκελο βιβλιοθηκών στο φάκελο με το εγκατεστημένο Arduino ide. Ή τη δεύτερη επιλογή για τη δημιουργία βιβλιοθηκών απευθείας στο περιβάλλον προγραμματισμού. Χωρίς να αποσυσκευάζετε αρχεία που έχουν ληφθεί, στο Arduino IDE, επιλέξτε το μενού Skatch - Συνδέστε τη βιβλιοθήκη. Στην κορυφή της αναπτυσσόμενης λίστας, επιλέξτε Add.Zip Library. Στο παράθυρο διαλόγου που εμφανίζεται, επιλέξτε τη βιβλιοθήκη που θέλετε να προσθέσετε. Ανοίξτε ξανά το μενού Sketch - Συνδέστε τη βιβλιοθήκη. Στο κάτω μέρος της αναπτυσσόμενης λίστας που πρέπει να δείτε Νέα βιβλιοθήκη. Τώρα η βιβλιοθήκη μπορεί να χρησιμοποιηθεί σε προγράμματα. Μην ξεχάσετε να κάνετε επανεκκίνηση του Arduino IDE μετά από όλα.

Ο αισθητήρας θερμοκρασίας λειτουργεί στο πρωτόκολλο καλωδίου και έχει μια μοναδική διεύθυνση για κάθε συσκευή - 64 bit κώδικα. Κάθε φορά που ψάχνετε για αυτόν τον κώδικα είναι ακατάλληλο. Επομένως, πρέπει πρώτα να συνδέσετε τον αισθητήρα στο Arduino, ρίχνετε σε αυτό το σκίτσο που βρίσκεται στο μενού Αρχείο - Παραδείγματα - Θερμοκρασία Dallas - OnewireSearch. Στη συνέχεια, εκτελέστε τα εργαλεία - η οθόνη του λιμένα. Το Arduino θα πρέπει να βρει τον αισθητήρα μας, να γράψει τη διεύθυνσή του και τις τρέχουσες μετρήσεις θερμοκρασίας. Αντιγράψτε ή απλά γράψτε τη διεύθυνση του αισθητήρα μας. Ανοίξτε το σκίτσο Arduino_WG12864B_TERM, ψάχνετε για μια συμβολοσειρά:

Byte addr \u003d (0x28, 0xff, 0xdd, 0x14, 0xb4, 0x16, 0x5, 0x97); // διεύθυνση του αισθητήρα μου

Καταγράψτε τη διεύθυνση του αισθητήρα σας ανάμεσα στις σγουρές αγκύλες, αντικαθιστώντας τη διεύθυνση του αισθητήρα μου.

Ρεύμα:

//u8g.setprintpos (44, 64); U8g.print (SEK); // αποσύρετε δευτερόλεπτα για να ελέγξετε την ορθότητα του εγκεφαλικού επεισοδίου

Χρησιμεύει για να εξάγει δευτερόλεπτα δίπλα στην επιγραφή "δεδομένα". Αυτό είναι απαραίτητο για να ρυθμίσετε με ακρίβεια τη χρονική διαδρομή.
Εάν το ρολόι βιασύνη ή οι καθυστερήσεις πρέπει να αλλάξουν στη σειρά:

Εάν (micros () - prevmicros\u003e 494000) (// αλλάξτε σε άλλο για τη ρύθμιση ήταν 500.000

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

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

Με αυτήν την ενότητα, μπορείτε να παρακολουθήσετε το χρόνο στα έργα σας στο 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 ή εμφανίζοντας χρόνο στην οθόνη της οθόνης. Σε αυτό το άρθρο, εξετάσαμε τυπικά σενάρια της χρήσης και επιλογές για τη σύνδεση των πιο δημοφιλών μοντέλων.

Ένα από τα πρώτα έργα που είναι αρχάριοι βασίζονται στο Arduino Fee, είναι απλές ώρες ηγετική μέτρηση. Βασικά, τέτοιες ώρες βασίζονται στη μονάδα Arduino RTC (ρολόι πραγματικού χρόνου ή σε πραγματικό χρόνο). Σήμερα στη διαθέσιμη αγορά ηλεκτρονικών στοιχείων Διαφορετικά μοντέλα RTC, διαφορετική ακρίβεια και τιμή. Μεταξύ των κοινών μοντέλων μπορεί να ονομαστεί DS1302, DS1307, DS3231.



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


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


Αυτά τα ρολόγια μπορούν να συλλεχθούν σε μια συμβατική παρτίδα, επειδή δεν θα υπάρχουν πολλά στοιχεία εδώ. Ο κύριος ιδιοκτήτης εδώ θα είναι η πλακέτα Arduino Uno εδώ. Μπορείτε να πάρετε την οθόνη LCD 16x2 για να εμφανιστεί χρόνος. Για να αλλάξετε τις ρυθμίσεις χρόνου, συνδέστε δύο κουμπιά (για ώρες και λεπτά). Τα κουμπιά συνδέονται με τέχνες αντιστάσεις 10 com. Για να αλλάξετε τη φωτεινότητα της οθόνης, το ποτενσιόμετρο απαιτείται από 10 com. Το κύκλωμα της σύνδεσης όλων αυτών των στοιχείων στην πλακέτα Arduino Uno παρουσιάζεται παρακάτω.



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


#Περιλαμβάνω. LCD υγρούCrystal LCD (12,11,5,4,3,2). int h \u003d 12; int m; int s; Σημαία INT. Ώρα INT. Const int hs \u003d 8; Const int ms \u003d 9; INT κατάσταση1. INT STATE2; κενό εγκατάσταση () (lcd.begin (16.2);) κενό βρόχο () (lcd.setcursor (0,0); s \u003d S + 1, lcd.print ("χρόνος:"). lcd.print (h ) · lcd.print (":") · lcd.print (m) · lcd.print (":") · lcd.print (s); εάν (σημαία<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12) lcd.print ("pm"); Εάν (σημαία \u003d\u003d 24) σημαία \u003d 0; Καθυστέρηση (1000). lcd.clear (); εάν (S \u003d\u003d 60) (S \u003d 0, Μ \u003d Μ + 1,) εάν (Μ \u003d\u003d 60) (Μ \u003d 0, Η \u003d Η + 1, σημαία \u003d σημαία + 1;) εάν (h \u003d\u003d 13 ) (H \u003d 1;) lcd.setcursor (0,1); lcd.print ("Έχετε μια ωραία μέρα"); // ------ Ώρα // Ρύθμιση ------- // State1 \u003d DigitalRead (HS); Εάν (κατάσταση1 \u003d\u003d 1) (h \u003d Η + 1, σημαία \u003d σημαία + 1; αν (σημαία<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12) lcd.print ("pm"); Εάν (σημαία \u003d\u003d 24) σημαία \u003d 0; Εάν (h \u003d\u003d 13) h \u003d 1; ) State2 \u003d digitalRead (MS); εάν (κατάσταση2 \u003d\u003d 1) (s \u003d 0, m \u003d m + 1;))

& Nbsp & nbsp & nbsp Σας ευχαριστούμε για το ενδιαφέρον σας για το έργο πληροφοριών του ιστότοπου.
& NBSP & NBSP & NBSPHI Θέλετε ενδιαφέροντα και χρήσιμα υλικά να βγαίνουν πιο συχνά και υπήρχαν λιγότερες διαφημίσεις,
& NBSP & NBSP & NBSP υποστηρίζουν μουσικά το έργο μας θυσιάζοντας οποιοδήποτε ποσό για την ανάπτυξή του.
Συνεχίζοντας το θέμα:
Λινάρι

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

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