Оглавление:

Энергосберегающие уличные фонари, активируемые движением: 8 шагов
Энергосберегающие уличные фонари, активируемые движением: 8 шагов

Видео: Энергосберегающие уличные фонари, активируемые движением: 8 шагов

Видео: Энергосберегающие уличные фонари, активируемые движением: 8 шагов
Видео: Полезная Электроника из Китая. Товары с Aliexpress к 11.11 2024, Ноябрь
Anonim
Энергоэффективные уличные фонари, активируемые движением
Энергоэффективные уличные фонари, активируемые движением

Наша цель в этом проекте состояла в том, чтобы создать что-то, что сэкономило бы энергию и финансовые ресурсы сообществ. Уличные фонари, активируемые движением, будут делать и то, и другое. По всей стране энергия тратится на то, чтобы уличные фонари освещали пустующие улицы. Наша система уличного освещения гарантирует, что свет включается только тогда, когда это необходимо, экономя общинам бесчисленные доллары. Используя датчики движения, система включает свет только при наличии автомобилей. Также для безопасности пешеходов мы реализовали кнопку блокировки, которая включает все фонари на улице. Следующие шаги проведут вас через то, как мы спроектировали и построили нашу уменьшенную модель проекта с использованием Vivado и доски Basys 3.

Шаг 1. Системный черный ящик

Системный черный ящик
Системный черный ящик

Мы начали этот проект с рисования простой схемы черного ящика. Диаграмма в виде черного ящика просто показывает входы и выходы, которые требуются нашей системе для выполнения всех необходимых процессов. Мы постарались сделать наш дизайн максимально простым и простым. Наши три системных входа включали в себя шину датчиков движения (4 для нашей уменьшенной модели), кнопку блокировки пешехода и вход часов. С другой стороны, наш единственный выход - это шина светодиодных фонарей, представляющих наши уличные фонари. Для этой модели мы использовали сценарий с 16 уличными фонарями просто потому, что это максимальное количество встроенных светодиодных выходов на плате Basys 3. Наконец, используя эту диаграмму, мы смогли создать наш проект Vivado, исходные файлы и файлы ограничений с соответствующими входами и выходами.

Шаг 2: Компоненты

Компоненты
Компоненты
Компоненты
Компоненты

На этом этапе мы углубимся в изучение компонентов, составляющих нашу диаграмму черного ящика. Наш первый компонент - это исходный файл VHDL, содержащий D-триггеры. D-триггеры просто принимают любой входной сигнал от датчиков на переднем фронте тактового сигнала и фиксируют эти данные до следующего переднего фронта. Это предохраняет наши чувствительные датчики движения от «мерцания» выходных светодиодов. Кроме того, мы помещаем один D-триггер на входной сигнал кнопки, чтобы светодиоды оставались включенными в течение примерно 5-7 секунд после нажатия кнопки. Мы также пропустили это через делитель часов.

сущность clk_div2 - это порт (clk: in std_logic; sclk: out std_logic); конец clk_div2;

архитектура my_clk_div из clk_div2

константа max_count: integer: = (300000000); сигнал tmp_clk: std_logic: = '0'; begin my_div: process (clk, tmp_clk) переменная div_cnt: integer: = 0; начать, если (возрастающий_ край (clk)), то если (div_cnt = MAX_COUNT), то tmp_clk <= not tmp_clk; div_cnt: = 0; иначе div_cnt: = div_cnt + 1; конец, если; конец, если; sclk <= tmp_clk; завершить процесс my_div; end my_clk_div;

Наш последний компонент на этой диаграмме - это исходный файл VHDL, содержащий условия для выходных данных, основанные на конфигурации входных сигналов.

Шаг 3: D Вьетнамки

D Вьетнамки
D Вьетнамки

Четыре триггера, прикрепленные к входным сигналам, необходимы для функциональности нашей системы. Как было сказано ранее, с чувствительными датчиками движения и кнопкой отмены триггеры используют защелки, чтобы выводить наш входной сигнал только по нарастающему фронту тактовой частоты. Эта последовательная логика означает, что наши уличные фонари могут оставаться включенными в течение определенного периода времени после срабатывания быстрого движения. Кодирование D-триггера довольно простое:

beginprocess (CLK) начало, если восходящий_ край (CLK), то Q <= D; конец, если; завершить процесс;

Все это можно скомпилировать в один оператор if. Получив этот фрагмент, мы создали структурный исходный файл VHDL, содержащий все четыре наших необходимых триггера:

begin 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: условные выражения

Чтобы сделать наш код компактным и эффективным, мы написали все наши условные выражения в одном операторе case. Для нашей уменьшенной модели у нас было 16 возможных конфигураций выхода светодиодов, поскольку каждый датчик движения отвечает за группу из 4 светодиодов.:

случай 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_proty_property] [get_ports {LED_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 18 PACKAGE_PIN 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 [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 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]}] set_property IOSTANDARD LVCMOS33 [get_ports] {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]}] LED 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_property] set_ports {MS_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]}]

Шаг 6: основной исходный файл

В этом основном файле мы объединяем все исходные файлы компонентов, упомянутые ранее. Этот файл функционирует как структурный код, объединяющий разрозненные компоненты.

сущность Master_Final_Project - это порт (BTN: в STD_LOGIC; CLK: в STD_LOGIC; MS: в STD_LOGIC_VECTOR (от 3 до 0); светодиод: из STD_LOGIC_VECTOR (от 15 до 0)); конец Master_Final_Project;

архитектура Поведение Master_Final_Project

компонент 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. Доска Basys 3 (1)

2. Дешевые датчики движения, которые можно найти на Amazon здесь. (4)

3. От мужчины к женщине (4)

Сборка:

1. Подключите 4 штыревых вывода к портам 1–4 JB разъема PMod (см. Рисунок).

2. Подсоедините концы с внутренней резьбой к выходным контактам каждого датчика движения.

Шаг 8: загрузка программы

Теперь мы готовы загрузить исходный мастер-файл VHDL на плату Basys 3. Убедитесь, что вы выполнили синтез, реализацию и сгенерировали проверку битового потока на предмет возможных ошибок. Если все прошло успешно, откройте диспетчер оборудования и запрограммируйте устройство Basys 3. Ваш проект готов!

Рекомендуемые: