Задание: 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);
}
}
Описание работы режимов:
- Все мигают одновременно
Все светодиоды включаются и выключаются одновременно каждые 0.5 секунды. - От края к краю
Каждый светодиод загорается по очереди, создавая эффект волны. - Эффект свечи (рандом)
Светодиоды мигают в случайном порядке, имитируя пламя свечи. - Бегущий огонь
Свет «бежит» от одного светодиода к другому по цепочке. - Маятник (пинг-понг)
Светодиоды мигают и создают эффект маятника.
Что сделано:
Создана интерактивная световая гирлянда на базе Arduino Uno. Проект позволяет выбрать один из пяти визуальных эффектов с помощью потенциометра.
Программа использует массивы для управления пинами светодиодов и функции для разделения режимов. Все режимы реализованы через switch-case, что делает код читаемым и расширяемым.
Улучшения и финализация:
- Все компоненты аккуратно размещены на макетной плате.
- Световые эффекты работают стабильно.
- Использован внешний аккумулятор для питания.
- В финальный отчёт включены:
- Схема подключения
- Видео работы гирлянды с демонстрацией режимов
- Исходный код и пояснения к нему
Видео контент: https://youtu.be/9a9nMUmgW-A
