Katse 3.1 – Nuppude ja Slideswitch’i kasutamise võimalus
1. näidis – Nupp
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Кнопка 1 шт
- Светодиод 1 шт
- Резистор 220 Om
- Резистор 10 кОм 2 шт
- Провода 7 шт
Схема:

const int button1Pin = 2; //viik kunu on ühebdatud nupp1
const int button2Pin = 3; //viik kuhu on ühendatud nupp2
const int ledPin = 13;
void setup()
{
pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks
pinMode(ledPin, OUTPUT); //algväärtuse LED viigu väljundiks
}
void loop()
{
int button1State, button2State; //nupu oleku muutujad
button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse(HIGH või LOW)
button2State = digitalRead(button2Pin);
if (((button1State == LOW) || (button2State == LOW)) // kui nupu on alla vajutatud
&& !
((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud
{
digitalWrite(ledPin, HIGH); // lülitame LED sisse
}
else
{
digitalWrite(ledPin, LOW); // lülitame LED välja
}
}
Пояснение кода:
Этот код управляет светодиодом, основываясь на нажатии двух кнопок. Светодиод загорается только тогда, когда нажата одна кнопка, но не обе одновременно.
- pinMode(button1Pin, INPUT); – Устанавливаем пин кнопки 1 как вход
- pinMode(button2Pin, INPUT); – Устанавливаем пин кнопки 2 как вход
- pinMode(ledPin, OUTPUT); – Устанавливаем пин светодиода как выход
- button1State = digitalRead(button1Pin); – Читаем состояние кнопки 1 (HIGH или LOW)
- button2State == LOW – кнопка нажата
- digitalWrite(ledPin, HIGH); – Включаем светодиод
- digitalWrite(ledPin, LOW); – Иначе — выключаем светодиод
2. näidis – Slideswitch’i kasutamine
Схема:

Katse 3.2 – Photoresistor
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Светодиод 1 шт
- Резистор 220 Om
- Фоторезистор 1 шт
- Провода 7 шт
Схема:

const int sensorPin = 0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // //Serial monitori seadistamine
}
void loop()
{
// AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).
// AnalogWrite(), kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).
lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
// Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, "from" 0-1023 "to" 0-255.
// Constrain() saed muutujale kindlad piirväärtused.
// Näiteks: kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:.
// lightLevel = constrain(lightLevel, 0, 255);
manualTune(); //
//autoTune(); //
analogWrite(ledPin, lightLevel);
// Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник!
Serial.print(lightLevel); // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))
Serial.println("");
delay(1000);
}
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)).
lightLevel = constrain(lightLevel, 0, 255);
}
void autoTune()
{
if (lightLevel < low)
{
low = lightLevel;
}
if (lightLevel > high)
{
high = lightLevel;
}
lightLevel = map(lightLevel, low+10, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Töö protsess
RGB LED ühendati Arduino plaadiga ning iga värv määrati vastavale PWM-väljundile (RED = 11, GREEN = 10, BLUE = 9). Lisaks ühendati kaks andurit: potentsiomeeter (A0) ja fotorresistor (A1).
Fotorresistor mõõdab ümbritsevat valguse taset ning selle toorväärtus (0–1023) teisendatakse automaatselt vahemikku 0–255, et reguleerida LEDi heledust vastavalt valgusoludele. Selleks kasutatakse autoTune() funktsiooni, mis kohandab väärtusi dünaamiliselt, arvestades seniseid minimaalseid ja maksimaalseid väärtusi.
Potentsiomeetri abil määratakse töörežiim:
Potentsiomeetri väärtus loetakse analogRead() abil ja kaardistatakse vahemikku 1 kuni 3 (map() ja constrain() funktsioonidega).
Igal režiimil on kindel LED-käitumine:
- Režiim 1 – kõik LED-id on välja lülitatud.
- Režiim 2 – süttivad roheline ja sinine LED (helesinine toon), heledus sõltub ümbritsevast valgusest.
- Režiim 3 – RGB LED-id vilguvad juhuslikes toonides, kohandudes valguse tasemega.
Kõik LED-id reguleeritakse analogWrite() kaudu. Reaalaegset andmete jälgimist võimaldab Serial Monitor, kuhu väljastatakse fotorresistori algväärtus ja arvutatud lightLevel.
Uuritud funktsioonid
Serial.begin(9600); | Seadistab Serial Monitori kiiruse. Kasutatakse andmete kuvamiseks arvutis (nt fotorresistori väärtused). |
Serial.print(); / Serial.println(); | Väljund andmete kuvamiseks Serial Monitoris. println() lisab reavahetuse, print() mitte. |
analogRead(pin); | Loeb analoogsisendi väärtuse vahemikus 0–1023. Kasutatakse fotorresistori ja potentsiomeetri lugemiseks. |
analogWrite(pin, value); | Kirjutab PWM-signaali LED-i heledust juhtimiseks. Väärtus vahemikus 0 (väljas) kuni 255 (maksimum). |
map(value, fromLow, fromHigh, toLow, toHigh); | Teisendab väärtuse ühest vahemikust teise. Näiteks 0–1023 teisendatakse vahemikku 1–3 režiimi määramiseks. |
constrain(value, min, max); | Piirab väärtuse kindlasse vahemikku. Näiteks lightLevel = constrain(lightLevel, 0, 255); |
random(min, max); | Genereerib suvalise täisarvu vahemikus min kuni max - 1. Kasutatakse värviüleminekute jaoks. |
Kasutamisvõimalused tavaelus
- Öölamp lastetoas — reageerib ruumi pimedusele ja lülitub automaatselt sisse, kui valgus on madal.
- Dekoratiivvalgustus — võimaldab valida erinevaid valgusefekte vastavalt meeleolule.
- Targa kodu lahendus — võib olla osa automaatsest valgustussüsteemist, mis kohandub vastavalt keskkonnale.
- Energia säästmine — valgus lülitub välja heleda valgusega ruumis, säästes voolu.
Skeem

const int lightSensorPin = A1; // Фоторезистор
const int potPin = A0; // Потенциометр
const int redPin = 11; // Красный канал
const int greenPin = 10; // Зелёный канал
const int bluePin = 9; // Синий канал
const int lightThreshold = 600;
void setup() {
Serial.begin(9600);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop() {
int lightValue = analogRead(lightSensorPin); // Уровень света (0–1023)
int potValue = analogRead(potPin); // Значение потенциометра (0–1023)
int red = 0, green = 0, blue = 0;
// Определение цвета по положению потенциометра
int section = potValue / 341; // делим диапазон на 3 части
int val = potValue % 341;
switch (section) {
case 0: // Красный → Зелёный
red = 255 - val * 255 / 340;
green = val * 255 / 340;
blue = 0;
break;
case 1: // Зелёный → Синий
red = 0;
green = 255 - val * 255 / 340;
blue = val * 255 / 340;
break;
case 2: // Синий → Красный
red = val * 255 / 340;
green = 0;
blue = 255 - val * 255 / 340;
break;
}
// Если темно — включаем светодиод с выбранным цветом
if (lightValue < lightThreshold) {
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
} else {
// Иначе — выключаем всё
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
}
// Отладка
Serial.print("Light: ");
Serial.print(lightValue);
Serial.print(" | Pot: ");
Serial.print(potValue);
Serial.print(" | RGB: ");
Serial.print(red); Serial.print(", ");
Serial.print(green); Serial.print(", ");
Serial.println(blue);
delay(200);
}
Video: https://youtu.be/gxBjaVXP2S0?si=Umf9ENuH_TUej0zv
