Cuprins:

L I G H T S: 5 pași
L I G H T S: 5 pași

Video: L I G H T S: 5 pași

Video: L I G H T S: 5 pași
Video: The Light Now Theory cu Giulia Nahmany- 5 pasi spre manifestarea dorintelor 2024, Noiembrie
Anonim
LUMINI
LUMINI

Scopul acestui proiect final a fost de a crea ceva care să se concentreze pe sustenabilitate și să implementeze concepte de proiectare digitală și, pentru a face acest lucru, am decis să proiectez un sistem scalabil de economisire a energiei folosind vhdl și realizat pentru placa Basys 3 (seria Artix-7 35T). Scalabil, deoarece orice număr de senzori poate fi pus într-o cameră și orice număr din aceste sisteme pot fi plasate în jurul unei clădiri sau a unei case. Ceea ce ar face acest sistem este, teoretic, să economisească mii de dolari în clădirile comerciale și să scadă un procent mare de consum de energie în comunitățile rezidențiale mai mici prin implementarea unui sistem conectat de lumini controlate activ și pasiv, detectoare de mișcare, temporizatoare afișate pe afișaje pe șapte segmente și comutatoare de control. Acest exemplu tratează un singur sistem cu trei detectoare de mișcare, un comutator principal, un comutator manual / normal, patru afișaje cu șapte segmente și o singură lumină controlată de sistem.

De exemplu, într-o cameră aleasă, mai mulți detectoare de mișcare ar fi amplasați în jur (acest exemplu de design are trei) și fiecare ar trimite un semnal (1) dacă detectează mișcarea și (0) dacă nu. Dacă cel puțin unul dintre detectoarele de mișcare detectează mișcarea, luminile se aprind dacă nu sunt deja aprinse și rămân aprinse dacă sunt deja aprinse. În orice moment, toți detectorii de mișcare nu detectează nimic, un temporizator începe să numere înapoi pentru o perioadă de timp setată (reglabilă în cod), iar luminile rămân aprinse în timp ce temporizatorul numără invers. Odată ce temporizatorul termină numărătoarea inversă, temporizatorul se oprește și luminile se sting. Dacă cel puțin un detector de mișcare detectează mișcarea în timp ce temporizatorul numără invers, acesta se oprește și se resetează. Și dacă cel puțin un detector de mișcare detectează mișcarea în timp ce luminile sunt stinse, luminile se aprind imediat.

Acest sistem are două moduri, unul cu temporizatorul așa cum sa menționat mai sus și un al doilea în care există un comutator care controlează manual luminile (ignorând senzorii). Există un comutator principal care permite utilizatorului să aleagă modul pe care dorește să îl folosească pe baza oricărui lucru pe care îl consideră, va economisi mai multă energie în general. Ex. O cameră precum un hol ar putea beneficia de modul temporizator pasiv - utilizatorii nu sunt siguri când vor trece oamenii, dar aprinderea și stingerea luminilor de fiecare dată când intră și ies ar fi un inconvenient, în timp ce o cameră de acest tip ca un dormitor cu un singur utilizator ar fi mai bine acționat manual. Iar comutatorul principal ar fi util în cazuri cum ar fi dacă persoana care locuiește în dormitor ar trebui să plece pentru o perioadă lungă de timp, atunci comutatorul principal ar putea fi oprit, iar modul temporizator ar funcționa pentru a economisi energie mai eficient.

Deci, în acest sistem, există două mașini de stare, una este mașina de stare principală și alta pentru temporizatorul de numărătoare inversă. Mașina de stare principală are cinci stări definite ca atare: 1. „luminile aprinse, mișcarea detectată” (id = 000), 2. „luminile aprinse, fără mișcare detectată” (id = 001), 3. „luminile stinse, fără mișcare detectat "(id = 010), 4." pornit manual "(id = 011) și 5." oprit manual "(id = 100). Această mașină de stare principală are patru intrări: comutatorul principal (ms), comutatorul manual / normal (ns), un semnal care este ridicat atunci când cel puțin un comutator detectează mișcarea și este scăzut în caz contrar (orx) și un semnal care este ridicat odată ce cronometrul este terminat și este scăzut în caz contrar (td). Mașina principală de stare are două ieșiri: lumini (lumini) și un semnal care indică când să porniți temporizatorul de numărătoare inversă (temporizator) sau (t) (ambele sunt utilizate în mod interschimbabil).

Cea de-a doua mașină de stare, cronometrul cu numărătoare inversă, are 12 stări: 10 dintre ele au ID-uri asociate cu numărul pe care se afișează șapte segmente- „seg 10” (id = 1010), „seg 9” (id = 1001), […], „Seg 2” (id = 0010), „seg 1” (id = 0001) și celelalte două stări afișează ambele zero, reprezentând temporizatorul oprit - deci există primul „gol 1” gol (id = 1111) și al doilea gol "gol 2" (id = 0000). Timerul cu numărătoare inversă are o singură intrare: timer (t) și trei ieșiri: numărul afișat în binar cu patru biți (bin) și un semnal care indică faptul că temporizatorul este terminat (td).

Pasul 1: Diagrama Black Box

Diagrama cutiei negre
Diagrama cutiei negre

Aceasta este o prezentare generală a modului în care ar trebui să funcționeze întregul sistem și este descrisă cu o diagramă cu cutie neagră.

  • Ceasul este utilizat pentru a ceasa mașina de stare principală și decodificatorul cu șapte segmente; este nevoie de un ceas mai lent pentru contorul de jos, deci există un modul divizor de ceas care preia intrarea ceasului și scoate un ceas mai lent pentru contorul de jos.
  • Variabila intermediară (orx) din ambalaj este legată de senzorii de mișcare și va fi ridicată dacă cel puțin unul dintre senzori detectează ceva și, în caz contrar, scăzută; ecuația booleană pentru aceasta este doar orx = s (2) sau s (1) sau s (0).
  • Fsm-ul principal controlează starea generală în care se află sistemul, în funcție de intrări (orx, ms, ns, td) și transmite starea curentă în care se află (sm) prezentată simplificată cu cele două semnale pentru care este folosit (temporizator și lumini).

    • (cronometru) este un semnal de împachetare care este trimis la contorul de jos fsm ca intrare și este controlat de starea curentă a fsm-ului principal. Indică când porniți cronometrul.
    • (lumini) este un semnal de înfășurare utilizat pentru a controla ledul și este controlat de starea curentă a fsm-ului principal.
  • Contorul de jos fsm controlează ceea ce afișează cele șapte segmente în funcție de intrare (temporizator) și afișează starea curentă în care se află (sd) afișat simplificat cu cele două semnale utilizate pentru acesta (td și bin).

    • (td) este un semnal de împachetare care este trimis către fsm principal ca intrare și este controlat de starea actuală a contorului de jos fsm. Funcționează ca un semnal de feedback care indică momentul terminării temporizatorului.
    • (bin) este un semnal de înveliș de patru biți care este concatenat cu patru biți de zero („0000” și bin) și cei opt biți combinați sunt trimiși la (q), un semnal de înveliș de opt biți, care este trimis la rândul său la cei șapte decodificator de segment sub (ALU_VAL).
  • Modulul cu șapte segmente este același ca pe Polylearn; principalele sale intrări includ un număr de 8 biți (bin) la (ALU_VAL) pentru a fi afișat pe patru afișaje de șapte segmente diferite folosind ieșirile (SEGMENTE) pentru a înfășura semnalul (seg) și (DISP_EN) pentru a înfășura (disp_en).

    • Întrucât două sau mai multe afișaje cu șapte segmente nu pot afișa cifre diferite în același timp, este necesar un ceas pentru a parcurge cele patru segmente, afișând cifra corespunzătoare la un moment dat pentru fiecare set de segmente pornite individual și ciclul suficient de rapid face ca Ssegs par a fi pe toate deodată.
    • (semn și valid) sunt constante pe tot parcursul acestui program, deci (semn) este setat permanent la scăzut și (valid) este setat permanent la nivel ridicat.
    • (ALU_VAL) preia semnalul de împachetare (q) ca intrare, care reprezintă numărul care va fi afișat pe afișajul de șapte segmente în binar.
    • Ieșirea (SEGMENTE) este trimisă la un semnal de împachetare de opt biți (seg) și (DISP_EN) la un semnal de împachetare de patru biți (disp_en).
  • Există, de asemenea, un modul D flip flop, care nu este prezentat în mod explicit în diagramă, dar este necesar pentru cele două mașini de stare ca submoduli și ajută la tranziția stărilor în mod sincron.

    • (3) dintre acestea sunt necesare pentru fsm principal, deoarece 2 ^ (3) = 8> 5 stări pentru codificare
    • (4) dintre acestea sunt necesare pentru contorul descendent fsm, deoarece 2 ^ 4 = 16> 12 stări pentru codificare

Pasul 2: Mașini de stat

Mașini de stat
Mașini de stat

Pentru a proiecta corect cele două mașini de stare, stările individuale trebuie definite în mod clar, cu ieșirile sale și starea la care trece pe baza diferitelor intrări posibile.

Principalele state fsm:

„Lumini aprinse, mișcare detectată” (id = 000)

Luminile sunt aprinse, cel puțin unul dintre detectoarele de mișcare detectează mișcarea, deci orx trebuie să fie ridicat și ms este pornit.

  • Ieșiri: lumini = 1 și temporizator = 0
  • Rămâne ca această stare când ms = 1 și orx = 1.
  • Se afișează „luminile aprinse, nu s-a detectat nicio mișcare” dacă ms = 1 și orx = 0.
  • Merge la starea „pornit manual” dacă ms = 0 și ns = 1.
  • Se afișează „oprit manual” dacă ms = 0 și ns = 0.

„Lumini aprinse, nicio mișcare detectată” (id = 001)

Luminile sunt aprinse, nu se detectează nicio mișcare din vreun detector de mișcare, deci orx trebuie să fie scăzut și ms este pornit. De asemenea, la începutul acestei stări, cronometrul setat ridicat îi spune numărătoarea inversă fsm să înceapă numărătoarea inversă, continuă numărătoarea inversă și încetează numărătoarea inversă odată ce numărătoarea inversă fsm îi spune acestui smsm că a terminat numărătoarea.

  • Ieșiri: lumini = 1 și temporizator = 1.
  • Rămâne ca această stare când ms = 1 și orx = 0 și td (temporizatorul este terminat) = 0.
  • Se afișează „luminile aprinse, mișcarea detectată” dacă ms = 1 și orx = 1.
  • Se stabilește „luminile stinse, nu s-a detectat nicio mișcare” dacă ms = 1 și orx = 0 și td = 1.
  • Merge la starea „pornit manual” dacă ms = 0 și ns = 1.
  • Se afișează „oprit manual” dacă ms = 0 și ns = 0.

„Lumini stinse, nicio mișcare detectată” (id = 010)

Luminile sunt stinse, nu se detectează nicio mișcare de la niciun senzor de mișcare și temporizatorul a terminat numărătoarea inversă, așa că orx trebuie să fie scăzut, ms este pornit și td este oprit.

  • Ieșiri: lumini = 0 și temporizator = 0.
  • Rămâne ca această stare când ms = 1 și orx = 0.
  • Se afișează „luminile aprinse, mișcarea detectată” dacă ms = 1 și orx = 1.
  • Merge la starea „pornit manual” dacă ms = 0 și ns = 1.
  • Se afișează „oprit manual” dacă ms = 0 și ns = 0.

„Pornit manual” (id = 011)

Luminile sunt aprinse, detectoarele de mișcare sunt irelevante, deci ms este oprit și ns este pornit.

  • Ieșiri: lumini = 1 și temporizator = 0.
  • Rămâne ca această stare când ms = 0 și ns = 1.
  • Se afișează „oprit manual” dacă ms = 0 și ns = 0.
  • Trece la starea „se aprinde, nu se detectează nicio mișcare dacă ms = 1.

„Dezactivat manual” (id = 100)

Luminile sunt stinse, detectoarele de mișcare sunt irelevante, deci ms este oprit și ns este oprit.

  • Ieșiri: lumini = 0 și temporizator = 0.
  • Rămâne ca această stare când ms = 0 și ns = 0.
  • Merge la starea „pornit manual” dacă ms = 0 și ns = 1.
  • Trece la starea „se aprinde, nu se detectează nicio mișcare dacă ms = 1.

Contorul de jos afirmă:

„Seg 10” (id = 1010)

Afișajul pe șapte segmente arată un 10.

  • Ieșiri: bin = „1010” și td = 0.
  • Merge la starea „seg 9” dacă temporizatorul = 1.
  • Se afișează „gol 2” dacă temporizatorul = 0.

„Seg 9” (id = 1001)

Afișajul cu șapte segmente arată un 9.

  • Ieșiri: bin = „1001” și td = 0.
  • Merge la starea „seg 8” dacă temporizatorul = 1.
  • Se afișează „gol 2” dacă temporizatorul = 0.

(Statele "Seg 8" până la "Seg 2" sunt omise deoarece urmează același model ca "Seg 10" și "Seg 9" și nu sunt necesare pentru explicații)

„Seg 1” (id = 0001)

Afișajul cu șapte segmente arată un 1.

  • Ieșiri: bin = „0001” și td = 0.
  • Se afișează „gol 2” pe următoarea margine ascendentă a ceasului (nu este necesară nicio intrare).

„Gol 2” (id = 1111)

Afișajul cu șapte segmente arată 0. Scopul unei a doua stări goale este astfel încât să existe o stare separată pentru când td = 1 pentru siguranță.

  • Ieșiri: bin = „1111” și td = 1.
  • Se afișează „1 gol” pe următoarea margine ascendentă a ceasului (nu este necesară nicio intrare).

„Gol 1” (id = 0000)

Afișajul cu șapte segmente arată 0. Aceasta este starea în care sistemul rămâne atunci când mașina de stare principală este în stare „se aprinde, nu se detectează nicio mișcare”.

  • Ieșiri: bin = „0000” și td = 0.
  • Merge la starea „seg 10” dacă temporizatorul = 1.

Pasul 3: Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire

Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire
Tabelele de adevăr ale mașinilor de stat, ecuațiile de excitație și ecuațiile de ieșire

Următorul pas este de a crea tabele de adevăr pentru cele două mașini de stare și ecuații de excitație și ecuații de ieșire pentru fiecare fsm. Pentru fiecare ecuație de excitație fsm, trebuie să existe ecuații pentru fiecare stare următoare codată în funcție de starea curentă și semnalele sale de intrare. Pentru fiecare ecuație de ieșire fsm, trebuie să existe ecuații pentru fiecare semnal de ieșire în ceea ce privește starea curentă. Toate cele patru seturi de ecuații pot fi extrase din tabelele de adevăr descrise. (qn este următorul bit codat de stare pentru fiecare mașină de stare și q este starea curentă)

(000) echivalent cu q (2) 'q (1)' q (0) 'și (0000) echivalent cu q (3)' q (2) 'q (1)' q (0) '

(ex. (0101) este q (3) 'q (2) q (1)' q (0) și (110) este q (2) q (1) q (0) ')

Ecuații de excitație pentru fsm principal:

  • 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)]

Ecuații de ieșire pentru fsm principal:

  • lumini = (000) + (001) + (100)
  • cronometru = (001)

Ecuații de excitație pentru contorul de jos 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)]

Ecuații de ieșire pentru contorul de jos fsm:

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

Pasul 4: Wrapper, Submodule și constrângere

După cum s-a explicat deja la Pasul 1, aceste module sunt necesare pentru acest proiect și sunt toate legate împreună cu modulul de împachetare intitulat „final_proj.vhd”. Fișierul de constrângere intitulat „Basys3_Master.xdc” este utilizat pentru a lega toate intrările și ieșirile de împachetare la comutatoare, cele șapte segmente și porturile I / O de pe placa Basys 3. Comutatorul principal ar trebui să fie comutatorul de pe placa cel mai apropiat de partea în care sunt conectate firele, comutatorul normal / manual este cel de-al doilea cel mai apropiat, iar cele trei comutatoare care reprezintă cei trei senzori de mișcare sunt cele trei comutatoare imediat lângă comutatorul normal / manual.. Tot codul (ecuații booleene, declarații de module etc.) este deja scris în fișiere, deci nu trebuie să scrieți altceva pentru a face acest lucru să funcționeze.

Pasul 5: Porturi I / O pentru LED

Porturi I / O pentru LED
Porturi I / O pentru LED
Porturi I / O pentru LED
Porturi I / O pentru LED

Ultimul pas pentru acest proiect este de a utiliza un led pentru a arăta dacă (luminile) se aprind sau nu. Cablajul este prezentat în cele două imagini. Asigurați-vă că există un rezistor în serie cu ledul (cel puțin 330 ohmi) pentru a nu arde ledul și asigurați-vă că pinul lung al ledului este conectat la același antet feminin de pe placa de bază în care este afișat firul roșu (sus dreapta) și pinul mai scurt este conectat la masă, același antet feminin ca firul negru prezentat (sus, al doilea din stânga).

Recomandat: