Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Instructies voor het maken van een timer voor een studeerkamer.
Stap 1: Interactievideo
drive.google.com/file/d/12z5zQR52AXILX2AGb3EplfbmZWANZiCl/view?usp=drivesdk
Stap 2: Probleemstelling
Meestal zijn studiezalen altijd bezet. Dit gebeurt omdat mensen graag veel langer in de kamer blijven dan nodig is. We hebben een timer ontworpen waarmee elke persoon in totaal 2 uur en wachtende mensen de mogelijkheid heeft om de kamer aan te vragen als de volgende groep. Het gebruik van RGB op Neopixels geeft de resterende tijd weer.
Stap 3: Overzicht van hoe het werkt
De timer bestaat uit onderdelen gesneden door de lasercutter, 3 knoppen, 1 LED, 1 potentiometer.
De Neopixels en potentiometer zijn aangesloten op de NodeMCU. De NodeMCU is geprogrammeerd om te bepalen hoe ver de potentiometer wordt gedraaid om het aantal LED's dat op de ronde Neopixel-strip brandt, te wijzigen. De knop Verzoek stopt de functie van de functie Start, Stop en Tijd instellen. De kleur van de LED's op de timer in de kamer is dezelfde kleur als de LED die aan de zijkant van de doos brandt. De neopixel aan de zijkant van de doos vertegenwoordigt het display in de lobby van het gebouw om te weten welke kamer is ingenomen en hoeveel tijd er nog is. Er zijn 2 LED's voorgeschreven voor elke kamer, één LED geeft aan of de kamer bezet is en de andere LED weerspiegelt de kleur van de LED's op de timer (groen is meer tijd, dan geel, dan rood voor minder tijd).
Stap 4: Lijst met materialen en gereedschappen
-Helder acryl
-MicroUSB-kabel
www.digikey.com/product-detail/en/stewart-…
-Broodplank
www.amazon.com/gp/product/B01EV6LJ7G/ref=o…
-Potentiometer
www.alliedelec.com/honeywell-380c32500/701…
-3 knoppen
www.digikey.com/product-detail/en/te-conne…
-NodeMCU
www.amazon.com/gp/product/B07CB4P2XY/ref=o…
- 2 Neopixel-strips
www.amazon.com/Lighting-Modules-NeoPixel-W…
-Weerstanden
www.digikey.com/product-detail/en/te-conne…
- Draden
www.digikey.com/product-detail/en/sparkfun…
-1 LED
www.mouser.com/ProductDetail/Cree-Inc/C512…
-Heet lijmpistool
www.walmart.com/ip/AdTech-Hi-Temp-Mini-Hot…
-Kleverige klittenbandstrips
www.amazon.com/VELCRO-Brand-90076-Fastener…
Stap 5: Begin met bouwen met de Breadboard
A0 naar middelste pin op Potentiometer
Vin om Neopixel-ring aan te zetten
3v3 aan één kant van Potentiometer
Alle gronden om te aarden op NodeMCU
D1 naar aanvraagknop
D2 om LED aan te vragen
D3 naar startknop
D4 naar stopknop
D5 naar weerstand naar Neopixel Input op ring
D6 naar weerstand naar Neopixel Input strip
Stap 6: De code starten
Dit is de code om ervoor te zorgen dat uw project tot nu toe werkt. De timer zou slechts een paar seconden per LED op de Neopixel Ring moeten zijn. Zodra u weet dat het tot nu toe werkt, hoeft u alleen maar de tijd als onderstaande instructies te wijzigen in het door u opgegeven bereik. Ik zal '#Change time' op elk van de time if-statements zetten die je moet veranderen voor je beschikbare tijd.
De code proberen:
import utime
import tijd
van machine-import ADC
importmachine
neopixel importeren
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 = machine. 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.waarde(0)
def tglled(): # toggle 'verzoek' LED-functie
if l1.waarde() == 0:
l1.waarde(1)
anders:
l1.waarde(0)
x = 0
b1temp1 = 0
b1temp2 = 0
t = 0
b2temp1 = 0
b2temp2 = 0
b3temp1 = 0
b3temp2 = 0
s = 0
terwijl waar:
# Dit is de knop waarmee de 'verzoek'-LED wordt omgeschakeld
b1temp2 = b1.waarde()
indien b1temp1 en niet b1temp2:
tglled()
tijd.slaap(0.05)
b1temp1 = b1temp2
# Dit is het raster
np2[0] = np[11]
als l1.waarde() == 1:
np2[1] = (30, 0, 0)
anders:
np2[1] = (0, 0, 30)
np2.write()
# Hier selecteren we hoeveel tijd we nodig hebben
als t == 0:
voor i in bereik (-1, 12):
if (l1.waarde() == 0):
if (adc.read() >= (85.34 * (i+1))):
np = (0, 0, 0)
np[11] = (0, 0, 30)
s = (ik + 1)
anders:
np = (0, 0, 30)
np.schrijf()
anders:
np = (0, 0, 0)
np.schrijf()
# Dit is de knop om de timer te starten
if (l1.value() == 0) en (t == 0):
b2temp2 = b2.waarde()
indien b2temp1 en niet b2temp2:
x += 1
t += (s * 100)
tijd.slaap(0.05)
b2temp1 = b2temp2
# Deze knop beëindigt de timer
if (l1.waarde() == 0):
b3temp2 = b3.waarde()
indien b3temp1 en niet b3temp2:
x = 0
t = 0
tijd.slaap(0.05)
b3temp1 = b3temp2
# Dit is de timer
als x > 0:
t += 1
als (t > 0) en (t <= 100): #Wijzig tijd
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.schrijf()
if (t > 100) en (t <= 200): #Wijzig tijd
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.schrijf()
if (t > 200) en (t <= 300): #Wijzig tijd
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.schrijf()
if (t > 300) en (t <= 400): #Wijzig tijd
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.schrijf()
if (t > 400) en (t <= 500): #Wijzig tijd
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.schrijf()
als (t > 500) en (t <= 600): #Verander tijd
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.schrijf()
als (t > 600) en (t <= 700): #Wijzig tijd
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.schrijf()
if (t > 700) en (t <= 800): #Wijzig tijd
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.schrijf()
als (t > 800) en (t <= 900): #Verander tijd
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.schrijf()
als (t > 900) en (t <= 1000): #Wijzig tijd
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.schrijf()
if (t > 1000) en (t <= 1100): #Wijzig tijd
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.schrijf()
if (t > 1100) en (t <= 1200): #Wijzig tijd
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.schrijf()
als t >= 1300: #Wijzig tijd
t = 0
x = 0
Stap 7: finishing touch
Nu, als je eenmaal zo ver bent, zou je de werkcode moeten uploaden naar de NodeMCU en alle onderdelen op het breadboard hebben aangesloten. Nadat je de code hebt geprobeerd en alle stukken hebt gesneden die je voor de buitenkant hebt, d.w.z. lasergesneden behuizing, kun je nu de draden aan de NodeMCU solderen. Het solderen is optioneel, maar kan het veiliger en kleiner maken voor uw behuizing. Hier zijn enkele van de lasergesneden onderdelen die we hebben gemaakt.