Все статьиHardware

Светофор на Arduino: классический проект для начинающих

БА
Бексултан Айтен
CTO, Alashed
2 июня 2025 г.
7 мин чтения
Светофор на Arduino: классический проект для начинающих

Пошаговое руководство по сборке светофора на Arduino с тремя светодиодами. Полный код с реалистичным циклом переключения, схема подключения и объяснение логики работы.

Зачем собирать светофор на Arduino

Светофор -- один из лучших первых проектов на Arduino. Каждый видел настоящий светофор и понимает принцип его работы: красный -- стой, жёлтый -- приготовься, зелёный -- иди. Собирая этот проект, ученик осваивает фундаментальные навыки: управление цифровыми выходами, работу с функцией delay(), организацию последовательной логики и подключение светодиодов через токоограничивающие резисторы.

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

Уровень сложности: начальный, подходит для 5-7 классов.

Собранный светофор на Arduino с тремя светодиодами на макетной плате
Собранный светофор на Arduino с тремя светодиодами на макетной плате

Необходимые компоненты

  • Arduino Uno -- 1 шт.
  • Красный светодиод (5 мм) -- 1 шт.
  • Жёлтый светодиод (5 мм) -- 1 шт.
  • Зелёный светодиод (5 мм) -- 1 шт.
  • Резистор 220 Ом -- 3 шт. (по одному на каждый светодиод)
  • Макетная плата (breadboard) -- 1 шт.
  • Провода-перемычки -- 6 шт.
  • USB-кабель для подключения Arduino к компьютеру

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

Каждый светодиод подключается по одинаковой схеме: длинная ножка (анод, плюс) идёт через резистор 220 Ом к цифровому пину Arduino, а короткая ножка (катод, минус) соединяется с общей шиной GND на макетной плате.

Распределение пинов:

  • Красный светодиод -- пин 9
  • Жёлтый светодиод -- пин 8
  • Зелёный светодиод -- пин 7

Все три катода подключаются проводами к шине GND макетной платы. Шина GND макетной платы соединяется с пином GND на Arduino. Резисторы 220 Ом обязательны -- без них ток через светодиод будет слишком большим, и он может перегореть.

Совет: расположите светодиоды на макетной плате вертикально -- красный сверху, жёлтый посередине, зелёный снизу. Так конструкция будет выглядеть как настоящий светофор.

Схема подключения светодиодов к Arduino для проекта светофора
Схема подключения светодиодов к Arduino для проекта светофора

Полный код проекта

```cpp

// Светофор на Arduino -- реалистичный цикл переключения

// Проект для начинающих

// Назначаем пины для каждого светодиода

const int PIN_RED = 9; // красный светодиод

const int PIN_YELLOW = 8; // жёлтый светодиод

const int PIN_GREEN = 7; // зелёный светодиод

// Длительности фаз в миллисекундах

const int TIME_RED = 15000; // красный горит 15 секунд

const int TIME_GREEN = 20000; // зелёный горит 20 секунд

const int TIME_YELLOW = 5000; // жёлтый -- 5 секунд

void setup() {

// Настраиваем все три пина как выходы

pinMode(PIN_RED, OUTPUT);

pinMode(PIN_YELLOW, OUTPUT);

pinMode(PIN_GREEN, OUTPUT);

// Выключаем все светодиоды при старте

digitalWrite(PIN_RED, LOW);

digitalWrite(PIN_YELLOW, LOW);

digitalWrite(PIN_GREEN, LOW);

}

// Функция выключения всех светодиодов

void allOff() {

digitalWrite(PIN_RED, LOW);

digitalWrite(PIN_YELLOW, LOW);

digitalWrite(PIN_GREEN, LOW);

}

// Мигание жёлтого -- имитация реального светофора

void blinkYellow() {

for (int i = 0; i < 5; i++) {

digitalWrite(PIN_YELLOW, HIGH);

delay(500); // горит полсекунды

digitalWrite(PIN_YELLOW, LOW);

delay(500); // не горит полсекунды

}

}

void loop() {

// === Фаза 1: Красный сигнал ===

allOff();

digitalWrite(PIN_RED, HIGH);

delay(TIME_RED);

// === Фаза 2: Жёлтый (мигает, переход к зелёному) ===

allOff();

blinkYellow();

// === Фаза 3: Зелёный сигнал ===

allOff();

digitalWrite(PIN_GREEN, HIGH);

delay(TIME_GREEN);

// === Фаза 4: Жёлтый (мигает, переход к красному) ===

allOff();

blinkYellow();

// Цикл повторяется автоматически

}

`

Разбор кода

Объявление пинов и констант. В начале программы мы задаём номера пинов через константы PIN_RED, PIN_YELLOW и PIN_GREEN. Использование констант вместо «голых» чисел в коде -- правило хорошего тона. Если понадобится изменить подключение, достаточно поменять одно число в начале файла, а не искать его по всему коду.

Функция `setup()`. Вызывается один раз при включении Arduino. Здесь мы настраиваем три пина в режим OUTPUT -- это означает, что Arduino будет подавать на них напряжение. Все светодиоды изначально выключены через digitalWrite(pin, LOW).

Функция `allOff()`. Вспомогательная функция, которая гасит все три светодиода. Мы вызываем её перед включением каждой новой фазы, чтобы гарантировать, что горит только нужный цвет. Без неё при переходе между фазами могли бы одновременно гореть два светодиода.

Функция `blinkYellow()`. Реализует мигание жёлтого светодиода пять раз. Каждый цикл: 500 мс горит, 500 мс не горит -- итого одно мигание занимает 1 секунду, а вся фаза длится 5 секунд. Это имитирует поведение реального светофора при переключении.

Основной цикл `loop()`. Здесь происходит последовательное переключение фаз: красный (15 с), мигающий жёлтый (5 с), зелёный (20 с), мигающий жёлтый (5 с). Функция loop() повторяется бесконечно, поэтому светофор работает циклически без остановки.

Функция `delay()`. Принимает значение в миллисекундах (1000 мс = 1 секунда). Во время выполнения delay() Arduino полностью останавливается и не выполняет никакого другого кода. Для простого светофора это вполне подходит.

Советы для занятий с учениками

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

Задание на усложнение. После базового проекта предложите добавить кнопку для пешеходного перехода: при нажатии светофор досрочно переключается на красный. Это потребует использования digitalRead() и условного оператора if.

Второй светофор. Продвинутые ученики могут добавить второй комплект из трёх светодиодов для перекрёстка. Задача -- координировать два светофора так, чтобы когда один показывает зелёный, другой был красным.

Звук для слабовидящих. Подключите пьезодинамик и добавьте звуковой сигнал во время зелёной фазы. Это расширяет проект и знакомит с функцией tone().

Как Alashed помогает

В каталоге Alashed Hardware вы найдёте готовые наборы компонентов для этого проекта -- Arduino Uno, светодиоды, резисторы, макетную плату и провода. Все детали подобраны и проверены, чтобы учитель мог сразу приступить к занятию. А в среде Alashed CodeStudio ученики могут писать и загружать код прямо из браузера, без установки Arduino IDE на школьные компьютеры.

Попробуйте Alashed бесплатно

Подключите школу к пилоту. Генерируйте КМЖ за 2 минуты, ведите CodeStudio уроки, заказывайте оборудование — всё в одном месте.

Попробовать бесплатноДемо