Умный светофор

Умный светофор

В этом посте вы узнаете, как создать контроллер светофора, работающий на основе плотности потока автомобилей с использованием Arduino. Основная идея этого проекта заключается в том, что, если датчик не видит движения с какой-либо стороны, то и разрешающего сигнала с этой стороны не будет. Система пропустит этот сигнал и перейдет к следующему.

Arduino является основной частью этого проекта, и он будет использоваться для считывания сигнала с ультразвукового датчика HC-SR04 и расчета расстояния. Это расстояние скажет нам, находится ли какое-либо транспортное средство рядом с датчиком или нет, и в соответствии с этими данными будет регулироваться поток автомобилей.

Основная задача состояла в том, чтобы избежать использования задержки, потому что мы должны постоянно считывать данные с ультразвуковых датчиков, а также одновременно мы должны контролировать сигналы, которые требуют использования функции задержки.

Таким образом, мы использовали библиотеку timerone, которая используется для периодического измерения периода времени в микросекундах, и в конце каждого периода будет вызываться функция прерывания. В этой функции мы будем читать данные с датчиков, а в функции цикла мы будем контролировать сигналы трафика.

Работа контроллера светофора на основе плотности потока автомобилей с использованием Arduino

Работа контроллера делится на три этапа

  • Если на всех направлениях присутствует трафик, то система будет работать нормально, переключая сигналы один за другим.
  • Если с какой-то стороны нет трафика, система пропустит этот сигнал и перейдет к следующему. Например, если датчик  2, 3 не регистрирует наличие авто, система пропускает транспортные средства по сигналу 1. Затем после сигнала 1 система перейдет к сигналу 4, пропуская сигналы 2 и 3.
  • Если на всех 4 сигналах отсутствует трафик, система остановится на текущем сигнале и перейдет к следующему сигналу, только если на любом другом сигнале будет трафик.

Умный светофор 1

Необходимые детали для умного светофора

Для данного проекта необходимы следующие компоненты:

  • Arduino Mega 2560
  • 4 х HC-SR04 — ультразвуковые датчики
  • 4 красных светодиода
  • 4 зеленых светодиода
  • 4 желтых светодиода
  • Резисторы 12 х 220 Ом
  • Соединительные кабели
  • макетная плата

Схема управления светофором

Четыре ультразвуковых датчика соединены с Arduino. Arduino считывает данные с этих датчиков и рассчитает расстояние. Этот датчик может измерять расстояние от 2 до 400 см.

Ультразвуковой датчик излучает ультразвуковую волну и отраженное от объекта эхо принимается датчиком. Чтобы генерировать волну, нам нужно будет установить триггер на 10 мкс, который отправит звуковой импульс с 8 циклами на частоте 40 кГц, который посылается в сторону объекта, и после отражения сигнала возникает эхо. Затем эхо скажет нам время, когда волна пришла обратно к датчику (микросекунды). Затем мы преобразуем это время в пройденное расстояние, используя формулу S = V * T.

Подробнее: Ультразвуковой датчик HC-SR04 взаимодействует с Arduino

Светодиоды подключены к Arduino через резисторы 220 Ом. Необходимо использовать резистор со светодиодом. Резистор ограничивает ток, протекающий через светодиод. Если вы не будете использовать его, светодиод сгорит. Вы можете использовать резистор от 100 Ом до 10 кОм со светодиодом. Чем больше значение сопротивления, тем меньше будет проходить ток.

Описание кода

Прежде всего, мы включили библиотеку timerone. Эта библиотека используется для повторного измерения периода времени в микросекундах, и в конце каждого периода будет вызываться функция прерывания.
Мы использовали эту библиотеку, потому что мы хотим считывать сигналы с датчиков и управлять светодиодами одновременно. Библиотека позволит нам вызывать функцию, в которой мы будем непрерывно считывать данные с датчиков, а в функции цикла мы будем управлять сигналами светофора.

В функции setup мы использовали функцию Timer1.initialize (микросекунды). Эта функция должна быть вызвана, прежде чем использовать любой из других методов библиотеки timerone. «Микросекунды» — это период времени, который занимает таймер. Здесь можно указать период таймера. Период по умолчанию составляет 1 секунду.

Timer1.attachInterrupt (softInterr) вызывает функцию каждый раз, когда заканчивается период таймера. Мы установили период таймера на 100000, поэтому наша функция будет вызываться через 100 миллисекунд.

В функции цикла проверяется, есть ли какие-либо транспортные средства под расстоянием 5 см или нет. Если будет автомобиль, то будет вызвана функция для включения разрешающего сигнала в данном направлении.

Softinterr () — это функция прерывания, которая будет вызываться через каждые 100 миллисекунд. В этой функции мы считали с ультразвуковых датчиков и рассчитали расстояние.

Код

Код Arduino для контроллера светофора на основе плотности трафика выглядит следующим образом

Отправить ответ

avatar
  Подписка  
Уведомлять, если есть