Оглавление:

Датчик движения / счетчик контролируемых огней: 7 шагов
Датчик движения / счетчик контролируемых огней: 7 шагов

Видео: Датчик движения / счетчик контролируемых огней: 7 шагов

Видео: Датчик движения / счетчик контролируемых огней: 7 шагов
Видео: Урок 7. Подключение датчика HC-SR501 к Arduino 2024, Июль
Anonim
Датчик движения / контрольные огни
Датчик движения / контрольные огни

Этот проект был создан как заключительный проект для курса цифрового дизайна в Калифорнийском Поли, Сан-Луис-Обиспо (CPE 133).

Почему мы это делаем? Мы хотим помочь сохранить природные ресурсы в мире. Наш проект ориентирован на экономию электроэнергии. За счет большей экономии электроэнергии мы сможем сохранить природные ресурсы, которые используются для производства электроэнергии. В начале 2018 года природные ресурсы потребляются невероятными темпами. Мы хотим осознавать свое влияние на окружающую среду и играть свою роль в сохранении природных ресурсов. Электроника может быть реализована различными способами для экономии энергии, что помогает окружающей среде, а также нашему экономическому состоянию. * Эта модель была создана с использованием доступных нам компонентов.

Что было нашим вдохновением? Люди часто забывают выключить праздничный свет и тратят энергию, оставляя его включенным на ночь. На самом деле, этот проект позволит сэкономить электроэнергию, потому что «праздничные огни» будут гореть только тогда, когда рядом находятся люди, таким образом экономя энергию, когда никого нет рядом. Более того, мы хотели разработать таймер, чтобы свет полностью выключался через заданное время, чтобы гарантировать, что они не включаются, например, из-за движения, обнаруженного в 3 часа ночи.

Как вы могли бы использовать этот дизайн? Этот дизайн может быть реализован для всех типов источников света, будь то декоративные, практичные или и то, и другое. Например, если вы хотите, чтобы настольный светильник работал только 6 часов за раз. Вам нужно будет установить счетчик на 21 600 секунд (6 часов x 3, 600 секунд / час). Пока счетчик активно увеличивается, датчик движения будет управлять светом. Таким образом, каждый раз, когда он выключается в течение этого промежутка времени, вам просто нужно помахать рукой перед датчиком движения, и он снова включится. Если вы заснете за своим столом и проснетесь через 7 часов, ваше движение не включит его.

Шаг 1. Требуемое программное и аппаратное обеспечение

Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение
Требуемое программное и аппаратное обеспечение

Программное обеспечение:

  • Vivado 2016.2 (или более свежую версию) можно найти здесь
  • Arduino IDE 1.8.3 (или более позднюю версию) можно найти здесь

Аппаратное обеспечение:

  • 1 доска Basys 3
  • 1 Arduino Uno
  • 2 макета
  • 1 ультразвуковой датчик дальности HC-SR04
  • 9 проводов типа папа-папа
  • 1 светодиод
  • 1 резистор 100 Ом

Шаг 2: коды (Vivado)

Коды (Вивадо)
Коды (Вивадо)

Конечный автомат (см. Диаграмму состояний выше):

Светодиод требовал конечного автомата. Светодиод может быть включен и выключен только в двух состояниях. Только два входа контролируют состояние светодиода, счетчика и датчика. Светодиод должен гореть только тогда, когда датчик обнаруживает движение и когда счетчик ведет отсчет от нуля до тридцати секунд. В любом другом случае светодиод не горит.

Имя файла: LEDDES

Прилавок:

Счетчик позволяет ограничить время, в течение которого датчик движения может активировать светодиод. Его значение отображается на семисегментном дисплее Basys 3 Board в исходном коде («sseg_dec»). Когда переключатель сброса находится в нижнем положении (значение: «0»), счетчик начинает увеличиваться каждую секунду с 0 до 30. Когда он достигает 30, он останавливается на этом числе. Он не будет перезапускаться с 0 до тех пор, пока переключатель сброса не будет переведен в положение «1» и обратно в положение «1». Если сброс становится равным «1» во время работы счетчика, счетчик замерзнет на достигнутом значении. Когда Reset возвращается к «0», счетчик перезапускается с 0 до 30. Эта реализация также требует использования тактового сигнала, его код представлен ниже («clk_div2»).

Имя файла: FinalCounter

ПРЕДОСТАВЛЯЕМЫЕ ФАЙЛЫ:

Семисегментный дисплей:

Этот код позволяет семисегментному дисплею отображать десятичные значения. Один подмодуль действует как декодер между 8-битным двоичным входом и 4-битным двоично-десятичным кодированием. Другой разделяет тактовый сигнал, чтобы обновлять его значение с определенной скоростью.

Имя файла: sseg_dec

Сигнал часов:

Этот код позволяет счетчику увеличиваться с шагом в 1 секунду. Он делит входную тактовую частоту на более медленную. Мы адаптировали период в 1 секунду, изменив константу max_count: integer: = (3000000) на «постоянную max_count: integer: = (50000000)».

Имя файла: clk_div2

Предоставленные файлы: sseg_dec, clk_div2 * Эти исходные файлы были предоставлены профессором Брайаном Мили.

Шаг 3. Понимание того, как они объединяются (схемы компонентов VHDL)

Понимание того, как они объединяются (схемы компонентов VHDL)
Понимание того, как они объединяются (схемы компонентов VHDL)

Главный файл («MainProjectDES») содержит все подфайлы, о которых говорилось ранее. Они связаны указанным выше способом. Различные компоненты соединяются между собой с помощью карт портов для передачи сигнала от одного элемента к другому.

Как вы могли заметить, FinalCounter обеспечивает 5-битный вывод, в то время как sseg_dec требует 8-битного ввода. Для компенсации мы устанавливаем сигнал, соединяющий оба компонента, так, чтобы он начинался с «000» и добавлял 5-битный вывод счетчика. Таким образом обеспечивается 8-битный ввод.

Ограничения:

Чтобы запустить эти коды на плате Basys 3 Board, требовался файл ограничений, сообщающий каждому сигналу, куда идти и как соединяются части.

Шаг 4: Код (Arduino)

Мы запрограммировали Arduino Uno на использование датчика движения для обнаружения движения и выдачи выходного сигнала, который сигнализирует о загорании светодиода. Кроме того, использование датчика для обнаружения движения требует беговых петель, которые постоянно отслеживают изменение расстояния. По сути, ему нужен таймер, который работает одновременно, чтобы выдавать «высокий» сигнал, чтобы светодиод загорелся, в то время как таймер необходимо сбрасывать при обнаружении нового движения, что практически невозможно реализовать на Vivado, исходя из объема знаний. класса. Более того, мы использовали Arduino, потому что было бы невозможно использовать HC-SR04 с платой Basys 3, так как плата подает только 3,3 В, в то время как датчик требует источника питания 5 В. Для реализации обнаружения движения это фактическое кодирование в отличие от CAD в VHDL.

Мы использовали встроенную функцию импульса для датчика, чтобы получить время, прошедшее между звуком, исходящим от датчика, и звуком, который отражается обратно при ударе по объекту. Затем мы используем скорость звука и временной интервал для расчета расстояния между объектом и датчиком. Исходя из этого, мы сохраняем текущее расстояние и отслеживаем его. Мы проверяем расстояние каждые 150 мс. Мы также использовали библиотеку elapsedmil для запуска внутреннего таймера внутри Arduino, чтобы отслеживать прошедшее время. Если мы обнаруживаем изменение расстояния, которое соответствует движению, таймер сбрасывается на ноль, и он будет держать свет включенным до тех пор, пока не пройдут 3 секунды. Каждый раз, когда датчик обнаруживает другое движение, таймер сбрасывается на 0, и сигнал светодиода будет «высоким» в течение следующих 3 секунд. Ниже мы прикрепили копию нашего кода Arduino.

Шаг 5: Как наши компоненты сочетаются друг с другом

Как наши компоненты сочетаются друг с другом!
Как наши компоненты сочетаются друг с другом!
Как наши компоненты сочетаются друг с другом!
Как наши компоненты сочетаются друг с другом!
Как наши компоненты сочетаются друг с другом!
Как наши компоненты сочетаются друг с другом!

Как вы можете видеть на «Basys3: Pmod Pin-out Diagram *» и фотографии платы Arduino Uno, мы выделили и пометили используемые порты.

1. Плата LED и Basys 3

Светодиод подключен последовательно с резистором 100 Ом. -Белый провод подключает резистор к выводу PWR платы Basys 3. -Желтый провод соединяет светодиод с контактом H1 платы Basys 3.

2. Датчик движения и Arduino Uno

- Оранжевый провод соединяет Vcc (питание) датчика движения с контактом 5V платы Arduino Uno. - Белый провод соединяет контакт Trig датчика движения с контактом 10 платы Arduino Uno. - Желтый провод соединяет контакт Echo of датчик движения к контакту 9 платы Arduino Uno. - Черный провод соединяет контакт GND датчика движения с контактом GND платы Arduino Uno.

[Используемые нами провода были слишком короткими, чтобы добраться до компонентов, поэтому они были соединены между собой]

3. Плата Basys 3 и Arduino Uno

Желтый провод соединяет контакт A14 платы Basys 3 с контактом 6 платы Arduino Uno.

* Эта диаграмма была взята из «Справочного руководства по плате Basys 3 ™ FPGA» компании Digilent, которое можно найти здесь.

Шаг 6: демонстрация

Шаг 7: время проверить это

Поздравляю! Вы подошли к концу нашего проекта освещения с датчиком движения и счетчиком! Большое спасибо за то, что прочитали наш пост с инструкциями. Пришло время попробовать построить этот проект самостоятельно. Если вы будете внимательно следить за каждым шагом, у вас должен быть датчик движения и свет, управляемый счетчиком, который работает аналогично нашему! Мы желаем вам удачи в реализации этого проекта и надеемся, что он поможет сэкономить электроэнергию и природные ресурсы!

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