Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
Istruzioni su come creare un timer per una sala studio.
Passaggio 1: video di interazione
drive.google.com/file/d/12z5zQR52AXILX2AGb3EplfbmZWANZiCl/view?usp=drivesdk
Passaggio 2: dichiarazione del problema
La maggior parte delle volte, le aule studio sono sempre occupate. Questo accade perché alle persone piace stare nella stanza molto più a lungo del necessario. Abbiamo progettato un timer che consente a ogni persona un totale di 2 ore e alle persone in attesa di richiedere la stanza per essere il prossimo gruppo. L'uso di RGB su Neopixel esprimerà la quantità di tempo rimasta.
Passaggio 3: panoramica di come funziona
Il timer è composto da parti tagliate dal laser cutter, 3 pulsanti, 1 LED, 1 potenziometro.
I Neopixel e il potenziometro sono collegati al NodeMCU. Il NodeMCU è programmato per regonizzare fino a che punto viene girato il potenziometro per modificare la quantità di LED che si accendono sulla striscia circolare di Neopixel. Il pulsante Richiesta interrompe la funzione di Avvio, Arresto e Imposta ora. Il colore dei led del timer all'interno della stanza è lo stesso colore del led acceso a lato della scatola. Il neopixel a lato della scatola rappresenta il display nell'atrio dell'edificio per sapere quale stanza è occupata e quanto tempo è rimasto. Per ogni stanza sono prescritti 2 LED, un LED rappresenta se la stanza è occupata e l'altro LED rispecchia il colore dei LED sul timer (il verde è più tempo, poi il giallo, poi il rosso per meno tempo).
Passaggio 4: elenco di materiali e strumenti
-Acrilico trasparente
-Cavo MicroUSB
www.digikey.com/product-detail/en/stewart-…
-tagliere
www.amazon.com/gp/product/B01EV6LJ7G/ref=o…
-Potenziometro
www.alliedelec.com/honeywell-380c32500/701…
-3 pulsanti
www.digikey.com/product-detail/en/te-conne…
-NodeMCU
www.amazon.com/gp/product/B07CB4P2XY/ref=o…
- 2 strisce di neopixel
www.amazon.com/Lighting-Modules-NeoPixel-W…
-Resistori
www.digikey.com/product-detail/en/te-conne…
- Fili
www.digikey.com/product-detail/en/sparkfun…
-1 LED
www.mouser.com/ProductDetail/Cree-Inc/C512…
- Pistola per colla a caldo
www.walmart.com/ip/AdTech-Hi-Temp-Mini-Hot…
- Strisce adesive in velcro
www.amazon.com/VELCRO-Brand-90076-Fastener…
Passaggio 5: inizia a costruire con la breadboard
A0 al pin centrale sul potenziometro
Vin per accendere l'anello Neopixel
3v3 su un lato del potenziometro
Tutti i motivi a Ground su NodeMCU
D1 al pulsante di richiesta
D2 al LED di richiesta
D3 al pulsante Start
D4 al pulsante Stop
D5 al resistore all'ingresso Neopixel sull'anello
D6 al resistore alla striscia di ingresso Neopixel
Passaggio 6: avvio del codice
Questo è il codice per assicurarti che il tuo progetto funzioni finora. Il timer dovrebbe essere solo un paio di secondi per LED sull'anello Neopixel. Una volta che sai che funziona fino a questo punto, tutto ciò che devi fare è modificare l'ora se le istruzioni di seguito nell'intervallo specificato. Metterò '#Change time' su ciascuna delle affermazioni time if che devi modificare per la tua assegnazione di tempo.
Provando il codice:
importa utime
tempo di importazione
dall'importazione della macchina ADC
macchina di importazione
importare 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 = macchina. Pin(4, macchina. Pin. OUT)
b1 = macchina. Pin(5, macchina. Pin. IN, macchina. Pin. PULL_UP)
b3 = macchina. Pin(2, macchina. Pin. IN, macchina. Pin. PULL_UP)
b2 = macchina. Pin(0, macchina. Pin. IN, macchina. Pin. PULL_UP)
l1.valore(0)
def tglled(): # attiva/disattiva la funzione LED 'richiesta'
se l1.value() == 0:
l1.valore(1)
altro:
l1.valore(0)
x = 0
b1temp1 = 0
b1temp2 = 0
t = 0
b2temp1 = 0
b2temp2 = 0
b3temp1 = 0
b3temp2 = 0
s = 0
mentre vero:
# Questo è il pulsante che attiva il LED 'richiesta'
b1temp2 = b1.valore()
se b1temp1 e non b1temp2:
tglled()
tempo.sonno(0.05)
b1temp1 = b1temp2
# Questa è la griglia
np2[0] = np[11]
se l1.value() == 1:
np2[1] = (30, 0, 0)
altro:
np2[1] = (0, 0, 30)
np2.write()
# Qui è dove selezioniamo il tempo di cui abbiamo bisogno
se t == 0:
per i nell'intervallo (-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)
altro:
np = (0, 0, 30)
np.write()
altro:
np = (0, 0, 0)
np.write()
# Questo è il pulsante per avviare il timer
if (l1.value() == 0) e (t == 0):
b2temp2 = b2.value()
se b2temp1 e non b2temp2:
x += 1
t += (s * 100)
tempo.sonno(0.05)
b2temp1 = b2temp2
# Questo pulsante termina il timer
if (l1.value() == 0):
b3temp2 = b3.value()
se b3temp1 e non b3temp2:
x = 0
t = 0
tempo.sonno(0.05)
b3temp1 = b3temp2
# Questo è il timer
se x > 0:
t += 1
if (t > 0) e (t <= 100): #Cambia tempo
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) e (t <= 200): #Cambia tempo
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) e (t <= 300): #Cambia tempo
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) e (t <= 400): #Cambia tempo
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) e (t <= 500): #Cambia tempo
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) e (t <= 600): #Cambia tempo
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) e (t <= 700): #Cambia tempo
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) e (t <= 800): #Cambia tempo
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) e (t <= 900): #Cambia tempo
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) e (t <= 1000): #Cambia tempo
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) e (t <= 1100): #Cambia tempo
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) e (t <= 1200): #Cambia tempo
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()
se t >= 1300: #Cambia ora
t = 0
x = 0
Passaggio 7: ritocchi finali
Ora, una volta arrivato a questo punto, dovresti avere il codice funzionante caricato sul NodeMCU e tutte le parti collegate alla breadboard. Dopo aver provato il codice e tagliato tutti i pezzi che hai per l'esterno, ad esempio l'involucro tagliato al laser, puoi ora saldare i fili al NodeMCU. La saldatura è facoltativa ma potrebbe renderla più sicura e più piccola per il tuo involucro. Ecco alcune delle parti tagliate al laser che abbiamo realizzato.