Sommario:

Luci controllate da sensore di movimento/contatore: 7 passaggi
Luci controllate da sensore di movimento/contatore: 7 passaggi

Video: Luci controllate da sensore di movimento/contatore: 7 passaggi

Video: Luci controllate da sensore di movimento/contatore: 7 passaggi
Video: Accendere e spegnere un alimentatore LED con sensore di presenza 2024, Dicembre
Anonim
Sensore di movimento/luci controllate da contatore
Sensore di movimento/luci controllate da contatore

Questo progetto è stato creato come progetto finale per un corso di Digital Design a Cal Poly, San Luis Obispo (CPE 133).

Perché lo stiamo facendo? Vogliamo aiutare a conservare le risorse naturali nel mondo. Il nostro progetto si concentra sul risparmio di energia elettrica. Risparmiando più elettricità, saremo in grado di conservare le risorse naturali utilizzate per generare elettricità. All'inizio del 2018, le risorse naturali vengono consumate a un ritmo incredibile. Vogliamo essere consapevoli del nostro impatto sull'ambiente e fare la nostra parte nella conservazione delle risorse naturali. L'elettronica può essere implementata in vari modi per risparmiare energia che aiuta l'ambiente e il nostro stato economico.*Questo modello è stato creato utilizzando i componenti a nostra disposizione.

Qual è stata la nostra ispirazione? Spesso le persone dimenticano di spegnere le luci delle feste e sprecano energia lasciandole accese durante la notte. In realtà, questo progetto consentirà di risparmiare energia elettrica perché le "luci festive" sarebbero accese solo quando le persone sono nelle vicinanze, risparmiando così energia quando non c'è nessuno in giro. Inoltre, volevamo progettare un timer in modo che le luci si spegnessero completamente dopo un certo tempo per garantire che non si accendessero a causa di un movimento rilevato alle 3 del mattino, ad esempio.

Come potresti usare questo design? Questo design può essere implementato per tutti i tipi di luci, siano esse decorative, pratiche o entrambe. Se vuoi che la tua lampada da scrivania funzioni solo per 6 ore alla volta, ad esempio. Dovresti impostare un contatore su 21, 600 secondi (6 ore x 3, 600 secondi/ora). Mentre il contatore aumenta attivamente, il sensore di movimento controllerà la luce. Pertanto, ogni volta che si spegne durante quel lasso di tempo, devi solo agitare la mano davanti al sensore di movimento e si riaccenderà. Se ti addormenti alla scrivania e ti svegli 7 ore dopo, il tuo movimento non lo attiverà.

Passaggio 1: software e hardware richiesti

Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti
Software e hardware richiesti

Software:

  • Vivado 2016.2 (o una versione più recente) può essere trovato qui
  • Arduino IDE 1.8.3 (o una versione più recente) può essere trovato qui

Hardware:

  • 1 scheda Basys 3
  • 1 Arduino Uno
  • 2 taglieri
  • 1 sensore di distanza ad ultrasuoni HC-SR04
  • 9 fili maschio-maschio
  • 1 LED
  • 1 resistenza da 100Ω

Passaggio 2: codici (Vivado)

Codici (Vivado)
Codici (Vivado)

Macchina a stati finiti (vedi diagramma di stato sopra):

Il LED richiedeva una macchina a stati finiti. Un LED ha solo due stati di essere acceso e spento. Solo due ingressi controllano lo stato del LED, del contatore e del sensore. L'unica volta che il LED dovrebbe essere acceso è quando il sensore rileva un movimento e quando il contatore conta da zero a trenta secondi. In ogni altro caso il LED sarà spento.

Nome del file: LEDDES

Contatore:

Il contatore ci consente di limitare il tempo durante il quale il sensore di movimento può attivare il LED. Il suo valore viene visualizzato sul display a sette segmenti della Basys 3 Board tramite un codice sorgente ("sseg_dec"). Quando l'interruttore Reset è abbassato (valore: '0'), il contatore inizia ad aumentare ogni secondo da 0 a 30. Quando raggiunge 30, si blocca su quel numero. Non si riavvierà da 0 fino a quando l'interruttore di ripristino non viene commutato su "1" e di nuovo su "1". Se Ripristino diventa "1" mentre il contatore è in funzione, il contatore si bloccherà su qualsiasi valore abbia raggiunto. Quando Reset torna a "0", il contatore ripartirà da 0 a 30. Questa implementazione richiede anche l'uso di un segnale di clock, il cui codice è fornito di seguito ("clk_div2").

Nome file: FinalCounter

FILE FORNITI:

Display a sette segmenti:

Questo codice consente al display a sette segmenti di visualizzare i valori decimali. Un sottomodulo funge da decodificatore tra un ingresso binario a 8 bit e un decimale codificato binario a 4 bit. L'altro divide il segnale di clock per aggiornarne il valore a una certa velocità.

Nome file: sseg_dec

Segnale orologio:

Questo codice consente al contatore di aumentare con incrementi di 1 secondo. Divide la frequenza di clock in ingresso in una frequenza più lenta. Ci siamo adattati per fornire un periodo di 1 secondo modificando constant max_count: integer:= (30000000)” in “constant max_count: integer:= (5000000).”

Nome file: clk_div2

File forniti: sseg_dec, clk_div2 *Questi file sorgente sono stati forniti dal professor Bryan Mealy.

Passaggio 3: capire come si uniscono (schemi dei componenti VHDL)

Capire come si uniscono (schemi dei componenti VHDL)
Capire come si uniscono (schemi dei componenti VHDL)

Il file principale (" MainProjectDES ") contiene tutti i sottofile discussi in precedenza. Sono collegati nel modo sopra. I diversi componenti sono interconnessi utilizzando mappe di porte per inviare un segnale da un elemento all'altro.

Come avrai notato, FinalCounter fornisce un output a 5 bit mentre sseg_dec richiede un input a 8 bit. Per compensare, impostiamo il segnale che collega entrambi i componenti in modo che inizi con "000" e aggiungiamo l'uscita a 5 bit dal contatore. Fornendo così un ingresso a 8 bit.

Vincoli:

Per eseguire questi codici sulla Basys 3 Board, era necessario un file dei vincoli, che indicasse a ciascun segnale dove andare e come erano collegate le parti.

Passaggio 4: codice (Arduino)

Abbiamo programmato Arduino Uno per utilizzare il sensore di movimento per rilevare il movimento e fornire un'uscita che segnala al LED di accendersi. Inoltre, l'utilizzo del sensore per rilevare il movimento richiede l'esecuzione di loop che cercano costantemente il cambiamento nella distanza. In sostanza, ha bisogno di un timer che funzioni contemporaneamente per emettere un segnale "alto" per l'accensione del LED mentre il timer deve essere ripristinato una volta rilevato un nuovo movimento, che è quasi impossibile da implementare su Vivado in base all'ambito delle conoscenze della classe. Inoltre, abbiamo utilizzato un Arduino perché non sarebbe stato possibile utilizzare HC-SR04 con la Basys 3 Board poiché la scheda fornisce solo 3,3 V mentre il sensore richiede un'alimentazione di 5 V. Per l'implementazione del movimento di rilevamento, è la codifica effettiva rispetto al CAD in VHDL.

Abbiamo utilizzato la funzione incorporata a impulsi per il sensore per recuperare il tempo trascorso tra il suono inizialmente emesso dal sensore e il suono che rimbalza quando colpisce un oggetto. Quindi utilizziamo la velocità del suono e l'intervallo di tempo per calcolare la distanza tra l'oggetto e il sensore. Da ciò, memorizziamo la distanza attuale e ne teniamo traccia. Controlliamo la distanza ogni 150 ms. Abbiamo anche usato la libreria elapsedmil per eseguire un timer interno all'arduino per tenere traccia del tempo trascorso. Se rileviamo una variazione di distanza, che corrisponde a un movimento, il timer viene azzerato e manterrà la luce accesa fino a quando non saranno trascorsi 3 secondi. Ogni volta che il sensore rileva un altro movimento, il timer viene reimpostato su 0 e il segnale per la luce del LED sarà "alto" per i successivi 3 secondi. Di seguito abbiamo allegato una copia del nostro codice Arduino.

Passaggio 5: come si adattano i nostri componenti

Come si incastrano i nostri componenti!
Come si incastrano i nostri componenti!
Come si incastrano i nostri componenti!
Come si incastrano i nostri componenti!
Come si incastrano i nostri componenti!
Come si incastrano i nostri componenti!

Come puoi vedere nel "Basys3: Pmod Pin-out Diagram*" e nella foto della scheda Arduino Uno, abbiamo evidenziato ed etichettato le porte che abbiamo usato.

1. La scheda LED e Basys 3

Il LED è collegato in serie alla resistenza da 100Ω. -Il filo bianco collega la resistenza al pin PWR della scheda Basys 3. -Il filo giallo collega il LED al pin H1 della scheda Basys 3.

2. Il sensore di movimento e Arduino Uno

-Il filo arancione collega Vcc (alimentazione) del sensore di movimento al pin 5V della scheda Arduino Uno.-Il filo bianco collega il pin Trig del sensore di movimento al pin 10 della scheda Arduino Uno.-Il filo giallo collega il pin Echo di il sensore di movimento al pin 9 della scheda Arduino Uno.-Il filo nero collega il pin GND del sensore di movimento al pin GND della scheda Arduino Uno.

[I fili che abbiamo usato erano troppo corti per raggiungere i componenti, quindi erano interconnessi]

3. La scheda Basys 3 e Arduino Uno

Il filo giallo collega il pin A14 della scheda Basys 3 al pin 6 della scheda Arduino Uno.

*Questo diagramma è stato preso dal "Manuale di riferimento della scheda FPGA Basys 3™" di Digilent che può essere trovato qui.

Passaggio 6: dimostrazione

Passaggio 7: è ora di testarlo

Congratulazioni! Sei arrivato alla fine del nostro progetto di luce controllata da sensore di movimento e contatore! Grazie mille per aver letto il nostro post su Instructables. Ora è il momento per te di provare a costruire questo progetto da solo. Se segui attentamente ogni passaggio, dovresti avere un sensore di movimento e una luce controllata da contatore che funzioni in modo simile al nostro! Vi auguriamo buona fortuna nella realizzazione di questo progetto e speriamo che possa contribuire al risparmio di elettricità e di risorse naturali!

Consigliato: