Светофор на Arduino с двумя направлениями (обучение работе с Proteus)
Данная статья написана специально для обучения работе с симулятором Proteus и предназначена для пошагового освоения принципов управления цифровыми выходами Arduino. В качестве примера рассматривается модель двунаправленного светофора, реализованная на светодиодах, которые имитируют работу реального дорожного светофора.
Проект отлично подходит для начинающих, так как не требует сложных датчиков или интерфейсов, но при этом демонстрирует:
- работу с цифровыми пинами Arduino;
- использование функций для структурирования кода;
- реализацию логики состояний;
- запуск и тестирование проекта в Proteus.
Назначение проекта
Цель проекта — смоделировать работу светофорной системы для автомобилей и пешеходов. Один комплект сигналов управляет движением транспорта, второй — разрешает или запрещает переход для пешеходов.
В каждый момент времени соблюдается следующая логика:
- когда автомобилям разрешено движение (зелёный сигнал), пешеходам горит красный;
- когда пешеходам разрешён переход (зелёный сигнал), транспорт останавливается на красный;
- жёлтый сигнал используется как предупреждающий этап перед сменой состояний.
Подобная схема применяется в реальных светофорных контроллерах на пешеходных переходах и регулируемых участках дорог. В данном проекте логика реализована в упрощённом виде и предназначена для обучения работе с Arduino и симулятором Proteus.
Необходимые компоненты
- Arduino UNO;
- 6 светодиодов (красный, жёлтый, зелёный × 2);
- 6 резисторов 220–330 Ом;
- Proteus 8 или 9 с установленной Arduino-библиотекой.
Назначение пинов
Каждый светофор состоит из трёх светодиодов:
- Первый светофор:
- Красный — пин 13;
- Жёлтый — пин 12;
- Зелёный — пин 11.
- Второй светофор:
- Красный — пин 10;
- Жёлтый — пин 9;
- Зелёный — пин 8.
Принцип работы программы
В функции setup() все используемые пины настраиваются как выходы. После этого все светодиоды принудительно выключаются, чтобы исключить случайные состояния при старте.
Основная логика вынесена в отдельную функцию Traffic_Signals(), которая поочерёдно:
- включает красный сигнал одного направления и зелёный другого;
- включает оба жёлтых сигнала перед переключением;
- меняет направления движения;
- повторяет цикл бесконечно.
Использование отдельной функции делает код более читаемым и упрощает дальнейшее расширение проекта, например добавление кнопок, таймеров или датчиков.
Arduino-скетч
// Первый светофор
#define red1 13
#define green1 11
#define yellow1 12
// Второй светофор
#define red2 10
#define green2 8
#define yellow2 9
void setup() {
pinMode(red1, OUTPUT);
pinMode(yellow1, OUTPUT);
pinMode(green1, OUTPUT);
pinMode(red2, OUTPUT);
pinMode(yellow2, OUTPUT);
pinMode(green2, OUTPUT);
// Выключаем все сигналы при старте
digitalWrite(red1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(green2, LOW);
}
void loop() {
// Вызов функции управления светофором
Traffic_Signals();
}
// Функция управления сигналами светофора
void Traffic_Signals()
{
// Красный для первого, зелёный для второго направления
digitalWrite(yellow1, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red1, HIGH);
digitalWrite(red2, LOW);
digitalWrite(green1, LOW);
digitalWrite(green2, HIGH);
delay(3000);
// Жёлтый сигнал перед переключением
digitalWrite(yellow1, HIGH);
digitalWrite(yellow2, HIGH);
digitalWrite(red1, LOW);
digitalWrite(red2, LOW);
digitalWrite(green1, LOW);
digitalWrite(green2, LOW);
delay(1000);
// Красный для второго, зелёный для первого направления
digitalWrite(yellow1, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red1, LOW);
digitalWrite(red2, HIGH);
digitalWrite(green1, HIGH);
digitalWrite(green2, LOW);
delay(3000);
// Жёлтый сигнал перед повторным переключением
digitalWrite(yellow1, HIGH);
digitalWrite(yellow2, HIGH);
digitalWrite(red1, LOW);
digitalWrite(red2, LOW);
digitalWrite(green1, LOW);
digitalWrite(green2, LOW);
delay(1000);
}
Запуск проекта в Proteus
Для запуска симуляции:
- откройте файл проекта .pdsprj в Proteus;
- убедитесь, что в свойствах Arduino указан путь к файлу .hex;
- нажмите кнопку Run Simulation;
- наблюдайте поочерёдное переключение светодиодов.
Важно: подключение реальной платы Arduino не требуется — весь проект полностью работает в симуляции.
Если что-то не работает
Если у вас возникают сложности с запуском проекта или вы не уверены в базовых шагах, рекомендуется сначала пройти вводный урок.
Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода