Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Οδηγίες για το πώς να δημιουργήσετε ένα χρονόμετρο για μια αίθουσα μελέτης.
Βήμα 1: Βίντεο αλληλεπίδρασης
drive.google.com/file/d/12z5zQR52AXILX2AGb3EplfbmZWANZiCl/view?usp=drivesdk
Βήμα 2: Δήλωση προβλήματος
Τις περισσότερες φορές, οι αίθουσες μελέτης λαμβάνονται πάντα. Αυτό συμβαίνει επειδή στους ανθρώπους αρέσει να μένουν στο δωμάτιο για πολύ περισσότερο από όσο χρειάζονται. Έχουμε σχεδιάσει ένα χρονόμετρο που επιτρέπει σε κάθε άτομο συνολικά 2 ώρες και σε άτομα που περιμένουν τη δυνατότητα να ζητήσουν από το δωμάτιο να είναι η επόμενη ομάδα. Η χρήση RGB στα Neopixels θα εκφράσει τον χρόνο που απομένει.
Βήμα 3: Επισκόπηση του τρόπου λειτουργίας
Ο χρονοδιακόπτης αποτελείται από μέρη που κόβονται από τον κόφτη λέιζερ, 3 κουμπιά, 1 LED, 1 ποτενσιόμετρο.
Το Neopixels και το ποτενσιόμετρο είναι συνδεδεμένα στο NodeMCU. Το NodeMCU έχει προγραμματιστεί να επανασυντονίζει πόσο μακριά είναι το ποτενσιόμετρο για να αλλάξει την ποσότητα των LED που ανάβουν στην κυκλική ταινία Neopixel. Το κουμπί Αίτηση σταματά τη λειτουργία της λειτουργίας Έναρξη, Διακοπή και Ρύθμιση ώρας. Το χρώμα των LED στο χρονόμετρο μέσα στο δωμάτιο είναι το ίδιο χρώμα με το LED που ανάβει στο πλάι του κουτιού. Το neopixel στο πλάι του κουτιού αντιπροσωπεύει την οθόνη στο λόμπι του κτιρίου για να γνωρίζετε ποιο δωμάτιο έχει ληφθεί και πόσος χρόνος απομένει. Για κάθε δωμάτιο συνταγογραφούνται 2 LED, το ένα LED αντιπροσωπεύει εάν το δωμάτιο έχει ληφθεί και το άλλο led καθρεφτίζει το χρώμα των LED στο χρονόμετρο (το πράσινο είναι περισσότερος χρόνος, μετά το κίτρινο και μετά το κόκκινο για λιγότερο χρόνο).
Βήμα 4: Λίστα υλικών και εργαλείων
-Καθαρό ακρυλικό
-Καλώδιο MicroUSB
www.digikey.com/product-detail/en/stewart-…
-Breadboard
www.amazon.com/gp/product/B01EV6LJ7G/ref=o…
-Ποτενσιόμετρο
www.alliedelec.com/honeywell-380c32500/701…
-3 κουμπιά
www.digikey.com/product-detail/en/te-conne…
-NodeMCU
www.amazon.com/gp/product/B07CB4P2XY/ref=o…
- 2 ταινίες Neopixel
www.amazon.com/Lighting-Modules-NeoPixel-W…
-Αντιστάσεις
www.digikey.com/product-detail/en/te-conne…
- Σύρματα
www.digikey.com/product-detail/en/sparkfun…
-1 LED
www.mouser.com/ProductDetail/Cree-Inc/C512…
-Καυτό όπλο κόλλας
www.walmart.com/ip/AdTech-Hi-Temp-Mini-Hot…
-Κολλώδεις λωρίδες Velcro
www.amazon.com/VELCRO-Brand-90076-Fastener…
Βήμα 5: Ξεκινήστε να χτίζετε με το Breadboard
A0 έως μεσαία καρφίτσα στο Ποτενσιόμετρο
Vin to Power on Neopixel ring
3v3 στη μία πλευρά του Ποτενσιόμετρου
Όλοι οι λόγοι για τη γείωση στο NodeMCU
D1 Κουμπί αίτησης
D2 για να ζητήσετε LED
Κουμπί D3 to Start (Έναρξη)
Κουμπί D4 to Stop
D5 σε αντίσταση σε Neopixel Είσοδος στον δακτύλιο
D6 στην αντίσταση στην ταινία εισόδου Neopixel
Βήμα 6: Εκκίνηση του κώδικα
Αυτός είναι ο κώδικας για να βεβαιωθείτε ότι το έργο σας λειτουργεί μέχρι τώρα. Ο χρονοδιακόπτης πρέπει να είναι μόνο μερικά δευτερόλεπτα ανά LED στο δαχτυλίδι Neopixel. Μόλις γνωρίζετε ότι λειτουργεί μέχρι αυτό το σημείο, το μόνο που χρειάζεται να κάνετε είναι να αλλάξετε την ώρα εάν οι παρακάτω προτάσεις στο καθορισμένο εύρος σας. Θα βάζω "#Αλλαγή χρόνου" σε κάθε φορά, εάν δηλώσεις που πρέπει να αλλάξετε για την κατανομή του χρόνου σας.
Δοκιμάζοντας τον Κώδικα:
εισαγωγή ωφέλιμου χρόνου
χρόνο εισαγωγής
από εισαγωγή μηχανής ADC
μηχανή εισαγωγής
εισαγωγή neopixel
adc = ADC (0)
pin = machine. Pin (14, machine. Pin. OUT)
np = neopixel. NeoPixel (pin, 12)
pin2 = machine. Pin (12, machine. Pin. OUT)
np2 = neopixel. NeoPixel (pin2, 8)
l1 = μηχάνημα. Pin (4, machine. Pin. OUT)
b1 = machine. Pin (5, machine. Pin. IN, machine. Pin. PULL_UP)
b3 = machine. Pin (2, machine. Pin. IN, machine. Pin. PULL_UP)
b2 = machine. Pin (0, machine. Pin. IN, machine. Pin. PULL_UP)
l1.τιμή (0)
def tglled (): # εναλλαγή της λειτουργίας "αίτησης" LED
αν l1.value () == 0:
l1. αξία (1)
αλλού:
l1.τιμή (0)
x = 0
b1temp1 = 0
b1temp2 = 0
t = 0
b2temp1 = 0
b2temp2 = 0
b3temp1 = 0
b3temp2 = 0
s = 0
ενώ True:
# Αυτό είναι το κουμπί που αλλάζει τη λυχνία LED "αίτησης"
b1temp2 = b1.τιμή ()
εάν b1temp1 και όχι b1temp2:
tglled ()
ώρα. ύπνος (0,05)
b1temp1 = b1temp2
# Αυτό είναι το πλέγμα
np2 [0] = np [11]
αν l1.value () == 1:
np2 [1] = (30, 0, 0)
αλλού:
np2 [1] = (0, 0, 30)
np2.write ()
# Εδώ επιλέγουμε πόσο χρόνο χρειαζόμαστε
αν t == 0:
για i στην περιοχή (-1, 12):
εάν (l1.τιμή () == 0):
εάν (adc.read ()> = (85.34 * (i+1))):
np = (0, 0, 0)
np [11] = (0, 0, 30)
s = (i + 1)
αλλού:
np = (0, 0, 30)
np.write ()
αλλού:
np = (0, 0, 0)
np.write ()
# Αυτό είναι το κουμπί για την εκκίνηση του χρονοδιακόπτη
εάν (l1.τιμή () == 0) και (t == 0):
b2temp2 = b2.value ()
εάν b2temp1 και όχι b2temp2:
x += 1
t += (s * 100)
ώρα. ύπνος (0,05)
b2temp1 = b2temp2
# Αυτό το κουμπί τελειώνει το χρονόμετρο
εάν (l1.τιμή () == 0):
b3temp2 = b3.τιμή ()
εάν b3temp1 και όχι b3temp2:
x = 0
t = 0
ώρα. ύπνος (0,05)
b3temp1 = b3temp2
# Αυτό είναι το χρονόμετρο
αν x> 0:
t += 1
εάν (t> 0) και (t <= 100): #Αλλαγή χρόνου
np [0] = (5, 30, 0)
np [1] = (5, 30, 0)
np [2] = (5, 30, 0)
np [3] = (5, 30, 0)
np [4] = (5, 30, 0)
np [5] = (5, 30, 0)
np [6] = (5, 30, 0)
np [7] = (5, 30, 0)
np [8] = (5, 30, 0)
np [9] = (5, 30, 0)
np [10] = (5, 30, 0)
np [11] = (5, 30, 0)
np.write ()
εάν (t> 100) και (t <= 200): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (10, 30, 0)
np [2] = (10, 30, 0)
np [3] = (10, 30, 0)
np [4] = (10, 30, 0)
np [5] = (10, 30, 0)
np [6] = (10, 30, 0)
np [7] = (10, 30, 0)
np [8] = (10, 30, 0)
np [9] = (10, 30, 0)
np [10] = (10, 30, 0)
np [11] = (10, 30, 0)
np.write ()
εάν (t> 200) και (t <= 300): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (15, 30, 0)
np [3] = (15, 30, 0)
np [4] = (15, 30, 0)
np [5] = (15, 30, 0)
np [6] = (15, 30, 0)
np [7] = (15, 30, 0)
np [8] = (15, 30, 0)
np [9] = (15, 30, 0)
np [10] = (15, 30, 0)
np [11] = (15, 30, 0)
np.write ()
εάν (t> 300) και (t <= 400): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (20, 30, 0)
np [4] = (20, 30, 0)
np [5] = (20, 30, 0)
np [6] = (20, 30, 0)
np [7] = (20, 30, 0)
np [8] = (20, 30, 0)
np [9] = (20, 30, 0)
np [10] = (20, 30, 0)
np [11] = (20, 30, 0)
np.write ()
εάν (t> 400) και (t <= 500): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (25, 30, 0)
np [5] = (25, 30, 0)
np [6] = (25, 30, 0)
np [7] = (25, 30, 0)
np [8] = (25, 30, 0)
np [9] = (25, 30, 0)
np [10] = (25, 30, 0)
np [11] = (25, 30, 0)
np.write ()
εάν (t> 500) και (t <= 600): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (30, 30, 0)
np [6] = (30, 30, 0)
np [7] = (30, 30, 0)
np [8] = (30, 30, 0)
np [9] = (30, 30, 0)
np [10] = (30, 30, 0)
np [11] = (30, 30, 0)
np.write ()
εάν (t> 600) και (t <= 700): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (30, 25, 0)
np [7] = (30, 25, 0)
np [8] = (30, 25, 0)
np [9] = (30, 25, 0)
np [10] = (30, 25, 0)
np [11] = (30, 25, 0)
np.write ()
εάν (t> 700) και (t <= 800): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (30, 20, 0)
np [8] = (30, 20, 0)
np [9] = (30, 20, 0)
np [10] = (30, 20, 0)
np [11] = (30, 20, 0)
np.write ()
εάν (t> 800) και (t <= 900): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (30, 15, 0)
np [9] = (30, 15, 0)
np [10] = (30, 15, 0)
np [11] = (30, 15, 0)
np.write ()
εάν (t> 900) και (t <= 1000): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (30, 10, 0)
np [10] = (30, 10, 0)
np [11] = (30, 10, 0)
np.write ()
εάν (t> 1000) και (t <= 1100): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (0, 0, 0)
np [10] = (30, 5, 0)
np [11] = (30, 5, 0)
np.write ()
εάν (t> 1100) και (t <= 1200): #Αλλαγή χρόνου
np [0] = (0, 0, 0)
np [1] = (0, 0, 0)
np [2] = (0, 0, 0)
np [3] = (0, 0, 0)
np [4] = (0, 0, 0)
np [5] = (0, 0, 0)
np [6] = (0, 0, 0)
np [7] = (0, 0, 0)
np [8] = (0, 0, 0)
np [9] = (0, 0, 0)
np [10] = (0, 0, 0)
np [11] = (30, 0, 0)
np.write ()
αν t> = 1300: #Αλλαγή χρόνου
t = 0
x = 0
Βήμα 7: Τελειώνοντας τις πινελιές
Τώρα, όταν είστε τόσο μακριά, θα πρέπει να έχετε ανεβάσει τον κωδικό εργασίας στο NodeMCU και όλα τα μέρη να είναι συνδεδεμένα στο breadboard. Αφού δοκιμάσετε τον κώδικα και κόψετε όσα κομμάτια έχετε για το εξωτερικό, δηλαδή περίβλημα με λέιζερ, μπορείτε τώρα να κολλήσετε τα καλώδια στο NodeMCU. Η συγκόλληση είναι προαιρετική, αλλά μπορεί να την κάνει πιο ασφαλή και μικρότερη για το περίβλημα σας. Εδώ είναι μερικά από τα μέρη κοπής με λέιζερ που φτιάξαμε.