Sissejuhatus
Töö kirjeldus:
Koostage diagramm LED-iga, potentsiomeetriga ja fototakistiga. Potentsiomeetri pööramiseks muutuks värv. LED-i heledus sõltub fototakistile vastuvõetava valguse intensiivsusest.
Kasutatud komponendid:
Arduino UNO plaat (1tk)
Juhtmed (12tk)
Takistid (3tk: 220 Ω, 1tk: 1kΩ)
RGB LED diood (1tk)
Potentsiomeeter (1tk, 250 kΩ)
Fototakisti (1tk)
Töö protsess:
Programmeeri öölamp reageerima valguse tasemele ning muutma värvi potentsiomeetri abil.
Ü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.
Funktsionaalsus
- Lambi sisselülitamine: Potentsiomeetri keeramisega saab öölambi sisse ja välja lülitada.
- Valguse juhtimine ümbritseva valguse järgi: Kasutame üks LED, reguleeritakse selle heledust vastavalt valgusele funktsiooniga
analogWrite(PIN, 0..255). - RGB LED-i kasutamisel võimaldab potentsiomeeter valida erinevaid värve (muutes punase, rohelise ja sinise väärtusi).
Loodud režiimid
- Lülitatud välja
if (Value_new==1)
{
analogWrite(ledPinR, LOW);
analogWrite(ledPinG, LOW);
analogWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
2. Roheline (sõltub valgustuse tasemest)
else if (Value_new==2)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
3. Punane (sõltub valgustuse tasemest)
else if (Value_new==3)
{
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
4. Sinine (sõltub valgustuse tasemest)
else if (Value_new==4)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
5. Kõik on lülitatud sisse sõltuvalt valgustuse tasemest
else if (Value_new==5)
{
on();
}
void on()
{
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
Uued funktsioonid, mis oli kasutatud
Valguse taseme lugemine ja reguleerimine
void loop()
{
lightLevel = analogRead(sensorPin); // valgustuse tase loetakse analoogtihvti
manualTune(); // eraldi funktsioon loetud väärtuste seadistamiseks
Fototakistilt valguse taseme lugemine
void on()
{
analogWrite(ledPinR, lightLevel); // punane LED lugemine
analogWrite(ledPinG, lightLevel); // roheline LED lugemine
analogWrite(ledPinB, lightLevel); // sinine LED lugemine
}
Loetud väärtuste teisendamine
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255); // teisendab valgustaseme vahemikust 300–800 vahemikku 0–255
lightLevel = constrain(lightLevel, 0, 255); // piirab vastuvõetud väärtust vahemikus 0 kuni 255 (juhul kui analooglugemine andis väärtused väljaspool määratud vahemikku)
}
Käivitav kood
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;
// LED-i initsialiseerimine
void setup(){
pinMode(ledPinR, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinB, OUTPUT);
}
// fotoresistori ja potentsiomeetri initsialiseerimine
void loop()
{
lightLevel = analogRead(sensorPin);
manualTune();
Value_new = analogRead(BUTTON);
Value_new=map(Value_new, 0, 1023, 0, 5); // 5 režiimid
// 1 režiim - lülitatud välja
if (Value_new==1)
{
analogWrite(ledPinR, LOW);
analogWrite(ledPinG, LOW);
analogWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
// 2 režiim - lülitatud roheline
else if (Value_new==2)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, HIGH);
digitalWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
// 3 režiim - lülitatud punane
else if (Value_new==3)
{
digitalWrite(ledPinR, HIGH);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, LOW);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
// 4 režiim - lülitatud sinine
else if (Value_new==4)
{
digitalWrite(ledPinR, LOW);
digitalWrite(ledPinG, LOW);
digitalWrite(ledPinB, HIGH);
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
// 5 režiim - kõik on lülitatud sisse sõltuvalt valgustuse tasemest
else if (Value_new==5)
{
on();
}
}
// fototakistilt valguse taseme lugemine
void on()
{
analogWrite(ledPinR, lightLevel);
analogWrite(ledPinG, lightLevel);
analogWrite(ledPinB, lightLevel);
}
// väärtuste teisendamine töö jaoks mugavaks väärtuseks
void manualTune()
{
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
}
Skeem Tinkercad'is & simulatsioon
Töötav skeem Arduino Uno-ga
