Veronika Portfoolio

Valguskett

Выполненные задания

  • Подключение и мигание одного светодиода.
  • Управление несколькими светодиодами с помощью массива.
  • Считывание значения с потенциометра.
  • Использование функции random() для случайного мигания.
  • Реализация нескольких световых режимов.

Изученные функции

Название функцииОписание
pinMode(pin, mode)Настраивает пин как вход/выход.
digitalWrite(pin, val)Включает или выключает пин (HIGH или LOW).
analogRead(pin)Считывает аналоговое значение с пина (например, с потенциометра).
map(val, a, b, c, d)Преобразует значение из одного диапазона в другой.
constrain(x, a, b)Ограничивает значение в пределах [a, b].
random(min, max)Возвращает случайное число в заданном диапазоне.
delay(ms)Пауза в миллисекундах.

Описание работы

Создана световая гирлянда из 8 светодиодов, подключенных к Arduino Uno. С помощью потенциометра выбирается один из пяти световых режимов:

  1. Все светодиоды мигают одновременно.
  2. Светодиоды мигают поочередно.
  3. Цветное мигание (для RGB).
  4. Эффект свечи – случайное мигание.
  5. Бегущий огонь – движение света по цепочке.

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

Использованные компоненты

  • Arduino Uno – 1 шт
  • Потенциометр – 1 шт
  • Светодиоды (обычные) – 8 шт
  • Резисторы (220 Ом) – 8 шт
  • Макетная плата (breadboard) – 1 шт
  • Соединительные провода – множественно
  • Источник питания (USB или батарея)

Схема подключения (Ühendamise skeem)

  • Схема собрана и протестирована в Tinkercad.

Программа:

// Массив с пинами светодиодов
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);
  }
}

Видео:

https://drive.google.com/file/d/1EfsSMUin2Z7rAjBSTDwz80NBpQbkH299/view?usp=sharing

Возможности применения в повседневной жизни

  • Декоративная подсветка дома, окон, мебели.
  • Украшение для праздников (ёлка, день рождения).
  • Световая сигнализация.
  • Учебный проект для знакомства с электроникой.
  • Основа для умного освещения с расширением (датчики движения, Wi-Fi и т.п.)