Öölamp

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:

  1. Lambi sisselülitamine / väljalülitamine – nupu vajutusega või potentsiomeetri pööramisega.
  2. 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.
  3. 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);
}