Inhoudsopgave:

Bewegingssensor/tegengestuurde lichten - Ajarnpa
Bewegingssensor/tegengestuurde lichten - Ajarnpa

Video: Bewegingssensor/tegengestuurde lichten - Ajarnpa

Video: Bewegingssensor/tegengestuurde lichten - Ajarnpa
Video: Een heel huis zonder lichtschakelaars? Aflevering #2 (Philips Hue) 2024, November
Anonim
Bewegingssensor/tegengestuurde lichten
Bewegingssensor/tegengestuurde lichten

Dit project is gemaakt als een afstudeerproject voor een cursus Digital Design bij Cal Poly, San Luis Obispo (CPE 133).

Waarom doen we dit? We willen bijdragen aan het behoud van natuurlijke hulpbronnen in de wereld. Ons project richt zich op het besparen van elektriciteit. Door meer elektriciteit te besparen, kunnen we de natuurlijke hulpbronnen die worden gebruikt om elektriciteit op te wekken, behouden. Aan het begin van 2018 worden natuurlijke hulpbronnen in een ongelooflijk tempo verbruikt. We willen ons bewust zijn van onze impact op ons milieu en ons steentje bijdragen aan het behoud van natuurlijke hulpbronnen. Elektronica kan op verschillende manieren worden geïmplementeerd om energie te besparen, wat zowel het milieu als onze economische toestand helpt. *Dit model is gemaakt met behulp van de componenten die ons ter beschikking staan.

Wat was onze inspiratie? Mensen vergeten vaak hun kerstverlichting uit te doen en verspillen energie door ze 's nachts aan te laten staan. In werkelijkheid zal dit project elektriciteit besparen omdat de "vakantielichten" alleen aan zouden zijn als er mensen in de buurt zijn, en dus energie besparen als er niemand in de buurt is. Bovendien wilden we een timer ontwerpen zodat de lichten na een bepaalde tijd volledig uit zouden gaan om ervoor te zorgen dat ze niet aan zouden gaan als er bijvoorbeeld om 3 uur 's nachts beweging werd gedetecteerd.

Hoe zou je dit ontwerp kunnen gebruiken? Dit ontwerp kan worden geïmplementeerd voor alle soorten lampen, of ze nu decoratief, praktisch of beide zijn. Als je wilt dat je bureaulamp bijvoorbeeld maar 6 uur aan een stuk werkt. U zou een teller moeten instellen op 21.600 seconden (6 uur x 3.600 seconden/uur). Terwijl de teller actief oploopt, regelt de bewegingssensor het licht. Dus elke keer dat het gedurende die tijd wordt uitgeschakeld, hoeft u alleen maar met uw hand voor de bewegingssensor te zwaaien en het wordt weer ingeschakeld. Als je aan je bureau in slaap valt en 7 uur later wakker wordt, zal je beweging het niet inschakelen.

Stap 1: Vereiste software en hardware

Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware
Vereiste software en hardware

Software:

  • Vivado 2016.2 (of een recentere versie) is hier te vinden
  • Arduino IDE 1.8.3 (of een recentere versie) is hier te vinden

Hardware:

  • 1 Basys 3 bord
  • 1 Arduino Uno
  • 2 Breadboards
  • 1 Ultrasone bereiksensor HC-SR04
  • 9 mannelijke-naar-mannelijke draden
  • 1 LED
  • 1 100Ω weerstand

Stap 2: Codes (Vivado)

Codes (Vivado)
Codes (Vivado)

Eindige-toestandsmachine (zie toestandsdiagram hierboven):

De LED vereiste een eindige-toestandsmachine. Een LED heeft slechts twee toestanden van aan en uit zijn. Slechts twee ingangen regelen de status van de LED, de teller en de sensor. De enige keer dat de LED moet branden, is wanneer de sensor beweging detecteert en wanneer de teller van nul tot dertig seconden telt. In elk ander geval is de LED uit.

Bestandsnaam: LEDDES

Balie:

Met de teller kunnen we de tijdsduur beperken gedurende welke de bewegingssensor de LED kan activeren. De waarde ervan wordt weergegeven op het zevensegmentendisplay van het Basys 3-bord via een broncode ("sseg_dec"). Als de Reset-schakelaar omlaag staat (waarde: '0'), begint de teller elke seconde te stijgen van 0 tot 30. Als hij 30 bereikt, blijft hij op dat getal staan. Het zal niet herstarten vanaf 0 totdat de Reset-schakelaar naar '1' en terug naar '1' wordt geschakeld. Als Reset '1' wordt terwijl de teller loopt, bevriest de teller op de waarde die het had bereikt. Wanneer Reset teruggaat naar '0', start de teller opnieuw van 0 tot 30. Deze implementatie vereist ook het gebruik van een kloksignaal, de code wordt hieronder gegeven ("clk_div2").

Bestandsnaam: FinalCounter

AANGEBODEN BESTANDEN:

Zeven Segmenten Display:

Met deze code kan het display met zeven segmenten decimale waarden weergeven. Een submodule fungeert als decoder tussen een 8-bit binaire ingang en een 4-bit Binary Coded Decimal. De andere verdeelt het kloksignaal om de waarde ervan met een bepaalde snelheid te vernieuwen.

Bestandsnaam: sseg_dec

Kloksignaal:

Met deze code kan de teller in stappen van 1 seconde worden verhoogd. Het verdeelt de ingangsklokfrequentie in een langzamere frequentie. We hebben aangepast om een periode van 1 seconde te voorzien door constante max_count: integer:= (3000000)” te wijzigen in “constant max_count: integer:= (50000000).”

Bestandsnaam: clk_div2

Aangeleverde bestanden: sseg_dec, clk_div2 *Deze bronbestanden zijn aangeleverd door professor Bryan Mealy.

Stap 3: Begrijpen hoe ze samenkomen (schema's van VHDL-componenten)

Begrijpen hoe ze samenkomen (schema's van VHDL-componenten)
Begrijpen hoe ze samenkomen (schema's van VHDL-componenten)

Het hoofdbestand (" MainProjectDES ") bevat alle eerder besproken subbestanden. Ze zijn op bovenstaande manier aangesloten. De verschillende componenten zijn met elkaar verbonden met behulp van poortkaarten om een signaal van het ene element naar het andere te sturen.

Zoals je misschien hebt gemerkt, biedt de FinalCounter een 5-bits uitvoer, terwijl sseg_dec een 8-bits invoer vereist. Om dit te compenseren, stellen we het signaal dat beide componenten verbindt, in om te beginnen met "000" en voegen we de 5-bits uitvoer van de teller toe. Dus een 8-bits ingang.

Beperkingen:

Om deze codes op het Basys 3-bord uit te voeren, was een bestand met beperkingen nodig, waarin elk signaal werd aangegeven waar het heen moest en hoe de onderdelen waren aangesloten.

Stap 4: Coderen (Arduino)

We hebben de Arduino Uno geprogrammeerd om de bewegingssensor te gebruiken om beweging te detecteren en een uitgang te leveren die aangeeft dat de LED oplicht. Bovendien vereist het gebruik van de sensor om beweging te detecteren looplussen die constant op zoek zijn naar verandering in afstand. In wezen heeft het een timer nodig die gelijktijdig loopt om een "hoog" signaal uit te voeren zodat de LED oplicht, terwijl de timer opnieuw moet worden ingesteld zodra er nieuwe beweging wordt gedetecteerd, wat bijna onmogelijk te implementeren is op Vivado op basis van de kennis van de klas. Bovendien hebben we een Arduino gebruikt omdat het niet haalbaar zou zijn om HC-SR04 te gebruiken met het Basys 3-bord, omdat het bord slechts 3,3 V levert terwijl de sensor een voeding van 5 V nodig heeft. Voor de implementatie van de detecterende beweging is het eigenlijke codering in tegenstelling tot CAD in VHDL.

We hebben de ingebouwde pulsfunctie van de sensor gebruikt om de tijd op te halen die is verstreken tussen het geluid dat aanvankelijk door de sensor werd uitgezonden en het geluid dat terugkaatst wanneer het een object raakt. Vervolgens gebruiken we de geluidssnelheid en het tijdsinterval om de afstand tussen het object en de sensor te berekenen. Van daaruit slaan we de huidige afstand op en houden deze bij. We controleren de afstand elke 150ms. We hebben ook de elapsedmil-bibliotheek gebruikt om een interne timer in de arduino te laten lopen om de verstreken tijd bij te houden. Als we een afstandsverandering detecteren die overeenkomt met een beweging, wordt de timer op nul gezet en blijft het licht aan totdat er 3 seconden zijn verstreken. Telkens wanneer de sensor een andere beweging detecteert, wordt de timer opnieuw ingesteld op 0 en zal het signaal voor het LED-lampje de komende 3 seconden "hoog" zijn. We hebben hieronder een kopie van onze Arduino-code bijgevoegd.

Stap 5: Hoe onze componenten bij elkaar passen

Hoe onze componenten in elkaar passen!
Hoe onze componenten in elkaar passen!
Hoe onze componenten in elkaar passen!
Hoe onze componenten in elkaar passen!
Hoe onze componenten in elkaar passen!
Hoe onze componenten in elkaar passen!

Zoals je kunt zien in het "Basys3: Pmod Pin-out Diagram*" en de foto van het Arduino Uno Board, hebben we de poorten die we gebruikten gemarkeerd en gelabeld.

1. Het LED- en Basys 3-bord:

De LED is in serie geschakeld met de 100Ω weerstand. -De witte draad verbindt de weerstand met pin PWR van het Basys 3-bord. -De gele draad verbindt de LED met pin H1 van het Basys 3-bord.

2. De bewegingssensor en de Arduino Uno

-De oranje draad verbindt Vcc (voeding) van de bewegingssensor met pin 5V van het Arduino Uno-bord.-De witte draad verbindt pin Trig van de bewegingssensor met pin 10 van het Arduino Uno-bord.-De gele draad verbindt pin Echo van de bewegingssensor op pin 9 van het Arduino Uno-bord.-De zwarte draad verbindt pin GND van de bewegingssensor met pin GND van het Arduino Uno-bord.

[De draden die we gebruikten waren te kort om de componenten te bereiken, dus ze waren met elkaar verbonden]

3. Het Basys 3-bord en de Arduino Uno

De gele draad verbindt pin A14 van het Basys 3-bord met pin 6 van het Arduino Uno-bord.

*Dit diagram is afkomstig uit de "Basys 3™ FPGA Board Reference Manual" van Digilent, die u hier kunt vinden.

Stap 6: Demonstratie

Stap 7: Tijd om het uit te testen

Gefeliciteerd! Je hebt het einde van ons project met bewegingssensoren en tegengestuurd licht bereikt! Heel erg bedankt voor het lezen van onze Instructables-post. Nu is het tijd voor u om te proberen dit project zelf te bouwen. Als je elke stap zorgvuldig volgt, zou je een bewegingssensor en tegengestuurd licht moeten hebben die vergelijkbaar is met de onze! Wij wensen u veel succes bij het bouwen van dit project en hopen dat het kan bijdragen aan het besparen van elektriciteit en natuurlijke hulpbronnen!

Aanbevolen: