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

Ρολόι 132 Pixel: 5 βήματα (με εικόνες)
Ρολόι 132 Pixel: 5 βήματα (με εικόνες)

Βίντεο: Ρολόι 132 Pixel: 5 βήματα (με εικόνες)

Βίντεο: Ρολόι 132 Pixel: 5 βήματα (με εικόνες)
Βίντεο: Google Pixel Watch unboxing, ρύθμιση τηλεφώνου Samsung και πρώτη εντύπωση 2024, Νοέμβριος
Anonim
Image
Image
Ρολόι 132 Pixel
Ρολόι 132 Pixel

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

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

Βήμα 1: Συγκέντρωση αναλωσίμων και εργαλείων

Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων
Συγκέντρωση αναλωσίμων και εργαλείων

Συστατικά

Αυτό το έργο είναι χτισμένο σε μια πλακέτα χόμπι από το τοπικό μου κατάστημα DIY. Ο πίνακας έχει πλάτος 850 mm και ύψος 500 mm και βάθος 18 mm.

Οι λυχνίες LED που χρησιμοποιούνται σε αυτό το έργο είναι 5050 WS2812b τοποθετημένες σε κυκλικά PCB με διάμετρο περίπου 9 mm με μαξιλάρια συγκόλλησης στο πίσω μέρος.

Χρησιμοποιώ συμβατό μικροελεγκτή Arduino Pro Mini. Είναι η έκδοση 5V 16 MHZ. Επέλεξα αυτό καθώς έχει έναν εξαιρετικά λεπτό σχεδιασμό, μικρό αποτύπωμα ποδιών και όλες τις απαραίτητες θύρες συν κάποια ανταλλακτικά για μελλοντικές αναβαθμίσεις. Είναι επίσης 5 βολτ, ώστε να μπορώ να χρησιμοποιήσω ένα μόνο τροφοδοτικό για τα LED, το μικροελεγκτή και το RTC

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

Επίσης χρησιμοποιείται:

Σύρμα. Συγκόλληση και ζεστή κόλλα.

Εργαλεία:

Τρυπάνι ισχύος και τρυπάνια ξύλου (10mm και 5mm)

Συγκολλητικό σίδερο

Πυροβόλο θερμής κόλλας

αποκόμματα σύρματος

Αξεσουάρ δρομολογητή Dremel και βουτιά

Βήμα 2: Σήμανση, διάτρηση και δρομολόγηση

Σήμανση, διάτρηση και δρομολόγηση
Σήμανση, διάτρηση και δρομολόγηση
Σήμανση, διάτρηση και δρομολόγηση
Σήμανση, διάτρηση και δρομολόγηση
Σήμανση, διάτρηση και δρομολόγηση
Σήμανση, διάτρηση και δρομολόγηση

Γεώτρηση

  • Χρησιμοποιώντας ένα στενό άκρο βρείτε το κέντρο της σανίδας τραβώντας μια γραμμή από αντίθετες γωνίες.
  • Σημειώστε 3 κύκλους χρησιμοποιώντας ένα σπάγκο και ένα στυλό. Ο εξωτερικός κύκλος πρέπει να απέχει περίπου 20 mm από την άκρη του πίνακα με τις άλλες 2 γραμμές να κινούνται κατά 15 mm από την τελευταία γραμμή.
  • Χρησιμοποίησα μια τυπωμένη όψη ρολογιού για να με βοηθήσει να επισημάνω τις θέσεις καθενός από τα λεπτά και τα δευτερόλεπτα στις εξωτερικές 2 γραμμές και τις ώρες στην εσωτερική γραμμή.
  • Τρυπήστε τρύπες 10 mm βάθους περίπου 5 mm για κάθε ώρα, λεπτό και δευτερόλεπτο.
  • Χρησιμοποιήστε το τρυπάνι 5 χιλιοστών για να κάνετε τρύπες μέσω της σανίδας για ώρα, λεπτό και δευτερόλεπτο.

Δρομολόγηση

Αν και αυτό το βήμα δεν είναι απαραίτητο, θα επιτρέψει την τοποθέτηση του ρολογιού σε έναν τοίχο.

  • Χρησιμοποιώντας δρομολογητή και κυκλώστε τον οδηγό κυκλωμάτων μέσω καλωδίων στον πίνακα
  • Σημειώστε και δρομολογήστε μια εσοχή για να ζήσουν οι RTC και Micro Controller.
  • Δρομολογήστε ένα κανάλι από τις εξωτερικές γραμμές στην εσοχή για καλώδια

Βήμα 3: Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση

Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση
Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση
Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση
Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση
Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση
Τόσο πολύ στρατιωτικό, κόψιμο και απογύμνωση

Αυτό το επόμενο μέρος είναι πολύ πιο εύκολο να το πεις παρά να το κάνεις. Η συμβουλή μου θα ήταν σημείωση να το βιαστείτε. προσπαθήστε να βρείτε ένα σύστημα και μπείτε σε ρυθμό.

Κάθε μία από τις λυχνίες LED χρειάζεται 5 βολτ μέσα, 5 βολτ έξω, Δεδομένα μέσα, Δεδομένα έξω, Γείωση μέσα και Γείωση έξω. συμπεριλαμβανομένης της ισχύος για τον μικροελεγκτή και RTC πάνω από 400 καλώδια, όλα απογυμνωμένα και συγκολλημένα και στα δύο άκρα.

Μια κολλώδης μπλε ουσία είναι πολύ χρήσιμη για αυτό το βήμα.

  • Ξεκίνησα τοποθετώντας 2 LED στις οπές τους το ένα δίπλα στο άλλο για να υπολογίσω το μήκος του καλωδίου που χρειάζεται για να συνδεθείτε μεταξύ τους.
  • Χρησιμοποιώντας το 1ο κομμάτι σύρματος ως οδηγό, έκοψα στη συνέχεια 60 από κάθε χρωματικό σύρμα.
  • Απογυμνώστε το μανίκι 2 χιλιοστών από τα άκρα κάθε σύρματος και τα κολλάρετε με κόλλα.
  • Κολλήστε μια μικρή κόλλα συγκόλλησης σε κάθε ένα από τα μαξιλάρια LED.
  • Συγκολλήστε τα καλώδια στα LED για να σχηματίσετε δύο αλυσίδες 60 για τα λεπτά και τα δευτερόλεπτα και μια αλυσίδα των 12 για τις ώρες. Χρησιμοποίησα κόκκινο σύρμα για 5V, κίτρινο για δεδομένα και μπλε για γείωση.
  • Φροντίστε να συνδέσετε κάθε Data Out (DOUT) με το Data In (DIN) της επόμενης λυχνίας LED
  • Το τελευταίο led σε κάθε δόση αλυσίδας δεν χρειάζεται καλώδιο δεδομένων.

Μόλις ολοκληρωθούν όλες οι αλυσίδες, είναι καλή ιδέα να τις δοκιμάσετε πριν τις εγκαταστήσετε. Χρησιμοποίησα το Arduino UNO και το Adafruit NeoPixel Strand Test για να επιβεβαιώσω ότι κάθε LED λειτουργεί.

Κολλήστε μακρύτερα καλώδια σε κάθε μία από τις αλυσίδες για 5V, Ground και Data in.

Σε αυτό το σημείο θα πρέπει να υπάρχουν πέντε καλώδια 5v, τρία καλώδια δεδομένων συνδεδεμένα στο Arduino Pro Mini και 5 καλώδια γείωσης.

Ξεκολλήστε 5mm από τα άκρα των καλωδίων 5v και κολλήστε τα όλα μαζί και επαναλάβετε για τα καλώδια γείωσης.

Μετά την ολοκλήρωση των τριών αλυσίδων, κολλήστε ένα καλώδιο 5V στον πείρο RAW του Arduino Pro Mini και επίσης στον πείρο VCC για το RTC. Ένα καλώδιο γείωσης στο GND στο Arduino Pro Mini και το RTC και στη συνέχεια 2 ακόμη καλώδια:

SCL από το RTC στο A5 στο Pro Mini

SDA από το RTC στο A4 στο Pro Mini

Οι γραμμές δεδομένων από τα LED πρέπει να συνδέονται με:

  • Δευτερόλεπτα - Digitalηφιακό Pin 3.
  • Πρακτικά - DigitalPin 4
  • Hρες - DigitalPin 5

Βήμα 4: Εγκατάσταση

Εγκατάσταση
Εγκατάσταση
Εγκατάσταση
Εγκατάσταση
Εγκατάσταση
Εγκατάσταση

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

Χρησιμοποίησα μια μικρή ποσότητα θερμής κόλλας για να τα συγκρατήσω καθώς θέλω να μπορώ να αντικαταστήσω ένα μόνο LED εάν αποτύχει στο μέλλον.

Χρησιμοποίησα επίσης θερμή κόλλα για να διατηρήσω όλα τα σύρματα τακτοποιημένα και τακτοποιημένα και για να στερεώσω τον σύνδεσμο του βαρελιού στον πίνακα.

Υπάρχουν αρκετοί οδηγοί προγραμματισμού arduino pro mini. Χρησιμοποιώ την εξωτερική μέθοδο μετατροπέα USB σε σειριακή για να φορτώσω αυτόν τον κώδικα στο Arduino:

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

Μεγάλο μέρος αυτού του κώδικα δανείστηκε από το NeoPixel Ring Clock από τον Andy Doro. Μερικά από το Adafruit NeoPixel Strand Test και άλλα τα έβαλα μαζί.

Θα χρειαστεί να έχετε εγκαταστήσει μερικές βιβλιοθήκες. Διατίθενται από τον Διαχειριστή Βιβλιοθηκών στο λογισμικό Arduino.

Το Adafruit NeoPixel για τις λυχνίες LED ws2812b

Καλώδιο για συνομιλία με το RTC μέσω I2C (αυτό είναι ενσωματωμένο ως στάνταρ)

και RTClib για να γνωρίζουν τι να ζητήσουν από το RTC

/********************************************* **************************NeoPixel Ring Clock από τον Andy Doro ([email protected]) https://andydoro.com/ringclock/ ********************************************** *************************

Ιστορικό αναθεώρησης

Ημερομηνία Με Τι

20140320 AFD Πρώτο σχέδιο 20160105 AFD Faded arcs 20160916 AFD Trinket συμβατό 20170727 AFD πρόσθεσε STARTPIXEL για τρισδιάστατο περίβλημα, μεταβλητό σημείο εκκίνησης, πρόσθεσε αυτόματη υποστήριξη DST 20180424 AFD χρησιμοποιώντας βιβλιοθήκη DST https://github.com/andydoro/DST_RTC *

/ συμπεριλάβετε τον κωδικό της βιβλιοθήκης:

#συμπεριλάβω #συμπεριλάβω

#περιλαμβάνω

// καθορίστε τις καρφίτσες

#define SECPIN 3 #define MINPIN 4 #define HOUPIN 5

#define BRIGHTNESS 20 // ρυθμίστε τη μέγιστη φωτεινότητα

#define r 10

#define g 10 #define b 10 RTC_DS3231 rtc; // Δημιουργία αντικειμένου ρολογιού

Λωρίδα Adafruit_NeoPixelS = Adafruit_NeoPixel (60, SECPIN, NEO_GRB + NEO_KHZ800); // αντικείμενο λωρίδας

Adafruit_NeoPixel stripM = Adafruit_NeoPixel (60, MINPIN, NEO_GRB + NEO_KHZ800); // strip object Adafruit_NeoPixel stripH = Adafruit_NeoPixel (24, HOUPIN, NEO_GRB + NEO_KHZ800); // λωρίδα αντικειμένου byte pixelColorRed, pixelColorGreen, pixelColorBlue; // διατηρεί τιμές χρωμάτων

void setup () {

Wire.begin (); // Έναρξη I2C rtc.begin (); // ρολόι έναρξης

Serial.begin (9600);

// ορίστε pinmode pinmode (SECPIN, OUTPUT); pinMode (MINPIN, OUTPUT); pinMode (HOUPIN, OUTPUT);

εάν (rtc.lostPower ()) {

Serial.println ("Το RTC έχασε το ρεύμα, αφήνει να ρυθμιστεί η ώρα!"); // η ακόλουθη γραμμή ορίζει το RTC στην ημερομηνία & ώρα που συντάχθηκε αυτό το σκίτσο rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Αυτή η γραμμή ορίζει το RTC με ρητή ημερομηνία και ώρα, για παράδειγμα για να ορίσετε // 21 Ιανουαρίου 2014 στις 3 το πρωί θα καλέσετε: // rtc.adjust (DateTime (2014, 1, 21, 3, 0, 0)); }

stripS.begin ();

stripM.begin (); stripH.begin (); //strip.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "απενεργοποίηση"

// ακολουθία εκκίνησης

καθυστέρηση (500)?

colorWipeS (λωρίδες S. Color (0, g, 0), 5); // Μπλε χρώμαWipeM (stripM. Color (r, 0, 0), 5); // Μπλε χρώμαWipeH (stripH. Color (0, 0, b), 50); // Μπλε

καθυστέρηση (1000)?

DateTime theTime = rtc.now (); // λαμβάνει υπόψη DST byte secondval = theTime.second (); // λάβετε δευτερόλεπτα byte minuteval = theTime.minute (); // λάβετε λεπτά int hourval = theTime.hour (); ωριαίο = ωρολόγιο % 12; // Αυτό το ρολόι είναι 12ωρο, αν 13-23, μετατρέπεται σε 0-11`

για (uint16_t i = 0; i <secondval; i ++) {stripS.setPixelColor (i, 0, 0, b); stripS.show (); καθυστέρηση (5)? }

για (uint16_t i = 0; i <minuteval; i ++) {stripM.setPixelColor (i, 0, g, 0); stripM.show (); καθυστέρηση (5)? }

για (uint16_t i = 0; i <hourval; i ++) {stripH.setPixelColor (i, r, 0, 0); stripH.show (); καθυστέρηση (5)? }

}

void loop () {

// βρες χρόνο

DateTime theTime = rtc.now (); // λαμβάνει υπόψη το DST

byte secondval = theTime.second (); // πάρτε δευτερόλεπτα

byte minuteval = theTime.minute (); // λάβετε λεπτά int hourval = theTime.hour (); // λάβετε ώρες hourval = hourval % 12; // Αυτό το ρολόι είναι 12ωρο, αν 13-23, μετατρέπεται σε 0-11`

stripS.setPixelColor (δεύτερο κύκλο, 0, 0, 20); stripS.show (); καθυστέρηση (10)? if (secondval == 59) {for (uint8_t i = stripS.numPixels (); i> 0; i--) {stripS.setPixelColor (i, 0, g, 0); stripS.show (); καθυστέρηση (16);}}

stripM.setPixelColor (λεπτό λεπτό, 0, g, 0);

stripM.show (); καθυστέρηση (10)? if (secondval == 59 && minuteval == 59) {for (uint8_t i = stripM.numPixels (); i> 0; i--) {stripM.setPixelColor (i, r, 0, 0); stripM.show (); καθυστέρηση (16);}}

stripH.setPixelColor (ωριαία ώρα, r, 0, 0);

stripH.show (); καθυστέρηση (10)? if (secondval == 59 && minuteval == 59 && hourval == 11) {for (uint8_t i = stripH.numPixels (); i> 0; i--) {stripH.setPixelColor (i, 0, 0, b) ? stripH.show (); καθυστέρηση (83);}} // για σειριακή αποσφαλμάτωση Serial.print (ωράριο, DEC); Serial.print (':'); Serial.print (minuteval, DEC); Serial.print (':'); Serial.println (secondval, DEC); }

// Γεμίστε τις τελείες η μία μετά την άλλη με ένα χρώμα

void colorWipeS (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i <stripS.numPixels (); i ++) {stripS.setPixelColor (i, c); stripS.show (); καθυστέρηση (αναμονή)? }}

void colorWipeM (uint32_t c, uint8_t αναμονή) {

για (uint16_t i = 0; i <stripM.numPixels (); i ++) {stripM.setPixelColor (i, c); stripM.show (); καθυστέρηση (αναμονή)? }}

void colorWipeH (uint32_t c, uint8_t αναμονή) {

για (uint16_t i = 0; i <stripH.numPixels (); i ++) {stripH.setPixelColor (i, c); stripH.show (); καθυστέρηση (αναμονή)? }}

Βήμα 5: Τελικές πινελιές

Image
Image
Τελικές πινελιές
Τελικές πινελιές

Το μόνο που πρέπει να απομείνει τώρα είναι να διορθώσετε το RTC και το Micro Controller κάτω στην εσοχή.

Έχω τοποθετήσει την πλευρά της μπαταρίας RTC προς τα επάνω, ώστε να μπορώ εύκολα να αλλάξω την μπαταρία εάν χρειάζεται.

Συνδέστε τα καλώδια 5v στην + πλευρά του συνδέσμου και το Ground στην πλευρά

Ενεργοποιήστε το!

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

Σημείωση:

Η φωτεινότητα των LED καθορίζεται στον κωδικό. Έχει ρυθμιστεί χαμηλά για να διατηρηθεί η τρέχουσα κλήρωση χαμηλή. Σε πλήρη φωτεινότητα με όλες τις λυχνίες LED αναμμένες, θα μπορούσε να τραβήξει σχεδόν 8 αμπέρ. Με την τρέχουσα ρύθμιση είναι λιγότερο από 1.

Διαγωνισμός ρολογιών
Διαγωνισμός ρολογιών
Διαγωνισμός ρολογιών
Διαγωνισμός ρολογιών

Δευτέρα στο διαγωνισμό ρολογιών

Συνιστάται: