Projektiülesanne: Öölamp

Eesmärk:

Luua öölamp, mis reageerib ümbritsevale valgusele ja mida saab juhtida nupu või potentsiomeetriga. Projekti eesmärk on rakendada teadmisi Arduino platvormist, elektroonikakomponentidest ja programmeerimisest, et valmistada praktiline ning visuaalselt atraktiivne valguslahendus.

Nõutud komponendid:

  • Valgustakisti (LDR – Light Dependent Resistor)
  • Nupp või potentsiomeeter (valgustuse sisse/välja lülitamiseks või värvi muutmiseks)
  • LED või RGB LED

Funktsionaalsus:

  • Lambi sisselülitamine: Nupu vajutusega või potentsiomeetri keeramisega saab öölambi sisse ja välja lülitada.
  • Valguse juhtimine ümbritseva valguse järgi:
    • Kui kasutatakse üht LED-i, reguleeritakse selle heledust vastavalt valgusele funktsiooniga analogWrite(PIN, 0..255).
    • Kui kasutatakse mitut LED-i, süttib rohkem LED-e, kui ümbrus on pimedam (kasutades digitalWrite(PIN, HIGH/LOW)).
  • RGB LED-i kasutamisel võimaldab potentsiomeeter valida erinevaid värve (muutes punase, rohelise ja sinise väärtusi).

Tööetapid:

  1. Prototüüp emulaatoris (nt Tinkercad Circuits):
    • Programmeeri Arduino kood vastavalt valitud lahendusele.
    • Testi kõiki funktsioone: sisselülitamine, valgusanduri töö, LED-ide reaktsioon.
  2. Skeemi koostamine reaalseks ehituseks:
    • Joonista või loo ühendusskeem Arduino, komponentide ja toiteallikaga.
  3. Ehitus:
    • Paigalda kõik komponendid korrektselt isetehtud karpi või alusele.
    • Kasuta patareisid või laetavat akut, et tagada mobiilsus ja esteetilisus.
  4. Dokumentatsioon:
    • Filmi video töötavast lampist.
    • Lisa see koos skeemide ja selgitustega lõpparuandesse.

Skeem:

Работа кода:

При включение платы датчик света начинает работать и читывать яркость света, при повороте потенциометра меняеться цвет лампы, а при изменения яркости света, лампа становиться ярче либо темнее,

Coode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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);
}