สารบัญ:
- ขั้นตอนที่ 1: ระบบกล่องดำ
- ขั้นตอนที่ 2: ส่วนประกอบ
- ขั้นตอนที่ 3: D รองเท้าแตะ
- ขั้นตอนที่ 4: Conditionals
- ขั้นตอนที่ 5: ข้อจำกัด
- ขั้นตอนที่ 6: ไฟล์ต้นฉบับหลัก
- ขั้นตอนที่ 7: การประกอบ
- ขั้นตอนที่ 8: กำลังโหลดโปรแกรม
วีดีโอ: ไฟถนนที่เปิดใช้งานการเคลื่อนไหวอย่างประหยัดพลังงาน: 8 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
เป้าหมายของเราในโครงการนี้คือการสร้างสิ่งที่จะช่วยประหยัดพลังงานและทรัพยากรทางการเงินของชุมชน ไฟถนนที่เปิดใช้งานการเคลื่อนไหวจะทำทั้งสองสิ่งนี้ ทั่วประเทศกำลังสูญเสียพลังงานไปกับไฟถนนที่ส่องสว่างถนนที่ว่างเปล่า ระบบไฟถนนของเราช่วยให้มั่นใจได้ว่าไฟจะเปิดเมื่อจำเป็นเท่านั้น ซึ่งช่วยประหยัดเงินในชุมชนได้นับไม่ถ้วน เมื่อใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหว ระบบจะเปิดไฟเมื่อมีรถยนต์อยู่เท่านั้น นอกจากนี้ เพื่อความปลอดภัยของคนเดินเท้า เราได้ติดตั้งปุ่มควบคุมที่จะเปิดไฟทุกดวงบนถนน ขั้นตอนต่อไปนี้จะอธิบายให้คุณทราบถึงวิธีที่เราออกแบบและสร้างแบบจำลองโปรเจ็กต์แบบย่อขนาดโดยใช้ Vivado และบอร์ด Basy 3
ขั้นตอนที่ 1: ระบบกล่องดำ
เราเริ่มโครงการนี้ด้วยการวาดไดอะแกรมกล่องดำอย่างง่าย ไดอะแกรมกล่องดำจะแสดงอินพุตและเอาต์พุตที่ระบบของเราต้องการเพื่อให้กระบวนการที่จำเป็นทั้งหมดเสร็จสมบูรณ์ เราพยายามทำให้การออกแบบของเราเรียบง่ายและเรียบง่ายที่สุด อินพุตระบบสามรายการของเราประกอบด้วยบัสเซ็นเซอร์ตรวจจับความเคลื่อนไหว (4 สำหรับรุ่นลดขนาดของเรา) ปุ่มควบคุมคนเดินถนน และอินพุตนาฬิกา อีกด้านหนึ่ง เอาต์พุตเดี่ยวของเราคือรถบัสของไฟ LED ที่เป็นตัวแทนของไฟถนนของเรา สำหรับรุ่นนี้ เราใช้ภาพจำลองของไฟถนน 16 ดวงเพียงเพราะนั่นเป็นจำนวนสูงสุดของเอาต์พุต LED ในตัวบนบอร์ด Basys 3 สุดท้าย การใช้ไดอะแกรมนี้ทำให้เราสามารถสร้างโปรเจ็กต์ Vivado ไฟล์ต้นทางและข้อจำกัดที่มีอินพุตและเอาต์พุตที่เหมาะสม
ขั้นตอนที่ 2: ส่วนประกอบ
ในขั้นตอนนี้ เราจะเจาะลึกการตรวจสอบส่วนประกอบที่สร้างไดอะแกรมกล่องดำของเรา องค์ประกอบแรกของเราคือซอร์สไฟล์ VHDL ที่มี D flip-flops รองเท้าแตะ D จะใช้สัญญาณใดก็ตามที่ป้อนจากเซ็นเซอร์บนขอบนาฬิกาที่เพิ่มขึ้น และยึดข้อมูลนั้นไว้จนถึงขอบที่เพิ่มขึ้นถัดไป วิธีนี้ช่วยป้องกันไม่ให้เซ็นเซอร์ตรวจจับการเคลื่อนไหวที่ละเอียดอ่อนของเราทำให้ LED เอาต์พุต "กะพริบ" นอกจากนี้เรายังใส่ D flip-flop อันเดียวบนสัญญาณอินพุตของปุ่มเพื่อให้ LED เปิดอยู่ประมาณ 5-7 วินาทีหลังจากที่กดปุ่ม นอกจากนี้เรายังวิ่งผ่านตัวแบ่งนาฬิกา
เอนทิตี clk_div2 คือพอร์ต (clk: ใน std_logic; sclk: ออก std_logic); จบ clk_div2;
สถาปัตยกรรม my_clk_div ของ clk_div2 is
ค่าคงที่ max_count: จำนวนเต็ม:= (300000000); สัญญาณ tmp_clk: std_logic:= '0'; เริ่ม my_div: กระบวนการ (clk, tmp_clk) ตัวแปร div_cnt: จำนวนเต็ม:= 0; เริ่มต้น if (rising_edge(clk)) แล้ว if (div_cnt = MAX_COUNT) แล้ว tmp_clk <= ไม่ใช่ tmp_clk; div_cnt:= 0; อื่น div_cnt:= div_cnt + 1; สิ้นสุดถ้า; สิ้นสุดถ้า; sclk <= tmp_clk; สิ้นสุดกระบวนการ my_div; สิ้นสุด my_clk_div;
องค์ประกอบสุดท้ายของเราในแผนภาพนี้คือไฟล์ต้นฉบับ VHDL เชิงพฤติกรรมที่มีเงื่อนไขสำหรับเอาต์พุตตามการกำหนดค่าของสัญญาณอินพุต
ขั้นตอนที่ 3: D รองเท้าแตะ
รองเท้าแตะสี่ตัวที่ติดอยู่กับสัญญาณอินพุตมีความสำคัญต่อการทำงานของระบบของเรา ดังที่ได้กล่าวไว้ก่อนหน้านี้ด้วยเซ็นเซอร์ตรวจจับความเคลื่อนไหวที่ละเอียดอ่อนและปุ่มแทนที่ รองเท้าแตะใช้สลักเพื่อส่งสัญญาณอินพุตของเราที่ขอบนาฬิกาที่เพิ่มขึ้นเท่านั้น ตรรกะตามลำดับนี้หมายความว่าไฟถนนของเราสามารถเปิดได้เป็นระยะเวลาหนึ่งหลังจากถูกกระตุ้นโดยการเคลื่อนไหวอย่างรวดเร็ว การเขียนโค้ดสำหรับ D-Flip Flop นั้นค่อนข้างง่าย:
beginprocess (CLK) เริ่มต้นขึ้นหาก rising_edge(CLK) แล้ว Q <= D; สิ้นสุดถ้า; สิ้นสุดกระบวนการ
สิ่งทั้งหมดสามารถรวบรวมเป็นคำสั่ง if เดียวได้ เมื่อเราได้ชิ้นงานนี้แล้ว เราก็สร้างไฟล์ต้นฉบับ VHDL ที่มีโครงสร้างซึ่งมี Flip-flop ที่จำเป็นทั้งหมดสี่ตัว:
เริ่มต้น 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: Conditionals
เพื่อให้โค้ดของเรากระชับและมีประสิทธิภาพ เราได้เขียนเงื่อนไขทั้งหมดของเราไว้ในคำสั่งกรณีเดียว สำหรับแบบจำลองที่ลดขนาดของเรา เรามีการกำหนดค่าเอาต์พุต LED ที่เป็นไปได้ 16 แบบ เนื่องจากเซ็นเซอร์ตรวจจับความเคลื่อนไหวแต่ละตัวมีหน้าที่รับผิดชอบกลุ่ม LED 4 ดวง:
กรณี NMS คือเมื่อ "1111" => LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED <= "111111111111111"; กรณีสิ้นสุด;
ขั้นตอนที่ 5: ข้อจำกัด
ในการระบุอินพุตและเอาต์พุตของคุณอย่างถูกต้องโดยใช้ Vivado คุณต้องใช้ไฟล์ข้อจำกัดที่ระบุพอร์ต ปุ่ม ไฟ LED และนาฬิกาทั้งหมดที่ใช้อยู่
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 {propertyLED[1]}] set_property 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_property18 PACKAGE_PIN W 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 [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 [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 IOST33ANDARD LVs {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 LEDget [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 LVCMOS_33 [get_ports {MS[1]}] ชุด 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 is
ส่วนประกอบ final_project คือพอร์ต (--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); Q: ออก 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. บอร์ด Basy 3 (1)
2. เซ็นเซอร์ตรวจจับความเคลื่อนไหวราคาถูกที่สามารถพบได้ใน Amazon ที่นี่ (4)
3. นักแสดงนำชาย-หญิง (4)
การประกอบ:
1. เชื่อมต่อสายนำชาย 4 ตัวเข้ากับส่วนหัว PMod JB พอร์ต 1-4 (ดูรูป)
2. เชื่อมต่อปลายตัวเมียกับพินเอาต์พุตของเซ็นเซอร์ตรวจจับความเคลื่อนไหวแต่ละตัว
ขั้นตอนที่ 8: กำลังโหลดโปรแกรม
ตอนนี้เราพร้อมที่จะโหลดไฟล์ต้นฉบับ VHDL ลงในบอร์ด Basy 3 แล้ว ตรวจสอบให้แน่ใจว่าได้เรียกใช้การสังเคราะห์ การนำไปใช้งาน และสร้างการตรวจสอบบิตสตรีมเพื่อหาข้อผิดพลาดที่อาจเกิดขึ้น หากทำงานสำเร็จ ให้เปิดตัวจัดการฮาร์ดแวร์และตั้งโปรแกรมอุปกรณ์ Basys 3 โครงการของคุณเสร็จสมบูรณ์แล้ว!
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง