Obsah:

L I G H T S: 5 kroků
L I G H T S: 5 kroků

Video: L I G H T S: 5 kroků

Video: L I G H T S: 5 kroků
Video: Meiko - Leave The Lights On (Krot Remix) 2024, Listopad
Anonim
SVĚTLA
SVĚTLA

Účelem tohoto konečného projektu bylo vytvořit něco, co by se zaměřilo na udržitelnost a implementovalo koncepty digitálního designu, a proto jsem se rozhodl navrhnout škálovatelný systém pro úsporu energie pomocí vhdl a vyrobený pro desku Basys 3 Board (řada Artix-7 35T)). Škálovatelné, protože do místnosti lze umístit libovolný počet senzorů a libovolný počet těchto systémů lze umístit kolem budovy nebo domu. Tento systém by teoreticky ušetřil tisíce dolarů v komerčních budovách a snížil velké procento spotřeby energie v menších obytných komunitách zavedením propojeného systému aktivně a pasivně ovládaných světel, detektorů pohybu, časovačů zobrazovaných na sedmi segmentových displejích a ovládací spínače. Tento příklad se zabývá jediným systémem se třemi detektory pohybu, hlavním spínačem, manuálním/normálním spínačem, čtyřmi sedmi segmentovými displeji a jediným osvětlením, které systém ovládá.

Například ve vybrané místnosti by bylo rozmístěno několik detektorů pohybu (tento příklad má tři) a každý by vyslal signál (1), pokud detekuje pohyb, a (0) pokud ne. Pokud alespoň jeden z detektorů pohybu detekuje pohyb, světla se rozsvítí, pokud již nejsou zapnutá, a zůstanou zapnutá, pokud již jsou zapnutá. Kdykoli všechny detektory pohybu nic nezjistí, časovač začne odpočítávat po nastavenou dobu (nastavitelný v kódu) a kontrolky zůstanou rozsvícené, zatímco časovač odpočítává. Jakmile časovač dokončí odpočítávání, časovač se zastaví a světla zhasnou. Pokud alespoň jeden detektor pohybu detekuje pohyb, zatímco časovač odpočítává, časovač se zastaví a resetuje. A pokud alespoň jeden detektor pohybu detekuje pohyb, když jsou světla vypnutá, světla se okamžitě rozsvítí.

Tento systém má dva režimy, jeden s časovačem, jak je uvedeno výše, a druhý, kde je spínač, který ovládá světla ručně (ignoruje senzory). K dispozici je hlavní přepínač, který uživateli umožňuje vybrat si režim, který chce použít, podle toho, který z nich cítí, celkově ušetří více energie. Př. Místnost, jako je chodba, by mohla využívat režim pasivního časovače- uživatelé si nejsou jisti, kdy jimi budou procházet lidé, ale zapnutí a vypnutí světla při každém vstupu a odchodu by bylo nepříjemné, zatímco místnost jako protože ložnice s jedním uživatelem by byla lépe ovládána ručně. A hlavní vypínač by byl užitečný v případech, jako kdyby osoba žijící v ložnici odešla na delší dobu, pak by hlavní vypínač mohl být vypnut a režim časovače by fungoval pro úsporu energie efektivněji.

V tomto systému tedy existují dva stavové automaty, jeden je hlavní stavový a druhý pro odpočítávací časovač. Hlavní stavový stroj má takto definováno pět stavů: 1. „světla svítí, detekován pohyb“(id = 000), 2. „světla svítí, není detekován žádný pohyb“(id = 001), 3. „světla nesvítí, žádný pohyb detekováno "(id = 010), 4." ručně zapnuto "(id = 011) a 5." ručně vypnuto "(id = 100). Tento hlavní stavový stroj má čtyři vstupy: hlavní spínač (ms), ruční/normální spínač (ns), signál, který je vysoký, když alespoň jeden spínač detekuje pohyb, a je nízký, jinak (orx), a signál, který je vysoká, jakmile je časovač hotový, a nízká, jinak (td). Hlavní stavový stroj má dva výstupy: světla (světla) a signál, který ukazuje, kdy zapnout časovač odpočítávání (časovač) nebo (t) (oba se používají zaměnitelně).

Druhý stavový automat, odpočítávací časovač, má 12 stavů: 10 z nich má ID spojená s číslem, které sedm segmentů zobrazuje- „seg 10“(id = 1010), „seg 9“(id = 1001), […], „Seg 2“(id = 0010), „seg 1“(id = 0001) a další dva stavy zobrazují nulu, což znamená, že časovač je vypnutý- takže je zde první prázdné „prázdné 1“(id = 1111) a druhé prázdné „prázdné 2“(id = 0000). Časovač odpočítávání má jeden vstup: časovač (t) a tři výstupy: číslo zobrazené binárně se čtyřmi bity (bin) a signálem, že je časovač dokončen (td).

Krok 1: Schéma černé skříňky

Schéma černé skříňky
Schéma černé skříňky

Toto je přehled toho, jak má celý systém fungovat, a je popsán pomocí diagramu černé skříňky.

  • Hodiny se používají k taktování hlavního stavového stroje a sedmisegmentového dekodéru; pro počítadlo dolů jsou zapotřebí pomalejší hodiny, takže existuje modul děliče hodin, který převezme hodinový vstup a vydá pomalejší hodiny pro počítadlo dolů.
  • Mezilehlá proměnná (orx) v obalu je svázána se senzory pohybu a bude vysoká, pokud alespoň jeden ze senzorů něco detekuje, a nízká naopak; logická rovnice pro to je jen orx = s (2) nebo s (1) nebo s (0).
  • Hlavní fsm řídí, ve kterém obecném stavu se systém nachází, v závislosti na vstupech (orx, ms, ns, td) a vydává aktuální stav, ve kterém je (sm) zobrazen zjednodušeně pomocí dvou signálů, pro které se používá (časovač a světla).

    • (časovač) je signál obalu, který je odeslán do čítače dolů fsm jako jeho vstup a je řízen aktuálním stavem hlavního fsm. Udává, kdy zapnout časovač.
    • (světla) je signál obalu, který se používá k ovládání LED a je řízen aktuálním stavem hlavní fsm.
  • Čítač dolů fsm ovládá to, co sedm segmentů zobrazuje v závislosti na vstupu (časovač) a vydává aktuální stav, ve kterém je (sd), zjednodušeně pomocí dvou signálů, pro které se používá (td a bin).

    • (td) je signál obalu, který je odeslán do hlavního fsm jako jeho vstup a je řízen aktuálním stavem čítače dolů fsm. Funguje jako signál zpětné vazby, který indikuje, kdy je časovač dokončen.
    • (bin) je čtyřbitový obalový signál, který je spojen se čtyřmi bity nula („0000“a bin) a kombinovaných osm bitů je odesláno do (q), osmibitového obalového signálu, který je následně odeslán do sedmi segmentový dekodér pod (ALU_VAL).
  • Modul se sedmi segmenty je stejný jako na Polylearn; jeho hlavní vstupy mají 8bitové číslo (bin) až (ALU_VAL) pro zobrazení na čtyřech různých sedmi segmentových displejích pomocí výstupů (SEGMENTS) pro signál obálky (seg) a (DISP_EN) pro wrapper (disp_en).

    • Vzhledem k tomu, že dva nebo více sedm segmentových displejů nemohou zobrazovat různé číslice současně, jsou k procházení čtyř ssegů zapotřebí hodiny, které zobrazují příslušnou číslici současně pro každý zapnutý sseg samostatně, a dostatečně rychlé cyklování Zdá se, že ssegy jsou zapnuty najednou.
    • (znaménko a platný) jsou v celém tomto programu konstantní, takže (znaménko) je trvale nastaveno na nízkou hodnotu a (platné) je trvale nastaveno na vysokou hodnotu.
    • (ALU_VAL) převezme signál obálky (q) jako vstup, který představuje číslo, které bude binárně zobrazeno na sedmisegmentovém displeji.
    • Výstup (SEGMENTS) je odeslán do signálu osmibitového wrapperu (seg) a (DISP_EN) do signálu čtyřbitového wrapperu (disp_en).
  • K dispozici je také modul D flip flop, který není v diagramu výslovně zobrazen, ale je potřebný pro dva stavové automaty jako submoduly a pomáhá synchronně tranzistovat stavy.

    • (3) z nich jsou potřeba pro hlavní fsm, protože 2^(3) = 8> 5 stavů pro kódování
    • (4) z nich jsou potřebné pro čítač dolů fsm, protože 2^4 = 16> 12 stavů pro kódování

Krok 2: Stav strojů

Státní stroje
Státní stroje

Aby bylo možné správně navrhnout dva stavové automaty, je třeba jasně definovat jednotlivé stavy s jejich výstupy a stavem, do kterého přechází na základě různých možných vstupů.

Hlavní fsm uvádí:

„Svítí, detekován pohyb“(id = 000)

Kontrolky svítí, alespoň jeden z detektorů pohybu detekuje pohyb, takže orx musí být vysoký a ms je zapnutý.

  • Výstupy: světla = 1 a časovač = 0
  • Zůstává v tomto stavu, když ms = 1 a orx = 1.
  • Přejde do stavu „světla svítí, nebyl detekován žádný pohyb“, pokud ms = 1 a orx = 0.
  • Přejde do stavu „ručně zapnuto“, pokud ms = 0 a ns = 1.
  • Přejde do stavu „ručně vypnuto“, pokud ms = 0 a ns = 0.

„Svítí, nebyl detekován žádný pohyb“(id = 001)

Světla svítí, z žádného detektoru pohybu nebyl detekován žádný pohyb, takže orx musí být nízký a ms je zapnutý. Také na začátku tohoto stavu nastavený časovač říká, že odpočítávání fsm začne odpočítávat, pokračuje v odpočítávání a přestane odpočítávat, jakmile odpočítávání fsm řekne tomuto fsm, že je počítání hotové.

  • Výstupy: světla = 1 a časovač = 1.
  • Zůstává v tomto stavu, když ms = 1 a orx = 0 a td (časovač je hotový) = 0.
  • Přejde do stavu „světla svítí, detekován pohyb“, pokud ms = 1 a orx = 1.
  • Přejde do stavu „světla zhasnuta, nebyl detekován žádný pohyb“, pokud ms = 1 a orx = 0 a td = 1.
  • Přejde do stavu „ručně zapnuto“, pokud ms = 0 a ns = 1.
  • Přejde do stavu „ručně vypnuto“, pokud ms = 0 a ns = 0.

„Zhasnutá světla, nebyl detekován žádný pohyb“(id = 010)

Světla jsou vypnutá, žádný pohyb nebyl detekován žádným pohybovým senzorem a časovač skončil odpočítávání, takže orx musí být nízký, ms je zapnutý a td je vypnuté.

  • Výstupy: světla = 0 a časovač = 0.
  • Zůstává jako tento stav, když ms = 1 a orx = 0.
  • Přejde do stavu „světla svítí, detekován pohyb“, pokud ms = 1 a orx = 1.
  • Přejde do stavu „ručně zapnuto“, pokud ms = 0 a ns = 1.
  • Přejde do stavu „ručně vypnuto“, pokud ms = 0 a ns = 0.

„Ručně zapnuto“(id = 011)

Kontrolky jsou zapnuté, detektory pohybu jsou irelevantní, takže ms je vypnutý a ns je zapnutý.

  • Výstupy: světla = 1 a časovač = 0.
  • Zůstává v tomto stavu, když ms = 0 a ns = 1.
  • Přejde do stavu „ručně vypnuto“, pokud ms = 0 a ns = 0.
  • Přejde do stavu „nesvítí, žádný pohyb nebyl detekován, pokud ms = 1.

„Ručně vypnuto“(id = 100)

Světla jsou vypnutá, detektory pohybu jsou irelevantní, takže ms je vypnutý a ns je vypnutý.

  • Výstupy: světla = 0 a časovač = 0.
  • Zůstává v tomto stavu, když ms = 0 a ns = 0.
  • Přejde do stavu „ručně zapnuto“, pokud ms = 0 a ns = 1.
  • Přejde do stavu „nesvítí, žádný pohyb nebyl detekován, pokud ms = 1.

Stavy čítače dolů:

„Seg 10“(id = 1010)

Sedmisegmentový displej zobrazuje 10.

  • Výstupy: bin = “1010” a td = 0.
  • Pokud časovač = 1, přejde do stavu „seg 9“.
  • Pokud časovač = 0, přejde do stavu „prázdné 2“.

„Seg 9“(id = 1001)

Sedmisegmentový displej zobrazuje 9.

  • Výstupy: bin = “1001” a td = 0.
  • Pokud časovač = 1, přejde do stavu „seg 8“.
  • Pokud časovač = 0, přejde do stavu „prázdné 2“.

(Stavy „Seg 8“až „Seg 2“jsou vynechány, protože sledují stejný vzorec jako „Seg 10“a „Seg 9“a nejsou nutné pro vysvětlení.)

„Seg 1“(id = 0001)

Sedmisegmentový displej zobrazuje 1.

  • Výstupy: bin = „0001“a td = 0.
  • Přejde na stav „prázdné 2“na další náběžné hraně hodin (není potřeba žádný vstup).

„Prázdné 2“(id = 1111)

Sedmisegmentový displej zobrazuje 0. Účel druhého prázdného stavu je, aby existoval samostatný stav, když td = 1 pro bezpečnost.

  • Výstupy: bin = “1111” a td = 1.
  • Přejde na stav „prázdný 1“na další stoupající hraně hodin (není potřeba žádný vstup).

„Prázdný 1“(id = 0000)

Sedmisegmentový displej zobrazuje 0. Toto je stav, ve kterém systém zůstává, když je hlavní stavový stroj ve stavu „zhasne, není detekován žádný pohyb“.

  • Výstupy: bin = „0000“a td = 0.
  • Pokud časovač = 1, přejde do stavu „seg 10“.

Krok 3: Stavové tabulky pravdy stroje, excitační rovnice a výstupní rovnice

Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice
Pravdivé tabulky stavových strojů, excitační rovnice a výstupní rovnice

Dalším krokem je vytvoření pravdivostních tabulek pro dva stavové automaty a excitační rovnice a výstupní rovnice pro každou fsm. Pro každou fsm excitační rovnici musí existovat rovnice pro každý další stav kódovaný bit z hlediska aktuálního stavu a jeho vstupních signálů. Pro každou výstupní rovnici fsm musí existovat rovnice pro každý výstupní signál z hlediska aktuálního stavu. Všechny čtyři sady rovnic lze čerpat z vyobrazených tabulek pravd. (qn je další kódovaný bit pro každý stavový stroj a q je aktuální stav)

(000) ekvivalent q (2) 'q (1)' q (0) 'a (0000) ekvivalent q (3)' q (2) 'q (1)' q (0) '

(např. (0101) je q (3) 'q (2) q (1)' q (0) a (110) je q (2) q (1) q (0) ')

Vzrušovací rovnice pro hlavní 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)]

Výstupní rovnice pro hlavní fsm:

  • světla = (000) + (001) + (100)
  • časovač = (001)

Vzrušovací rovnice pro počítadlo dolů 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)]

Výstupní rovnice pro počítadlo dolů fsm:

  • td = (1111)
  • přihrádka (3) = (1010) + (1001) + (1000) + (1111) + (0000)
  • přihrádka (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
  • přihrádka (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
  • přihrádka (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)

Krok 4: Obálka, submoduly a omezení

Jak již bylo vysvětleno v kroku 1, tyto moduly jsou pro tento projekt potřeba a jsou svázány dohromady s modulem obálky s názvem „final_proj.vhd“. Soubor omezení s názvem „Basys3_Master.xdc“se používá k propojení všech vstupů a výstupů modulu wrapper s přepínači, sedmi segmentovými a I/O porty na desce Basys 3. Hlavní spínač by měl být přepínač na desce nejblíže straně, na které jsou vodiče, normální/ruční spínač je druhý nejbližší a tři spínače představující tři pohybová čidla jsou tři spínače bezprostředně vedle normálního/ručního spínače. Veškerý kód (booleovské rovnice, deklarace modulů atd.) Je již zapsán v souborech, takže nemusíte nic dalšího psát, aby to fungovalo.

Krok 5: I/O porty pro LED

I/O porty pro LED
I/O porty pro LED
I/O porty pro LED
I/O porty pro LED

Posledním krokem tohoto projektu je použití LED diody k zobrazení, zda se (světla) skutečně zapínají a vypínají. Zapojení je znázorněno na dvou obrázcích. Ujistěte se, že je v sérii odpor s LED diodou (alespoň 330 ohmů), aby se LED nespálila, a ujistěte se, že dlouhý kolík LED je připojen ke stejné zásuvce na základní desce, jak je zobrazen červený vodič (nahoře úplně vpravo) a kratší kolík je připojen k zemi, stejná zásuvka jako černý vodič (nahoře, druhý zleva).

Doporučuje: