Inhaltsverzeichnis:

Bewegungssensor / zählergesteuerte Lichter - Gunook
Bewegungssensor / zählergesteuerte Lichter - Gunook

Video: Bewegungssensor / zählergesteuerte Lichter - Gunook

Video: Bewegungssensor / zählergesteuerte Lichter - Gunook
Video: Kara und Schleifen 2024, Juli
Anonim
Bewegungsmelder/Zählergesteuerte Lichter
Bewegungsmelder/Zählergesteuerte Lichter

Dieses Projekt wurde als Abschlussprojekt für einen Digital Design Kurs an der Cal Poly, San Luis Obispo (CPE 133) erstellt.

Warum tun wir das? Wir wollen dazu beitragen, die natürlichen Ressourcen der Welt zu schonen. Unser Projektfokus liegt auf dem Sparen von Strom. Indem wir mehr Strom sparen, werden wir in der Lage sein, die natürlichen Ressourcen zu schonen, die zur Stromerzeugung verwendet werden. Zu Beginn des Jahres 2018 werden natürliche Ressourcen in einem unglaublichen Tempo verbraucht. Wir wollen uns unserer Auswirkungen auf unsere Umwelt bewusst sein und unseren Beitrag zum Erhalt der natürlichen Ressourcen leisten. Elektronik lässt sich auf verschiedene Weise energiesparend umsetzen, was der Umwelt und unserer Wirtschaft zugutekommt.*Dieses Modell wurde mit den uns zur Verfügung stehenden Komponenten erstellt.

Was war unsere Inspiration?Die Leute vergessen oft, ihre Weihnachtsbeleuchtung auszuschalten, und verschwenden Energie, indem sie sie über Nacht eingeschaltet lassen. In Wirklichkeit spart dieses Projekt Strom, weil das „Ferienlicht“nur brennt, wenn Menschen in der Nähe sind, und so Energie sparen, wenn niemand in der Nähe ist. Darüber hinaus wollten wir einen Timer entwickeln, damit die Lichter nach einer bestimmten Zeit vollständig ausgehen, um sicherzustellen, dass sie sich beispielsweise nicht aufgrund einer erkannten Bewegung um 3 Uhr morgens einschalten.

Wie könnten Sie dieses Design verwenden?Dieses Design kann für alle Arten von Leuchten verwendet werden, egal ob sie dekorativ, praktisch oder beides sind. Wenn Sie beispielsweise möchten, dass Ihre Schreibtischleuchte nur 6 Stunden am Stück funktioniert. Sie müssten einen Zähler auf 21.600 Sekunden einstellen (6 Stunden x 3.600 Sekunden/Stunde). Während der Zähler aktiv erhöht wird, würde der Bewegungssensor das Licht steuern. Jedes Mal, wenn es sich während dieser Zeitspanne ausschaltet, müssen Sie also nur mit der Hand vor dem Bewegungssensor wedeln und er schaltet sich wieder ein. Wenn Sie an Ihrem Schreibtisch einschlafen und 7 Stunden später aufwachen, wird Ihre Bewegung es nicht einschalten.

Schritt 1: Erforderliche Software und Hardware

Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware
Erforderliche Software und Hardware

Software:

  • Vivado 2016.2 (oder eine neuere Version) finden Sie hier
  • Arduino IDE 1.8.3 (oder eine neuere Version) finden Sie hier

Hardware:

  • 1 Basys-3-Platine
  • 1 Arduino Uno
  • 2 Steckbretter
  • 1 Ultraschall-Entfernungssensor HC-SR04
  • 9 Stecker-zu-Stecker-Drähte
  • 1 LED
  • 1 100Ω Widerstand

Schritt 2: Codes (Vivado)

Codes (Vivado)
Codes (Vivado)

Finite State Machine (siehe Zustandsdiagramm oben):

Die LED benötigte einen endlichen Automaten. Eine LED hat nur zwei Zustände, nämlich an und aus. Nur zwei Eingänge steuern den Zustand der LED, des Zählers und des Sensors. Die LED sollte nur dann leuchten, wenn der Sensor eine Bewegung erkennt und der Zähler von null bis dreißig Sekunden zählt. In allen anderen Fällen ist die LED aus.

Dateiname: LEDDES

Schalter:

Mit dem Zähler können wir die Zeitdauer begrenzen, in der der Bewegungssensor die LED aktivieren kann. Sein Wert wird über einen Quellcode („sseg_dec“) auf der Sieben-Segment-Anzeige des Basys 3 Boards angezeigt. Wenn der Reset-Schalter unten ist (Wert: '0'), beginnt der Zähler jede Sekunde von 0 auf 30 zu steigen. Wenn er 30 erreicht, friert er bei dieser Zahl ein. Es wird nicht von 0 neu gestartet, bis der Reset-Schalter auf „1“und wieder auf „1“umgeschaltet wird. Wenn Reset auf „1“wird, während der Zähler läuft, friert der Zähler auf dem Wert ein, den er erreicht hat. Wenn Reset auf ‚0‘zurückgeht, wird der Zähler von 0 bis 30 neu gestartet. Diese Implementierung erfordert auch die Verwendung eines Taktsignals, dessen Code unten bereitgestellt wird ("clk_div2").

Dateiname: FinalCounter

BEREITGESTELLTE DATEIEN:

Sieben-Segment-Anzeige:

Dieser Code ermöglicht es der Siebensegmentanzeige, Dezimalwerte anzuzeigen. Ein Submodul fungiert als Decoder zwischen einem 8-Bit-Binäreingang und einer 4-Bit-Binärkodierten Dezimalzahl. Der andere teilt das Taktsignal, um seinen Wert mit einer bestimmten Rate aufzufrischen.

Dateiname: sseg_dec

Taktsignal:

Mit diesem Code kann der Zähler in Schritten von 1 Sekunde erhöht werden. Es teilt die Eingangstaktfrequenz in eine langsamere Frequenz. Wir haben uns angepasst, um einen Zeitraum von 1 Sekunde bereitzustellen, indem wir die Konstante max_count: integer:= (3000000)“in „constant max_count: integer:= (50000000)“ändern.

Dateiname: clk_div2

Mitgelieferte Dateien: sseg_dec, clk_div2 *Diese Quelldateien wurden von Professor Bryan Mealy bereitgestellt.

Schritt 3: Verstehen, wie sie zusammenkommen (Schema der VHDL-Komponenten)

Verstehen, wie sie zusammenkommen (Schema der VHDL-Komponenten)
Verstehen, wie sie zusammenkommen (Schema der VHDL-Komponenten)

Die Hauptdatei (" MainProjectDES ") enthält alle zuvor besprochenen Unterdateien. Sie sind auf die obige Weise verbunden. Die verschiedenen Komponenten sind über Portmaps miteinander verbunden, um ein Signal von einem Element zum anderen zu senden.

Wie Sie vielleicht bemerkt haben, liefert der FinalCounter eine 5-Bit-Ausgabe, während sseg_dec eine 8-Bit-Eingabe erfordert. Um dies zu kompensieren, setzen wir das Signal, das beide Komponenten verbindet, so, dass es mit "000" beginnt und den 5-Bit-Ausgang des Zählers hinzufügt. Somit wird ein 8-Bit-Eingang bereitgestellt.

Einschränkungen:

Um diese Codes auf dem Basys 3-Board ausführen zu können, war eine Constraint-Datei erforderlich, die jedem Signal mitteilte, wohin es gehen soll und wie die Teile verbunden waren.

Schritt 4: Code (Arduino)

Wir haben den Arduino Uno so programmiert, dass er den Bewegungssensor verwendet, um Bewegungen zu erkennen und einen Ausgang bereitzustellen, der das Aufleuchten der LED signalisiert. Darüber hinaus erfordert die Verwendung des Sensors zur Erkennung von Bewegungen Schleifen, die ständig nach Abstandsänderungen suchen. Im Wesentlichen benötigt es einen parallel laufenden Timer, der ein „High“-Signal ausgibt, damit die LED leuchtet, während der Timer zurückgesetzt werden muss, sobald eine neue Bewegung erkannt wird, was auf Vivado nach Kenntnisstand kaum umsetzbar ist der Klasse. Darüber hinaus haben wir einen Arduino verwendet, da es nicht möglich wäre, den HC-SR04 mit dem Basys 3-Board zu verwenden, da das Board nur 3,3 V liefert, während der Sensor eine 5 V-Stromversorgung benötigt. Für die Implementierung der Bewegungserkennung ist es die eigentliche Codierung im Gegensatz zu CAD in VHDL.

Wir haben die eingebaute Impulsfunktion für den Sensor verwendet, um die Zeit abzurufen, die zwischen dem ursprünglich vom Sensor abgegebenen Ton und dem zurückgeworfenen Ton beim Auftreffen auf ein Objekt verstrichen ist. Dann verwenden wir die Schallgeschwindigkeit und das Zeitintervall, um den Abstand zwischen dem Objekt und dem Sensor zu berechnen. Daraus speichern wir die aktuelle Entfernung und behalten den Überblick. Wir überprüfen den Abstand alle 150ms. Wir haben auch die elapsedmil-Bibliothek verwendet, um einen internen Timer im Arduino auszuführen, um die verstrichene Zeit zu verfolgen. Wenn wir eine Entfernungsänderung erkennen, die einer Bewegung entspricht, wird der Timer auf Null zurückgesetzt und das Licht bleibt an, bis 3 Sekunden vergangen sind. Immer wenn der Sensor eine weitere Bewegung erkennt, wird der Timer auf 0 zurückgesetzt und das Signal für das LED-Licht wird für die nächsten 3 Sekunden "high" sein. Wir haben unten eine Kopie unseres Arduino-Codes angehängt.

Schritt 5: Wie unsere Komponenten zusammenpassen

Wie unsere Komponenten zusammenpassen!
Wie unsere Komponenten zusammenpassen!
Wie unsere Komponenten zusammenpassen!
Wie unsere Komponenten zusammenpassen!
Wie unsere Komponenten zusammenpassen!
Wie unsere Komponenten zusammenpassen!

Wie Sie im "Basys3: Pmod Pin-out Diagram*" und dem Foto des Arduino Uno Boards sehen können, haben wir die verwendeten Ports hervorgehoben und beschriftet.

1. Die LED- und Basys 3-Platine

Die LED ist in Reihe mit dem 100Ω Widerstand geschaltet. -Das weiße Kabel verbindet den Widerstand mit Pin PWR der Basys 3-Platine. -Das gelbe Kabel verbindet die LED mit Pin H1 der Basys 3-Platine.

2. Der Bewegungssensor und das Arduino Uno

-Das orangefarbene Kabel verbindet Vcc (Strom) des Bewegungssensors mit Pin 5V des Arduino Uno-Boards.-Das weiße Kabel verbindet Pin Trig des Bewegungssensors mit Pin 10 des Arduino Uno-Boards.-Das gelbe Kabel verbindet Pin Echo of der Bewegungssensor mit Pin 9 der Arduino Uno-Platine.-Das schwarze Kabel verbindet Pin GND des Bewegungssensors mit Pin GND der Arduino Uno-Platine.

[Die von uns verwendeten Drähte waren zu kurz, um die Komponenten zu erreichen, daher waren sie miteinander verbunden]

3. Das Basys 3 Board und das Arduino Uno

Das gelbe Kabel verbindet Pin A14 der Basys 3-Platine mit Pin 6 der Arduino Uno-Platine.

*Dieses Diagramm wurde dem "Basys 3™ FPGA Board Reference Manual" von Digilent entnommen, das hier zu finden ist.

Schritt 6: Demonstration

Schritt 7: Zeit, es auszuprobieren

Herzliche Glückwünsche! Sie haben es bis zum Ende unseres Projekts Bewegungsmelder & Gegengesteuertes Licht geschafft! Vielen Dank für das Durchlesen unseres Instructables-Beitrags. Jetzt ist es an der Zeit, dass Sie versuchen, dieses Projekt selbst zu erstellen. Wenn Sie jeden Schritt sorgfältig befolgen, sollten Sie einen Bewegungssensor und ein zählergesteuertes Licht haben, das ähnlich wie unseres funktioniert! Wir wünschen Ihnen viel Erfolg beim Bau dieses Projekts und hoffen, dass es dazu beitragen kann, Strom und natürliche Ressourcen zu sparen!

Empfohlen: