Урок 4: Светофор

1. Зачем нужен эксперимент?

В предыдущем уроке мы мигали одним светодиодом. Теперь усложним задачу и смоделируем классический дорожный светофор — красный → жёлтый → зелёный и обратно. Эксперимент показывает, как управлять несколькими выходами Arduino и как воспроизводить временную последовательность с помощью delay().

2. Оборудование

Кол-во

Деталь

1

Плата Arduino UNO

1

USB-кабель A-B

1

LED 5 мм (красный)

1

LED 5 мм (жёлтый)

1

LED 5 мм (зелёный)

3

Резистор 220 Ω

1

Макетная плата (breadboard)

4

Перемычки «папа–папа»

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

Подключение светофора к Arduino UNO
  • Красный LED — пин 10 через резистор 220 Ω.

  • Жёлтый LED — пин 7 через резистор 220 Ω.

  • Зелёный LED — пин 4 через резистор 220 Ω.

  • Общие катоды всех светодиодов → GND.

4. Скетч

traffic_light.ino
 //Traffic light
 int redled = 10; // инициализация цифрового контакта 10.
 int yellowled = 7; // инициализация цифрового контакта 7.
 int greenled = 4; // инициализация цифрового контакта 4.
 void setup() {
 pinMode(redled, OUTPUT); // установка контакта с красным светодиодом как "выход"
 pinMode(yellowled, OUTPUT); // установка контакта с жёлтым светодиодом как "выход"
 pinMode(greenled, OUTPUT); // установка контакта с синим светодиодом как "выход"
 }
 void loop() {
 digitalWrite(greenled, HIGH); // включение синего светодиода
 delay(5000); // ожидание 5 секунд
 digitalWrite(greenled, LOW); // выключение синего светодиода

 //    for (int i = 0; i < 3; i++){ // мигание 3 раза
 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, HIGH); // включение жёлтого светодиода
 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, LOW); // выключение жёлтого светодиода
 //  }

 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, HIGH); // включение жёлтого светодиода
 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, LOW); // выключение жёлтого светодиода

 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, HIGH); // включение жёлтого светодиода
 delay(500); // ожидание 0.5 секунды
 digitalWrite(yellowled, LOW); // выключение жёлтого светодиода


 delay(500); // ожидание 0.5 секунды
 digitalWrite(redled, HIGH); // включение красного светодиода
 delay(5000); // ожидание 5 секунд
 digitalWrite(redled, LOW); // выключение красного светодиода
 }

Как работает код

  • Красный, жёлтый и зелёный светодиоды подключены к пинам 10, 7 и 4.

  • digitalWrite() включает и выключает соответствующий светодиод.

  • Зелёный горит 5 с, затем жёлтый мигает три раза по 0,5 с, после чего загорается красный на 5 с — цикл повторяется.

  • Все паузы реализованы простой функцией delay(), что делает код максимально наглядным.

5. Пошаговый запуск

  1. Соберите схему согласно рисунку.

  2. Подключите Arduino к ПК, откройте Arduino IDE.

  3. Скопируйте скетч, выберите плату Arduino UNO и правильный COM-порт.

  4. Нажмите Upload. Светофор начнёт работать: зелёный → жёлтый мигает 3× → красный.

6. Что может пойти не так

Симптом

Причина

Решение

Лампочка не горит

Перепутан анод/катод, нет резистора

Проверьте подключение, замените LED

Светофор работает, но цвета «перепутаны»

Провода подключены к другим пинам

Исправьте пины в коде или распиновку

7. Идеи для продолжения

  • Используйте функцию millis() вместо delay() — светофор будет работать, пока Arduino выполняет другой код.