Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Anleitung zum Erstellen eines Timers für ein Arbeitszimmer.
Schritt 1: Interaktionsvideo
drive.google.com/file/d/12z5zQR52AXILX2AGb3EplfbmZWANZiCl/view?usp=drivesdk
Schritt 2: Problembeschreibung
Studienräume sind meistens immer belegt. Dies geschieht, weil die Leute gerne viel länger im Raum bleiben, als sie brauchen. Wir haben einen Timer entwickelt, der es jeder Person erlaubt, insgesamt 2 Stunden zu verbringen, und die wartenden Personen die Möglichkeit, den Raum als nächste Gruppe anzufordern. Die Verwendung von RGB auf Neopixels drückt die verbleibende Zeit aus.
Schritt 3: Überblick über die Funktionsweise
Der Timer besteht aus Teilen, die mit dem Laserschneider geschnitten wurden, 3 Tasten, 1 LED, 1 Potentiometer.
Die Neopixel und das Potentiometer sind mit der NodeMCU verdrahtet. Die NodeMCU ist so programmiert, dass sie regonisiert, wie weit das Potentiometer gedreht wird, um die Anzahl der LEDs zu ändern, die auf dem kreisförmigen Neopixel-Streifen leuchten. Die Schaltfläche Request stoppt die Funktion der Funktion Start, Stop und Set time. Die Farbe der LEDs an der Zeitschaltuhr im Raum entspricht der Farbe der LED an der Seite der Box. Das Neopixel an der Seite der Box stellt die Anzeige in der Lobby des Gebäudes dar, um zu wissen, welcher Raum belegt ist und wie viel Zeit noch übrig ist. Für jeden Raum sind 2 LEDs vorgeschrieben, eine LED zeigt an, ob der Raum belegt ist und die andere LED spiegelt die Farbe der LEDs des Timers (grün ist mehr Zeit, dann gelb, dann rot für weniger Zeit).
Schritt 4: Liste der Materialien und Werkzeuge
-Klares Acryl
-MicroUSB-Kabel
www.digikey.com/product-detail/de/stewart-…
-Breadboard
www.amazon.com/gp/product/B01EV6LJ7G/ref=o…
-Potentiometer
www.alliedelec.com/honeywell-380c32500/701…
-3 Tasten
www.digikey.com/product-detail/de/te-conne…
-KnotenMCU
www.amazon.com/gp/product/B07CB4P2XY/ref=o…
- 2 Neopixel-Streifen
www.amazon.com/Lighting-Modules-NeoPixel-W…
-Widerstände
www.digikey.com/product-detail/de/te-conne…
- Drähte
www.digikey.com/product-detail/de/sparkfun…
-1 LED
www.mouser.com/ProductDetail/Cree-Inc/C512…
-Heißklebepistole
www.walmart.com/ip/AdTech-Hi-Temp-Mini-Hot…
-Klebbare Klettstreifen
www.amazon.com/VELCRO-Brand-90076-Fastener…
Schritt 5: Beginnen Sie mit dem Bauen mit dem Steckbrett
A0 zum mittleren Pin am Potentiometer
Vin to Power auf Neopixel-Ring
3v3 auf einer Seite des Potentiometers
Alle Gründe zu Ground on NodeMCU
D1 zur Anforderungstaste
D2 zur Anforderungs-LED
D3 zum Startknopf
D4 zum Stopp-Knopf
D5 zum Widerstand zum Neopixel-Eingang am Ring
D6 zum Widerstand zum Neopixel-Eingangsstreifen
Schritt 6: Starten des Codes
Dies ist der Code, um sicherzustellen, dass Ihr Projekt bisher funktioniert. Der Timer sollte nur ein paar Sekunden pro LED auf dem Neopixel-Ring betragen. Sobald Sie wissen, dass es bis zu diesem Punkt funktioniert, müssen Sie nur noch die Zeit-if-Anweisungen unten auf Ihren angegebenen Bereich ändern. Ich werde '#Zeit ändern' auf jede der Zeitangaben setzen, die Sie für Ihr Zeitkontingent ändern müssen.
Code ausprobieren:
utime importieren
Importzeit
aus Maschinenimport ADC
Importmaschine
Neopixel importieren
ADC = ADC(0)
Pin = Maschine. Pin(14, Maschine. Pin. OUT)
np = neopixel. NeoPixel(pin, 12)
Pin2 = Maschine. Pin(12, Maschine. Pin. OUT)
np2 = neopixel. NeoPixel(pin2, 8)
l1 = Maschine. Pin(4, Maschine. Pin. OUT)
b1 = Maschine. Pin(5, Maschine. Pin. IN, Maschine. Pin. PULL_UP)
b3 = Maschine. Pin(2, Maschine. Pin. IN, Maschine. Pin. PULL_UP)
b2 = Maschine. Pin(0, Maschine. Pin. IN, Maschine. Pin. PULL_UP)
l1. Wert(0)
def tglled(): # Toggle 'request' LED-Funktion
if l1.value() == 0:
l1. Wert(1)
anders:
l1. Wert(0)
x = 0
b1temp1 = 0
b1temp2 = 0
t = 0
b2temp1 = 0
b2temp2 = 0
b3temp1 = 0
b3temp2 = 0
s = 0
während Wahr:
# Dies ist die Taste, die die 'Anfrage'-LED umschaltet
b1temp2 = b1.value()
wenn b1temp1 und nicht b1temp2:
tglled()
time.sleep(0.05)
b1temp1 = b1temp2
# Das ist das Gitter
np2[0] = np[11]
if l1.value() == 1:
np2[1] = (30, 0, 0)
anders:
np2[1] = (0, 0, 30)
np2.write()
# Hier wählen wir aus, wie viel Zeit wir brauchen
wenn t == 0:
für i im Bereich (-1, 12):
if (l1.value() == 0):
if (adc.read() >= (85,34 * (i+1))):
np = (0, 0, 0)
np[11] = (0, 0, 30)
s = (i + 1)
anders:
np = (0, 0, 30)
np.write()
anders:
np = (0, 0, 0)
np.write()
# Dies ist die Schaltfläche zum Starten des Timers
if (l1.value() == 0) und (t == 0):
b2temp2 = b2.value()
wenn b2temp1 und nicht b2temp2:
x += 1
t += (s * 100)
time.sleep(0.05)
b2temp1 = b2temp2
# Diese Schaltfläche beendet den Timer
if (l1.value() == 0):
b3temp2 = b3.value()
wenn b3temp1 und nicht b3temp2:
x = 0
t = 0
time.sleep(0.05)
b3temp1 = b3temp2
# Das ist der Timer
wenn x > 0:
t += 1
if (t > 0) und (t <= 100): #Zeit ändern
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()
if (t > 100) und (t <= 200): #Zeit ändern
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()
if (t > 200) und (t <= 300): #Zeit ändern
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()
if (t > 300) und (t <= 400): #Zeit ändern
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()
if (t > 400) und (t <= 500): #Zeit ändern
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()
if (t > 500) und (t <= 600): #Zeit ändern
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()
if (t > 600) und (t <= 700): #Zeit ändern
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()
if (t > 700) und (t <= 800): #Zeit ändern
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()
if (t > 800) und (t <= 900): #Zeit ändern
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()
if (t > 900) und (t <= 1000): #Zeit ändern
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()
if (t > 1000) und (t <= 1100): #Zeit ändern
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()
if (t > 1100) und (t <= 1200): #Zeit ändern
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()
wenn t >= 1300: #Zeit ändern
t = 0
x = 0
Schritt 7: Feinschliff
Sobald Sie so weit sind, sollten Sie den Arbeitscode auf die NodeMCU hochgeladen und alle Teile mit dem Steckbrett verdrahtet haben. Nachdem Sie den Code ausprobiert und alle Teile, die Sie für das Äußere haben, z. B. das lasergeschnittene Gehäuse, geschnitten haben, können Sie nun die Drähte an die NodeMCU löten. Das Löten ist optional, kann es aber für Ihr Gehäuse sicherer und kleiner machen. Hier sind einige der lasergeschnittenen Teile, die wir hergestellt haben.