Inhoudsopgave:

L I G H T S: 5 stappen
L I G H T S: 5 stappen

Video: L I G H T S: 5 stappen

Video: L I G H T S: 5 stappen
Video: in-lite 12 volt buitenverlichting installeren in 5 stappen | CB-056/M en CB-081/M transformator 2024, November
Anonim
L I G H T S
L I G H T S

Het doel van dit afstudeerproject was om iets te creëren dat zich zou richten op duurzaamheid en het implementeren van digitale ontwerpconcepten, en om dit te doen, besloot ik een schaalbaar energiebesparend systeem te ontwerpen met behulp van vhdl en gemaakt voor het Basys 3 Board (Artix-7 35T-serie). Schaalbaar omdat een willekeurig aantal sensoren in een kamer kan worden geplaatst en een willekeurig aantal van deze systemen rond een gebouw of huis kan worden geplaatst. Wat dit systeem zou doen, is in theorie duizenden dollars besparen in commerciële gebouwen en een groot percentage van het energieverbruik in kleinere woongemeenschappen verminderen door een aangesloten systeem van actief en passief gestuurde lichten, bewegingsdetectoren, timers weergegeven op zevensegmentendisplays en controle schakelaars. Dit voorbeeld gaat over een enkel systeem met drie bewegingsdetectoren, een hoofdschakelaar, een handmatige/normale schakelaar, vier zevensegmentendisplays en een enkel licht dat het systeem bedient.

In een gekozen kamer zouden bijvoorbeeld verschillende bewegingsdetectoren worden geplaatst (dit voorbeeldontwerp heeft er drie) en elk zou een signaal sturen (1) als beweging wordt gedetecteerd, en (0) als dat niet het geval is. Als ten minste één van de bewegingsdetectoren beweging detecteert, gaan de lichten aan als ze nog niet aan zijn en blijven ze aan als ze al aan zijn. Op elk moment detecteren alle bewegingsdetectoren niets, een timer begint af te tellen voor een bepaalde tijd (instelbaar in code), en de lichten blijven aan terwijl de timer aftelt. Zodra de timer klaar is met aftellen, stopt de timer en gaan de lichten uit. Als ten minste één bewegingsmelder beweging detecteert terwijl de timer aftelt, stopt de timer en wordt gereset. En als minstens één bewegingsmelder beweging detecteert terwijl de lichten uit zijn, gaan de lichten meteen aan.

Dit systeem heeft twee modi, een met de timer zoals hierboven vermeld, en een tweede met een schakelaar die de lichten handmatig bestuurt (sensoren negeren). Er is een hoofdschakelaar waarmee de gebruiker kan kiezen welke modus hij wil gebruiken op basis van de modus die volgens hem in het algemeen meer energie zal besparen. Ex. Een kamer zoals een gang kan profiteren van de passieve timermodus: gebruikers weten niet zeker wanneer er mensen zullen passeren, maar het aan- en uitdoen van de lichten elke keer dat ze binnenkomen en vertrekken, zou een ongemak zijn, terwijl een kamer als aangezien een slaapkamer met een enkele gebruiker beter handmatig te bedienen zou zijn. En de hoofdschakelaar zou handig zijn in gevallen zoals als de persoon die in de slaapkamer woont voor een langere periode zou vertrekken, de hoofdschakelaar zou kunnen worden uitgeschakeld en de timermodus zou werken om efficiënter energie te besparen.

Dus in dit systeem zijn er twee toestandsmachines, één is de hoofdtoestandsmachine en een andere voor de afteltimer. De hoofdstatusmachine heeft vijf statussen die als zodanig zijn gedefinieerd: 1. "lichten aan, beweging gedetecteerd" (id = 000), 2. "lichten aan, geen beweging gedetecteerd" (id = 001), 3. "lichten uit, geen beweging gedetecteerd" (id = 010), 4. "handmatig ingeschakeld" (id = 011) en 5. "handmatig uitgeschakeld" (id = 100). Deze hoofdtoestandsmachine heeft vier ingangen: de hoofdschakelaar (ms), de handmatige/normale schakelaar (ns), een signaal dat hoog is wanneer ten minste één schakelaar beweging detecteert, en anders laag is (orx), en een signaal dat hoog als de timer klaar is, en is anders laag (td). De hoofdstatusmachine heeft twee uitgangen: lichten (lichten) en een signaal dat aangeeft wanneer de afteltimer (timer) of (t) moet worden ingeschakeld (beide worden door elkaar gebruikt).

De tweede toestandsmachine, de afteltimer, heeft 12 toestanden: 10 van hen hebben id's die zijn gekoppeld aan het nummer dat het zeven segment weergeeft - "seg 10" (id = 1010), "seg 9" (id = 1001), […], "seg 2" (id = 0010), "seg 1" (id = 0001), en de andere twee staten geven beide nul weer, wat aangeeft dat de timer uit staat - dus er is de eerste lege "blanco 1" (id = 1111) en de tweede blanco "blanco 2" (id = 0000). De afteltimer heeft één ingang: timer (t) en drie uitgangen: het getal dat binair wordt weergegeven met vier bits (bin) en een signaal dat aangeeft dat de timer is afgelopen (td).

Stap 1: Black Box-diagram

Black Box-diagram
Black Box-diagram

Dit is een overzicht van hoe het hele systeem zou moeten werken en wordt beschreven met een black box-diagram.

  • De klok wordt gebruikt om de hoofdtoestandsmachine en de decoder met zeven segmenten te klokken; er is een langzamere klok nodig voor de neerwaartse teller, dus er is een klokverdelermodule die de klokinvoer opneemt en een langzamere klok voor de neerwaartse teller uitvoert.
  • De tussenvariabele (orx) in de verpakking is gekoppeld aan de bewegingssensoren en zal hoog zijn als ten minste één van de sensoren iets detecteert, en anders laag; de booleaanse vergelijking daarvoor is gewoon orx = s(2) of s(1) of s(0).
  • De belangrijkste fsm bepaalt in welke algemene toestand het systeem zich bevindt, afhankelijk van de ingangen (orx, ms, ns, td) en geeft de huidige toestand weer waarin het zich bevindt (sm), vereenvoudigd weergegeven met de twee signalen waarvoor het wordt gebruikt (timer en lichten).

    • (timer) is een wrapper-signaal dat als invoer naar de fsm-afteller wordt gestuurd en wordt bestuurd door de huidige status van de hoofd-fsm. Het geeft aan wanneer de timer moet worden ingeschakeld.
    • (lichten) is een wrapper-signaal dat wordt gebruikt om de led te besturen en wordt bestuurd door de huidige status van de hoofd-fsm.
  • De omlaagteller fsm regelt wat het zeven segment weergeeft, afhankelijk van de invoer (timer) en geeft de huidige staat weer waarin het zich bevindt (sd), vereenvoudigd weergegeven met de twee signalen waarvoor het wordt gebruikt (td en bin).

    • (td) is een wrapper-signaal dat als invoer naar de hoofd-fsm wordt gestuurd en wordt bestuurd door de huidige status van de fsm-afteller. Het functioneert als een feedbacksignaal dat aangeeft wanneer de timer is afgelopen.
    • (bin) is een vier-bits wrapper-signaal dat is samengevoegd met vier bits van nul (“0000” & bin) en de gecombineerde acht bits worden verzonden naar (q), een acht-bits wrapper-signaal, dat op zijn beurt wordt verzonden naar de zeven segmentdecoder onder (ALU_VAL).
  • De module met zeven segmenten is dezelfde als op Polylearn; de belangrijkste ingangen nemen een 8-bits getal (bin) tot (ALU_VAL) in beslag om op vier verschillende zevensegmentendisplays weer te geven met behulp van de uitgangen (SEGMENTS) om het signaal (seg) en (DISP_EN) om te wrapper (disp_en).

    • Aangezien twee of meer displays met zeven segmenten niet tegelijkertijd verschillende cijfers kunnen weergeven, is een klok nodig om door de vier ssegs te bladeren, waarbij het juiste cijfer tegelijk wordt weergegeven voor elke sseg die afzonderlijk wordt ingeschakeld, en snel genoeg fietsen maakt de ssegs lijken allemaal tegelijk aan te staan.
    • (teken en geldig) zijn constant in dit programma, dus (teken) staat permanent laag en (geldig) staat permanent hoog.
    • (ALU_VAL) neemt het wrapper-signaal (q) op als invoer, dat het nummer vertegenwoordigt dat binair op het zevensegmentendisplay wordt weergegeven.
    • De uitvoer (SEGMENTS) wordt verzonden naar een acht-bits wrapper-signaal (seg) en (DISP_EN) naar een vier-bits wrapper-signaal (disp_en).
  • Er is ook een D-flip-flopmodule die niet expliciet in het diagram wordt getoond, maar die nodig is voor de twee toestandsmachines als submodules en helpt de toestanden synchroon te laten verlopen.

    • (3) hiervan zijn nodig voor de belangrijkste fsm aangezien 2^(3) = 8 > 5 toestanden voor codering
    • (4) hiervan zijn nodig voor de down counter fsm aangezien 2^4 = 16 > 12 toestanden voor codering

Stap 2: Staatsmachines

Staatsmachines
Staatsmachines

Om de machines met twee toestanden goed te ontwerpen, moeten de afzonderlijke toestanden duidelijk worden gedefinieerd, met hun uitgangen en de toestand waarnaar ze overgaat op basis van de verschillende mogelijke ingangen.

Belangrijkste fsm stelt:

“Licht aan, beweging gedetecteerd” (id = 000)

De lichten zijn aan, minstens één van de bewegingsdetectoren detecteert beweging, dus orx moet hoog zijn en ms is ingeschakeld.

  • Uitgangen: verlichting = 1 en timer = 0
  • Blijft in deze toestand wanneer ms = 1 en orx = 1.
  • Gaat naar de status "lichten aan, geen beweging gedetecteerd" als ms = 1 en orx = 0.
  • Gaat naar de status "handmatig ingeschakeld" als ms = 0 en ns = 1.
  • Gaat naar de status "handmatig uitgeschakeld" als ms = 0 en ns = 0.

“Licht aan, geen beweging gedetecteerd” (id = 001)

De lichten zijn aan, er is geen beweging gedetecteerd van een bewegingsdetector, dus orx moet laag zijn en ms is ingeschakeld. Ook in het begin van deze toestand vertelt de timer die hoog is ingesteld de countdown fsm om te beginnen met aftellen, gaat verder met aftellen en stopt met aftellen zodra de countdown fsm deze fsm vertelt dat hij klaar is met aftellen.

  • Uitgangen: lichten = 1 en timer = 1.
  • Blijft in deze toestand wanneer ms = 1 en orx = 0 en td (timer is afgelopen) = 0.
  • Gaat naar de status "lichten aan, beweging gedetecteerd" als ms = 1 en orx = 1.
  • Gaat naar de status 'lichten uit, geen beweging gedetecteerd' als ms = 1 en orx = 0 en td = 1.
  • Gaat naar de status "handmatig ingeschakeld" als ms = 0 en ns = 1.
  • Gaat naar de status "handmatig uitgeschakeld" als ms = 0 en ns = 0.

“Licht uit, geen beweging gedetecteerd” (id = 010)

De lichten zijn uit, er is geen beweging gedetecteerd van een bewegingssensor en de timer is klaar met aftellen, dus orx moet laag zijn, ms is ingeschakeld en td is uitgeschakeld.

  • Uitgangen: lichten = 0 en timer = 0.
  • Blijft in deze toestand wanneer ms = 1 en orx = 0.
  • Gaat naar de status "lichten aan, beweging gedetecteerd" als ms = 1 en orx =1.
  • Gaat naar de status "handmatig ingeschakeld" als ms = 0 en ns = 1.
  • Gaat naar de status "handmatig uitgeschakeld" als ms = 0 en ns = 0.

“Handmatig ingeschakeld” (id = 011)

De lichten zijn aan, bewegingsdetectoren zijn niet relevant, dus ms is uitgeschakeld en ns is ingeschakeld.

  • Uitgangen: lichten = 1 en timer = 0.
  • Blijft in deze toestand wanneer ms = 0 en ns = 1.
  • Gaat naar de status "handmatig uitgeschakeld" als ms = 0 en ns = 0.
  • Gaat naar de status "lichten uit, geen beweging gedetecteerd als ms = 1.

“Handmatig uitgeschakeld” (id = 100)

De lichten zijn uit, bewegingsdetectoren zijn niet relevant, dus ms is uitgeschakeld en ns is uitgeschakeld.

  • Uitgangen: lichten = 0 en timer = 0.
  • Blijft in deze toestand wanneer ms = 0 en ns = 0.
  • Gaat naar de status "handmatig ingeschakeld" als ms = 0 en ns = 1.
  • Gaat naar de status "lichten uit, geen beweging gedetecteerd als ms = 1.

Downteller geeft aan:

"Seg 10" (id = 1010)

Zeven segmenten display toont een 10.

  • Uitgangen: bin = "1010" en td = 0.
  • Gaat naar status "seg 9" als timer = 1.
  • Gaat naar status "blanco 2" als timer = 0.

"Seg 9" (id = 1001)

Zeven segmenten display toont een 9.

  • Uitgangen: bin = “1001” en td = 0.
  • Gaat naar status "seg 8" als timer = 1.
  • Gaat naar status "blanco 2" als timer = 0.

(Staten "Seg 8" tot en met "Seg 2" zijn weggelaten omdat ze hetzelfde patroon volgen als "Seg 10" en "Seg 9" en zijn niet nodig voor uitleg)

"Seg 1" (id = 0001)

Zeven segmenten display toont een 1.

  • Uitgangen: bin = “0001” en td = 0.
  • Gaat naar status "blanco 2" op de volgende stijgende flank van de klok (geen invoer nodig).

"Lege 2" (id = 1111)

Zeven segmenten display toont een 0. Het doel van een tweede blanco status is dat er een aparte status is voor wanneer td = 1 voor veiligheid.

  • Uitgangen: bin = "1111" en td = 1.
  • Gaat naar status "blanco 1" op de volgende stijgende flank van de klok (geen invoer nodig).

"Lege 1" (id = 0000)

Zeven segmenten display toont een 0. Dit is de toestand waarin het systeem blijft wanneer de hoofdtoestand machine in de toestand "lichten uit, geen beweging gedetecteerd" is.

  • Uitgangen: bin = “0000” en td = 0.
  • Gaat naar status "seg 10" als timer = 1.

Stap 3: Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen

Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen
Waarheidstabellen, excitatievergelijkingen en outputvergelijkingen

De volgende stap is het maken van waarheidstabellen voor de machines met twee toestanden en excitatievergelijkingen en uitgangsvergelijkingen voor elke fsm. Voor elke fsm-excitatievergelijking moeten er vergelijkingen zijn voor elke volgende toestand gecodeerde bit in termen van de huidige toestand en zijn ingangssignalen. Voor elke fsm-uitgangsvergelijking moeten er vergelijkingen zijn voor elk uitgangssignaal in termen van de huidige status. Alle vier sets vergelijkingen kunnen worden afgeleid uit de weergegeven waarheidstabellen. (qn is de volgende toestand gecodeerde bit voor elke toestandsmachine, en q is de huidige toestand)

(000) gelijk aan q(2)'q(1)'q(0)', en (0000) gelijk aan q(3)'q(2)'q(1)'q(0)'

(bijv. (0101) is q(3)'q(2)q(1)'q(0) en (110) is q(2)q(1)q(0)')

Excitatievergelijkingen voor de belangrijkste fsm:

  • qn(2) = (ms)'(ns)
  • qn(1) = (ms)'(ns)' + (ms)(orx)'[(td)(001) + (010)] + (ms)[(011) + (100)]
  • qn(0) = (ms)'(ns)' + (ms)(orx)'[(000) + (td)'(001)]

Uitvoervergelijkingen voor de belangrijkste fsm:

  • lichten = (000) + (001) + (100)
  • timer = (001)

Excitatievergelijkingen voor de down counter fsm:

  • qn(3) = t[(0000) + (1010) + (1001) + (0001)]
  • qn(2) = t[(1000) + (0111) + (0110) + (0101) + (0001)]
  • qn(1) = t[(0000) + (1000) + (0111) + (0100) + (0011) + (0001)]
  • qn(0) = t[(1010) + (1000) + (0110) + (0100) + (0010) + (0001)]

Uitvoervergelijkingen voor de down counter fsm:

  • td = (1111)
  • bin (3) = (1010) + (1001) + (1000) + (1111) + (0000)
  • bin(2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
  • bin(1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
  • bin(0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)

Stap 4: Wrapper, submodules en beperking

Zoals al uitgelegd in stap 1, zijn deze modules nodig voor dit project en zijn ze allemaal samengebonden met de wrapper-module met de titel "final_proj.vhd". Het beperkingsbestand met de titel "Basys3_Master.xdc" wordt gebruikt om alle in- en uitgangen van de wrapper te koppelen aan switches, de zeven segmenten en I/O-poorten op het Basys 3-bord. De hoofdschakelaar moet de schakelaar op het bord zijn die zich het dichtst bij de kant van de draden bevindt, de normaal/handmatige schakelaar is de op één na dichtstbijzijnde, en de drie schakelaars die de drie bewegingssensoren vertegenwoordigen zijn de drie schakelaars direct naast de normaal/handmatige schakelaar. Alle code (booleaanse vergelijkingen, moduleverklaringen, enz.) is al in de bestanden geschreven, dus u hoeft niets anders te schrijven om dit te laten werken.

Stap 5: I/O-poorten voor LED

I/O-poorten voor LED
I/O-poorten voor LED
I/O-poorten voor LED
I/O-poorten voor LED

De laatste stap voor dit project is het gebruik van een led om te laten zien of (lichten) daadwerkelijk aan en uit gaan. De bedrading is te zien op de twee foto's. Zorg ervoor dat er een weerstand in serie staat met de led (minstens 330 ohm) om te voorkomen dat de led doorbrandt en zorg ervoor dat de lange pin van de led is aangesloten op dezelfde vrouwelijke header op het basysbord als de rode draad wordt weergegeven (bovenkant meest rechtse) en de kortere pin is verbonden met aarde, dezelfde vrouwelijke header als de getoonde zwarte draad (boven, tweede van links).

Aanbevolen: