Potentsiomeeter / Valguskett

int sensorPin = 0;    	  

int ledPin = 13;                           			  

int sensorValue = 0;  					  

void setup()

{       

  pinMode(ledPin, OUTPUT);  

  Serial.begin(9600);

}

void loop() {          					   

  sensorValue = analogRead(sensorPin); //   loeb analoog sisendi väärtust ja saadab tagasi täisarvu vahemikus 0 kuni 1023. See tähendab 10 bitilist täpsust (2^10 = 1024).		  

  digitalWrite(ledPin, HIGH);         

  delay(sensorValue);                 

  digitalWrite(ledPin, LOW);              

  delay(sensorValue);  

  float voltage = sensorValue * (5.0 / 1023.0); // konverteerime väärtuse (0 - 1023)  ja tagastab (0 - 5V):

  Serial.println(voltage);   // Saadud tulemused kirjutame Serial Monitori.         

}

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

  1. Инициализация:
    • ledPin (пин 13) настроен как выход для управления светодиодом.
    • Запускается последовательная передача данных со скоростью 9600 бод.
  2. Основной цикл (loop):
    • Считывается значение с аналогового входа sensorPin (A0), которое варьируется от 0 до 1023 (10 бит).
    • Светодиод на пине 13 включается.
    • Задержка равна считанному значению датчика (чем выше значение — тем дольше задержка).
    • Светодиод выключается.
    • Снова задержка на то же время.
    • Считанное значение преобразуется в напряжение (0 – 5 В) с помощью формулы:

Напряжение выводится в Serial Monitor.

Итог:

Светодиод мигает с частотой, зависящей от аналогового сигнала (например, с фоторезистора или потенциометра), а измеренное напряжение передается на компьютер для наблюдения в Serial Monitor.

Valguskett

Projektiülesanne: Valguskett

Eesmärk:

Luua valguskett, mis koosneb mitmest LED-ist (tavalised või RGB), ning töötab mitmes erinevas valgusrežiimis. 

Režiimi saab valida potentsiomeetri abil. Iga režiim annab valguskettale erineva käitumise või visuaalse efekti. 

Projekt arendab teadmisi Arduino programmeerimisest, LED-ide juhtimisest, massiivide kasutamisest ja andurite lugemisest.


Vajalikud komponendid:

  • 5 või rohkem LED-i (tavalised või RGB LED-id)
  • Takistid (tavaliste LED-ide jaoks)
  • Potentsiomeeter (valgusrežiimi valimiseks)
  • Arduino Uno
  • Breadboard ja ühendusjuhtmed
  • Toiteallikas

Valguskett peab sisaldama vähemalt viit valgusrežiimi:

  1. Kõik LED-id vilguvad korraga.
  2. LED-id vilguvad järjest ükshaaval.
  3. LED-id vilguvad värvi kaupa (RGB korral – punased, rohelised, sinised).
  4. LED-id vilguvad juhuslikus järjekorras (küünlaefekt).
  5. “Jooksva tule” efekt – valgus liigub järjest läbi LED-ide.

Kasutatavad funktsioonid ja tehnikad:

Massiiv LED-ide jaoks:

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

LED-ide seadistamine:

void setup() {
  for (int i = 0; i < arrayLength; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

Režiimi valimine potentsiomeetri abil:

int potValue = analogRead(A0);
int mode = map(potValue, 0, 1023, 0, 4); // 0–4 = viis režiimi
mode = constrain(mode, 0, 4);


Näide: Küünlaefekt random() abil:

void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 10); // 0–9
    if (flickerChance < 3) { // Umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 100)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 50));  // juhuslik paus
    }
  }
}
// Массив с пинами светодиодов
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};  
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, 6);  // Преобразуем значение потенциометра в диапазон 0-6 (7 режимов)
  mode = constrain(mode, 0, 6);  // Убедимся, что значение не выходит за границы

  // В зависимости от режима вызываем соответствующую функцию
  switch (mode) {
    case 0: allBlink(); break;        // Все мигают одновременно
    case 1: sequenceBlink(); break;   // Последовательное мигание
    case 2: candleEffect(); break;    // Эффект свечи
    case 3: runningLight(); break;    // Бегущий огонь
    case 4: pingPong(); break;        // Пинг-понг эффект
    case 5: meetingLight(); break;    // Встречное движение
    case 6: starburstEffect(); 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(200);                      // Пауза
    digitalWrite(ledPins[i], LOW);   // Выключаем его
  }
}

// Режим 2: Эффект свечи (случайное мерцание)
void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int flickerChance = random(0, 11);  // Определяем вероятность мигания
    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(200);                      // Пауза
    digitalWrite(ledPins[i], LOW);   // Выключаем
  }
}

// Режим 4: Пинг-понг эффект (вперёд и назад)
void pingPong() {
  // Вперёд
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(120);
    digitalWrite(ledPins[i], LOW);
  }
  // Назад
  for (int i = arrayLength - 2; i >= 0; i--) {  // -2, чтобы не повторять последний светодиод
    digitalWrite(ledPins[i], HIGH);
    delay(120);
    digitalWrite(ledPins[i], LOW);
  }
}

// Режим 5: Встречное движение (от краёв к центру)
void meetingLight() {
  int mid = arrayLength / 2;  // Центральная точка
  for (int i = 0; i <= mid; i++) {
    // Включаем пары с противоположных сторон
    if (i < arrayLength) digitalWrite(ledPins[i], HIGH);
    if (arrayLength - 1 - i >= 0) digitalWrite(ledPins[arrayLength - 1 - i], HIGH);
    delay(150);
    // Выключаем те же пары
    if (i < arrayLength) digitalWrite(ledPins[i], LOW);
    if (arrayLength - 1 - i >= 0) digitalWrite(ledPins[arrayLength - 1 - i], LOW);
  }
}

// Режим 6: Эффект звезды (из центра наружу)
void starburstEffect() {
  int mid = arrayLength / 2;  // Центральная точка
  // Зажигание из центра наружу
  for (int offset = 0; offset <= mid; offset++) {
    if (mid - offset >= 0) digitalWrite(ledPins[mid - offset], HIGH);  // Левая сторона
    if (mid + offset < arrayLength) digitalWrite(ledPins[mid + offset], HIGH);  // Правая сторона
    delay(100);
  }
  // Выключаем все светодиоды
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(200);  // Пауза перед следующим запуском
}

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

Программа управляет массивом светодиодов, подключённых к пинам 2–13. В зависимости от положения потенциометра, выбирается один из пяти режимов работы светодиодов.


Основные элементы:

  • Массив пинов (ledPins[]) — включает все пины, к которым подключены светодиоды.
  • Потенциометр на A0 — выбирает режим работы, считывается через analogRead() и преобразуется в значение от 0 до 4 с помощью map().

Режимы работы (выбираются потенциометром):

Режим 0: Все мигают одновременно (allBlink)

  • Что происходит:
    Все светодиоды одновременно включаются на 300 мс, затем выключаются на 300 мс.
  • Эффект:
    Простое синхронное мигание всех диодов.

Режим 1: Последовательное мигание (sequenceBlink)

  • Что происходит:
    Каждый светодиод по очереди включается на 200 мс и сразу выключается перед переходом к следующему.
  • Эффект:
    Светодиоды загораются один за другим, создавая плавную волну по линии.

Режим 2: Эффект свечи (candleEffect)

  • Что происходит:
    Каждый светодиод имеет случайный шанс загореться (около 30%).
    Если загорелся, он светится случайное время от 10 до 100 мс, затем выключается на 10–50 мс.
  • Эффект:
    Имитируется мерцание пламени свечи, каждый светодиод загорается в разное время и на разный срок.

Режим 3: Бегущий огонь (runningLight)

  • Что происходит:
    Светодиоды включаются один за другим с задержкой 200 мс, сразу выключаясь перед включением следующего.
  • Эффект:
    Классический бегущий свет от первого светодиода к последнему.

Режим 4: Пинг-понг эффект (pingPong)

  • Что происходит:
    Светодиоды включаются последовательно вперёд, а затем обратно назад (от начала до конца и обратно).
    Задержка между переключениями — 120 мс.
  • Эффект:
    Движение огонька туда-обратно, как мячик в пинг-понге.

Режим 5: Встречное движение (meetingLight)

  • Что происходит:
    Пары светодиодов с противоположных концов одновременно включаются и движутся к центру.
    После включения каждой пары они сразу выключаются.
    Задержка между шагами — 150 мс.
  • Эффект:
    Два огонька сходятся навстречу друг другу от краёв к центру.

Режим 6: Эффект звезды (starburstEffect)

  • Что происходит:
    Светодиоды загораются из центра наружу в обе стороны.
    Сначала загораются центральные, затем пары дальше от центра.
    После полного загорания все диоды выключаются с паузой 200 мс.
  • Эффект:
    Имитация вспышки звезды — свет расходится из центра.

Итог работы программы:

Эта программа для Arduino управляет 10 светодиодами, создавая 7 различных световых эффектов в зависимости от положения потенциометра.


Режимы работы:

  1. Все мигают одновременно — светодиоды включаются и выключаются синхронно.
  2. Последовательное мигание — светодиоды загораются по одному, создавая эффект волны.
  3. Эффект свечи — случайное мерцание светодиодов, имитирующее пламя свечи.
  4. Бегущий огонь — светодиоды плавно «бегут» от начала до конца.
  5. Пинг-понг — светодиоды двигаются вперёд и затем обратно, как мячик в игре пинг-понг.
  6. Встречное движение — пары светодиодов загораются с краёв к центру.
  7. Эффект звезды — светодиоды загораются из центра наружу.

Управление режимами:

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

Особенности:

  • Все светодиоды подключены к пинам 2–11.
  • Используются как простые включения/выключения (digitalWrite), так и управление случайностью (random) для создания динамических эффектов.
  • Код легко расширяется: можно добавить новые режимы или изменить текущие (задержки, порядок включения и т.д.).