Potentsiomeeter

Potentsiomeetri kasutamine

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

int sensorPin = 0;    	  

int ledPin = 8;                           			  

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.         

}

Значения кода:

sensorValue — переменная, в которую будет сохраняться считанное значение с датчика.

pinMode(ledPin, OUTPUT); — настраиваем пин 8 как выход, чтобы можно было управлять светодиодом.

Serial.begin(9600); — запускаем серийный порт для вывода данных на компьютер (скорость передачи — 9600 бод).

sensorValue = analogRead(sensorPin); – Считываем аналоговое значение с пина A0. Диапазон: от 0 до 1023, т.е. 10-битное значение. Например, 0 = 0 В, 1023 ≈ 5 В.

Преобразуем значение sensorValue в напряжение (в вольтах).

Гирлянда-Valguskett

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

  • Arduino UNO
  • 6 светодиодов (-*-)
  • 6 резисторов (220 Ом)
  • Макетная плата (breadboard)
  • Соединительные провода (jumper wires)
  • Потенциометр (для выбора режима освещения)

Схема соединения:

Описание схемы Arduino-проекта

На изображении представлена схема управления шестью светодиодами с помощью платы Arduino Uno и потенциометра, который выбирает один из пяти режимов мигания.

Подключения:

  1. Потенциометр:
    • Левый контакт подключён к GND (чёрный провод) — земля.
    • Правый контакт — к 5V (красный провод) — питание.
    • Средний контакт (выход) — к A0 (зелёный провод) — аналоговый вход для считывания значения в коде (analogRead(A0)).
  2. Светодиоды:
    • Всего 6 светодиодов, подключены к пинам 13, 12, 11, 10, 9 и 8.
    • Каждый пин управляет своим светодиодом через резистор.

Как работает код:

  • Потенциометр управляет переменной mode (0–4), определяя режим мигания.
  • В функции loop() выбирается соответствующий эффект:
    • mode == 0 – все лампочки мигают вместе.
    • mode == 1 – мигают по очереди.
    • mode == 2 – мигают парами (например, как красный-зелёный-синий).
    • mode == 3 – эффект свечи (случайное мигание).
    • mode == 4 – бегущий огонёк (последовательно загораются по одному).

Ниже расмотрим код:

int potValue = 0;
int mode = 0;
int ledPins[] = {13, 12, 11, 10, 9, 8}; // масив на 6 лампочек
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

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

void loop() {
  potValue = analogRead(A0);
  mode = map(potValue, 0, 1023, 0, 4); // 0–4

  Serial.print("Mode:");
  Serial.println(mode);

  if (mode == 0) {
    allBlink();
  } else if (mode == 1) {
    blinkInSequence();
  } else if (mode == 2) {
    blinkByColor();
  } else if (mode == 3) {
    candleEffect();
  } else if (mode == 4) {
    runningLight();
  }
}

// Режим 0: Все мигают одновременно
void allBlink() {
  for (int i = 0; i < arrayLength; i++) digitalWrite(ledPins[i], HIGH);
  delay(500);
  for (int i = 0; i < arrayLength; i++) digitalWrite(ledPins[i], LOW);
  delay(500);
}

// Режим 1: Мигают по очереди
void blinkInSequence() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(500);
    digitalWrite(ledPins[i], LOW);
  }
}

// Режим 2: Мигают по "цветам" (условно: группы по 2)
void blinkByColor() {
  for (int i = 0; i < arrayLength; i += 2) {
    digitalWrite(ledPins[i], HIGH);
    if (i + 1 < arrayLength) digitalWrite(ledPins[i + 1], HIGH);
    delay(1000);
    digitalWrite(ledPins[i], LOW);
    if (i + 1 < arrayLength) digitalWrite(ledPins[i + 1], LOW);
  }
}

// Режим 3: Эффект свечи (случайное мерцание)
void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int Chance = random(0, 7); // meil on 0-6
    if (Chance < 3) { // Umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 1000)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 500)); // juhuslik paus
    }
  }
}

// Режим 4: Бегущий свет
void runningLight() {
  static int current = 0;

  for (int i = 0; i < arrayLength; i++) {
    if (i == current) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }
  current = current + 1;
  if (current >= arrayLength) {
    current = 0;
  }
  delay(100);
}

Разделим код на несколько частей, чтобы расмотреть их подробнее

Объявление переменных

potValue — значение с потенциометра, от 0 до 1023.

mode — текущий режим мигания (от 0 до 4).

ledPins[] — массив пинов, на которые подключены светодиоды.

arrayLength — автоматически определяет, сколько лампочек.

int potValue = 0;
int mode = 0;
int ledPins[] = {13, 12, 11, 10, 9, 8}; // масив на 6 лампочек
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

Функция setup()

pinMode(..., OUTPUT) — говорит Ардуино, что на этих пинах будут выходы.

Serial.begin(9600) — включаем передачу данных по USB, чтобы можно было выводить информацию на экран компьютера.

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

Функция loop()

analogRead(A0) — считывает аналоговое значение с потенциометра.

map(..., 0, 1023, 0, 4) — переводит значение с потенциометра в режим (5 режимов: 0,1,2,3,4).

Serial.println(mode) – выводим номер режима (на экран 0 – 4).

Далее — обычные if – условия, каждый режим вызывает свою функцию.

void loop() {
  potValue = analogRead(A0);
  mode = map(potValue, 0, 1023, 0, 4); // 0–4

  Serial.print("Mode:");
  Serial.println(mode);

  if (mode == 0) {
    allBlink();
  } else if (mode == 1) {
    blinkInSequence();
  } else if (mode == 2) {
    blinkByColor();
  } else if (mode == 3) {
    candleEffect();
  } else if (mode == 4) {
    runningLight();
  }
}

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

for (int i = 0; i < arrayLength; i++) — перебирает каждый светодиод в массиве.

digitalWrite(ledPins[i], HIGH) — включает светодиод.

digitalWrite(ledPins[i], LOW) — выключает светодиод.

delay(500) — задержка полсекунды.

// Режим 0: Все мигают одновременно
void allBlink() {
  for (int i = 0; i < arrayLength; i++) digitalWrite(ledPins[i], HIGH);
  delay(500);
  for (int i = 0; i < arrayLength; i++) digitalWrite(ledPins[i], LOW);
  delay(500);
}

Режим 1: Мигают по очереди

digitalWrite(ledPins[i], HIGH) — включаем один светодиод.

digitalWrite(ledPins[i], LOW) — выключаем этот же светодиод.

// Режим 1: Мигают по очереди
void blinkInSequence() {
  for (int i = 0; i &lt; arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(500);
    digitalWrite(ledPins[i], LOW);
  }
}

Режим 3: Эффект свечи (случайное мерцание)

random(0, 7) — создаёт случайное число от 0 до 6.

if (Chance < 3) — примерно в 30 лампочка загорается.

delay(random(10, 1000)) — лампочка светится случайное количество времени.

delay(random(10, 500)) — после выключения идёт случайная пауза.

// Режим 3: Эффект свечи (случайное мерцание)
void candleEffect() {
  for (int i = 0; i < arrayLength; i++) {
    int Chance = random(0, 7); // meil on 0-6
    if (Chance < 3) { // Umbes 30% tõenäosus, et LED vilgub
      digitalWrite(ledPins[i], HIGH);
      delay(random(10, 1000)); // juhuslik vilkumise kestus
      digitalWrite(ledPins[i], LOW);
      delay(random(10, 500)); // juhuslik paus
    }
  }
}

Режим 4: Бегущий огонёк

static int current = 0; — переменная, которая помнит, какой светодиод горит. Благодаря static, она не сбрасывается при каждом вызове loop().

Цикл for перебирает все лампочки:

  • Если это “нужная” лампочка (номер совпадает с current), она загорается.
  • Все остальные выключаются.

current = current + 1; — переходим к следующей лампочке.

if (current >= arrayLength) — проверяем, не вышли ли мы за границы. Если да — начинаем с первой.

// Режим 4: Бегущий свет
void runningLight() {
  static int current = 0;

  for (int i = 0; i &lt; arrayLength; i++) {
    if (i == current) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }

  current = current + 1;
  if (current >= arrayLength) {
    current = 0;
  }

  delay(100);
}

Как пользователь видит работу гирлянды в зависимости от положения потенциометра

Поворот ручки потенциометра влияет на режим мигания светодиодов. Это делает гирлянду интерактивной — каждый поворот создаёт новую световую атмосферу

В программе Arduino IDE можно наблюдать за положением потенциометра двумя способами:
через Последовательный монитор (Serial Monitor), где значения отображаются цифрами,
или через Графический монитор (Serial Plotter), где изменение значений видно как линия на графике.
Оба инструмента доступны в меню:
Инструменты (Tools/Tööriistad) → Последовательный монитор / Jadapordi monitor и Серийный график / Jadapordi graafik (Serial Plotter).

🔘 Режим 0 — «Синхронное мигание»

Положение потенциометра: ближе к 0 (в моем случаи 0)

🟢 Все шесть светодиодов мигают одновременно, создавая эффект пульсирующего света.
🔁 Свет включается на полсекунды, затем выключается на полсекунды, и так по кругу.
💡 Это классический “новогодний режим” — спокойно и ритмично.

🔘 Режим 1 — «Один за другим»

Положение потенциометра: чуть правее от нуля (в моем случаи 1)

➡️ Светодиоды включаются по очереди, создавая эффект «шагающего света».
🚶 Каждый светодиод загорается и гаснет один за другим, задержка — 500 мс.
✨ Похоже на световые волны — плавно и последовательно.

🔘 Режим 2 — «Цветовые пары»

Положение потенциометра: среднее (в моем случаи 2)

🎨 Светодиоды мигают парами: сначала 1 и 2, затем 3 и 4, потом 5 и 6.
🕒 Каждая пара загорается на секунду, затем выключается.
🌈 Создаёт ритмичную симметрию — подходит для цветовых композиций.

🔘 Режим 3 — «Эффект свечи»

Положение потенциометра: ближе к правому краю (в моем случаи 3)

🕯 Светодиоды мигают хаотично, с разной яркостью и продолжительностью.
🎲 Каждый из них может случайно загореться на разное время (от 10 до 1000 мс).
🌌 Это имитация живого пламени — уютная, живая атмосфера.

🔘 Режим 4 — «Бегущий огонёк»

Положение потенциометра: максимально вправо (в моем случаи 1)

➡️ Только один светодиод горит в каждый момент времени.
🏃 Он быстро «перескакивает» с одной позиции на другую каждые 100 мс.
🔁 Получается эффект бегущей точки.

Видео

Видео схемы, как работает код на www.tinkercad.com

Так же видео как работает в реальности наш проект гирлянда

Применение проекта «Гирлянда с потенциометром» в реальной жизни

  • Умная гирлянда для праздников (спользуется в качестве новогоднего или рождественского украшения)
  • Освещение для интерьера или мебели (Подсветка полок, ниш, кухонной зоны или кровати)
  • Учебный проект и демонстрация эффектов (Пример для уроков электроники, программирования или физики)
  • Прототип умного освещения (Возможность добавления дистанционного управления или сенсоров)
  • Арт-инсталляции и световые шоу (Выбор режима световых эффектов прямо во время выступления или экспозиции)