Innehållsförteckning:

Rörelsesensor/räknarkontrollerade lampor: 7 steg
Rörelsesensor/räknarkontrollerade lampor: 7 steg

Video: Rörelsesensor/räknarkontrollerade lampor: 7 steg

Video: Rörelsesensor/räknarkontrollerade lampor: 7 steg
Video: Mitt jobb är att observera skogen och här händer något konstigt. 2024, Juli
Anonim
Rörelsesensor/räknarkontrollerade lampor
Rörelsesensor/räknarkontrollerade lampor

Detta projekt skapades som ett slutprojekt för en digital designkurs på Cal Poly, San Luis Obispo (CPE 133).

Varför gör vi det här? Vi vill hjälpa till att bevara naturresurser i världen. Vårt projekt fokuserar på att spara el. Genom att spara mer el kommer vi att kunna bevara de naturresurser som används för att producera el. När vi börjar 2018 förbrukas naturresurser i otrolig takt. Vi vill vara medvetna om vår påverkan på vår miljö och spela vår roll för att bevara naturresurser. Elektronik kan implementeras på olika sätt för att spara energi som hjälper miljön såväl som vårt ekonomiska tillstånd.*Denna modell skapades med hjälp av de komponenter som är tillgängliga för oss.

Vad var vår inspiration? Folk glömmer ofta att släcka sina semesterljus och slösar bort energi genom att låta dem vara över natten. I verkligheten kommer detta projekt att spara el eftersom "semesterljusen" bara skulle tändas när människor är i närheten, vilket sparar energi när ingen är i närheten. Dessutom ville vi designa en timer så att lamporna skulle slockna helt efter en viss tid för att se till att de inte tänds på grund av rörelse som detekteras vid 3 am, till exempel.

Hur kan du använda den här designen? Denna design kan implementeras för alla slags lampor, oavsett om de är dekorativa, praktiska eller båda. Om du vill att ditt skrivbordsljus bara ska fungera i 6 timmar i taget, till exempel. Du måste ställa in en räknare till 21, 600 sekunder (6 timmar x 3, 600 sekunder/timme). Medan räknaren aktivt ökar skulle rörelsessensorn styra ljuset. Så varje gång den stängs av under den tidsperioden behöver du bara vifta med handen framför rörelsessensorn och den slås på igen. Om du somnar vid ditt skrivbord och vaknar 7 timmar senare kommer din rörelse inte att slå på den.

Steg 1: Obligatorisk programvara och hårdvara

Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara
Nödvändig programvara och hårdvara

Programvara:

  • Vivado 2016.2 (eller en nyare version) hittar du här
  • Arduino IDE 1.8.3 (eller en nyare version) hittar du här

Hårdvara:

  • 1 Basys 3 -bräda
  • 1 Arduino Uno
  • 2 brödbrädor
  • 1 Ultraljudsavståndssensor HC-SR04
  • 9 Man-till-hankablar
  • 1 LED
  • 1 100Ω motstånd

Steg 2: Koder (Vivado)

Koder (Vivado)
Koder (Vivado)

Finite State Machine (se tillståndsdiagram ovan):

Lysdioden krävde en slutlig tillståndsmaskin. En lysdiod har endast två tillstånd för att vara på och av. Endast två ingångar styr statusen för lysdioden, räknaren och sensorn. Den enda gången lysdioden ska vara på är när sensorn detekterar rörelse och när räknaren räknar från noll till trettio sekunder. Alla andra fall kommer lysdioden att vara släckt.

Filnamn: LEDDES

Disken:

Räknaren tillåter oss att begränsa hur lång tid rörelsessensorn kan aktivera lysdioden. Dess värde visas på Basys 3 Boards sju segmentvisning genom en källkod ("sseg_dec"). När återställningsomkopplaren är nere (värde: '0') börjar räknaren öka varje sekund från 0 till 30. När den når 30 fryser den på det numret. Det startar inte om från 0 förrän Reset -omkopplaren växlas till '1' och tillbaka till '1.' Om Reset blir '1' medan räknaren går, kommer räknaren att frysa till vilket värde den hade nått. När Återställningen går tillbaka till '0', kommer räknaren att starta om från 0 till 30. Denna implementering kräver också användning av en klocksignal, dess kod anges nedan ("clk_div2").

Filnamn: FinalCounter

FÖLJANDE FILER:

Sju segmentvisning:

Denna kod gör att sju segmentvisning kan visa decimalvärden. En delmodul fungerar som avkodare mellan en 8-bitars binär ingång och en 4-bitars binär kodad decimal. Den andra delar klocksignalen för att uppdatera dess värde med en viss hastighet.

Filnamn: sseg_dec

Klocksignal:

Denna kod tillåter räknaren att öka i steg om 1 sekund. Den delar ingångsklockfrekvensen i en långsammare frekvens. Vi anpassade oss för att ge en period på 1 sekund genom att ändra konstant max_count: integer: = (3000000)”till” konstant max_count: integer: = (50000000).”

Filnamn: clk_div2

Medföljande filer: sseg_dec, clk_div2 *Dessa källfiler tillhandahålls av professor Bryan Mealy.

Steg 3: Förstå hur de går ihop (scheman av VHDL -komponenter)

Förstå hur de går ihop (scheman av VHDL -komponenter)
Förstå hur de går ihop (scheman av VHDL -komponenter)

Huvudfilen ("MainProjectDES") innehåller alla underfiler som diskuterats tidigare. De är anslutna på ovanstående sätt. De olika komponenterna är sammankopplade med portkartor för att skicka en signal från ett element till ett annat.

Som du kanske har märkt ger FinalCounter en 5-bitars utmatning medan sseg_dec kräver en 8-bitars ingång. För att kompensera ställer vi in signalen som ansluter båda komponenterna till att börja med "000" och lägger till 5-bitars utmatning från räknaren. Således ger en 8-bitars ingång.

Begränsningar:

För att köra dessa koder på Basys 3 -kortet krävs en begränsningsfil som berättar för varje signal vart de ska gå och hur delarna var anslutna.

Steg 4: Kod (Arduino)

Vi programmerade Arduino Uno för att använda rörelsessensorn för att upptäcka rörelse och ge en utgång som signalerar lysdioden att lysa. För att använda sensorn för att upptäcka rörelse krävs dessutom löpningsslingor som ständigt letar efter förändringar i avstånd. I huvudsak behöver den en timer som körs samtidigt för att mata ut en "hög" signal för att lysdioden ska tändas medan timern måste återställas när det upptäcks ny rörelse, vilket är nästan omöjligt att implementera på Vivado baserat på kunskapens omfattning av klassen. Dessutom använde vi en Arduino eftersom det inte skulle vara möjligt att använda HC-SR04 med Basys 3-kortet eftersom kortet endast levererar 3,3V medan sensorn kräver en 5V-strömförsörjning. För implementering av detekteringsrörelsen är det faktisk kodning till skillnad från CAD i VHDL.

Vi använde den inbyggda pulsfunktionen för sensorn för att hämta tiden som gick mellan det ljud som ursprungligen avges från sensorn och det ljud som studsar tillbaka när man träffar ett föremål. Sedan använder vi ljudets hastighet och tidsintervall för att beräkna avståndet mellan objektet och sensorn. Från det lagrar vi det aktuella avståndet och håller reda på det. Vi kontrollerar avståndet var 150: e ms. Vi använde också elapsedmil -biblioteket för att köra en intern timer inuti arduino för att hålla reda på tiden som gått. Om vi upptäcker en distansförändring, som motsvarar en rörelse, återställs timern till noll och den kommer att hålla lampan tänd tills 3 sekunder har gått. När sensorn upptäcker en annan rörelse återställs timern till 0 och signalen för LED -lampan kommer att vara "hög" under de närmaste 3 sekunderna. Vi har bifogat en kopia av vår Arduino -kod nedan.

Steg 5: Hur våra komponenter passar ihop

Hur våra komponenter passar ihop!
Hur våra komponenter passar ihop!
Hur våra komponenter passar ihop!
Hur våra komponenter passar ihop!
Hur våra komponenter passar ihop!
Hur våra komponenter passar ihop!

Som du kan se i "Basys3: Pmod Pin-out Diagram*" och fotot av Arduino Uno Board markerade vi och märkte portarna vi använde.

1. LED och Basys 3 Board

Lysdioden är seriekopplad med 100Ω motstånd. -Den vita tråden ansluter motståndet till stift PWR på Basys 3 -kortet. -Den gula tråden ansluter lysdioden till stift H1 på Basys 3 -kortet.

2. Rörelsesensorn och Arduino Uno

-Den orange tråden ansluter rörelsessensorns Vcc (ström) till stift 5V på Arduino Uno-kortet. -Den vita tråden ansluter stiftet på rörelsesensorn till stift 10 på Arduino Uno-kortet. -Gula ledningen ansluter stiftet Echo of rörelsessensorn till stift 9 på Arduino Uno-kortet. -Den svarta tråden ansluter stift GND på rörelsesensorn till stift GND på Arduino Uno-kortet.

[Ledningarna vi använde var för korta för att nå komponenterna, så de var sammankopplade]

3. Basys 3 -kortet och Arduino Uno

Den gula tråden ansluter stift A14 på Basys 3 -kortet till stift 6 på Arduino Uno -kortet.

*Detta diagram är hämtat från Digilents "Basys 3 ™ FPGA Board Reference Manual" som finns här.

Steg 6: Demonstration

Steg 7: Dags att testa det

Grattis! Du har tagit dig till slutet av vårt rörelsesensor- och motstyrda ljusprojekt! Tack så mycket för att du läste igenom vårt Instructables -inlägg. Nu är det dags för dig att försöka bygga detta projekt själv. Om du följer varje steg noga bör du ha en rörelsesensor och ett motkontrollerat ljus som fungerar som vårt! Vi önskar dig lycka till med att bygga detta projekt, och hoppas att det kan bidra till att spara både el och naturresurser!

Rekommenderad: