Оглавление:
- Шаг 1. Системный черный ящик
- Шаг 2: Компоненты
- Шаг 3: D Вьетнамки
- Шаг 4: условные выражения
- Шаг 5: ограничения
- Шаг 6: основной исходный файл
- Шаг 7: Сборка
- Шаг 8: загрузка программы
Видео: Энергосберегающие уличные фонари, активируемые движением: 8 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Наша цель в этом проекте состояла в том, чтобы создать что-то, что сэкономило бы энергию и финансовые ресурсы сообществ. Уличные фонари, активируемые движением, будут делать и то, и другое. По всей стране энергия тратится на то, чтобы уличные фонари освещали пустующие улицы. Наша система уличного освещения гарантирует, что свет включается только тогда, когда это необходимо, экономя общинам бесчисленные доллары. Используя датчики движения, система включает свет только при наличии автомобилей. Также для безопасности пешеходов мы реализовали кнопку блокировки, которая включает все фонари на улице. Следующие шаги проведут вас через то, как мы спроектировали и построили нашу уменьшенную модель проекта с использованием 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-триггера довольно простое:
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. Ваш проект готов!
Рекомендуемые:
Крылья для косплея, активируемые движением, с использованием Circuit Playground Express - Часть 1: 7 шагов (с изображениями)
Активированные движением крылья для косплея с использованием Circuit Playground Express - Часть 1: Это первая часть проекта, состоящего из двух частей, в котором я собираюсь показать вам свой процесс создания пары автоматизированных крыльев феи. механика крыльев, а вторая часть - сделать его носимым и добавить крылья
Автоматические уличные фонари с использованием ультразвукового датчика: 3 шага
Автоматические уличные фонари с использованием ультразвукового датчика: Вы когда-нибудь задумывались о том, как уличные фонари автоматически включаются ночью и автоматически выключаются утром? Кто-нибудь приходит, чтобы ВКЛЮЧАТЬ / ВЫКЛЮЧАТЬ эти огни? Есть несколько способов включить уличные фонари, но следующие c
Простые и модульные носимые фонари !: 5 шагов (с изображениями)
Простые и модульные носимые фонари! Создайте сказочные, футуристические и регулируемые носимые фонари с помощью всего лишь нескольких недорогих (и готовых к поставке) деталей! Прикрепляйте ко всем видам экипировки и меняйте цвета в соответствии с нарядами / чувствами / праздниками / всем остальным! Сложность: новичок + (solderi
Интересные светодиодные фонари с эффектом погони за любовью и сердцем: 8 шагов (с изображениями)
DIY Интересные светодиодные фонари с эффектом погони за любовным сердцем: в этой структуре рассказывается, как сделать удивительные светодиодные фонари с эффектом волшебной погони для вашего любовника, отца, матери, одноклассников и хороших друзей. Это довольно легко построить, если у вас есть терпение. Я рекомендую иметь некоторый опыт пайки, если вы собираете
Светодиодные фонари: 8 шагов (с изображениями)
Светодиодные фонари для столба: Изначально мой двор был заполнен кустами можжевельника и скалами. После того, как человек пришел и все вырвал, у меня осталась грязь и шанс зажечь мой двор. В моем новом переднем дворе есть 6 кирпичных столбов, которые требовали немного шика, но не слишком много. Я только