תוכן עניינים:

תאורת רחוב מופעלת בתנועה חסכונית באנרגיה: 8 שלבים
תאורת רחוב מופעלת בתנועה חסכונית באנרגיה: 8 שלבים

וִידֵאוֹ: תאורת רחוב מופעלת בתנועה חסכונית באנרגיה: 8 שלבים

וִידֵאוֹ: תאורת רחוב מופעלת בתנועה חסכונית באנרגיה: 8 שלבים
וִידֵאוֹ: תאורת חוץ סולארית לגינה ללא חשמל - BeGreen 2024, נוֹבֶמבֶּר
Anonim
תאורת רחוב מופעלת בתנועה חסכונית באנרגיה
תאורת רחוב מופעלת בתנועה חסכונית באנרגיה

מטרתנו בפרויקט זה הייתה ליצור משהו שיחסוך לקהילות אנרגיה ומשאבים פיננסיים. פנסי רחוב המופעלים בתנועה היו עושים את שני הדברים האלה. בכל רחבי המדינה האנרגיה מבוזבזת על פנסי רחוב שמאירים רחובות ריקים. מערכת פנסי הרחוב שלנו מבטיחה שהאורות דולקים רק בעת הצורך, וחוסכת לקהילות אינספור דולרים. באמצעות חיישני תנועה, המערכת מדליקה אורות רק כאשר מכוניות נמצאות. גם למען בטיחות הולכי הרגל, יישמנו כפתור דריסה שמדליק את כל האורות ברחוב. השלבים הבאים ילוו אותך כיצד עיצבנו ובנינו את המודל המוקטן שלנו של הפרויקט באמצעות Vivado ולוח Basys 3.

שלב 1: מערכת Black Box

מערכת שחורה
מערכת שחורה

התחלנו בפרויקט זה בשרטוט תרשים קופסה שחורה פשוטה. תרשים של קופסה שחורה פשוט מציג את הכניסות והתפוקות שהמערכת שלנו דורשת כדי להשלים את כל התהליכים הדרושים. ניסינו לשמור על העיצוב שלנו פשוט ובסיסי ככל האפשר. שלוש כניסות המערכת שלנו כללו אוטובוס של חיישני תנועה (4 לדגם המוקטן שלנו), כפתור עקיפה להולכי רגל וכניסת שעון. בצד השני הפלט היחיד שלנו הוא אוטובוס של נורות LED המייצגות את פנסי הרחוב שלנו. עבור דגם זה השתמשנו בתרחיש של 16 פנסי רחוב פשוט מכיוון שזה המספר המרבי של יציאות LED מובנות בלוח Basys 3. לבסוף, באמצעות תרשים זה הצלחנו ליצור את פרוייקט, המקור והגבלת קבצי ה- Vivado שלנו עם תשומות ויציאות מתאימות.

שלב 2: רכיבים

רכיבים
רכיבים
רכיבים
רכיבים

בשלב זה אנו צוללים לעומק ובוחנים את המרכיבים המרכיבים את תרשים הקופסה השחורה שלנו. הרכיב הראשון שלנו הוא קובץ מקור VHDL המכיל כפכפי D. כפכפי D פשוט לוקחים את כל האות שנכנס אליהם מהחיישנים בקצה השעון העולה, ונוטרים את הנתונים האלה עד לקצה העולה הבא. זה מונע מחיישני התנועה הרגישים שלנו לגרום ל LED של הפלט "להבהב". כמו כן, שמנו כפכף D יחיד על אות כניסת הלחצנים כדי להשאיר את הנורות דולקות במשך כ- 5-7 שניות לאחר לחיצה על הכפתור. העברנו זאת גם באמצעות מחלק שעונים.

ישות clk_div2 היא Port (clk: in std_logic; sclk: out std_logic); סוף clk_div2;

אדריכלות my_clk_div של clk_div2 היא

max_count קבוע: מספר שלם: = (300000000); אות tmp_clk: std_logic: = '0'; התחל my_div: process (clk, tmp_clk) משתנה div_cnt: מספר שלם: = 0; התחל אם (rising_edge (clk)) ואז אם (div_cnt = MAX_COUNT) אז tmp_clk <= not tmp_clk; div_cnt: = 0; אחרת div_cnt: = div_cnt + 1; סוף אם; סוף אם; sclk <= tmp_clk; סיום תהליך my_div; סיים את my_clk_div;

המרכיב הסופי שלנו בתרשים זה הוא קובץ מקור התנהגותי של VHDL המכיל תנאים לתפוקות המבוססות על תצורת אותות הקלט.

שלב 3: D כפכפים

D כפכפים
D כפכפים

ארבעת הכפכפים המחוברים לאותות הקלט חיוניים לתפקוד המערכת שלנו. כפי שנאמר קודם לכן, עם חיישני תנועה רגישים ולחצן דריסה, הכפכפים משתמשים בתפסים כדי להוציא רק את אות הכניסה שלנו בקצה השעון העולה. היגיון רציף זה פירושו שאורות הרחוב שלנו יכולים להישאר דולקים לפרק זמן מוגדר לאחר שהופעלו על ידי תנועה מהירה. הקידוד ל- D-Flip Flop הוא די פשוט:

beginprocess (CLK) begin if rising_edge (CLK) ואז Q <= D; סוף אם; סוף תהליך;

ניתן לחבר את כל העניין לאמירה אחת אם. ברגע שהיה לנו את היצירה הזו, יצרנו קובץ מקור מבני VHDL המכיל את כל ארבעת הכפכפים הדרושים שלנו:

התחל DFF0: מפת DFF יציאה (CLK => CLK, D => D (0), Q => Q (0)); DFF1: מפת נמל DFF (CLK => CLK, D => D (1), Q => Q (1)); DFF2: מפת נמל DFF (CLK => CLK, D => D (2), Q => Q (2)); DFF3: מפת נמל DFF (CLK => CLK, D => D (3), Q => Q (3));

סוף התנהגותי;

זה עוזר לשמור על קובץ המבנה הראשי שלנו שבו אנו מפגישים את כל רכיבי המערכת הרבה יותר נקיים ומאורגנים.

שלב 4: תנאים

על מנת לשמור על הקוד הקומפקטי והיעיל כתבנו את כל התנאים שלנו בהצהרת מקרה אחת. עבור המודל המוקטן שלנו, היו לנו 16 תצורות פלט LED אפשריות מכיוון שכל חיישן תנועה אחראי לקבוצה של 4 נוריות LED.:

מקרה NMS הוא כאשר "1111" => LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED <= "1111111111111111"; מקרה סיום;

שלב 5: אילוצים

על מנת להציג כראוי את הקלט והיציאות שלך באמצעות Vivado, עליך ליישם קובץ אילוצים המציין את כל היציאות, הכפתורים, הלדים והשעונים הנמצאים בשימוש.

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] 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 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_ 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] 8]}] set_property IOSTANDARD LVCMOS33 [get_ports {LED [8]}] set_property PACKAGE_PIN V3 [get_ports {LED [9]}] set_property IO STANDARD LVCMOS33 [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]} [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 IOSTAND {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 [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] 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]}]

שלב 6: קובץ המקור הראשי

בקובץ הראשי הזה אנו אוספים את כל קבצי המקור המרכיבים שהוזכרו קודם לכן. קובץ זה מתפקד כקוד מבני המאגד את המרכיבים השונים.

ישות Master_Final_Project היא יציאה (BTN: ב- STD_LOGIC; CLK: ב- STD_LOGIC; MS: ב- STD_LOGIC_VECTOR (3 עד 0); LED: החוצה STD_LOGIC_VECTOR (15 עד 0)); סיום Master_Final_Project;

ארכיטקטורה ההתנהגות של Master_Final_Project היא

רכיב final_project הוא Port (-CLK: ב- STD_LOGIC; NMS: ב- STD_LOGIC_VECTOR (3 עד 0); BTN: ב- STD_LOGIC; --sw: ב- STD_LOGIC_Vector (1 למטה ל 0); LED: החוצה STD_LOGIC_VECTOR (15 עד 0)); רכיב קצה;

רכיב Final_DFF הוא

יציאה (CLK: ב- STD_LOGIC; D: ב- STD_LOGIC_Vector (3 עד 0); ש: החוצה STD_LOGIC_Vector (3 עד 0)); רכיב קצה;

אות DFF02proj30: STD_LOGIC;

אות DFF12proj74: STD_LOGIC; אות DFF22proj118: STD_LOGIC; אות DFF32proj1512: STD_LOGIC;

התחל

DFF0: מפת יציאת 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: מפת יציאת final_project (NMS (0) => DFF02proj30, NMS (1) => DFF12proj74, NMS (2) => DFF22proj118, NMS (3) => DFF32proj1512, BTN => BTN, LED => LED); סוף התנהגותי;

שלב 7: הרכבה

הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה
הַרכָּבָה

הרכבת החומרה לפרויקט זה היא מינימלית. החלקים הנדרשים היחידים הם כדלקמן:

1. לוח Basys 3 (1)

2. חיישני תנועה זולים שניתן למצוא כאן באמזון. (4)

3. לידים מנקבה לנקבה (4)

הַרכָּבָה:

1. חבר 4 לידים זכריים ליציאות JB בכותרת PMod 1-4 (ראה איור).

2. חבר את קצוות הנקבה לפין הפלט של כל חיישן תנועה.

שלב 8: טעינת התוכנית

כעת אנו מוכנים לטעון את קובץ מקור האב VHDL ללוח Basys 3. הקפד להפעיל סינתזה, יישום וייצור בדיקת זרם סיביות לאיתור שגיאות אפשריות. אם כולם פועלים בהצלחה, פתח את מנהל החומרה ותכנת את מכשיר Basys 3. הפרויקט שלך הושלם כעת!

מוּמלָץ: