Ülesanne 3.1 Öölamp

3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus

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

  }    	

  }

link tinkercadi: https://www.tinkercad.com/things/il1O7QhQxSj-swanky-rottis

kood slideswitch’i jaoks:

const int ldrPin = A0;         // LDR ühendatud analoogpin A0
const int switchPin = 4;       // Slide switch ühendatud pin 2
const int ledPin = 10;         // LED

void setup() {
  pinMode(ldrPin, INPUT);
  pinMode(switchPin, INPUT);   // Slide switch loeb HIGH või LOW
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);          // Valikuline: jälgime väärtusi
}

void loop() {
  int lightValue = analogRead(ldrPin);      // 0-1023
  int switchState = digitalRead(switchPin); // 0 = OFF, 1 = ON

  Serial.print("Valgus: ");
  Serial.print(lightValue);
  Serial.print(" | Lüliti: ");
  Serial.println(switchState);

  if (switchState == HIGH && lightValue < 500) {
    digitalWrite(ledPin, HIGH);  // LED sisse ainult kui pime ja switch ON
  } else {
    digitalWrite(ledPin, LOW);   // Muidu LED välja
  }

  delay(100); // Stabiilsuse huvides väike viivitus
}

link tinkercadi: https://www.tinkercad.com/things/4XqN9Rh8cU0-magnificent-leelo


3.2. Katse Photoresistor

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);

}

link tinkercadi:https://www.tinkercad.com/things/9QpiDyFn4qW-swanky-lappi


Öölamp – Projektiaruanne


1. Tehtud näidisülesanded

Tehtud näidisülesanded

Selles projektis valmis mitmerežiimiline öölamp, mille valgusrežiimi saab valida potentsiomeetri abil. Kasutatud on RGB LED-i, fotoresistori (LDR) ja PWM-signaali. Iga režiim süütab erineva värvi LED-i, mille heledus sõltub ümbritsevast valgusest.

Valgustuse intensiivsust kontrollib fotoresistor, mis mõõdab valguse taset ja reguleerib LED-ide heledust vastavalt sellele. Režiimide muutmine toimub potentsiomeetri keeramisega, mitte nupuvajutusega.


2. Uuritud funktsioonid

Projekti käigus uurisin järgmisi Arduino funktsioone:

  • analogRead(pin)
    Loeb analoogsignaali andurilt või komponendilt (väärtus vahemikus 0–1023)
  • analogWrite(pin, value)
    Kirjutab PWM signaali LED-ile, muutes selle heledust (väärtus 0–255)
  • digitalWrite(pin, HIGH/LOW)
    Lülitab digitaalse pordi sisse või välja
  • map(value, fromLow, fromHigh, toLow, toHigh)
    Muudab väärtuse ühest vahemikust teise
  • constrain(x, a, b)
    Piirab väärtuse kindlasse vahemikku

3. Töö kirjeldus

Projekti eesmärk oli luua öölamp, mis reageerib ümbritseva valguse tasemele ning mille valgustust saab reguleerida potentsiomeetriga. Öölambi valgustus koosneb RGB LED-ist, mille värv muutub vastavalt potentsiomeetri asendile ja valgustakisti (LDR) väärtusele. Potentsiomeetri keeramine muudab LED-ide värvi, pakkudes kolme erinevat värvitooni. Samuti reguleerib LDR LED-i heledust vastavalt ümbritseva valguse tasemele, tagades, et lamp ei ole liiga ere ega liiga pime sõltuvalt toas olevast valgusest. Projekti töötlus toimub Arduino platvormil ning süsteem on emuleeritud Tinkercadis, kus saab visuaalselt testida kõiki komponente ja skeeme.


4. Kasutatud komponendid

Selle öölambi tegemiseks kasutasin järgmisi komponente:

  • Arduino Uno
  • RGB LED
  • Valgustakisti (LDR)
  • Potentsiomeeter
  • 220Ω takistid
  • Juhtmed
  • Prototüüpplaat (breadboard)

5. Ühendamise skeem

Tinkercad skeem:
https://www.tinkercad.com/things/6x4zEr0snqi-frantic-lahdi-juttuli


6. Programm





const int potensiometr = 1;

int fototakisti = 0;   

int lightLevel, high = 0, low = 1023;

const int RED1 = 11;
const int BLUE1 = 10;
const int GREEN1 = 9;
 
int sensorValue = constrain(sensorValue, 10, 150);
int Value_new;
 
void setup()
{
  pinMode(RED1, OUTPUT);
  pinMode(BLUE1, OUTPUT);
  pinMode(GREEN1, OUTPUT);
}
void loop()
{
  digitalWrite(RED1, LOW);
  digitalWrite(BLUE1, LOW);
  digitalWrite(GREEN1, LOW);
  
  lightLevel = analogRead(fototakisti);
  manualTune();
  
  Value_new = analogRead(potensiometr);
  Value_new = map(Value_new,0,1023,0,3);
  
  if (Value_new == 2)
  {
    BLUE();
  }
  else if (Value_new == 1)
  {
    RED();
  }
  else if (Value_new == 3)
  {
    GREEN();
  }
  else
  {
    digitalWrite(RED1, LOW);
    digitalWrite(BLUE1, LOW); 
    digitalWrite(GREEN1, LOW);
  }
}
void manualTune()
{
  lightLevel = map(lightLevel, 300, 800, 0, 255); 
  lightLevel = constrain(lightLevel, 0, 255);
} 
void GREEN()
{
  digitalWrite(GREEN1, lightLevel);
}
void RED()
{
  digitalWrite(RED1, lightLevel);
}
void BLUE()
{
  digitalWrite(BLUE1, lightLevel); 
}

7. Video

Video link:

https://youtu.be/l6dhWBifzuw?feature=shared


8. Kasutamisvõimalused tavaelus

  • Öölamp magamistoas, mis süttib automaatselt pimeduse saabudes
  • Laste toas turvalisuse tagamiseks
  • Dekoratiivne lamp, mille värvi saab valida vastavalt tujule
  • Valguse tasemele reageeriv meeleolulamp elutoas