Kasutatud komponendid:
- Arduino UNO plaat (1 tk)
- Juhtmed (u 10 tk)
- Takisti (3 tk, sh 10 kΩ valgusanduriga ja 220 Ω LED-iga)
- Valgustakisti ehk LDR (1 tk)
- RGB LED (1 tk)
- Potentsiomeeter (1 tk, 250 kΩ) või nupp (1 tk)
Töö protsess:
- Ühenda LDR ja takisti analoogsisendisse (nt A1), et mõõta ümbritsevat valgust.
- Ühenda RGB LED kolme digitaalse PWM-väljundiga (nt 9, 10, 11).
- Ühenda potentsiomeeter analoogsisendisse (nt A0) või nupp digitaalsisendisse.
- Programmeeri öölamp reageerima valguse tasemele ning muutma värvi potentsiomeetri abil.
Funktsionaalsus:
- Lambi sisselülitamine / väljalülitamine – nupu vajutusega või potentsiomeetri pööramisega.
- Valguse tase juhib LED-i:
- Kui ümbrus on hele, LED kustub või muutub nõrgemaks.
- Kui ümbrus on pime, LED süttib või muutub eredamaks.
- Värvimuutus – potentsiomeeter reguleerib, milline värv RGB LED-ist süttib (punane, roheline, sinine, või nende kombinatsioonid).
Värvi muutmine potentsiomeetri abil:
void changeColor() {
controlValue = analogRead(controlInput);
controlValue = map(controlValue, 0, 1023, 1, 4);
if (controlValue == 1) {
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, 0);
analogWrite(ledPinB, 0);
} else if (controlValue == 2) {
analogWrite(ledPinR, 0);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, 0);
} else if (controlValue == 3) {
analogWrite(ledPinR, 0);
analogWrite(ledPinG, 0);
analogWrite(ledPinB, lightLevel);
} else if (controlValue == 4) {
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, 0);
}
}
Funktsioon LED-i heledust reguleerimiseks vastavalt valgusele:
void manualTune() {
lightLevel = analogRead(lightSensor);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Loppkood:
const int sensorPin = 1;
const int ledPinR = 9;
const int ledPinG = 10;
const int ledPinB = 11;
const int BUTTON = 0;
int Value_new;
int lightLevel, high = 0, low = 1023;
void setup(){
pinMode(ledPinR, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinB, OUTPUT);
}
void loop()
{
lightLevel = analogRead(sensorPin);
manualTune();
Value_new = analogRead(BUTTON);
Value_new=map(Value_new, 0, 1023, 1, 4); //seadke muutuja 4 režiimi
if (Value_new==1)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, LOW);
analogWrite(ledPinB, LOW);
}
else if (Value_new==2)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinB, LOW);
}
else if (Value_new==3)
{
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, LOW);
}
else if (Value_new==4)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
}
else if (Value_new==5)
{
on();
}
}
void on()
{
digitalWrite(ledPinR, lightLevel);
digitalWrite(ledPinG, lightLevel);
digitalWrite(ledPinB, lightLevel);
}
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}