Ülesanne #1

Komponendid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- Juhtmed (7tk)
- 330 Ω takisti (1tk -220Ω, 2tk – 10kΩ)
- LED (1tk)
const int button1Pin = 2; // viik kuhu on ühendatud 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)) &&
!((button1State == LOW) && (button2State == LOW))) { // kui ainult üks nupp on alla vajutatud
digitalWrite(ledPin, HIGH); // lülitame LED sisse
} else {
digitalWrite(ledPin, LOW); // lülitame LED välja
}
}
Ülesanne #2

Komponendid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- Juhtmed (6tk)
- 330 Ω takisti (1tk -220Ω, 1tk – 10kΩ)
- LED (1tk)
- Fotoresistor (1tk)
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);
}
Öölamp


Video
https://drive.google.com/file/d/1FYvBk3ypcrEbxwL27a0gwX9womS1ZFxo/view?usp=sharing
Kirjeldus
Öövalgus, mis reageerib ümbritsevale valgusele ja mida saab juhtida nupu või potentsiomeetriga. Ühes režiimis põleb öövalgus ainult sinise valgusega, teises režiimis aga vahetab see erinevaid värve.
Komponendid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- Juhtmed (6tk)
- 330 Ω takisti (1tk -220Ω, 1tk – 10kΩ)
- LED (1tk)
- Fotoresistor (1tk)
Selgitus
Määratakse RGB-LED-i, samuti fotoresistori ja potentsiomeetri pin’id. Lisaks määratakse muutujad valgustaseme jälgimiseks ja automaatse kalibreerimise piiride seadmiseks.
int RED = 11;
int GREEN = 10;
int BLUE = 9;
int potentsiomeeterPIN = A0;
int photoresistorPIN = A1;
int lightLevel, high = 0, low = 1023;
Seadistatakse RGB-kanalite väljundid ning käivitatakse jadaliides silumiseks portaali jälgimise kaudu.
void setup() {
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}
Loetakse praegused väärtused fotoresistorilt ja potentsiomeetrilt.
void loop() {
int photoresistorVALUE = analogRead(photoresistorPIN);
int potentsiomeeterVALUE = analogRead(potentsiomeeterPIN);
Potentsiomeetri asendi põhjal määratakse üks kolmest töörežiimist. Väärtus piiritletakse vahemikus 1 kuni 3.
int mode = map(potentsiomeeterVALUE, 0, 1023, 1, 3);
mode = constrain(mode, 1, 3);
Valgustaseme väärtus salvestatakse muutujasse ja kohandatakse automaatselt vahemikku 0 kuni 255, kasutades funktsiooni autoTune.
lightLevel = photoresistorVALUE;
autoTune();
Väljund portaali jälgimisele aitab jälgida fotoresistori praegust olekut ja kohandatud heledusväärtust.
Serial.print("photoresistorVALUE: ");
Serial.print(photoresistorVALUE);
Serial.print(", lightLevel: ");
Serial.println(lightLevel);
Esimeses režiimis on öölamp täielikult välja lülitatud — kõik värvid on välja lülitatud.
if (mode == 1) {
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
Teises režiimis aktiveeritakse sinakas värv (sinise ja rohelise segu), heledus sõltub valgustasemest.
} else if (mode == 2) {
analogWrite(RED, 0);
analogWrite(GREEN, lightLevel);
analogWrite(BLUE, lightLevel);
Kolmandas režiimis kasutatakse juhuslikku tooni genereerimist, mis skaleeritakse vastavalt praegusele valgustasemele. Värve uuendatakse iga 300 ms tagant.
} else if (mode == 3) {
int redPin = random(100, 200);
int greenPin = random(50, 150);
int bluePin = 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);
}
Funktsioon jälgib valgustaseme minimaalsete ja maksimaalsete väärtuste muutumist, et kohandada LED-i heledust muutuvates tingimustes.
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);
}
Kood
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 valguse taset
int potentsiomeeterVALUE = analogRead(potentsiomeeterPIN); // loeme potentsiomeetri asendit
int mode = map(potentsiomeeterVALUE, 0, 1023, 1, 3); // teisendame väärtuse režiimiks 1-3
mode = constrain(mode, 1, 3); // piirame režiimi lubatud vahemikku
lightLevel = photoresistorVALUE; // salvestame valguse tugevuse
autoTune(); // kohandame heledust vastavalt valgusele
Serial.print("photoresistorVALUE: ");
Serial.print(photoresistorVALUE);
Serial.print(", lightLevel: ");
Serial.println(lightLevel);
if (mode == 1) {
analogWrite(RED, 0); // režiim 1: valgus on välja lülitatud
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
} else if (mode == 2) {
analogWrite(RED, 0); // režiim 2: helesinine valgus
analogWrite(GREEN, lightLevel);
analogWrite(BLUE, lightLevel);
} else if (mode == 3) {
int redPin = random(100, 200); // režiim 3: juhuslikud värvid
int greenPin = random(50, 150);
int bluePin = 255;
int redValue = (redPin * lightLevel) / 255; // skaleerime värvi vastavalt valgusele
int greenValue = (greenPin * lightLevel) / 255;
int blueValue = (bluePin * lightLevel) / 255;
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(300); // paus värvi muutuste vahel
}
delay(100); // üldine viivitus
}
void autoTune() {
if (lightLevel < low) {
low = lightLevel; // uuendame väikseimat mõõdetud väärtust
}
if (lightLevel > high) {
high = lightLevel; // uuendame suurimat mõõdetud väärtust
}
lightLevel = map(lightLevel, low + 10, high - 30, 0, 255); // teisendame väärtuse vahemikku 0–255
lightLevel = constrain(lightLevel, 0, 255); // piirame väärtuse lubatud piiridesse
}