Innholdsfortegnelse:

Bevegelsessensor/motkontrollerte lys: 7 trinn
Bevegelsessensor/motkontrollerte lys: 7 trinn

Video: Bevegelsessensor/motkontrollerte lys: 7 trinn

Video: Bevegelsessensor/motkontrollerte lys: 7 trinn
Video: Умный диммер ZigBee WiFi для регулировки освещения Bingoelec Tuya Smart 2024, Juli
Anonim
Bevegelsessensor/motkontrollerte lys
Bevegelsessensor/motkontrollerte lys

Dette prosjektet ble opprettet som et avsluttende prosjekt for et Digital Design -kurs på Cal Poly, San Luis Obispo (CPE 133).

Hvorfor vil vi gjøre dette? Vi vil bidra til å bevare naturressurser i verden. Vårt prosjekt fokuserer på å spare strøm. Ved å spare mer strøm vil vi kunne bevare naturressursene som brukes til å generere elektrisitet. Når vi begynner 2018, blir naturressurser forbrukt med en utrolig fart. Vi ønsker å være bevisste på vår innvirkning på miljøet vårt og spille vår rolle i å bevare naturressurser. Elektronikk kan implementeres på forskjellige måter for å spare energi som hjelper miljøet så vel som vår økonomiske tilstand.*Denne modellen ble opprettet ved hjelp av komponentene som er tilgjengelige for oss.

Hva var vår inspirasjon? Folk glemmer ofte å slå av ferielampene og sløser med energi ved å la dem være på natten. I virkeligheten vil dette prosjektet spare strøm fordi "ferielysene" bare ville være på når folk er i nærheten, og dermed spare energi når ingen er i nærheten. Videre ønsket vi å designe en tidtaker, slik at lysene sloknet helt etter en gitt tid for å sikre at de ikke slås på på grunn av bevegelse som ble oppdaget klokken 03.00, for eksempel.

Hvordan kan du bruke denne designen? Denne designen kan implementeres for alle slags lys, enten de er dekorative, praktiske eller begge deler. Hvis du vil at skrivebordslampen din bare skal fungere i 6 timer om gangen, for eksempel. Du må sette en teller til 21, 600 sekunder (6 timer x 3, 600 sekunder/time). Mens telleren aktivt øker, ville bevegelsessensoren kontrollere lyset. Hver gang den slås av i løpet av den tidsperioden, trenger du bare å vinke hånden foran bevegelsessensoren, og den slås på igjen. Hvis du sovner ved skrivebordet og våkner 7 timer senere, vil bevegelsen ikke slå den på.

Trinn 1: Nødvendig programvare og maskinvare

Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare
Nødvendig programvare og maskinvare

Programvare:

  • Vivado 2016.2 (eller en nyere versjon) finner du her
  • Arduino IDE 1.8.3 (eller en nyere versjon) finner du her

Maskinvare:

  • 1 Basys 3 -brett
  • 1 Arduino Uno
  • 2 brødbrett
  • 1 Ultrasonic Ranging sensor HC-SR04
  • 9 Mann-til-mann-ledninger
  • 1 LED
  • 1 100Ω motstand

Trinn 2: Koder (Vivado)

Koder (Vivado)
Koder (Vivado)

Endelig tilstandsmaskin (se tilstandsdiagram ovenfor):

Lysdioden krevde en endelig tilstandsmaskin. En LED har bare to tilstander for å være av og på. Bare to innganger styrer tilstanden til LED -en, telleren og sensoren. Den eneste gangen LED -lampen skal være på er når sensoren oppdager bevegelse og når telleren teller fra null til tretti sekunder. I alle andre tilfeller vil lysdioden være slukket.

Filnavn: LEDDES

Disk:

Telleren lar oss begrense hvor lang tid bevegelsessensoren kan aktivere LED -en. Verdien vises på Basys 3 Boards syv segmentdisplay gjennom en kildekode ("sseg_dec"). Når Reset -bryteren er nede (verdi: '0'), begynner telleren å øke hvert sekund fra 0 til 30. Når den når 30, fryser den på det tallet. Den starter ikke på nytt fra 0 før Reset -bryteren veksles til ‘1’ og tilbake til ‘1.’ Hvis Reset blir ‘1’ mens telleren går, vil telleren fryse på hvilken verdi den hadde nådd. Når Reset går tilbake til '0', starter telleren på nytt fra 0 til 30. Denne implementeringen krever også bruk av et klokkesignal, koden er gitt nedenfor ("clk_div2").

Filnavn: FinalCounter

LEVERENDE FILER:

Syv segmentvisning:

Denne koden lar sju segmentvisning vise desimalverdier. En delmodul fungerer som dekoder mellom en 8-bits binær inngang og en 4-bits binær kodet desimal. Den andre deler klokkesignalet for å oppdatere verdien med en viss hastighet.

Filnavn: sseg_dec

Klokkesignal:

Denne koden lar telleren øke i trinn på 1 sekund. Den deler inngangsklokkefrekvensen i en langsommere frekvens. Vi tilpasset oss å gi en periode på 1 sekund ved å endre konstant max_count: integer: = (3000000)”til“konstant max_count: integer: = (50000000).”

Filnavn: clk_div2

Leverte filer: sseg_dec, clk_div2 *Disse kildefilene ble levert av professor Bryan Mealy.

Trinn 3: Forstå hvordan de kommer sammen (skjemaer for VHDL -komponenter)

Forstå hvordan de kommer sammen (skjemaer av VHDL -komponenter)
Forstå hvordan de kommer sammen (skjemaer av VHDL -komponenter)

Hovedfilen ("MainProjectDES") inneholder alle underfilene som er diskutert tidligere. De er koblet på den ovennevnte måten. De forskjellige komponentene er sammenkoblet ved hjelp av portkart for å sende et signal fra ett element til et annet.

Som du kanskje har lagt merke til, gir FinalCounter en 5-biters utgang mens sseg_dec krever en 8-biters inngang. For å kompensere setter vi signalet som forbinder begge komponentene til å begynne med "000" og legger til 5-biters utgang fra telleren. Dermed gir den en 8-bits inngang.

Begrensninger:

For å kjøre disse kodene på Basys 3 -kortet var det nødvendig med en begrensningsfil som fortalte hvert signal hvor de skulle gå og hvordan delene var koblet sammen.

Trinn 4: Kode (Arduino)

Vi programmerte Arduino Uno til å bruke bevegelsessensoren til å oppdage bevegelse og gi en utgang som signaliserer LED -en til å lyse. I tillegg krever bruk av sensoren for å oppdage bevegelse løpende løkker som stadig ser etter endring i avstand. I hovedsak trenger den en tidtaker som kjører samtidig for å sende et "høyt" signal for at LED -en skal lyse mens timeren må tilbakestilles når det er oppdaget ny bevegelse, som er nesten umulig å implementere på Vivado basert på kunnskapens omfang av klassen. Videre brukte vi en Arduino fordi det ikke ville være mulig å bruke HC-SR04 med Basys 3-kortet siden kortet bare leverer 3,3V mens sensoren krever en 5V strømforsyning. For implementering av detekteringsbevegelsen er det faktisk koding i motsetning til CAD i VHDL.

Vi brukte den innebygde pulsfunksjonen for sensoren for å hente tiden som gikk mellom lyden som opprinnelig ble sendt ut fra sensoren og lyden som spretter tilbake når du treffer et objekt. Deretter bruker vi lydens hastighet og tidsintervall for å beregne avstanden mellom objektet og sensoren. Fra det lagrer vi nåværende avstand og holder orden på den. Vi kontrollerer avstanden hver 150 ms. Vi brukte også biblioteket elapsedmil til å kjøre en intern timer inne i arduinoen for å holde oversikt over tiden som gikk. Hvis vi oppdager en distanseendring, som tilsvarer en bevegelse, tilbakestilles timeren til null, og den vil holde lyset på til 3 sekunder har gått. Når sensoren oppdager en annen bevegelse, tilbakestilles timeren til 0 og signalet for LED -lyset vil være "høyt" i de neste 3 sekundene. Vi har lagt ved en kopi av vår Arduino -kode nedenfor.

Trinn 5: Hvordan våre komponenter passer sammen

Hvordan våre komponenter passer sammen!
Hvordan våre komponenter passer sammen!
Hvordan våre komponenter passer sammen!
Hvordan våre komponenter passer sammen!
Hvordan våre komponenter passer sammen!
Hvordan våre komponenter passer sammen!

Som du kan se i "Basys3: Pmod Pin-out Diagram*" og bildet av Arduino Uno Board, fremhevet og merket vi portene vi brukte.

1. LED og Basys 3 Board

Lysdioden er seriekoblet med 100Ω motstand. -Den hvite ledningen kobler motstanden til pin PWR på Basys 3 -kortet. -Den gule ledningen kobler LED -en til pin H1 på Basys 3 -kortet.

2. Bevegelsessensoren og Arduino Uno

-Den oransje ledningen kobler Vcc (strøm) til bevegelsessensoren til pinne 5V på Arduino Uno-kortet. -Den hvite ledningen kobler pin Trig på bevegelsessensoren til pin 10 på Arduino Uno-kortet. -Den gule ledningen kobler pin Echo av bevegelsessensoren til pinne 9 på Arduino Uno-kortet. -Den svarte ledningen kobler pin GND på bevegelsessensoren til pin GND på Arduino Uno-kortet.

[Ledningene vi brukte var for korte til å nå komponentene, og de var dermed sammenkoblet]

3. Basys 3 -brettet og Arduino Uno

Den gule ledningen kobler pin A14 på Basys 3 -kortet til pin 6 på Arduino Uno -kortet.

*Dette diagrammet er hentet fra Digilents "Basys 3 ™ FPGA Board Reference Manual" som du finner her.

Trinn 6: Demonstrasjon

Trinn 7: På tide å teste det ut

Gratulerer! Du har kommet til slutten av vårt bevegelsessensor- og motstyrt lysprosjekt! Tusen takk for at du leste gjennom vårt Instructables -innlegg. Nå er det på tide at du prøver å bygge dette prosjektet selv. Hvis du følger hvert trinn nøye, bør du ha en bevegelsessensor og motstyrt lys som fungerer som vårt! Vi ønsker deg lykke til med å bygge dette prosjektet, og håper det kan bidra til å spare strøm og naturressurser!

Anbefalt: