Posted in

Katse 3

Ülesanne nuppudega

skeem:

kirjeldus:

Meil on kaks nuppu, millest üks vastutab lambi sisselülitamise eest ja teine on vastutav selle väljalülitamise eest. Peamine adea on see, et siis kasutaja tahab valgust või mitte

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

  }    	

  }

Ülesanne Photoresistoriga

skeem:

kirjeldus

siin on fotoresistor. Fotoresistori kasutatakse ddedektorit valguse ja teha midagi, siis on see tume või valgus. Siin töötab fotoresistor nii: kui on pime, siis süttib lamp, kui on pime, siis lülitab lamp välja.

kood:

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

katse 3

skeem:

Töö kirjeldus:

öövalgustus kahe režiimiga: päevarežiim ja öörežiim

Kasutatud komponendid:

  • Arduino Uno
  • 3x ledid
  • Fotoristor
  • Arendusplaat
  • 3x 220kΩ takistit
  • 1x 10kΩ takisti
  • 8x Juhtme

Töö protsess:

see öine valgus töötab koosneb 3 ledist, mõnest resistrsist ja fotorestorist. Põhiidee on see, et lambid põlevad siis, kui on pime, ja lülituvad välja siis, kui on pime.

kood:

const int ldrPin = A1;      // Photoresistor (LDR) connected to A1
const int ledPin1 = 10;     // LED 1 (Digital)
const int ledPin2 = 11;     // LED 2 (Digital)
const int ledPin3 = 12;     // LED 3 (PWM for brightness)

void setup() {
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  Serial.begin(9600);  // Start serial communication
}

void loop() {
  // Read light level from LDR (0 = bright, 1023 = dark)
  int lightLevel = analogRead(ldrPin);

  // --- Control LED 1 (ON in complete darkness) ---
  if (lightLevel > 800) {
    digitalWrite(ledPin1, HIGH);  // Turn ON LED 1
  } else {
    digitalWrite(ledPin1, LOW);   // Turn OFF LED 1
  }

  // --- Control LED 2 (ON in moderate darkness) ---
  if (lightLevel > 500) {
    digitalWrite(ledPin2, HIGH);  // Turn ON LED 2
  } else {
    digitalWrite(ledPin2, LOW);   // Turn OFF LED 2
  }

  // --- Control LED 3 (PWM brightness, dim when dark) ---
  // Map LDR reading (200-800) to PWM brightness (0-255)
  int brightness = map(lightLevel, 200, 800, 0, 255);
  brightness = constrain(brightness, 0, 255);  // Limit to 0-255
  analogWrite(ledPin3, brightness);  // Set LED 3 brightness

  // Print light level to Serial Monitor
  Serial.print("Light Level: ");
  Serial.println(lightLevel);

  delay(100);  // Small delay for stability
}

Uued funktsioonid:

if (lightLevel > lightThreshold) – Kui valgustase on suurem kui läviväärtus, siis täidetakse esimene koodiblokk.

Video:

Uued funktsioonid:

if (lightLevel > lightThreshold) – Kui valgustase on suurem kui läviväärtus, siis täidetakse esimene koodiblokk.

Leave a Reply

Your email address will not be published. Required fields are marked *