Turinys:
- 1 žingsnis: juodosios dėžės schema
- 2 žingsnis: būsenos mašinos
- 3 žingsnis: nurodykite mašinų tiesos lenteles, sužadinimo lygtis ir išvesties lygtis
- 4 žingsnis: Apvyniojimas, submoduliai ir apribojimas
- 5 žingsnis: LED įvesties/išvesties prievadai
Video: L I G H T S: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Šio galutinio projekto tikslas buvo sukurti tai, kas sutelktų dėmesį į tvarumą, ir įgyvendinti skaitmeninio dizaino koncepcijas, todėl nusprendžiau sukurti pritaikomą energijos taupymo sistemą naudojant „vhdl“ir sukurtą „Basys 3“plokštei („Artix-7 35T“serija)). Keičiamas, nes į kambarį galima įdėti bet kokį skaičių jutiklių ir bet kurį šių sistemų skaičių galima pastatyti aplink pastatą ar namą. Tai, ką ši sistema padarytų, teoriškai sutaupytų tūkstančius dolerių komerciniuose pastatuose ir sumažintų didelę energijos suvartojimo dalį mažesnėse gyvenamosiose bendruomenėse, įdiegdama prijungtą aktyviai ir pasyviai valdomų šviesų, judesio jutiklių, laikmačių, rodomų septynių segmentų ekranuose, sistemą ir valdymo jungikliai. Šiame pavyzdyje kalbama apie vieną sistemą su trimis judesio jutikliais, pagrindiniu jungikliu, rankiniu/įprastu jungikliu, keturiais septynių segmentų ekranais ir viena sistemos valdoma lempute.
Pvz., Pasirinktoje patalpoje aplink būtų pastatyti keli judesio detektoriai (šiame pavyzdyje yra trys), ir kiekvienas siunčia signalą (1), jei aptinka judesį, ir (0), jei ne. Jei bent vienas judesio jutiklis aptinka judesį, lemputės įsijungia, jei dar neįjungtos, ir lieka įjungtos, jei jau įjungtos. Bet kuriuo metu visi judesio detektoriai nieko neaptinka, laikmatis pradeda skaičiuoti tam tikrą laiką (reguliuojamas kodu), o lemputės dega, kol laikmatis skaičiuojamas atgal. Kai laikmatis baigia skaičiuoti atgal, laikmatis sustoja ir lemputės užgęsta. Jei bent vienas judesio jutiklis aptinka judesį, kol laikmatis skaičiuoja atgal, laikmatis sustoja ir atsistato. Ir jei bent vienas judesio jutiklis aptinka judesį, kai lemputės yra išjungtos, šviesos iškart įsijungia.
Ši sistema turi du režimus: vieną su laikmačiu, kaip nurodyta aukščiau, ir antrą, kai yra jungiklis, valdantis žibintus rankiniu būdu (ignoruojant jutiklius). Yra pagrindinis jungiklis, leidžiantis vartotojui pasirinkti, kurį režimą naudoti, atsižvelgiant į tai, kuris, jų manymu, sutaupys daugiau energijos. Pvz. Tokiam kambariui kaip prieškambaris gali būti naudingas pasyvus laikmačio režimas- vartotojai nėra tikri, kada žmonės eis pro šalį, tačiau įjungti ir išjungti šviesą kiekvieną kartą, kai jie įeina ir išeina, būtų nepatogu, o toks kambarys kaip miegamasis su vienu vartotoju būtų geriau valdomas rankiniu būdu. Ir pagrindinis jungiklis būtų naudingas tokiais atvejais, kaip jei miegamajame gyvenantis asmuo išvyktų ilgesniam laikui, tada pagrindinis jungiklis galėtų būti išjungtas ir laikmačio režimas veiktų efektyviau.
Taigi šioje sistemoje yra dvi būsenos mašinos, viena yra pagrindinė būsenos mašina, o kita - atgalinės atskaitos laikmačiui. Pagrindinėje būsenos mašinoje yra penkios būsenos, apibrėžtos taip: 1. „šviesos įjungtos, judesys aptiktas“(id = 000), 2. „šviesos įjungtos, judesio neaptikta“(id = 001), 3. „lemputės išjungtos, judesio nėra“. aptiktas “(id = 010), 4.„ rankiniu būdu įjungtas “(id = 011) ir 5.„ rankiniu būdu išjungtas “(id = 100). Šioje pagrindinėje būsenos mašinoje yra keturi įėjimai: pagrindinis jungiklis (ms), rankinis/normalus jungiklis (ns), signalas, kuris yra aukštas, kai bent vienas jungiklis aptinka judesį, ir yra žemas (orx), ir signalas, kuris yra aukštas, kai laikmatis baigtas, ir kitaip žemas (td). Pagrindinėje būsenos mašinoje yra du išėjimai: žibintai (lemputės) ir signalas, rodantis, kada įjungti atgalinės atskaitos laikmatį (laikmatis) arba (t) (abu naudojami pakaitomis).
Antroji būsenos mašina, atgalinės atskaitos laikmatis, turi 12 būsenų: 10 iš jų turi ID, susietą su skaičiumi, kurį rodo septyni segmentai- „seg 10“(id = 1010), „seg 9“(id = 1001), […], „Seg 2“(id = 0010), „seg 1“(id = 0001) ir kitos dvi būsenos rodo nulį, o tai reiškia, kad laikmatis yra išjungtas, taigi yra pirmasis tuščias „tuščias 1“(id = 1111)), o antrasis tuščias „tuščias 2“(id = 0000). Atgalinės atskaitos laikmatis turi vieną įvestį: laikmatis (t) ir trys išėjimai: skaičius, rodomas dvejetainiu būdu su keturiais bitais (bin) ir signalas, rodantis, kad laikmatis baigtas (td).
1 žingsnis: juodosios dėžės schema
Tai yra visos sistemos veikimo apžvalga ir aprašyta juodos dėžės diagramoje.
- Laikrodis naudojamas pagrindinei būsenos mašinai ir septynių segmentų dekoderiui stebėti; žemesniam skaitikliui reikalingas lėtesnis laikrodis, todėl yra laikrodžio daliklio modulis, kuris paima laikrodžio įvestį ir išleidžia lėtesnį laikrodį žemyn.
- Tarpinis kintamasis (orx) pakuotėje yra susietas su judesio jutikliais ir bus didelis, jei bent vienas iš jutiklių kažką aptiks, o kitu atveju - žemas; loginė lygtis yra tiesiog orx = s (2) arba s (1) arba s (0).
-
Pagrindinis fsm valdo bendrą sistemos būseną, priklausomai nuo įėjimų (orx, ms, ns, td), ir išleidžia dabartinę būseną (sm), parodytą supaprastintą su dviem signalais, kuriais jis naudojamas (laikmatis ir žibintai).
- (laikmatis) yra įvyniojimo signalas, siunčiamas į žemutinį skaitiklį fsm kaip įvestis ir valdomas esamos pagrindinės fsm būsenos. Tai rodo, kada įjungti laikmatį.
- (žibintai) yra įvyniojimo signalas, naudojamas valdyti LED, ir yra valdomas esamos pagrindinės fsm būsenos.
-
Žemiau esantis skaitiklis fsm valdo, ką rodo septyni segmentai, priklausomai nuo įvesties (laikmatis), ir pateikia dabartinę būseną (sd), supaprastintą su dviem signalais, kuriais jis naudojamas (td ir bin).
- (td) yra įvyniojimo signalas, siunčiamas į pagrindinį fsm kaip įvestis ir yra valdomas dabartinės žemo skaitiklio fsm būsenos. Jis veikia kaip grįžtamojo ryšio signalas, rodantis, kada laikmatis baigtas.
- (bin) yra keturių bitų įvyniojimo signalas, sujungtas su keturiais nulio bitais („0000“ir „bin“), o visi aštuoni bitai siunčiami į (q), aštuonių bitų įvyniojimo signalą, kuris savo ruožtu siunčiamas septyniems bitams segmento dekoderis pagal (ALU_VAL).
-
Septynių segmentų modulis yra toks pat kaip ir „Polylearn“; jo pagrindiniai įėjimai imami nuo 8 bitų skaičiaus (bin) iki (ALU_VAL), kad būtų rodomi keturiuose skirtinguose septynių segmentų ekranuose, naudojant išvestis (SEGMENTS) įvynioti signalą (seg) ir (DISP_EN) į apvyniojimą (disp_en).
- Kadangi dviejuose ar daugiau septynių segmentų ekranuose vienu metu negali būti rodomi skirtingi skaitmenys, keturių sekundžių perėjimui reikalingas laikrodis, rodantis atitinkamą skaitmenį vienu metu kiekvienam įjungiamam segmentui atskirai, o važiavimas pakankamai greitai atrodo, kad „ssegs“veikia vienu metu.
- (ženklas ir galioja) yra pastovūs visoje programoje, todėl (ženklas) yra nuolat nustatytas žemas, o (galiojantis) - nuolat aukštas.
- (ALU_VAL) priima įvyniojimo signalą (q) kaip įvestį, kuris reiškia skaičių, kuris bus rodomas septynių segmentų ekrane dvejetainiu būdu.
- Išvestis (SEGMENTS) siunčiama į aštuonių bitų įvyniojimo signalą (seg) ir (DISP_EN) į keturių bitų įvyniojimo signalą (disp_en).
-
Taip pat yra „D flip flop“modulis, kuris nėra aiškiai parodytas diagramoje, bet yra reikalingas dviem būsenos mašinoms kaip submoduliai ir padeda sinchroniškai keisti būsenas.
- (3) iš jų reikalingi pagrindiniam fsm, nes 2^(3) = 8> 5 būsenos kodavimui
- (4) jų reikia žemesniam skaitikliui fsm, nes 2^4 = 16> 12 būsenų kodavimui
2 žingsnis: būsenos mašinos
Norint tinkamai suprojektuoti dvi būsenos mašinas, reikia aiškiai apibrėžti atskiras būsenas, nurodant jų rezultatus ir būseną, į kurią ji pereina, atsižvelgiant į įvairius galimus įėjimus.
Pagrindinės fsm teigia:
„Šviesos įjungtos, judesys aptiktas“(id = 000)
Šviesos įjungtos, bent vienas iš judesio jutiklių nustato judesį, todėl orx turi būti aukštas, o ms įjungtas.
- Išėjimai: šviesos = 1 ir laikmatis = 0
- Tokia būsena išlieka, kai ms = 1 ir orx = 1.
- Eina į būseną „šviesos įjungtos, judesys neaptiktas“, jei ms = 1 ir orx = 0.
- Pereina į būseną „įjungta rankiniu būdu“, jei ms = 0 ir ns = 1.
- Pereina į būseną „rankiniu būdu išjungta“, jei ms = 0 ir ns = 0.
„Įjungta šviesa, judesio neaptikta“(id = 001)
Šviesos įjungtos, judesys neaptiktas iš jokio judesio jutiklio, todėl orx turi būti žemas, o ms įjungtas. Taip pat šios būsenos pradžioje nustatytas aukštas laikmatis nurodo, kad atgalinis skaičiavimo fsm turi pradėti skaičiuoti atgal, pradeda skaičiuoti atgal ir nustoja skaičiuoti, kai atgalinis skaičiavimas fsm praneša šiai fsm, kad skaičiavimas baigtas.
- Išėjimai: šviesos = 1 ir laikmatis = 1.
- Tokia būsena išlieka, kai ms = 1 ir orx = 0 ir td (laikmatis padarytas) = 0.
- Eina į būseną „šviesos įjungtos, judesys aptiktas“, jei ms = 1 ir orx = 1.
- Eina į būseną „šviesos išjungtos, judesys neaptiktas“, jei ms = 1 ir orx = 0 ir td = 1.
- Pereina į būseną „įjungta rankiniu būdu“, jei ms = 0 ir ns = 1.
- Pereina į būseną „rankiniu būdu išjungta“, jei ms = 0 ir ns = 0.
„Šviesa išjungta, judesio neaptikta“(id = 010)
Šviesos yra išjungtos, judesys neaptiktas iš jokio judesio jutiklio ir laikmatis baigė skaičiuoti atgal, todėl orx turi būti mažas, ms įjungtas, o td išjungtas.
- Išėjimai: šviesos = 0 ir laikmatis = 0.
- Tokia būsena išlieka, kai ms = 1 ir orx = 0.
- Eina į būseną „šviesos įjungtos, judesys aptiktas“, jei ms = 1 ir orx = 1.
- Pereina į būseną „įjungta rankiniu būdu“, jei ms = 0 ir ns = 1.
- Pereina į būseną „rankiniu būdu išjungta“, jei ms = 0 ir ns = 0.
„Įjungtas rankiniu būdu“(id = 011)
Šviesos įjungtos, judesio detektoriai nesvarbūs, todėl ms išjungiama, o ns įjungiama.
- Išėjimai: šviesos = 1 ir laikmatis = 0.
- Tokia būsena išlieka, kai ms = 0 ir ns = 1.
- Pereina į būseną „rankiniu būdu išjungta“, jei ms = 0 ir ns = 0.
- Eina į būseną „lemputės išjungtos, judesys neaptiktas, jei ms = 1.
„Rankiniu būdu išjungtas“(id = 100)
Šviesos yra išjungtos, judesio detektoriai nesvarbūs, todėl ms yra išjungta, o ns - išjungta.
- Išėjimai: šviesos = 0 ir laikmatis = 0.
- Ši būsena išlieka, kai ms = 0 ir ns = 0.
- Pereina į būseną „įjungta rankiniu būdu“, jei ms = 0 ir ns = 1.
- Eina į būseną „lemputės išjungtos, judesys neaptiktas, jei ms = 1.
Žemyn skaitiklis teigia:
„Seg 10“(id = 1010)
Septynių segmentų ekrane rodomas 10.
- Išėjimai: bin = “1010” ir td = 0.
- Pereina į būseną „seg 9“, jei laikmatis = 1.
- Pereina į būseną „tuščias 2“, jei laikmatis = 0.
„Seg 9“(id = 1001)
Septynių segmentų ekrane rodomas 9.
- Išėjimai: bin = “1001” ir td = 0.
- Pereina į būseną „seg 8“, jei laikmatis = 1.
- Pereina į būseną „tuščias 2“, jei laikmatis = 0.
(Būsenos „Seg 8“iki „Seg 2“praleidžiamos, nes jos atitinka tą patį modelį kaip „Seg 10“ir „Seg 9“ir nėra būtinos paaiškinimui)
„Seg 1“(id = 0001)
Septynių segmentų ekrane rodomas 1.
- Išėjimai: bin = „0001“ir td = 0.
- Eina į būseną „tuščias 2“kitame kylančiame laikrodžio krašte (įvesties nereikia).
„Tuščias 2“(id = 1111)
Septynių segmentų ekrane rodomas 0. Antrosios tuščios būsenos tikslas yra toks, kad būtų atskira būsena, kai td = 1 dėl saugumo.
- Išėjimai: bin = „1111“ir td = 1.
- Eina į būseną „tuščias 1“kitame kylančiame laikrodžio krašte (įvesties nereikia).
„1 tuščias“(id = 0000)
Septynių segmentų ekrane rodomas 0. Tai būsena, kurioje sistema išlieka, kai pagrindinė būsenos mašina yra „išjungta lemputė, judesio neaptikta“.
- Išėjimai: bin = „0000“ir td = 0.
- Pereina į būseną „seg 10“, jei laikmatis = 1.
3 žingsnis: nurodykite mašinų tiesos lenteles, sužadinimo lygtis ir išvesties lygtis
Kitas žingsnis - sukurti dviejų būsenų mašinų tiesos lenteles ir sužadinimo lygtis bei išvesties lygtis kiekvienai fsm. Kiekvienai fsm sužadinimo lygčiai turi būti kiekvienos kitos būsenos koduoto bito lygtys pagal dabartinę būseną ir jos įvesties signalus. Kiekvienai fsm išvesties lygčiai turi būti kiekvienos išvesties signalo lygtys pagal dabartinę būseną. Visi keturi lygčių rinkiniai gali būti sudaryti iš pavaizduotų tiesos lentelių. (qn yra kitas kiekvienos būsenos mašinos būsenos koduotas bitas, o q - dabartinė būsena)
(000) atitinka q (2) 'q (1)' q (0) 'ir (0000) atitinka q (3)' q (2) 'q (1)' q (0) '
(pvz., (0101) yra q (3) 'q (2) q (1)' q (0) ir (110) yra q (2) q (1) q (0) ')
Pagrindinio fsm sužadinimo lygtys:
- 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)]
Pagrindinio fsm išvesties lygtys:
- žibintai = (000) + (001) + (100)
- laikmatis = (001)
Žemutinio skaitiklio fsm sužadinimo lygtys:
- 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)]
Žemutinio skaitiklio fsm išvesties lygtys:
- td = (1111)
- šiukšliadėžė (3) = (1010) + (1001) + (1000) + (1111) + (0000)
- šiukšliadėžė (2) = (0111) + (0110) + (0101) + (0100) + (1111) + (0000)
- šiukšliadėžė (1) = (1010) + (0111) + (0110) + (0011) + (0010) + (1111) + (0000)
- bin (0) = (1001) + (0111) + (0101) + (0011) + (0001) + (1111) + (0000)
4 žingsnis: Apvyniojimas, submoduliai ir apribojimas
Kaip paaiškinta jau 1 žingsnyje, šie moduliai reikalingi šiam projektui ir visi yra susieti su įvyniojimo moduliu, pavadinimu „final_proj.vhd“. Apribojimų failas pavadinimu „Basys3_Master.xdc“naudojamas susieti visas apvyniojimo įvestis ir išvestis su „Basys 3“plokštės jungikliais, septyniais segmentais ir įvesties/išvesties prievadais. Pagrindinis jungiklis turėtų būti plokštės jungiklis, esantis arčiausiai laidų pusės, įprastas/rankinis jungiklis yra antras arčiausiai, o trys jungikliai, vaizduojantys tris judesio jutiklius, yra trys jungikliai, esantys šalia įprasto/rankinio jungiklio. Visas kodas (loginės lygtys, modulio deklaracijos ir kt.) Jau yra užrašytas rinkmenose, todėl jums nereikia nieko daugiau rašyti, kad tai veiktų.
5 žingsnis: LED įvesties/išvesties prievadai
Paskutinis šio projekto žingsnis yra naudoti šviesos diodą, kad parodytų, ar (žibintai) iš tikrųjų įjungiami ir išjungiami. Elektros instaliacija parodyta dviejose nuotraukose. Įsitikinkite, kad serijinis su šviesos diodais yra rezistorius (ne mažiau kaip 330 omų), kad neuždegtų šviesos diodas, ir įsitikinkite, kad ilgasis šviesos diodo kaištis yra prijungtas prie tos pačios pagrindinės plokštės pagrindinės plokštės, kaip parodyta raudona viela (viršuje) dešiniajame kampe), o trumpesnis kaištis yra prijungtas prie žemės, ta pati antraštė, kaip parodyta juoda viela (viršuje, antra iš kairės).
Rekomenduojamas:
„Arduino“automobilių atbulinės eigos įspėjimo sistema - Žingsniai po žingsnio: 4 žingsniai
„Arduino“automobilių atbulinės eigos įspėjimo sistema | Žingsniai po žingsnio: Šiame projekte aš suprojektuosiu paprastą „Arduino“automobilio atbulinės eigos stovėjimo jutiklio grandinę, naudodamas „Arduino UNO“ir ultragarsinį jutiklį „HC-SR04“. Ši „Arduino“pagrįsta automobilio atbulinės eigos įspėjimo sistema gali būti naudojama autonominei navigacijai, robotų diapazonui ir kitiems diapazonams
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): 8 žingsniai
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): ultragarsiniai garso keitikliai L298N nuolatinės srovės adapterio maitinimo šaltinis su vyrišku nuolatinės srovės kaiščiu „Arduino UNOBreadboard“Kaip tai veikia: pirmiausia įkelkite kodą į „Arduino Uno“(tai yra mikrovaldiklis su skaitmeniniu ir analoginiai prievadai kodui konvertuoti (C ++)
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: 7 žingsniai
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: Kelionė, skirta visam „Kano Pixel“potencialui išnaudoti, prasideda gamyklos programinės įrangos pakeitimu „MicroPython“, tačiau tai tik pradžia. Norėdami koduoti „Pixel Kit“, turime prie jo prijungti savo kompiuterius. Ši pamoka paaiškins, kas
Tiesioginė 4G/5G HD vaizdo transliacija iš DJI drono esant mažai delsai [3 žingsniai]: 3 žingsniai
Tiesioginis 4G/5G HD vaizdo įrašų srautinis perdavimas iš DJI drono esant mažai delsai [3 žingsniai]: Šis vadovas padės jums gauti tiesioginius HD kokybės vaizdo srautus iš beveik visų DJI dronų. Naudodami „FlytOS Mobile App“ir „FlytNow Web Application“galite pradėti transliuoti vaizdo įrašus iš drono