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
Схема подключения
- Каждый светодиод подключен через резистор 220 Ом.
- Анод (+) светодиода → цифровой пин Arduino.
- Катод (-) → 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); // Настройка пина желтого пешеходного сигнала
}
Важные замечания:
- Все пины настроены как OUTPUT, так как они управляют светодиодами
- Порядок инициализации не имеет значения для работы программы
- Внутри 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. Возможные улучшения
- Добавление кнопки для пешеходов (включение зеленого по запросу).
- Режим аварийной сигнализации (мигание всеми красными).
- Подключение LCD-дисплея для отображения оставшегося времени.
- Использование таймеров (
millis()
) вместоdelay()
для неблокирующей работы.
5. Ссылка на видео и вывод
Данная программа представляет собой классическую реализацию алгоритма работы светофора с:
- Последовательным переключением сигналов
- Контролем как автомобильного, так и пешеходного движения
- Переходом в ночной режим
Программа может быть использована как основа для более сложных систем управления дорожным движением или как учебный пример для изучения программирования Arduino.
Для физической реализации потребуется:
- Плата Arduino (Uno, Nano или аналоги)
- 6 светодиодов (2 красных, 2 желтых, 2 зеленых)
- Резисторы для ограничения тока (обычно 220-330 Ом)
- Монтажная плата и соединительные провода