Your cart is currently empty!


♦
Jekaterina Guzek, Õpimapp / Portfolio
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
в напряжение (в вольтах).
На изображении представлена схема управления шестью светодиодами с помощью платы Arduino Uno и потенциометра, который выбирает один из пяти режимов мигания.
analogRead(A0)
).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 < 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 < 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)
🟢 Все шесть светодиодов мигают одновременно, создавая эффект пульсирующего света.
🔁 Свет включается на полсекунды, затем выключается на полсекунды, и так по кругу.
💡 Это классический “новогодний режим” — спокойно и ритмично.
Положение потенциометра: чуть правее от нуля (в моем случаи 1)
➡️ Светодиоды включаются по очереди, создавая эффект «шагающего света».
🚶 Каждый светодиод загорается и гаснет один за другим, задержка — 500 мс.
✨ Похоже на световые волны — плавно и последовательно.
Положение потенциометра: среднее (в моем случаи 2)
🎨 Светодиоды мигают парами: сначала 1 и 2, затем 3 и 4, потом 5 и 6.
🕒 Каждая пара загорается на секунду, затем выключается.
🌈 Создаёт ритмичную симметрию — подходит для цветовых композиций.
Положение потенциометра: ближе к правому краю (в моем случаи 3)
🕯 Светодиоды мигают хаотично, с разной яркостью и продолжительностью.
🎲 Каждый из них может случайно загореться на разное время (от 10 до 1000 мс).
🌌 Это имитация живого пламени — уютная, живая атмосфера.
Положение потенциометра: максимально вправо (в моем случаи 1)
➡️ Только один светодиод горит в каждый момент времени.
🏃 Он быстро «перескакивает» с одной позиции на другую каждые 100 мс.
🔁 Получается эффект бегущей точки.
Видео схемы, как работает код на www.tinkercad.com
Так же видео как работает в реальности наш проект гирлянда