Indholdsfortegnelse:

Bevægelsessensor/kontrastyrede lys: 7 trin
Bevægelsessensor/kontrastyrede lys: 7 trin

Video: Bevægelsessensor/kontrastyrede lys: 7 trin

Video: Bevægelsessensor/kontrastyrede lys: 7 trin
Video: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, November
Anonim
Bevægelsessensor/kontrastyrede lys
Bevægelsessensor/kontrastyrede lys

Dette projekt blev oprettet som et afsluttende projekt for et Digital Design -kursus på Cal Poly, San Luis Obispo (CPE 133).

Hvorfor gør vi dette? Vi vil hjælpe med at bevare naturressourcer i verden. Vores projekt fokuserer på at spare strøm. Ved at spare mere elektricitet vil vi være i stand til at bevare de naturressourcer, der bruges til at producere elektricitet. Da vi begynder 2018, forbruges naturressourcer med en utrolig hastighed. Vi vil være bevidste om vores indvirkning på vores miljø og spille vores rolle i bevarelsen af naturressourcer. Elektronik kan implementeres på forskellige måder for at spare energi, som hjælper miljøet såvel som vores økonomiske tilstand.*Denne model blev oprettet ved hjælp af de komponenter, vi har til rådighed.

Hvad var vores inspiration? Folk glemmer ofte at slukke deres ferielamper og spilde energi ved at lade dem være tændt natten over. I virkeligheden sparer dette projekt elektricitet, fordi "ferielys" kun ville være tændt, når folk er i nærheden, og dermed spare energi, når ingen er i nærheden. Desuden ville vi designe en timer, så lysene ville slukke helt efter et givet tidspunkt for at sikre, at de ikke tænder på grund af bevægelse opdaget kl. 3 f.eks.

Hvordan kan du bruge dette design? Dette design kan implementeres til alle slags lys, uanset om de er dekorative, praktiske eller begge dele. Hvis du f.eks. Ønsker, at dit skrivebordslampe kun skal fungere i 6 timer ad gangen. Du bliver nødt til at indstille en tæller til 21, 600 sekunder (6 timer x 3, 600 sekunder/time). Mens tælleren aktivt stiger, ville bevægelsessensoren styre lyset. Hver gang den slukker i løbet af det tidsrum, skal du bare vinke din hånd foran bevægelsessensoren, og den tændes igen. Hvis du falder i søvn ved dit skrivebord og vågner 7 timer senere, vil din bevægelse ikke tænde det.

Trin 1: Påkrævet software og hardware

Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware
Påkrævet software og hardware

Software:

  • Vivado 2016.2 (eller en nyere version) findes her
  • Arduino IDE 1.8.3 (eller en nyere version) findes her

Hardware:

  • 1 Basys 3 bord
  • 1 Arduino Uno
  • 2 brødbrætter
  • 1 Ultralydssensor HC-SR04
  • 9 Tråde fra mand til mand
  • 1 LED
  • 1 100Ω modstand

Trin 2: Koder (Vivado)

Koder (Vivado)
Koder (Vivado)

Finite State Machine (se tilstandsdiagram ovenfor):

Lysdioden krævede en endelig tilstandsmaskine. En LED har kun to tilstande til og fra. Kun to indgange styrer lysdioden, tælleren og sensoren. Den eneste gang LED'en skal være tændt, er når sensoren registrerer bevægelse, og når tælleren tæller fra nul til tredive sekunder. I alle andre tilfælde vil LED'en være slukket.

Filnavn: LEDDES

Tæller:

Tælleren giver os mulighed for at begrænse den tid, hvor bevægelsesføleren kan aktivere LED'en. Dens værdi vises på Basys 3 Board's syv segment display gennem en kildekode ("sseg_dec"). Når nulstillingskontakten er nede (værdi: '0'), begynder tælleren at stige hvert sekund fra 0 til 30. Når den når 30, fryser den på det tal. Det genstarter ikke fra 0, før nulstillingskontakten skiftes til '1' og tilbage til '1.' Hvis nulstilling bliver '1', mens tælleren kører, vil tælleren fryse til den værdi, den havde nået. Når nulstilling går tilbage til '0', genstarter tælleren fra 0 til 30. Denne implementering kræver også brug af et kloksignal, dens kode er angivet nedenfor ("clk_div2").

Filnavn: FinalCounter

LEVEREDE FILER:

Syv segment display:

Denne kode gør det muligt for syv segmentvisning at vise decimalværdier. Et submodul fungerer som dekoder mellem en 8-bit binær input og en 4-bit Binary Coded Decimal. Den anden deler urets signal for at opdatere dens værdi med en bestemt hastighed.

Filnavn: sseg_dec

Ur Signal:

Denne kode gør det muligt for tælleren at stige i trin på 1 sekund. Det deler inputurfrekvensen i en langsommere frekvens. Vi tilpassede os til at give en periode på 1 sekund ved at ændre konstant max_count: integer: = (3000000)”til“constant max_count: integer: = (50000000).”

Filnavn: clk_div2

Medfølgende filer: sseg_dec, clk_div2 *Disse kildefiler blev leveret af professor Bryan Mealy.

Trin 3: Forstå, hvordan de hænger sammen (skemaer af VHDL -komponenter)

Forstå hvordan de hænger sammen (skemaer af VHDL -komponenter)
Forstå hvordan de hænger sammen (skemaer af VHDL -komponenter)

Hovedfilen ("MainProjectDES") indeholder alle de tidligere diskuterede underfiler. De er forbundet på ovenstående måde. De forskellige komponenter er forbundet med portkort til at sende et signal fra et element til et andet.

Som du måske har bemærket, leverer FinalCounter et 5-bit output, mens sseg_dec kræver en 8-bit input. For at kompensere satte vi signalet, der forbinder begge komponenter, til at begynde med "000" og tilføjede 5-bit output fra tælleren. Således giver en 8-bit input.

Begrænsninger:

For at køre disse koder på Basys 3 Board var der en begrænsningsfil påkrævet, der fortalte hvert signal, hvor de skulle gå, og hvordan delene var forbundet.

Trin 4: Kode (Arduino)

Vi programmerede Arduino Uno til at bruge bevægelsessensoren til at registrere bevægelse og levere et output, der signalerer LED'en til at lyse. Derudover kræver brug af sensoren til at registrere bevægelse løbende sløjfer, der konstant leder efter ændringer i afstanden. I det væsentlige har den brug for en timer, der kører samtidigt for at udsende et "højt" signal, for at LED'en skal lyse, mens timeren skal nulstilles, når der er registreret ny bevægelse, hvilket er næsten umuligt at implementere på Vivado baseret på omfanget af viden af klassen. Desuden brugte vi en Arduino, fordi det ikke ville være muligt at bruge HC-SR04 med Basys 3-kortet, da kortet kun leverer 3,3V, mens sensoren kræver en 5V-strømforsyning. Til implementering af detekteringsbevægelsen er det faktisk kodning i modsætning til CAD i VHDL.

Vi brugte den indbyggede pulsfunktion til sensoren til at hente den tid, der gik mellem lyden, der oprindeligt blev udsendt fra sensoren, og den lyd, der hopper tilbage, når man rammer et objekt. Derefter bruger vi lydens hastighed og tidsinterval til at beregne afstanden mellem objektet og sensoren. Fra det gemmer vi den aktuelle afstand og holder styr på den. Vi kontrollerer afstanden hver 150 ms. Vi brugte også biblioteket elapsedmil til at køre en intern timer inde i arduinoen for at holde styr på den forløbne tid. Hvis vi registrerer en afstandsændring, som svarer til en bevægelse, nulstilles timeren til nul, og den holder lyset tændt, indtil der er gået 3 sekunder. Når sensoren registrerer en anden bevægelse, nulstilles timeren til 0, og signalet for LED -lyset vil være "højt" i de næste 3 sekunder. Vi har vedhæftet en kopi af vores Arduino -kode nedenfor.

Trin 5: Sådan passer vores komponenter sammen

Sådan passer vores komponenter sammen!
Sådan passer vores komponenter sammen!
Hvordan passer vores komponenter sammen!
Hvordan passer vores komponenter sammen!
Sådan passer vores komponenter sammen!
Sådan passer vores komponenter sammen!

Som du kan se i "Basys3: Pmod Pin-out Diagram*" og billedet af Arduino Uno Board, fremhævede vi og mærkede de porte, vi brugte.

1. LED og Basys 3 Board

LED'en er forbundet i serie med 100Ω modstanden. -Den hvide ledning forbinder modstanden med pin PWR på Basys 3 -kortet. -Den gule ledning forbinder LED'en med pin H1 på Basys 3 -kortet.

2. Bevægelsessensoren og Arduino Uno

-Den orange ledning forbinder bevægelsessensorens Vcc (strøm) til pin 5V på Arduino Uno-kortet. -Den hvide ledning forbinder pin Trig på bevægelsessensoren til pin 10 på Arduino Uno-kortet. -Den gule ledning forbinder pin Echo af bevægelsessensoren til pin 9 på Arduino Uno-kortet. -Den sorte ledning forbinder pin GND på bevægelsessensoren til pin GND på Arduino Uno-kortet.

[Ledningerne, vi brugte, var for korte til at nå komponenterne, og derfor var de forbundet med hinanden]

3. Basys 3 -tavlen og Arduino Uno

Den gule ledning forbinder pin A14 på Basys 3 -kortet med pin 6 på Arduino Uno -kortet.

*Dette diagram er taget fra Digilents "Basys 3 ™ FPGA Board Reference Manual", som kan findes her.

Trin 6: Demonstration

Trin 7: Tid til at teste det

Tillykke! Du er nået til slutningen af vores bevægelsesføler og kontrastyret lysprojekt! Mange tak fordi du læste gennem vores Instructables -indlæg. Nu er det tid for dig at prøve at bygge dette projekt selv. Hvis du følger hvert trin omhyggeligt, bør du have en bevægelsessensor og modstyret lys, der fungerer som vores! Vi ønsker dig held og lykke med at bygge dette projekt, og håber det kan bidrage til at spare på elektricitet såvel som naturressourcer!

Anbefalede: