1. Назначение кода

const int RED_CAR = 13;
const int ORANGE_CAR = 12;
const int GREEN_CAR = 11;
const int RED_PEOPLE = 7;
const int GREEN_PEOPLE = 5;
const int ORANGE_PEOPLE = 3;

void setup() {
  pinMode(RED_CAR, OUTPUT);
  pinMode(ORANGE_CAR, OUTPUT);
  pinMode(GREEN_CAR, OUTPUT);
  pinMode(RED_PEOPLE, OUTPUT);
  pinMode(GREEN_PEOPLE, OUTPUT);
  pinMode(ORANGE_PEOPLE, OUTPUT);
  
}

void loop() {

  // Начальное состояние
  digitalWrite(GREEN_CAR, HIGH);
  digitalWrite(RED_PEOPLE, HIGH);
  // Выключаем все остальные
  digitalWrite(ORANGE_CAR, LOW);
  digitalWrite(RED_CAR, LOW);
  digitalWrite(GREEN_PEOPLE, LOW);
  digitalWrite(ORANGE_PEOPLE, LOW);

 

  digitalWrite(RED_CAR, LOW);
  digitalWrite(ORANGE_CAR, LOW);
  digitalWrite(GREEN_CAR, LOW);
  digitalWrite(RED_PEOPLE, LOW);
  digitalWrite(GREEN_PEOPLE, LOW);
  digitalWrite(ORANGE_PEOPLE, LOW);


  // Машинам зеленый, пешеходам красный (5 сек)
  digitalWrite(GREEN_CAR, HIGH);
  digitalWrite(RED_PEOPLE, HIGH);
  delay(5000);
  
  // Машинам желтый
  digitalWrite(GREEN_CAR, LOW);
  digitalWrite(ORANGE_CAR, HIGH);
  delay(1000);
  
  // Машинам красный, пешеходам зеленый (5 сек)
  digitalWrite(ORANGE_CAR, LOW);
  digitalWrite(RED_CAR, HIGH);
  digitalWrite(RED_PEOPLE, LOW);
  digitalWrite(GREEN_PEOPLE, HIGH);
  delay(5000);
  
  // Мигание зеленым для пешеходов (3 сек)
  for(int i = 0; i < 3; i++) {
    digitalWrite(GREEN_PEOPLE, LOW);
    delay(500);
    digitalWrite(GREEN_PEOPLE, HIGH);
    delay(500);
  }
  
  // Все красные (1 сек)
  digitalWrite(GREEN_PEOPLE, LOW);
  digitalWrite(RED_PEOPLE, HIGH);
  delay(1000);
  
  // Машинам желтый (0.7 сек)
  digitalWrite(RED_CAR, LOW);
  digitalWrite(ORANGE_CAR, HIGH);
  delay(700);
  digitalWrite(ORANGE_CAR, LOW);


// Ночной режим
  // Мигаем желтыми
  digitalWrite(ORANGE_CAR, HIGH);
  digitalWrite(ORANGE_PEOPLE, HIGH);
  delay(500);
  digitalWrite(ORANGE_CAR, LOW);
  digitalWrite(ORANGE_PEOPLE, LOW);
  delay(500);
}

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

Программа управляет шестью светодиодами:

  • 3 светодиода для пешеходов (красный, зеленый, желтый)
  • 3 светодиода для автомобилей (красный, желтый, зеленый)

2. Подключение компонентов

Каждому светодиоду соответствует определенный цифровой пин на Arduino:

Пин ArduinoЦветНазначение
13КрасныйДля машин (STOP)
12ЖелтыйДля машин (Внимание)
11ЗеленыйДля машин (GO)
7КрасныйДля пешеходов (STOP)
5ЗеленыйДля пешеходов (GO)
3ЖелтыйДля пешеходов (ночной режим)

Выбор этих конкретных пинов обусловлен:

  • Удобством физического подключения
  • Достаточным количеством цифровых выходов
  • Отсутствием конфликтов с другими функциями Arduino

Схема подключения

  1. Каждый светодиод подключен через резистор 220 Ом.
  2. Анод (+) светодиода → цифровой пин Arduino.
  3. Катод (-) → GND.

3. Логика работы светофор

Код реализует последовательность фаз:

Функция setup() – инициализация

В функции setup() все используемые пины настраиваются как выходы:

void setup() {
  pinMode(RED_CAR, OUTPUT);        // Настройка пина красного автомобильного сигнала
  pinMode(ORANGE_CAR, OUTPUT);     // Настройка пина желтого автомобильного сигнала
  pinMode(GREEN_CAR, OUTPUT);      // Настройка пина зеленого автомобильного сигнала
  pinMode(RED_PEOPLE, OUTPUT);     // Настройка пина красного пешеходного сигнала
  pinMode(GREEN_PEOPLE, OUTPUT);   // Настройка пина зеленого пешеходного сигнала
  pinMode(ORANGE_PEOPLE, OUTPUT);  // Настройка пина желтого пешеходного сигнала
}

Важные замечания:

  1. Все пины настроены как OUTPUT, так как они управляют светодиодами
  2. Порядок инициализации не имеет значения для работы программы
  3. Внутри setup() отсутствует Serial.begin(), так как в данной программе не используется мониторинг порта

Основной цикл программы (loop())

Начальное состояние

Перед началом основного цикла программа устанавливает начальное состояние:

// Включаем зеленый для машин и красный для пешеходов
digitalWrite(GREEN_CAR, HIGH);
digitalWrite(RED_PEOPLE, HIGH);

// Гасим все остальные светодиоды
digitalWrite(ORANGE_CAR, LOW);
digitalWrite(RED_CAR, LOW);
digitalWrite(GREEN_PEOPLE, LOW);
digitalWrite(ORANGE_PEOPLE, LOW);

Затем следует избыточный участок кода, где все светодиоды выключаются:

digitalWrite(RED_CAR, LOW);
digitalWrite(ORANGE_CAR, LOW);
digitalWrite(GREEN_CAR, LOW);
digitalWrite(RED_PEOPLE, LOW);
digitalWrite(GREEN_PEOPLE, LOW);
digitalWrite(ORANGE_PEOPLE, LOW);

Примечание: этот участок можно удалить, так как он дублирует предыдущие команды выключения

Основной цикл светофора

Фаза 1: Зеленый для машин, красный для пешеходов (5 сек)

digitalWrite(GREEN_CAR, HIGH);
digitalWrite(RED_PEOPLE, HIGH);
delay(5000);  // Задержка 5 секунд

Логика:

  • Автомобили могут двигаться
  • Пешеходам движение запрещено
  • Длительность фазы – 5 секунд

Фаза 2: Желтый для машин (1 сек)

digitalWrite(GREEN_CAR, LOW);     // Выключаем зеленый
digitalWrite(ORANGE_CAR, HIGH);   // Включаем желтый
delay(1000);  // Задержка 1 секунда

Логика:

  • Подготовка к смене режима
  • Предупреждение водителям о скором включении красного
  • Длительность – 1 секунда

Фаза 3: Красный для машин, зеленый для пешеходов (5 сек)

digitalWrite(ORANGE_CAR, LOW);    // Выключаем желтый
digitalWrite(RED_CAR, HIGH);      // Включаем красный для машин
digitalWrite(RED_PEOPLE, LOW);    // Выключаем красный для пешеходов
digitalWrite(GREEN_PEOPLE, HIGH); // Включаем зеленый для пешеходов
delay(5000);  // Задержка 5 секунд

Логика:

  • Автомобили стоят
  • Пешеходы могут переходить дорогу
  • Длительность – 5 секунд

Фаза 4: Мигающий зеленый для пешеходов (3 сек)

for(int i = 0; i < 3; i++) {
  digitalWrite(GREEN_PEOPLE, LOW);
  delay(500);
  digitalWrite(GREEN_PEOPLE, HIGH);
  delay(500);
}

Логика:

  • Предупреждение пешеходам о скором включении красного
  • Мигание с частотой 1 Гц (включение/выключение каждые 500 мс)
  • Общая длительность – 3 секунды (3 цикла)

Фаза 5: Все красные (1 сек)

digitalWrite(GREEN_PEOPLE, LOW);  // Выключаем зеленый пешеходный
digitalWrite(RED_PEOPLE, HIGH);   // Включаем красный пешеходный
delay(1000);  // Задержка 1 секунда

Логика:

  • Переходное состояние для безопасности
  • Гарантированная остановка всех участников движения
  • Длительность – 1 секунда

Фаза 6: Желтый для машин (0.7 сек)

digitalWrite(RED_CAR, LOW);       // Выключаем красный автомобильный
digitalWrite(ORANGE_CAR, HIGH);   // Включаем желтый автомобильный
delay(700);  // Задержка 0.7 секунды
digitalWrite(ORANGE_CAR, LOW);    // Выключаем желтый

Логика:

  • Подготовка к возобновлению движения автомобилей
  • Короткая фаза – 0.7 секунды
  • После этого цикл повторяется с начала

Ночной режим

После завершения одного полного цикла программа переходит в ночной режим:

digitalWrite(ORANGE_CAR, HIGH);      // Включаем желтый для машин
digitalWrite(ORANGE_PEOPLE, HIGH);   // Включаем желтый для пешеходов
delay(500);                         // Задержка 0.5 секунды
digitalWrite(ORANGE_CAR, LOW);      // Выключаем желтый для машин
digitalWrite(ORANGE_PEOPLE, LOW);   // Выключаем желтый для пешеходов
delay(500);                         // Задержка 0.5 секунды

Логика:

  • Мигание желтыми сигналами с частотой 1 Гц
  • Оповещение о необходимости повышенного внимания
  • Режим продолжается бесконечно

4. Возможные улучшения

  1. Добавление кнопки для пешеходов (включение зеленого по запросу).
  2. Режим аварийной сигнализации (мигание всеми красными).
  3. Подключение LCD-дисплея для отображения оставшегося времени.
  4. Использование таймеров (millis()) вместо delay() для неблокирующей работы.

5. Ссылка на видео и вывод

Ссылка на видео

Данная программа представляет собой классическую реализацию алгоритма работы светофора с:

  • Последовательным переключением сигналов
  • Контролем как автомобильного, так и пешеходного движения
  • Переходом в ночной режим

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

Для физической реализации потребуется:

  • Плата Arduino (Uno, Nano или аналоги)
  • 6 светодиодов (2 красных, 2 желтых, 2 зеленых)
  • Резисторы для ограничения тока (обычно 220-330 Ом)
  • Монтажная плата и соединительные провода