Cuprins:
- Pasul 1: Sistem Black Box
- Pasul 2: Componente
- Pasul 3: D flip-flops
- Pasul 4: condiționari
- Pasul 5: Constrângeri
- Pasul 6: Fișier sursă principal
- Pasul 7: Asamblare
- Pasul 8: Încărcarea programului
Video: Lampi stradale activate cu mișcare eficiente din punct de vedere energetic: 8 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Scopul nostru cu acest proiect a fost să creăm ceva care să economisească resursele energetice și financiare ale comunităților. Luminile stradale activate prin mișcare ar face ambele lucruri. În toată țara, energia este irosită pe luminile stradale care iluminează străzile goale. Sistemul nostru de iluminat stradal asigură faptul că luminile sunt aprinse numai atunci când este nevoie, economisind comunități nenumărate dolari. Folosind senzori de mișcare, sistemul aprinde luminile numai atunci când sunt prezente mașini. De asemenea, pentru siguranța pietonilor, am implementat un buton de suprascriere care aprinde toate luminile de pe stradă. Următorii pași vă vor prezenta cum am proiectat și construit modelul nostru redus al proiectului folosind Vivado și o placă Basys 3.
Pasul 1: Sistem Black Box
Am început acest proiect desenând o diagramă simplă a cutiei negre. O diagramă cu cutie neagră arată pur și simplu intrările și ieșirile necesare sistemului nostru pentru a finaliza toate procesele necesare. Am încercat să ne păstrăm designul cât mai simplu și simplu posibil. Cele trei intrări ale noastre de sistem au inclus o magistrală de senzori de mișcare (4 pentru modelul nostru redus), un buton de trecere a pietonilor și o intrare de ceas. Pe de altă parte, ieșirea noastră unică este un autobuz cu lumini LED care reprezintă luminile noastre stradale. Pentru acest model am folosit un scenariu de 16 lumini stradale pur și simplu pentru că acesta este numărul maxim de ieșiri LED încorporate pe placa Basys 3. În cele din urmă, folosind această diagramă am reușit să creăm fișierele noastre de proiect, sursă și constrângere Vivado cu intrări și ieșiri adecvate.
Pasul 2: Componente
În acest pas ne scufundăm mai profund examinând componentele care alcătuiesc diagrama noastră de cutie neagră. Prima noastră componentă este un fișier sursă VHDL care conține D flip-flops. Flip-flop-urile D iau pur și simplu orice semnal le este introdus de la senzorii de pe marginea ascendentă a ceasului și blochează acele date până la următoarea margine ascendentă. Acest lucru împiedică senzorii noștri sensibili de mișcare să provoace „pâlpâirea” LED-urilor de ieșire. De asemenea, punem un singur flip-flop D pe semnalul de intrare al butonului pentru a menține LED-urile aprinse timp de aproximativ 5-7 secunde după apăsarea butonului. De asemenea, am rulat acest lucru printr-un divizor de ceas.
entitatea clk_div2 este Port (clk: în std_logic; sclk: out std_logic); end clk_div2;
arhitectura my_clk_div din clk_div2 este
constant max_count: întreg: = (300000000); semnal tmp_clk: std_logic: = '0'; începe my_div: process (clk, tmp_clk) variabilă div_cnt: întreg: = 0; începe if (rising_edge (clk)) atunci if (div_cnt = MAX_COUNT) atunci tmp_clk <= nu tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; incheie daca; incheie daca; sclk <= tmp_clk; end process my_div; end my_clk_div;
Componenta noastră finală din această diagramă este un fișier sursă VHDL comportamental care conține condiționalități pentru ieșiri bazate pe configurarea semnalelor de intrare.
Pasul 3: D flip-flops
Cele patru flip-flop-uri atașate semnalelor de intrare sunt esențiale pentru funcționalitatea sistemului nostru. Așa cum am spus anterior, cu senzori de mișcare sensibili și un buton de suprascriere, flip-flop-urile folosesc zăvoare pentru a emite doar semnalul nostru de intrare pe marginea ascendentă a ceasului. Această logică secvențială înseamnă că luminile noastre stradale pot rămâne aprinse pentru o anumită perioadă de timp după ce au fost declanșate de o mișcare rapidă. Codificarea unui D-Flip Flop este destul de simplă:
beginprocess (CLK) începe dacă rising_edge (CLK) atunci Q <= D; incheie daca; sfarsitul procesului;
Întregul lucru poate fi compilat într-o singură declarație if. Odată ce am avut această piesă, am creat un fișier sursă VHDL structural care conține toate cele patru flip-flop-uri necesare:
începe DFF0: harta portului DFF (CLK => CLK, D => D (0), Q => Q (0)); DFF1: harta portului DFF (CLK => CLK, D => D (1), Q => Q (1)); DFF2: harta portului DFF (CLK => CLK, D => D (2), Q => Q (2)); DFF3: harta portului DFF (CLK => CLK, D => D (3), Q => Q (3));
final Comportamental;
Acest lucru ajută la păstrarea fișierului nostru structural principal în care adunăm toate componentele sistemului mult mai curate și organizate.
Pasul 4: condiționari
Pentru a ne păstra codul compact și eficient, am scris toate condițiile noastre într-o singură declarație de caz. Pentru modelul nostru redus, am avut 16 configurații posibile de ieșire cu LED, deoarece fiecare senzor de mișcare este responsabil pentru un grup de 4 LED-uri.:
cazul NMS este când "1111" => LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED <= "1111111111111111"; caz final;
Pasul 5: Constrângeri
Pentru a vă indica corect intrările și ieșirile folosind Vivado, trebuie să implementați un fișier de constrângere care să indice toate porturile, butoanele, LED-urile și ceasurile utilizate.
set_property PACKAGE_PIN W5 [get_ports CLK] set_property IOSTANDARD LVCMOS33 [get_ports CLK]
set_property PACKAGE_PIN U16 [get_ports {LED [0]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [0]}] set_property PACKAGE_PIN E19 [get_ports {LED [1]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [1]}] U19 [get_ports {LED [2]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [2]}] set_property PACKAGE_PIN V19 [get_ports {LED [3]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [3]}] set_property PACKAGE_PIN W18 get_ports {LED [4]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [4]}] set_property PACKAGE_PIN U15 [get_ports {LED [5]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [5]}] set_property PACKAGE_PIN U14 [get_ports LED [6]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [6]}] set_property PACKAGE_PIN V14 [get_ports {LED [7]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [7]}] set_property PACKAGE_PIN V13 [get_ports {LED 8]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [8]}] set_property PACKAGE_PIN V3 [get_ports {LED [9]}] set_property IO LVCMOS33 STANDARD [get_ports {LED [9]}] set_property PACKAGE_PIN W3 [get_ports {LED [10]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [10]}] set_property PACKAGE_PIN U3 [get_ports {LED [11]}] set_property IOST [get_ports {LED [11]}] set_property PACKAGE_PIN P3 [get_ports {LED [12]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [12]}] set_property PACKAGE_PIN N3 [get_ports {LED [13]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [13]}] {LED [13]}] set_property PACKAGE_PIN P1 [get_ports {LED [14]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [14]}] set_property PACKAGE_PIN L1 [get_ports {LED [15]}] set_property IOSTANDARD LVCMOS33 [get_ports { [15]}]
set_property PACKAGE_PIN U18 [get_ports BTN] set_property IOSTANDARD LVCMOS33 [get_ports BTN]
set_property PACKAGE_PIN A14 [get_ports {MS [0]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [0]}] set_property PACKAGE_PIN A16 [get_ports {MS [1]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [1]}] set B15 [get_ports {MS [2]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [2]}] set_property PACKAGE_PIN B16 [get_ports {MS [3]}] set_property IOSTANDARD LVCMOS33 [get_ports {MS [3]}]
Pasul 6: Fișier sursă principal
În acest fișier principal reunim toate fișierele sursă componente menționate anterior. Acest fișier funcționează ca un cod structural care reunește componentele disparate.
entitatea Master_Final_Project este Port (BTN: în STD_LOGIC; CLK: în STD_LOGIC; MS: în STD_LOGIC_VECTOR (3 până la 0); LED: ieșit STD_LOGIC_VECTOR (15 până la 0)); final Master_Final_Project;
arhitectură Comportamentul de la Master_Final_Project este
component final_project is Port (--CLK: in STD_LOGIC; NMS: in STD_LOGIC_VECTOR (3 downto 0); BTN: in STD_LOGIC; --sw: in STD_LOGIC_Vector (1 downto 0); LED: out STD_LOGIC_VECTOR (15 downto 0)); componenta finală;
componenta Final_DFF este
Port (CLK: în STD_LOGIC; D: în STD_LOGIC_Vector (3 până la 0); Q: ieșire STD_LOGIC_Vector (3 până la 0)); componenta finală;
semnal DFF02proj30: STD_LOGIC;
semnal DFF12proj74: STD_LOGIC; semnal DFF22proj118: STD_LOGIC; semnal DFF32proj1512: STD_LOGIC;
începe
DFF0: harta portului Final_DFF (CLK => CLK, D (0) => MS (0), D (1) => MS (1), D (2) => MS (2), D (3) => MS (3), Q (0) => DFF02proj30, Q (1) => DFF12proj74, Q (2) => DFF22proj118, Q (3) => DFF32proj1512); Proj0: harta portului final_project (NMS (0) => DFF02proj30, NMS (1) => DFF12proj74, NMS (2) => DFF22proj118, NMS (3) => DFF32proj1512, BTN => BTN, LED => LED); final Comportamental;
Pasul 7: Asamblare
Ansamblul hardware pentru acest proiect este minim. Singurele piese necesare sunt următoarele:
1. Tablou Basys 3 (1)
2. Senzori de mișcare ieftini, care pot fi găsiți pe Amazon aici. (4)
3. Conducte de la bărbat la femeie (4)
Asamblare:
1. Conectați 4 cabluri tată la porturile JB 1-4 ale antetului PMod (a se vedea figura).
2. Conectați capetele femele la pinul de ieșire al fiecărui senzor de mișcare.
Pasul 8: Încărcarea programului
Acum suntem gata să încărcăm fișierul sursă master VHDL pe placa Basys 3. Asigurați-vă că rulați sinteza, implementarea și generați verificarea fluxului de biți pentru eventuale erori. Dacă toate rulează cu succes, deschideți managerul hardware și programați dispozitivul Basys 3. Proiectul dvs. este acum finalizat!
Recomandat:
Consola Punct la Punct Atari Punk 1 și jumătate: 19 pași
Point to Point Atari Punk Console One and Half: What! ?? O altă versiune Atari Punk Console? Așteptați, așteptați, așteptați oamenii, aceasta este diferită, promiteți. Waaay, în 1982, Forrest Mims, scriitorul de broșuri Radio Shack și Creaționistul Young Earth (emoji cu ochi plini) a publicat planurile în genul său Stepped Tone
Căi ferate model automat automat punct la punct: 10 pași (cu imagini)
Modele de cale ferată automate simple punct la punct: microcontrolerele Arduino sunt excelente pentru automatizarea modelelor de cale ferată. Automatizarea planurilor este utilă în multe scopuri, cum ar fi plasarea aspectului dvs. pe un afișaj în care operația de planificare poate fi programată pentru a circula trenurile într-o succesiune automată. Eu
Placă de conducere a motorului eficientă din punct de vedere al puterii: 5 pași
Placă de conducere a motorului eficientă din punct de vedere al energiei: Proiectul prezentat este o placă de circuit a motorului pas cu pas / conducătorului de motor cu IC driver de motor SN754410, care include unele caracteristici de economisire a energiei. Placa poate acționa 2 motoare de curent continuu sau un motor pas cu pas cu ajutorul circuitului de punte dual H din IC. SN754410 IC
Oscilator controlat de tensiune punct la punct: 29 de pași
Oscilator controlat de tensiune punct-la-punct: Bună! Ați găsit un proiect în care luăm un microcip cu adevărat ieftin, un CD4069 (frumos), și lipim câteva piese la acesta și obținem un oscilator de tensiune controlat de pitch-tracking foarte util! Versiunea pe care o vom construi are doar o formă de undă ferăstrău sau rampă, care este o
Calculator eficient din punct de vedere energetic: 9 pași
Calculator eficient din punct de vedere energetic: există nenumărate instrumente de instruire și cum să articole pe web și în tipărire pe construirea propriului computer. Cu toate acestea, nu există la fel de multe ghiduri pentru construirea unui PC care să fie eficient din punct de vedere energetic. De-a lungul acestui instructable, vă voi oferi câteva sfaturi despre cum să selectați