Kazalo:
- Korak: Diagram črne škatle
- 2. korak: Državni stroji
- 3. korak: Tabele resničnosti strojnega stanja, enačbe vzbujanja in izhodne enačbe
- 4. korak: Ovoj, podmoduli in omejitev
- 5. korak: V/I porti za LED
Video: L I G H T S: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Namen tega zadnjega projekta je bil ustvariti nekaj, kar bi se osredotočilo na trajnost in izvajati koncepte digitalnega oblikovanja, zato sem se odločil, da bom z uporabo vhdl oblikoval prilagodljiv sistem za varčevanje z energijo in izdelan za Basys 3 Board (serija Artix-7 35T). Prilagodljivo, ker lahko v sobo vstavite poljubno število senzorjev in poljubno število teh sistemov postavite okoli stavbe ali hiše. Ta sistem bi teoretično prihranil na tisoče dolarjev pri poslovnih stavbah in zmanjšal velik odstotek porabe energije v manjših stanovanjskih skupnostih z uvedbo povezanega sistema aktivno in pasivno nadzorovanih luči, detektorjev gibanja, časovnikov, prikazanih na sedmih segmentnih zaslonih, in krmilna stikala. Ta primer obravnava en sam sistem s tremi detektorji gibanja, glavnim stikalom, ročnim/običajnim stikalom, štirimi sedmimi segmentnimi zasloni in eno samo lučjo, ki jo nadzoruje sistem.
Na primer, v izbrani sobi bi bilo okoli nameščenih več detektorjev gibanja (ta primer ima tri) in vsak bi poslal signal (1), če zazna gibanje, in (0), če ne. Če vsaj eden od detektorjev gibanja zazna gibanje, se luči prižgejo, če še niso prižgane, in ostanejo vklopljene, če že svetijo. Kadar koli vsi detektorji gibanja ne zaznajo ničesar, časovnik začne odštevati določen čas (nastavljiv po kodi), lučke pa ostanejo prižgane, medtem ko odštevalnik odšteva. Ko časovnik konča odštevanje, se časovnik ustavi in luči ugasnejo. Če vsaj en detektor gibanja zazna premik med odštevanjem, se časovnik ustavi in ponastavi. In če vsaj en detektor gibanja zazna gibanje, medtem ko so luči izklopljene, se luči takoj prižgejo.
Ta sistem ima dva načina, enega s časovnikom, kot je navedeno zgoraj, in drugega, kjer je stikalo, ki ročno upravlja luči (prezre senzorje). Obstaja glavno stikalo, ki uporabniku omogoča, da izbere, kateri način bo uporabil glede na tistega, za katerega meni, da bo na splošno prihranil več energije. Npr. Soba, kot je hodnik, bi lahko imela koristi od načina pasivnega merjenja časa- uporabniki niso prepričani, kdaj bodo ljudje hodili skozi, toda vklop in izklop luči ob vsakem vstopu in izstopu bi bil neprijeten, medtem ko bi bila soba, kot je kot spalnico z enim uporabnikom bi bilo bolje ročno upravljati. Glavno stikalo bi bilo v pomoč v primerih, na primer, če bi oseba, ki živi v spalnici, odšla dlje časa, potem bi lahko glavno stikalo izklopili, časovnik pa bi učinkoviteje prihranil energijo.
Torej v tem sistemu obstajata dva avtomata stanja, eden je glavni stroj stanja, drugi pa za odštevalnik časa. Stroj glavnega stanja ima tako opredeljenih pet stanj: 1. "luči vklopljene, zaznano gibanje" (id = 000), 2. "luči vklopljene, gibanje ni zaznano" (id = 001), 3. "luči izklopljeno, brez premikanja" zaznano "(id = 010), 4." ročno vklopljeno "(id = 011) in 5." ročno izklopljeno "(id = 100). Ta glavni avtomat ima štiri vhode: glavno stikalo (ms), ročno/običajno stikalo (ns), signal, ki je visok, ko vsaj eno stikalo zazna premik, in je v nasprotnem primeru nizek (orx), in signal, ki je visoko, ko je časovnik opravljen, in sicer nizko (td). Glavni avtomat ima dva izhoda: luči (luči) in signal, ki označuje, kdaj naj se vklopi odštevalnik (časovnik) ali (t) (oba se uporabljata zamenljivo).
Drugi avtomat stanja, odštevalnik časa, ima 12 stanj: 10 ima ID-je, povezane s številko, ki jo prikazuje sedem segmentov- »seg 10« (id = 1010), »seg 9« (id = 1001), […], „Seg 2“(id = 0010), „seg 1“(id = 0001), druga dva stanja pa prikazujeta nič, kar predstavlja časovnik, ki je izklopljen, zato je prvo prazno „prazno 1“(id = 1111) in drugo prazno "prazno 2" (id = 0000). Odštevalni časovnik ima en vhod: časovnik (t) in tri izhode: število, prikazano v binarnem sistemu s štirimi biti (bin) in signal, ki kaže, da je časovnik opravljen (td).
Korak: Diagram črne škatle
To je pregled delovanja celotnega sistema in je opisan s črnim okvirjem.
- Ura se uporablja za urejanje glavnega stroja stanja in sedemsegmentnega dekoderja; za števec navzdol je potrebna počasnejša ura, zato obstaja modul delilnika ure, ki sprejema vhod ure in oddaja počasnejšo uro za števec navzdol.
- Vmesna spremenljivka (orx) v ovoju je vezana na senzorje gibanja in bo visoka, če vsaj eden od senzorjev nekaj zazna, drugače pa nizko; logična enačba za to je samo orx = s (2) ali s (1) ali s (0).
-
Glavni fsm nadzoruje, v katerem splošnem stanju je sistem, odvisno od vhodov (orx, ms, ns, td) in oddaja trenutno stanje (sm), prikazano poenostavljeno z dvema signaloma, za katera se uporablja (časomer in luči).
- (timer) je ovojni signal, ki se kot vhod pošlje na števec navzdol fsm in ga nadzoruje trenutno stanje glavnega fsm -ja. Označuje, kdaj morate vklopiti časovnik.
- (luči) je signal za zavijanje, ki se uporablja za krmiljenje LED in ga nadzira trenutno stanje glavnega fsm -ja.
-
Števec navzdol fsm nadzoruje, kaj prikazuje sedem segmentov, odvisno od vhoda (časovnik) in oddaja trenutno stanje, v katerem je (sd), prikazano poenostavljeno z dvema signaloma, za katera se uporablja (td in bin).
- (td) je ovojni signal, ki se pošlje na glavni fsm kot njegov vhod in ga nadzoruje trenutno stanje fsm števca navzdol. Deluje kot povratni signal, ki kaže, kdaj je časovnik opravljen.
- (bin) je štiri -bitni ovojni signal, ki je povezan s štirimi bitovi nič (»0000« in bin), združenih osem bitov pa se pošlje v (q), osem -bitni ovojni signal, ki se nato pošlje v sedem segmentni dekoder pod (ALU_VAL).
-
Modul s sedmimi segmenti je enak kot na Polylearnu; njegovi glavni vhodi sprejmejo 8 -bitno število (bin) do (ALU_VAL) za prikaz na štirih različnih sedmih segmentnih zaslonih z uporabo izhodov (SEGMENTS) v signal ovoja (seg) in (DISP_EN) v ovoj (disp_en).
- Ker dva ali več zaslonov s sedmimi segmenti ne moreta prikazati različnih števk hkrati, je za premikanje po štirih sklopih potrebna ura, ki prikazuje ustrezne številke hkrati za vsak vklop ssega posamezno, in dovolj hitro kolesarjenje Zdi se, da so ssegovi vključeni naenkrat.
- (znak in veljavno) sta v tem programu konstantna, zato je (znak) trajno nastavljeno nizko in (veljavno) trajno visoko.
- (ALU_VAL) sprejme ovojni signal (q) kot vhod, ki predstavlja število, ki bo prikazano na sedemsegmentnem zaslonu v binarnem sistemu.
- Izhod (SEGMENTS) se pošlje na osembitni ovojni signal (seg) in (DISP_EN) na štiri bitni ovojni signal (disp_en).
-
Obstaja tudi flip flop modul D, ki ni izrecno prikazan na diagramu, vendar je potreben za oba stroja stanja kot podmodula in pomaga sinhrono prehajati stanja.
- (3) od teh so potrebni za glavni fsm, saj je 2^(3) = 8> 5 stanj za kodiranje
- (4) od teh so potrebni za števec navzdol fsm, saj je 2^4 = 16> 12 stanj za kodiranje
2. korak: Državni stroji
Za pravilno oblikovanje obeh strojev stanja je treba jasno opredeliti posamezna stanja z izhodi in stanjem, v katerega prehaja na podlagi različnih možnih vhodov.
Glavna stanja fsm:
»Luči vklopljene, zaznano gibanje« (id = 000)
Lučke svetijo, vsaj eden od detektorjev gibanja zazna gibanje, zato mora biti orx visoko in vklopljen ms.
- Izhodi: luči = 1 in časovnik = 0
- Ostane v tem stanju, ko je ms = 1 in orx = 1.
- Preide v stanje »luči vklopljene, gibanja ni zaznano«, če je ms = 1 in orx = 0.
- Preide v stanje "ročno vklopljeno", če je ms = 0 in ns = 1.
- Preide v stanje "ročno izklopljeno", če je ms = 0 in ns = 0.
»Luči vklopljene, gibanja ni zaznano« (id = 001)
Lučke so prižgane, gibanje ni zaznano z nobenim detektorjem gibanja, zato mora biti orx nizek in vklopljen ms. Tudi na začetku tega stanja časovnik, nastavljen na visoko, sporoči odštevalniku fsm, naj začne odštevati, nadaljuje odštevanje in preneha odštevati, ko odštevalnik fsm pove temu fsm -u, da je štetje končano.
- Izhodi: luči = 1 in časovnik = 1.
- Ostane v tem stanju, ko je ms = 1 in orx = 0 in td (časovnik je opravljen) = 0.
- Preide v stanje »luči vklopljene, zaznano gibanje«, če je ms = 1 in orx = 1.
- Preide v stanje »luči ugasnjene, gibanja ni zaznano«, če je ms = 1 in orx = 0 in td = 1.
- Preide v stanje "ročno vklopljeno", če je ms = 0 in ns = 1.
- Preide v stanje "ročno izklopljeno", če je ms = 0 in ns = 0.
»Luči ugasnjene, gibanja ni zaznano« (id = 010)
Lučke so ugasnjene, gibanje ni zaznano s senzorja gibanja in časovnik je odšteval, zato mora biti orx nizek, ms vklopljen in td izklopljen.
- Izhodi: luči = 0 in časovnik = 0.
- Ostane v tem stanju, ko je ms = 1 in orx = 0.
- Preide v stanje »luči vklopljene, zaznano gibanje«, če je ms = 1 in orx = 1.
- Preide v stanje "ročno vklopljeno", če je ms = 0 in ns = 1.
- Preide v stanje "ročno izklopljeno", če je ms = 0 in ns = 0.
"Ročno vklopljen" (id = 011)
Lučke svetijo, detektorji gibanja niso pomembni, zato je ms izklopljen, ns pa vklopljen.
- Izhodi: luči = 1 in časovnik = 0.
- Ostane v tem stanju, ko je ms = 0 in ns = 1.
- Preide v stanje "ročno izklopljeno", če je ms = 0 in ns = 0.
- Preide v stanje »luči ugasnjene, gibanja ni zaznano, če je ms = 1.
"Ročno izklopljen" (id = 100)
Luči so izklopljene, detektorji gibanja niso pomembni, zato je ms izklopljen, ns pa izklopljen.
- Izhodi: luči = 0 in časovnik = 0.
- Ostane v tem stanju, ko je ms = 0 in ns = 0.
- Preide v stanje "ročno vklopljeno", če je ms = 0 in ns = 1.
- Preide v stanje »luči ugasnjene, gibanja ni zaznano, če je ms = 1.
Stanje navzdol števca:
"Seg 10" (id = 1010)
Sedem segmentni zaslon prikazuje 10.
- Izhodi: bin = “1010” in td = 0.
- Preide v stanje "seg 9", če je časovnik 1.
- Če je časovnik = 0, se prikaže stanje "prazno 2".
»Seg 9« (id = 1001)
Sedem segmentni zaslon prikazuje 9.
- Izhodi: bin = “1001” in td = 0.
- Če je časovnik 1, gre v stanje "seg 8".
- Če je časovnik = 0, preide v stanje »prazno 2«.
(Stanja "Seg 8" do "Seg 2" so izpuščena, ker sledijo istemu vzorcu kot "Seg 10" in "Seg 9" in niso potrebna za razlago)
»Seg 1« (id = 0001)
Prikaz sedmih segmentov prikazuje 1.
- Izhodi: bin = “0001” in td = 0.
- Preide v stanje "prazno 2" na naslednjem naraščajočem robu ure (vnos ni potreben).
»Prazno 2« (id = 1111)
Prikaz sedmih segmentov prikazuje 0. Namen drugega praznega stanja je, da obstaja ločeno stanje, ko je td = 1 zaradi varnosti.
- Izhodi: bin = “1111” in td = 1.
- Preide v stanje "prazno 1" na naslednjem naraščajočem robu ure (vnos ni potreben).
»Prazno 1« (id = 0000)
Prikaz sedmih segmentov prikazuje 0. To je stanje, v katerem sistem ostane, ko je glavno stanje stroja v stanju "luči ugasnjene, gibanja ni zaznano".
- Izhodi: bin = “0000” in td = 0.
- Preide v stanje "seg 10", če je časovnik 1.
3. korak: Tabele resničnosti strojnega stanja, enačbe vzbujanja in izhodne enačbe
Naslednji korak je izdelava tabel resničnosti za dva avtomata stanja ter enačb vzbujanja in izhodnih enačb za vsak fsm. Za vsako enačbo vzbujanja fsm morajo obstajati enačbe za vsak bit, kodiran v naslednjem stanju glede na trenutno stanje in njegove vhodne signale. Za vsako izhodno enačbo fsm morajo obstajati enačbe za vsak izhodni signal glede na trenutno stanje. Vse štiri enačbe lahko povlečete iz prikazanih tabel resničnosti. (qn je naslednji stanje kodiran bit za vsak stroj stanja in q je trenutno stanje)
(000) enakovredno q (2) 'q (1)' q (0) 'in (0000) ekvivalentno q (3)' q (2) 'q (1)' q (0) '
(npr. (0101) je q (3) 'q (2) q (1)' q (0) in (110) je q (2) q (1) q (0) ')
Enačbe vzbujanja za glavni 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)]
Izhodne enačbe za glavni fsm:
- luči = (000) + (001) + (100)
- časovnik = (001)
Enačbe vzbujanja za števec navzdol 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)]
Izhodne enačbe za števec navzdol fsm:
- td = (1111)
- predal (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- koš (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)
4. korak: Ovoj, podmoduli in omejitev
Kot je razloženo že v prvem koraku, so ti moduli potrebni za ta projekt in so vsi povezani z ovojnim modulom z naslovom "final_proj.vhd". Omejitvena datoteka z naslovom "Basys3_Master.xdc" se uporablja za povezavo vseh vhodov in izhodov ovoja s stikali, sedmimi segmenti in V/I vrati na plošči Basys 3. Glavno stikalo mora biti stikalo na plošči, ki je najbližje strani, na kateri so žice, normalno/ročno stikalo je drugo najbližje, tri stikala, ki predstavljajo tri senzorje gibanja, pa so tri stikala tik ob običajnem/ročnem stikalu. Vsa koda (logične enačbe, deklaracije modulov itd.) Je že zapisana v datotekah, zato vam za to ne bo treba pisati ničesar drugega.
5. korak: V/I porti za LED
Zadnji korak pri tem projektu je uporaba LED diode za prikaz, ali se luči dejansko vklopijo ali izklopijo. Ožičenje je prikazano na dveh slikah. Prepričajte se, da je zaporedno zaporeden upor z LED (najmanj 330 ohmov), da LED ne izgori in se prepričajte, da je dolg zatič LED priključen na isto žensko glavo na basys plošči, kot je prikazana rdeča žica (zgoraj skrajno desno) in krajši zatič je priključen na ozemljitev, enaka ženska glava kot prikazana črna žica (zgoraj, drugi od leve).
Priporočena:
Števec korakov - mikro: Bit: 12 korakov (s slikami)
Števec korakov - Micro: Bit: Ta projekt bo števec korakov. Za merjenje korakov bomo uporabili senzor pospeška, ki je vgrajen v Micro: Bit. Vsakič, ko se Micro: Bit trese, bomo štetju dodali 2 in ga prikazali na zaslonu
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): 8 korakov
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): ultrazvočni pretvorniki zvoka L298N Dc ženski adapter z napajalnim vtičem za enosmerni tok Arduino UNOBreadboard Kako to deluje: Najprej naložite kodo v Arduino Uno (to je mikrokrmilnik, opremljen z digitalnim in analogna vrata za pretvorbo kode (C ++)
Vijak - Nočna ura za brezžično polnjenje DIY (6 korakov): 6 korakov (s slikami)
Bolt - Nočna ura za brezžično polnjenje DIY (6 korakov): Induktivno polnjenje (znano tudi kot brezžično polnjenje ali brezžično polnjenje) je vrsta brezžičnega prenosa energije. Za zagotavljanje električne energije prenosnim napravam uporablja elektromagnetno indukcijo. Najpogostejša aplikacija je brezžično polnjenje Qi
Merilnik korakov 1. del: Enobarvni zaslon 128x32 in Arduino: 5 korakov
Pedometer 1. del: Enobarvni zaslon 128x32 in Arduino: To je osnovna vadnica, ki uči, kako uporabljati zaslon OLED s svojim Arduinom. Uporabljam zaslon velikosti 128x32, lahko pa uporabite tudi drugačen zaslon z ločljivostjo in po potrebi spremenite ločljivost/koordinate. V tem delu vam bom pokazal, kako
Preklopna obremenitvena banka z manjšo velikostjo korakov: 5 korakov
Preklopna banka odpornikov obremenitve z manjšo velikostjo korakov: Banke uporovnih obremenitev so potrebne za preskušanje energetskih proizvodov, za karakterizacijo sončnih kolektorjev, v preskusnih laboratorijih in v industriji. Reostati zagotavljajo stalno spreminjanje odpornosti na obremenitev. Ker pa se vrednost upora zmanjša, moč