
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.
}
Описание принципа работы
- Инициализация:
ledPin
(пин 13) настроен как выход для управления светодиодом.- Запускается последовательная передача данных со скоростью 9600 бод.
- Основной цикл (
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:
- Kõik LED-id vilguvad korraga.
- LED-id vilguvad järjest ükshaaval.
- LED-id vilguvad värvi kaupa (RGB korral – punased, rohelised, sinised).
- LED-id vilguvad juhuslikus järjekorras (küünlaefekt).
- “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 различных световых эффектов в зависимости от положения потенциометра.
Режимы работы:
- Все мигают одновременно — светодиоды включаются и выключаются синхронно.
- Последовательное мигание — светодиоды загораются по одному, создавая эффект волны.
- Эффект свечи — случайное мерцание светодиодов, имитирующее пламя свечи.
- Бегущий огонь — светодиоды плавно «бегут» от начала до конца.
- Пинг-понг — светодиоды двигаются вперёд и затем обратно, как мячик в игре пинг-понг.
- Встречное движение — пары светодиодов загораются с краёв к центру.
- Эффект звезды — светодиоды загораются из центра наружу.
Управление режимами:
- Потенциометр подключён к аналоговому входу A0.
- При его вращении выбирается один из режимов.
Особенности:
- Все светодиоды подключены к пинам 2–11.
- Используются как простые включения/выключения (
digitalWrite
), так и управление случайностью (random
) для создания динамических эффектов. - Код легко расширяется: можно добавить новые режимы или изменить текущие (задержки, порядок включения и т.д.).