Praktika 3: Nupp, Switch ja Photoresistor ja öölamp

Aruanne

Katse 3.1: -Nupp, Switch ja Photoresistor-

1. – Näidis- Nuppu kasutamine

Komponendid:

Skeem:

Simulatsioon väljas:
Simulatsiooni tööl:

Kood:

// Nuppud.

-----Kood-----

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

  }    	

  }


2. – Näidis- Slideswitch’i kasutamine

Skeem:

Kood:

const int button1Pin = 2;  // nupp1 on ühendatud viiguga 2
const int button2Pin = 3;  // nupp2 on ühendatud viiguga 3
const int ledPin = 13;     // LED on ühendatud viiguga 13

void setup() {
  pinMode(button1Pin, INPUT); // määrame nupu viigu sisendiks
  pinMode(button2Pin, INPUT);
  pinMode(ledPin, OUTPUT);    // määrame LED viigu väljundiks
}

void loop() {
  int button1State = digitalRead(button1Pin); // loeme nupu 1 oleku
  int button2State = digitalRead(button2Pin); // loeme nupu 2 oleku

  // LED süttib, kui ainult üks nupp on alla vajutatud (LOW)
  if ((button1State == LOW || button2State == LOW) &&
      !(button1State == LOW && button2State == LOW)) {
    digitalWrite(ledPin, HIGH);  // LED sisse
  } else {
    digitalWrite(ledPin, LOW);   // LED välja
  }
}

Katse 3.2: -Photoresistor-

Komponendid:

Kirjeldus:

Ühendada kõigepealt maketeerimislaua ühte äärde (nagu joonisel) fototakisti nii, et üks jalg oleks ühendatud toitega ning teine — läbi takisti maandusesse ja analoogsisendi viigule. Seejärel paigutada LED maketeerimislaua teise otsa, et selle valgus ei mõjutaks fototakistit. Valguse intensiivsuse jälgimiseks avada Serial Monitor rohelise tööriistariba paremas ääres oleva luubiikooni kaudu.

Skeem:

Kood:

const int sensorPin = 0;    // Fototakisti ühendatud A0 viigule
const int ledPin    = 9;    // LED ühendatud PWM-viigule D9

int lightLevel, high = 0, low = 1023;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);       // Serial Monitori käivitamine
}

void loop() {
  lightLevel = analogRead(sensorPin);  // Loeme valguse taseme (0–1023)

  // Valige ainult üks meetod:
  manualTune();     // käsitsi piiride seadistus
  // autoTune();    // automaatne kalibreerimine

  analogWrite(ledPin, lightLevel);     // Muudame LEDi heledust vastavalt valguse tasemele

  // Kui tahad vastupidist efekti (nt öölambi loogika):  
  // analogWrite(ledPin, 255 - lightLevel);

  Serial.print("Valguse tase: ");
  Serial.println(lightLevel);          // Väljund Serial Monitori
  delay(1000);
}

void manualTune() {
  // Teisendame 300–800 vahemiku väärtused 0–255 vahemikku (mida silmale sobivam)
  lightLevel = map(lightLevel, 300, 800, 0, 255);
  lightLevel = constrain(lightLevel, 0, 255);  // Piirame väärtuse kindlatesse piiridesse
}

void autoTune() {
  // Salvestame reaalajas madalaima ja kõrgeima väärtuse
  if (lightLevel < low)  low = lightLevel;
  if (lightLevel > high) high = lightLevel;

  // Kalibreerime vahemiku vastavalt reaalsetele oludele
  lightLevel = map(lightLevel, low + 10, high - 30, 0, 255);
  lightLevel = constrain(lightLevel, 0, 255);
}

Ülesanne 3: Öölamp

Komponendid:

x1

x1

x1

x3 220Ω x1 10 kΩ

x12

x1

Kirjeldus:

ototakisti ja takisti moodustavad pingejaguri, mille signaal loetakse A1 kaudu. Potentsiomeeter on ühendatud A0-le ning seda kasutatakse režiimi valimiseks. RGB LED on ühendatud PWM-viikudele D11 (punane), D10 (roheline) ja D9 (sinine). Sõltuvalt valgustasemest reguleeritakse LED-i eredust. Potentsiomeetriga saab valida kolme töörežiimi: LED välja, helesinine valgus või vahelduvad värvitoonid. Kõik komponendid on toidetud Arduino 5V ja GND kaudu.

Skeem:

Simulatsioon väljas:
Simulatsiooni tööl:

Kood:

int PIN_RED = 11;
int PIN_GREEN = 10;
int PIN_BLUE = 9;

int PIN_POT = A0;
int PIN_LDR = A1;

int brightness, maxVal = 0, minVal = 1023;

void setup() {
  pinMode(PIN_RED, OUTPUT);
  pinMode(PIN_GREEN, OUTPUT);
  pinMode(PIN_BLUE, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int ldrValue = analogRead(PIN_LDR);         // Loeme valgusanduri väärtuse
  int potValue = analogRead(PIN_POT);         // Loeme potentsiomeetri väärtuse

  int currentMode = map(potValue, 0, 1023, 1, 3);  // Määrame režiimi potentsiomeetri järgi
  currentMode = constrain(currentMode, 1, 3);      // Piirame režiimi vahemikku

  brightness = ldrValue; // Algne heledusväärtus

  autoCalibration(); // Kalibreerime valguse vahemiku

  Serial.print("ldrValue: ");
  Serial.print(ldrValue);
  Serial.print(" | brightness: ");
  Serial.println(brightness);

  switch (currentMode) {
    case 1:
      // Režiim 1 — valgus on välja lülitatud
      analogWrite(PIN_RED, 0);
      analogWrite(PIN_GREEN, 0);
      analogWrite(PIN_BLUE, 0);
      break;
    case 2:
      // Režiim 2 — helesinine (roheline + sinine)
      analogWrite(PIN_RED, 0);
      analogWrite(PIN_GREEN, brightness);
      analogWrite(PIN_BLUE, brightness);
      break;
    case 3:
      // Režiim 3 — juhuslikud värviüleminekud
      int valR = random(110, 190);
      int valG = random(60, 130);
      int valB = 255;

      // Skaleerime värvid vastavalt heledusele
      int outR = (valR * brightness) / 255;
      int outG = (valG * brightness) / 255;
      int outB = (valB * brightness) / 255;

      analogWrite(PIN_RED, outR);
      analogWrite(PIN_GREEN, outG);
      analogWrite(PIN_BLUE, outB);

      delay(250);
      break;
  }
  delay(120);
}

void autoCalibration() {
  // Uuendame min ja max väärtused
  if (brightness < minVal) {
    minVal = brightness;
  }
  if (brightness > maxVal) {
    maxVal = brightness;
  }

  // Kaardistame väärtused vahemikku 0-255 väikese korrektsiooniga
  brightness = map(brightness, minVal + 8, maxVal - 25, 0, 255);
  brightness = constrain(brightness, 0, 255);
}

Video:

Interaktiivne Arduino skeem

Kasutamisvõimalused tavaelus

Automaatne öölamp
  • Lamp lülitub ise pimedas sisse ja reguleerib oma eredust vastavalt ruumi valgustasemele — ideaalne öökapile või lastetuppa, et mitte pimedas kobada.
Energiat säästev valguslahendus
  • Kui päeval on piisavalt valgust, jäävad LED-id automaatselt välja; alles hämaras hakkavad tööle. See aitab hoida elektrit kokku.

Valguse meeleoluvalgusti

  • Potentsiomeetri abil saab valida värvirežiimi või muuta heledust — näiteks lõõgastava sinaka valguse jaoks enne magamaminekut.
Turvavalgustus
  • Sobib kasutada treppidel, koridorides või rõdul, kus valgus süttib automaatselt, kui ümberringi on pime, vähendades komistamise riski.
Lastetoa “unelamp”
  • Lastele, kes kardavad pimedust, saab öölamp automaatselt valgust anda nii, et see ei oleks liiga ere ega häiriks und.
Dekoratiivne efektvalgustus

Kolmanda režiimi (juhuslikud värviüleminekud) saab kasutada näiteks peol, et luua huvitavat valgusefekti.