Гирлянда-Valguskett

Задание: Valguskett (Световая гирлянда)

Цель проекта:

Создать световую гирлянду, состоящую минимум из пяти светодиодов (обычных или RGB), которая работает в пяти разных световых режимах. Переключение между режимами осуществляется с помощью потенциометра.

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


Используемые компоненты:

  • 5 или более светодиодов (обычные или RGB)
  • Резисторы (220–330 Ом, если используются обычные светодиоды)
  • Потенциометр (для выбора режима)
  • Arduino Uno
  • Макетная плата (breadboard) и соединительные провода
  • Источник питания (через USB)

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

  • Светодиоды подключены к цифровым пинам 2–10 (через резисторы).
  • Потенциометр подключён к аналоговому входу A0 (один край к GND, другой к 5V, средний контакт к A0).
  • Общий GND соединяет все компоненты.

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

Код программы:

// Массив с пинами светодиодов
int ledPins[] = {12, 8, 11, 7, 10, 6, 9, 5 };
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);
 
void setup() {
  for (int i = 0; i < arrayLength; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  randomSeed(analogRead(0)); // Для эффекта свечи
}
 
void loop() {
  int potValue = analogRead(A0);  // Считываем значение потенциометра
  int mode = map(potValue, 0, 1023, 0, 4); // Преобразуем значение в режим
  mode = constrain(mode, 0, 4);  // Убедимся, что значение в диапазоне 0-4
 
  switch (mode) {
    case 0:
      allBlink();
      break;
    case 1:
      sequenceBlink();
      break;
    case 2:
      candleEffect();
      break;
    case 3:
      runningLight();
      break;
    case 4:
      pingPong();
      break;
  }
}
 
// Режим 0: Все мигают одновременно
void allBlink() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(300);
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(300);
}
 
// Режим 1: Последовательное мигание
void sequenceBlink() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
}
 
// Режим 2: Эффект свечи
void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 10);
    if (flickerChance < 3) {
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 100));
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));
    }
  }
}
 
// Режим 3: Бегущий огонь
void runningLight() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(100);
    digitalWrite(ledPins[i], LOW);
  }
}
 
// Режим 4: Обратный бегущий свет (пинг-понг эффект)
void pingPong() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(80);
    digitalWrite(ledPins[i], LOW);
  }
  for (int i = arrayLength - 2; i > 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(80);
    digitalWrite(ledPins[i], LOW);
  }
}

Описание работы режимов:

  1. Все мигают одновременно
    Все светодиоды включаются и выключаются одновременно каждые 0.5 секунды.
  2. От края к краю
    Каждый светодиод загорается по очереди, создавая эффект волны.
  3. Эффект свечи (рандом)
    Светодиоды мигают в случайном порядке, имитируя пламя свечи.
  4. Бегущий огонь
    Свет «бежит» от одного светодиода к другому по цепочке.
  5. Маятник (пинг-понг)
    Светодиоды мигают и создают эффект маятника.

Что сделано:

Создана интерактивная световая гирлянда на базе Arduino Uno. Проект позволяет выбрать один из пяти визуальных эффектов с помощью потенциометра.

Программа использует массивы для управления пинами светодиодов и функции для разделения режимов. Все режимы реализованы через switch-case, что делает код читаемым и расширяемым.


Улучшения и финализация:

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

Видео контент: https://youtu.be/9a9nMUmgW-A