Mục lục:

Đèn đường kích hoạt chuyển động hiệu quả năng lượng: 8 bước
Đèn đường kích hoạt chuyển động hiệu quả năng lượng: 8 bước

Video: Đèn đường kích hoạt chuyển động hiệu quả năng lượng: 8 bước

Video: Đèn đường kích hoạt chuyển động hiệu quả năng lượng: 8 bước
Video: Pin mặt trời hoạt động như thế nào? - Hiểu rõ trong 5 phút 2024, Tháng mười hai
Anonim
Đèn đường kích hoạt chuyển động hiệu quả năng lượng
Đèn đường kích hoạt chuyển động hiệu quả năng lượng

Mục tiêu của chúng tôi với dự án này là tạo ra thứ gì đó giúp tiết kiệm năng lượng và nguồn tài chính cho cộng đồng. Đèn đường được kích hoạt chuyển động sẽ làm được cả hai điều này. Tất cả năng lượng trên toàn quốc đang bị lãng phí trên những ngọn đèn đường thắp sáng những con đường vắng tanh. Hệ thống đèn đường của chúng tôi đảm bảo rằng đèn chỉ được bật khi cần thiết, tiết kiệm cho cộng đồng vô số đô la. Sử dụng cảm biến chuyển động, hệ thống chỉ bật đèn khi có ô tô. Ngoài ra, vì sự an toàn của người đi bộ, chúng tôi đã triển khai nút ghi đè bật tất cả đèn trên đường phố. Các bước sau đây sẽ hướng dẫn bạn cách chúng tôi thiết kế và xây dựng mô hình thu nhỏ của dự án bằng Vivado và bảng Basys 3.

Bước 1: Hộp đen hệ thống

Hộp đen hệ thống
Hộp đen hệ thống

Chúng tôi bắt đầu dự án này bằng cách vẽ một sơ đồ hộp đen đơn giản. Sơ đồ hộp đen chỉ đơn giản là hiển thị các đầu vào và đầu ra mà hệ thống của chúng tôi yêu cầu để hoàn thành tất cả các quy trình cần thiết. Chúng tôi đã cố gắng giữ cho thiết kế của mình đơn giản và cơ bản nhất có thể. Ba đầu vào hệ thống của chúng tôi bao gồm một bus cảm biến chuyển động (4 cho mô hình thu nhỏ của chúng tôi), một nút ghi đè dành cho người đi bộ và một đầu vào đồng hồ. Ở phía bên kia đầu ra duy nhất của chúng tôi là một xe buýt đèn LED đại diện cho đèn đường của chúng tôi. Đối với mô hình này, chúng tôi sử dụng kịch bản gồm 16 đèn đường đơn giản vì đó là số lượng tối đa các đầu ra LED tích hợp trên bảng Basys 3. Cuối cùng, bằng cách sử dụng sơ đồ này, chúng tôi đã có thể tạo dự án Vivado, tệp nguồn và tệp ràng buộc với các đầu vào và đầu ra thích hợp.

Bước 2: Các thành phần

Các thành phần
Các thành phần
Các thành phần
Các thành phần

Trong bước này, chúng tôi đi sâu hơn để kiểm tra các thành phần tạo nên sơ đồ hộp đen của chúng tôi. Thành phần đầu tiên của chúng tôi là tệp nguồn VHDL chứa D flip-flops. D flip-flops chỉ cần lấy bất kỳ tín hiệu nào đang được nhập vào chúng từ các cảm biến trên cạnh tăng của đồng hồ và chốt dữ liệu đó cho đến cạnh tăng tiếp theo. Điều này giúp các cảm biến chuyển động nhạy cảm của chúng tôi không làm cho đèn LED đầu ra "nhấp nháy". Ngoài ra, chúng tôi đặt một nắp lật D duy nhất trên tín hiệu đầu vào của nút để giữ cho đèn LED bật trong khoảng 5-7 giây sau khi nút được nhấn. Chúng tôi cũng chạy điều này thông qua một bộ chia đồng hồ.

thực thể clk_div2 là Port (clk: in std_logic; sclk: out std_logic); end clk_div2;

kiến trúc my_clk_div của clk_div2 là

hằng số max_count: số nguyên: = (300000000); tín hiệu tmp_clk: std_logic: = '0'; begin my_div: process (clk, tmp_clk) biến div_cnt: integer: = 0; begin if (ising_edge (clk)) then if (div_cnt = MAX_COUNT) then tmp_clk <= not tmp_clk; div_cnt: = 0; else div_cnt: = div_cnt + 1; kết thúc nếu; kết thúc nếu; sclk <= tmp_clk; kết thúc quá trình my_div; end my_clk_div;

Thành phần cuối cùng của chúng ta trong sơ đồ này là tệp nguồn VHDL hành vi chứa các điều kiện cho đầu ra dựa trên cấu hình của tín hiệu đầu vào.

Bước 3: D Flip-flops

D Dép xỏ ngón
D Dép xỏ ngón

Bốn flip-flops gắn với các tín hiệu đầu vào rất cần thiết cho chức năng của hệ thống của chúng tôi. Như đã nói trước đây, với các cảm biến chuyển động nhạy cảm và nút ghi đè, dép xỏ ngón sử dụng chốt để chỉ xuất tín hiệu đầu vào của chúng ta trên cạnh tăng của đồng hồ. Logic tuần tự này có nghĩa là đèn đường của chúng ta có thể bật sáng trong một khoảng thời gian nhất định sau khi được kích hoạt bởi một chuyển động nhanh. Mã hóa cho D-Flip Flop khá đơn giản:

beginprocess (CLK) bắt đầu nếu tăng_edge (CLK) then Q <= D; kết thúc nếu; kết thúc quá trình;

Toàn bộ nội dung có thể được biên dịch thành một câu lệnh if duy nhất. Khi chúng tôi có phần này, chúng tôi đã tạo một tệp nguồn VHDL cấu trúc chứa tất cả bốn flip-flops cần thiết của chúng tôi:

begin DFF0: Bản đồ cổng DFF (CLK => CLK, D => D (0), Q => Q (0)); DFF1: Bản đồ cổng DFF (CLK => CLK, D => D (1), Q => Q (1)); DFF2: Bản đồ cổng DFF (CLK => CLK, D => D (2), Q => Q (2)); DFF3: Bản đồ cổng DFF (CLK => CLK, D => D (3), Q => Q (3));

cuối Hành vi;

Điều này giúp giữ cho tệp cấu trúc chính của chúng tôi, nơi chúng tôi tập hợp tất cả các thành phần hệ thống gọn gàng và có tổ chức hơn nhiều.

Bước 4: Điều kiện

Để giữ cho mã của chúng tôi nhỏ gọn và hiệu quả, chúng tôi đã viết tất cả các điều kiện của chúng tôi trong một câu lệnh trường hợp duy nhất. Đối với mô hình thu nhỏ của chúng tôi, chúng tôi có 16 cấu hình đầu ra LED khả thi vì mỗi cảm biến chuyển động chịu trách nhiệm cho một nhóm 4 đèn LED.:

trường hợp NMS là khi "1111" => LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED <= "1111111111111111"; trường hợp kết thúc;

Bước 5: Ràng buộc

Để xác định đúng đầu vào và đầu ra của bạn bằng Vivado, bạn phải triển khai tệp ràng buộc nêu rõ tất cả các cổng, nút, đèn LED và đồng hồ đang được sử dụng.

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_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_property PACK 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_property PACKAGE_PINs V13 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 PACKANDAGE_PIN U3 [get_ports {LED [11]}] set_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 IOST {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_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_PIN} PACKAGE_property} {set_property} 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]}]

Bước 6: Tệp nguồn chính

Trong tệp chính này, chúng tôi tập hợp tất cả các tệp nguồn thành phần được đề cập trước đó. Tệp này có chức năng như mã cấu trúc tập hợp các thành phần khác nhau lại với nhau.

thực thể Master_Final_Project là Cổng (BTN: trong STD_LOGIC; CLK: trong STD_LOGIC; MS: trong STD_LOGIC_VECTOR (3 xuống 0); LED: ra STD_LOGIC_VECTOR (15 xuống 0)); end Master_Final_Project;

Kiến trúc Hành vi của Master_Final_Project là

thành phần final_project là Cổng (--CLK: trong STD_LOGIC; NMS: trong STD_LOGIC_VECTOR (3 xuống 0); BTN: trong STD_LOGIC; --sw: trong STD_LOGIC_Vector (1 xuống 0); LED: ra STD_LOGIC_VECTOR (15 xuống 0)); thành phần cuối;

thành phần Final_DFF mới là

Cổng (CLK: trong STD_LOGIC; D: trong STD_LOGIC_Vector (3 xuống 0); Q: ra STD_LOGIC_Vector (3 xuống 0)); thành phần cuối;

tín hiệu DFF02proj30: STD_LOGIC;

tín hiệu DFF12proj74: STD_LOGIC; tín hiệu DFF22proj118: STD_LOGIC; tín hiệu DFF32proj1512: STD_LOGIC;

bắt đầu

DFF0: Bản đồ cổng 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); Bản đồ cổng Proj0: final_project (NMS (0) => DFF02proj30, NMS (1) => DFF12proj74, NMS (2) => DFF22proj118, NMS (3) => DFF32proj1512, BTN => BTN, LED => LED); cuối Hành vi;

Bước 7: Lắp ráp

cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp
cuộc họp

Việc lắp ráp phần cứng cho dự án này là tối thiểu. Các phần yêu cầu duy nhất như sau:

1. Bảng Basys 3 (1)

2. Cảm biến chuyển động giá rẻ có thể tìm thấy trên amazon tại đây. (4)

3. Nam nữ chính (4)

Cuộc họp:

1. Kết nối 4 dây dẫn nam với các cổng JB của tiêu đề PMod 1-4 (Xem Hình).

2. Kết nối các đầu cái với mỗi chân đầu ra của cảm biến chuyển động.

Bước 8: Tải chương trình

Bây giờ chúng tôi đã sẵn sàng tải tệp nguồn chính VHDL vào bảng Basys 3. Đảm bảo chạy tổng hợp, triển khai và tạo ra kiểm tra dòng bit để tìm bất kỳ lỗi nào có thể xảy ra. Nếu tất cả đều chạy thành công, hãy mở trình quản lý phần cứng và lập trình thiết bị Basys 3. Dự án của bạn bây giờ đã hoàn thành!

Đề xuất: