Ülesanne 1 Valgusfoor

В этом задании нужно написать программу для Arduino, которая будет управлять двумя светофорами — одним для автомобилей, другим для пешеходов. У светофора есть два режима: дневной и ночной.

1️⃣ Сначала я всё делаю в Tinkercad, чтобы проверить, как это работает:

🚦 Автомобильный светофор:

  • Красный (вверху) — подключён к пину 13.
  • Жёлтый — к пину 12.
  • Зелёный — к пину 11.

🤸‍♀️ Пешеходный светофор:

  • Красный — к пину 10.
  • Зелёный (внизу) — к пину 9.

Все минусы (короткие ножки) светодиодов соединяются с GND (земля) на Arduino. Оттуда идёт чёрный провод.
Плюсы (длинные ножки) идут через резистор к соответствующим пинам.

💡 Рядом с каждым светодиодом — резистор и провод к пину Arduino.
Резисторы — ограничивают ток, чтобы светодиоды не сгорели.

Пишу код, чтоб светофор работал по логике настоящего:

// Машина константы
int redCar = 13;
int yellowCar = 12;
int greenCar = 11;

// Пешеход константы
int redPer = 10;
int greenPer = 9;

// Вкл дневой режим
bool dayMode = true; 

void setup() {
  pinMode(redCar, OUTPUT);
  pinMode(yellowCar, OUTPUT);
  pinMode(greenCar, OUTPUT);
  pinMode(redPer, OUTPUT);
  pinMode(greenPer, OUTPUT);
}

// Мигание 3 раза
void blink(int pin) {
  for (int i = 0; i < 3; i++) {
    digitalWrite(pin, LOW);
    delay(500);
    digitalWrite(pin, HIGH);
    delay(500);
  }
}

void loop() {
  if (dayMode) {
  // Машинам КРАСНЫЙ, Пешеходам ЗЕЛЁНЫЙ
  digitalWrite(redCar, HIGH);
  digitalWrite(yellowCar, LOW);
  digitalWrite(greenCar, LOW);

  digitalWrite(redPer, LOW);
  digitalWrite(greenPer, HIGH);
  delay(5000);

  // Машинам ЖЁЛТЫЙ, Пешеходам мигает ЗЕЛЁНЫЙ
  digitalWrite(redCar, LOW); 
  digitalWrite(yellowCar, HIGH);
  blink(greenPer);  // Пешеходный зелёный мигает
  digitalWrite(greenPer, LOW);
  digitalWrite(redPer, HIGH);  // Пешеходам красный
    
  // Машинам ЗЕЛЁНЫЙ, Пешеходам КРАСНЫЙ
  digitalWrite(redCar, LOW);
  digitalWrite(yellowCar, LOW);
  digitalWrite(greenCar, HIGH);
  delay(5000);

  // Машинам мигает ЗЕЛЁНЫЙ, Пешеходам всё ещё КРАСНЫЙ
  blink(greenCar);  // Машинный зелёный мигает
  digitalWrite(greenCar, LOW);
  digitalWrite(redCar, HIGH); // Машинам снова красный

    // Переключаем на ночной режим
dayMode = false;
  }else {
    // Ночной режим

    // Все пешеходные огни выключены
    digitalWrite(redPer, LOW);
    digitalWrite(greenPer, LOW);

    // Красный и зелёный для машин выключены
    digitalWrite(redCar, LOW);
    digitalWrite(greenCar, LOW);

    // Мигающий жёлтый для машин
    for (int i = 0; i < 10; i++) { // 10 миганий (10 секунд)
      digitalWrite(yellowCar, HIGH);
      delay(500);
      digitalWrite(yellowCar, LOW);
      delay(500);
    }

    // Вернуться в дневной режим
    dayMode = true;
  }
}

☀️ Дневной режим:

  • Машинам горит красный, пешеходам — зелёный (можно идти).
  • Красный для машин мигает 3 раза — предупреждение.
  • Пешеходам — красный, машинам — зелёный.
  • Зелёный для машин мигает 3 раза — тоже предупреждение.
  • Потом включается жёлтый для машин.
  • Жёлтый мигает 3 раза.
  • Снова машинам — красный, пешеходам — зелёный.
  • Зелёный у пешеходов мигает 3 раза.
  • В конце пешеходам включается красный.

После этого программа автоматически переходит в ночной режим.

🌙 Ночной режим:

  • У пешеходов — всё выключено.
  • У машин выключены красный и зелёный.
  • Жёлтый свет у машин мигает 10 раз (примерно 10 секунд).

После этого снова запускается дневной режим, и всё повторяется по кругу.

💡 Функция мигания

В коде есть отдельная функция blink(pin), которая просто мигает выбранным светодиодом 3 раза с паузой в 500 миллисекунд.

2️⃣ Копирую код в Arduino IDE и загружаю его на настоящую плату, чтобы увидеть, как работает светофор в реальности.

Для реализации светофора я использую плату Arduino UNO и 5 светодиодов (LED), которые подключаются к цифровым пинам. Все светодиоды соединены через резисторы (220 Ом), чтобы не сжечь диоды. Запускаем программу и наблюдаем работу светофора.

Демонстрация работы на 🔗 Видео (click)


🔚 Заключение:

В этом задании мы научились делать светофор с помощью Arduino. Сначала собрали схему и проверили её в Tinkercad, потом загрузили код на настоящую плату и убедились, что всё работает правильно.

Теперь я понимаю, как можно управлять светодиодами через программу, как работает мигание и переключение режимов. Было интересно видеть, как всё это работает вживую — почти как настоящий светофор.

Такое задание помогает лучше разобраться в программировании и электронике, и это может пригодиться в будущем, например, если делать автоматические системы или что-то для «умного города».