Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Συνδέστε ψηφιακή μονάδα δίσκου και τμηματική μονάδα δίσκου για πολλαπλή οθόνη
- Βήμα 2: Δοκιμάστε τις συνδέσεις
- Βήμα 3: Κωδικοποιήστε την ώρα εμφάνισης και PWM για να ελέγξετε τη φωτεινότητα
- Βήμα 4: Δημιουργήστε μια σύνδεση στο Διαδίκτυο
- Βήμα 5: Προσθέστε ΒΑΣΙΚΟ Κωδικό για την Ανάλυση του χρόνου από τον Ιστό
- Βήμα 6: Προσθέστε έναν αισθητήρα φωτός και έναν κωδικό για να μειώσετε την οθόνη
- Βήμα 7: Κουμπώστε το ρολόι και ξεκινήστε να το χρησιμοποιείτε
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Βρήκα ένα ψηφιακό ρολόι $ 10 στην Amazon. Τώρα για να το προσαρμόσετε για να έχετε χρόνο από το διαδίκτυο.
Προμήθειες
ARM Stamp προγραμματιζόμενο σε ΒΑΣΙΚΟ διατίθεται εδώ
Βήμα 1: Συνδέστε ψηφιακή μονάδα δίσκου και τμηματική μονάδα δίσκου για πολλαπλή οθόνη
Ξεκίνησα με ένα φθηνό ψηφιακό ρολόι μεγάλου αριθμού. Πρώτα αφαίρεσα το υπάρχον τσιπ ρολογιού. Στη συνέχεια, πραγματοποιήθηκε ανίχνευση και εντοπίστηκαν οι συνδέσεις 7 τμημάτων, οι οποίες μπορούν να οδηγηθούν απευθείας από τον μικροεπεξεργαστή. Στη συνέχεια βρέθηκαν τα 4ψήφια προγράμματα οδήγησης που ήταν τρανζίστορ τα οποία μπορεί να οδηγήσει ο μικροεπεξεργαστής. Και μετά τα ένωσε.
Βήμα 2: Δοκιμάστε τις συνδέσεις
Ως πείραμα έγραψα ένα πρόγραμμα BASIC για να οδηγήσω όλες τις γραμμές, να ελέγξω την καλωδίωση και να μετρήσω το ρεύμα, το οποίο σε αυτή την περίπτωση ήταν 82 mA
Το επόμενο ήταν να γράψω τον κωδικό για να σαρώσω τις γραμμές.
«μονάδα οθόνης ρολογιού ιστού
IO (7) = 0 'PMOS drive - θα γίνει PWM κάποια μέρα
για y = 45 έως 48
IO (y) = 0 'ψηφιακή μονάδα δίσκου
για x = 8 έως 15
IO (x) = 0 'μονάδα δίσκου
περιμένετε (500)
IO (x) = 1
επόμενο x
DIR (y) = 0 'απενεργοποίηση μονάδας δίσκου στο τμήμα
επόμενο y
Βήμα 3: Κωδικοποιήστε την ώρα εμφάνισης και PWM για να ελέγξετε τη φωτεινότητα
Στη συνέχεια πρόσθεσα ένα τρανζίστορ PMOS στο τροφοδοτικό σε όλα τα ψηφιακά προγράμματα οδήγησης. Με αυτό που οδηγείται από το πλάτος παλμών, η διαμόρφωση θα ελέγχει τη φωτεινότητα της οθόνης. Εδώ είναι ο ΒΑΣΙΚΟΣ κώδικας για την εμφάνιση της ώρας.
'μονάδα οθόνης ρολογιού ιστού #include "LPC11U3x.bas"
'παγκόσμια
hr = 0 'καθορίστε την ώρα
min = 0 'καθορίστε το λεπτό
#define SEG_0 & HBB00
#define SEG_1 & H1800
#define SEG_2 & HD300
#define SEG_3 & HD900
#define SEG_4 & H7800
#define SEG_5 & HE900
#define SEG_6 & HEB00
#define SEG_7 & H9800
#define SEG_8 & HFB00
#define SEG_9 & HF800
#define SEG_o & H4B00
#define SEG_f & HE200
const DIGarray = {SEG_0, SEG_1, SEG_2, SEG_3, SEG_4, SEG_5, SEG_6, SEG_7, SEG_8, SEG_9, SEG_o, SEG_f}
#define DIG_WAIT 1
#καθορίστε US_TIME
δευτερεύων χρόνος εμφάνισης (λάθος, ώρα, λεπτά)
dim hr10, hr1, min10, min1, i
#ifdef US_TIME
αν hr> 12 τότε hr -= 12
αν hr = 0 τότε hr = 12
#τέλος εαν
hr10 = hr / 10
hr1 = hr MOD 10
min10 = min / 10
min1 = min MOD 10
για i = 0 έως 1
αν hr10 τότε
IO (45) = 0
τέλος εαν
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (hr10)
GPIO_CLR (0) = DIGarray (hr10)
περιμένετε (DIG_WAIT)
ΕΙΣΟΔΟΣ (45)
IO (46) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (hr1) + IF (i, & H400, 0)
GPIO_CLR (0) = DIGarray (hr1) + IF (i, & H400, 0)
περιμένετε (DIG_WAIT)
ΕΙΣΟΔΟΣ (46)
IO (47) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (min10)
GPIO_CLR (0) = DIGarray (min10)
περιμένετε (DIG_WAIT)
ΕΙΣΟΔΟΣ (47)
IO (48) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (min1)
GPIO_CLR (0) = DIGarray (min1)
περιμένετε (DIG_WAIT)
ΕΙΣΟΔΟΣ (48)
επόμενο i
endub
'χρήστη TIMER1 (32 bit) για διακοπή κάθε λεπτού
INTERRUPT SUB TIMER1IRQ
T1_IR = 1 'Διαγραφή διακοπής
min += 1
αν min> 59 τότε
min = 0
hr += 1
αν hr> 23 τότε
hr = 0
τέλος εαν
τέλος εαν
ENDSUB
SUB ON_TIMER (max_cnt, dothis)
TIMER1_ISR = συνάρτηση dothis + 1 'του VIC - χρειάζεται το +1 για λειτουργία Thumb
SYSCON_SYSAHBCLKCTRL OR = (1 << 10) 'ενεργοποίηση TIMER1
T1_PR = 0 'χωρίς προεπιλογή - θα προσαρμόσει την τιμή για ακριβέστερο χρόνο
VICIntEnable OR = (1 << TIMER1_IRQn] 'Ενεργοποίηση διακοπής
T1_MR0 = max_cnt-1 'set up match match of ms
T1_MCR = 3 'Διακοπή και επαναφορά
MR0 T1_IR = 1 'καθαρή διακοπή
T1_TC = 0 'μετρητής χρονομέτρου
T1_TCR = 1 'TIMER1 Ενεργοποίηση
ENDSUB
#ορίστε MINUT_PCLK 2880000000 '60 δευτερόλεπτα στα 48 MHz
κύριος:
hr = 9
min = 33
ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)
IO (7) = 0 'PWM κάποια μέρα - πρέπει να μετακινηθείτε στο P0_22;;
ενώ 1
χρόνος εμφάνισης (0, ώρα, λεπτά)
βρόχος
Βήμα 4: Δημιουργήστε μια σύνδεση στο Διαδίκτυο
Χρησιμοποιήστε ένα ESP8266 για σύνδεση WiFi. Μετά από λίγη ώρα περιήγησης στον ιστό, η καλύτερη λύση ήταν η έκδοση nodemcu 0.9.6 και ένα παλαιότερο esp8266_flasher δούλεψε καλύτερα.
www.electrodragon.com/w/File:Nodemcu_20150704_firmware.zip
Στη συνέχεια, μια απλή ιστοσελίδα PHP για την εξυπηρέτηση χρόνου από το διαδίκτυο-
Διακομιστής ώρας Coridium
<? php
$ timezone = htmlspecialchars ($ _ GET ["zone"]); εάν ($ timezone == "")
$ timezone = 'America/Los_Angeles';
$ tz_object = νέο DateTimeZone ($ timezone);
$ datetime = νέο DateTime ();
$ datetime-> setTimezone ($ tz_object);
echo "time is-", $ datetime-> format ('H: i: s');
ηχώ "";
ηχώ "ημερομηνία είναι-", $ datetime-> μορφή ('m/d/Y');
?>
Αυτή η ιστοσελίδα είναι έτσι ώστε να μπορείτε να ζητήσετε
coridium.us/time.php - και μπορείτε να πάρετε τη ζώνη ώρας των ΗΠΑ Ειρηνικού
ή
coridium.us/time.php?zone=Europe/London
Δεν υπάρχει έλεγχος σφαλμάτων και πιθανότατα ποτέ δεν θα γίνει
Και η Λουά να το διαβάσει -
wifi.sta.config ("your_SSID", "your_PASSWORD")> wifi.sta.connect ()…
sk = net.createConnection (net. TCP, 0)
sk: ενεργοποίηση ("λήψη", λειτουργία (sck, c) εκτύπωση (c) τέλος)
sk: connect (80, "coridium.us")
sk: send ("GET /time.php HTTP/1.1 / r / nHost: coridium.us / r / nΣύνδεση: διατήρηση ζωντανής / r / nΑποδοχή: */ *\ r / n / r / n")
Και επιστρέφεις τον χρόνο ως
ώρα είναι -09: 38: 49ημερομηνία -2018-31-12
Βήμα 5: Προσθέστε ΒΑΣΙΚΟ Κωδικό για την Ανάλυση του χρόνου από τον Ιστό
Αυτό είναι ένα υποσύνολο του πλήρους προγράμματος BASIC, το πλήρες πρόγραμμα μπορεί να προβληθεί στο σύνδεσμο στο τελευταίο βήμα.
αν strstr (build_gets, "time is-") = 0 τότε
hr = build_gets (8) - "0"
αν build_gets (9) = ":" τότε
min = (build_gets (10) - "0")*10
min += build_gets (11) - "0"
αλλού
hr = hr * 10 + build_gets (9) - "0"
min = (build_gets (11) - "0")*10
min += build_gets (12) - "0"
τέλος εαν
τέλος εαν
Βήμα 6: Προσθέστε έναν αισθητήρα φωτός και έναν κωδικό για να μειώσετε την οθόνη
Ένα τρανζίστορ φωτογραφιών προστέθηκε για να αντιληφθεί το φως του περιβάλλοντος στο δωμάτιο. Χωρίς αυτό, η οθόνη είναι αρκετά φωτεινή για να ξυπνήσει τους νεκρούς (εμένα) τη νύχτα.
Η αναλογική τάση εξόδου του τρανζίστορ φωτογραφιών διαβάζεται και η διαμόρφωση πλάτους παλμού ορίζει τη συνολική φωτεινότητα της οθόνης.
Βήμα 7: Κουμπώστε το ρολόι και ξεκινήστε να το χρησιμοποιείτε
Η τελική έκδοση εμφανίζει την ώρα και περίπου στις 3 π.μ. βγαίνει στον ιστό για να διαβάσει την τρέχουσα ώρα. Αυτό χειρίζεται επίσης το φως της ημέρας εξοικονομώντας χρόνο.
Το κίνητρο για αυτό το έργο ήταν οι διακοπές ρεύματος που βιώνουμε εδώ στα βουνά και η ανάγκη να επαναρυθμιστούν τα ρολόγια ή να αντικατασταθούν οι μπαταρίες για να διατηρηθούν στη ζωή.
Αυτή ήταν μια γρήγορη επισκόπηση του έργου.
Πλήρεις λεπτομέρειες αυτού του DIY ρολογιού συνδεδεμένου στον ιστό.