3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus
Näidis- Nuppu kasutamine
Komponendid:

Skeem:

Programm:
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
}
}
Näidis- Slideswitch’i kasutamine

// C++ code
int swPin = 4;
int ledPin = 10;
int switchstate = 0;
void setup ()
{
pinMode(swPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop ()
{
switchstate=digitalRead(swPin);
if(switchstate==HIGH)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
Опыт с фоторезистором/Fototakisti abil valguse mõõtmine, valgustundlik LED
Komponendid:

Ühendamine:
Ühendada kõigepealt maketeerimislaua ühte äärde sarnaselt järgneva joonisega fototakisti nii et üks jalg oleks ühendatud toite ning teine läbi maandusesse mineva takisti analoogsignaaliga. Nüüd lisada maketeerimislaua teise otsa, et LED-i valgus ei mõjutaks andurit.
Monitori jälgimiseks avada see arenduskeskkonna ülemise rohelise riba paremas ääres asuvast luubi ikoonist.
Skeem

Programm
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);
}
Ülesanne 3.1 “Öölamp”
Töö kirjeldus
Tegemist on Arduino projektiga, mille eesmärk on luua nutikas öölamp, mis reageerib ümbritsevale valgusele ning mida saab juhtida potentsiomeetriga. Vastavalt potentsiomeetri väärtusele valitakse erinev valgusrežiim (nt väljalülitatud, ühtlane valgus, värvimuutused). Valik toimub analogRead()
funktsiooni kaudu ja režiimid on mapitud väärtustele 1 kuni 3.
Ümbritseva valguse taseme tuvastamiseks kasutatakse fotorresistorit, mille väärtuste põhjal reguleeritakse automaatselt valguse heledust.
Vajuta “Start Simulation” ja proovi kasutada öölambi fototakistiga
Kasutatud komponenid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- Potentiometer (1tk)
- 220 Ω Takisti (3tk)
- 10 kΩ Takisti (1tk)
- Juhtmed (12tk)
- LED RGB (1tk)
- Fototakisti (1tk)
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

Video (link)
Programm
int RED = 11;
int GREEN = 10;
int BLUE = 9;
int potentsiomeeterPIN = A0;
int photoresistorPIN = A1;
int lightLevel, high = 0, low = 1023;
void setup() {
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}
void loop() {
int photoresistorVALUE = analogRead(photoresistorPIN); // loeme fotorresistori väärtuse
int potentsiomeeterVALUE = analogRead(potentsiomeeterPIN); // loeme potentsiomeetri väärtuse
int mode = map(potentsiomeeterVALUE, 0, 1023, 1, 3); // määrame režiimi 1-3 potentsiomeetri järgi
mode = constrain(mode, 1, 3); // piirame režiimi vahemikku
lightLevel = photoresistorVALUE; // võtame esmalt toorväärtuse fotorresistorist
autoTune(); // rakendame automaatset häälestust
Serial.print("photoresistorVALUE: ");
Serial.print(photoresistorVALUE);
Serial.print(", lightLevel: ");
Serial.println(lightLevel);
if (mode == 1) {
// Režiim 1 — kõik välja lülitatud
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
} else if (mode == 2) {
// Režiim 2 — helesinine (sinine + roheline)
analogWrite(RED, 0);
analogWrite(GREEN, lightLevel);
analogWrite(BLUE, lightLevel);
} else if (mode == 3) {
// Režiim 3 — juhuslikud värviüleminekud
int redPin = random(100, 200);
int greenPin = random(50, 150);
int bluePin = 255;
// Skaleerime värvid vastavalt heledustasemele (0–255)
int redValue = (redPin * lightLevel) / 255;
int greenValue = (greenPin * lightLevel) / 255;
int blueValue = (bluePin * lightLevel) / 255;
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(300);
}
delay(100);
}
void autoTune() {
// Salvestame kõige väiksema ja suurima mõõdetud väärtuse
if (lightLevel < low) {
low = lightLevel;
}
if (lightLevel > high) {
high = lightLevel;
}
// Mapime (teisendame) väärtused automaatselt vastavusse 0–255 vahemikuga
lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}