Praktika 3. Nupp ja Photoresistor

Katse 3.1 «Nupp»

Komponendid:

Nupp — 2
LED — 1
Taikisti — 3 (220 Om)
Juhe — 7
Arendusplaat — 1
Emaplaat — 1

Skeem:

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

  }    	

  }

Katse 3.2 «Photoresistor»

Komponendid:

Photoresistor — 1
LED — 1
Taikisti — 1 (220 Om)
Taikisti — 1 (10K Om)
Juhe — 6
Arendusplaat — 1
Emaplaat — 1

Skeem:

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.3

Töö Kirjeldus:

Valgusfooril on kaks režiimi: päev ja öö. Kui on pime, läheb sisse öörežiim. Kui on valge, läheb sisse päevarežiim. Potentsiomeeter lülitab valgusfoori sisse ja välja.

Töö Protsess:

Kui on pime, valgusfoor lülitab öörežiimi (vilkuv kollane tuli). Kui on valge, valgusfoor lülitab päevarežiimi.
Esmalt põleb punane tuli (5 sekundit). Siis põleb kollane tuli (3 sekundit). Siis kustuvad punane ja kollane. Põleb roheline tuli (5 sekundit).
Potentsiomeeter lülitab valgusfoori sisse ja välja.

Komponendid:

Photoresistor — 1
Emaplaat — 1
Liiklusfoori moodul — 1
Potentsiomeeter — 1
Taikisti — 1 (10K Om)
Juhe — 12
Arendusplaat — 1

Ühendamise Skeem:

Programm:

const int sensorPin = 1;
const int sensorPin1 = 0;
const int ledPinRed = 3;
const int ledPinYellow = 4;
const int ledPinGreen = 5;

int lightLevel;
int sensorValue = 0;
const int threshold = 500;

void setup() {
  pinMode(ledPinRed, OUTPUT);
  pinMode(ledPinYellow, OUTPUT);
  pinMode(ledPinGreen, OUTPUT);

  digitalWrite(ledPinRed, LOW);
  digitalWrite(ledPinYellow, LOW);
  digitalWrite(ledPinGreen, LOW);

  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin1);
  int mode;

  if (sensorValue < 512) {
    mode = 0; 
  } else {
    mode = 1; 
  }

  lightLevel = analogRead(sensorPin);

  if (mode == 0) {
    reziim1();
  } else if (mode == 1) {
 	reziim2();
  } else {
    Serial.println("Valgust ei ole piisavalt — välja lülitatud");
  }
}

void reziim1() {
  if (lightLevel < threshold) {
    Serial.println("Päevarežiim on aktiivne");
    paev();
  } else {
    Serial.println("Öörežiim on aktiivne");
    oo();
}
}
  
  void reziim2() {
  digitalWrite(ledPinRed, LOW);
  digitalWrite(ledPinYellow, LOW);
  digitalWrite(ledPinGreen, LOW);
  }


void paev() {
int i;
for (i = 0; i < 1; i++) {
digitalWrite(ledPinRed, HIGH);
digitalWrite(ledPinYellow, LOW);
digitalWrite(ledPinGreen, LOW);
delay(5000); 


digitalWrite(ledPinRed, HIGH);
digitalWrite(ledPinYellow, HIGH);
digitalWrite(ledPinGreen, LOW);
delay(3000);

digitalWrite(ledPinRed, LOW);
digitalWrite(ledPinYellow, LOW);
digitalWrite(ledPinGreen, HIGH);
delay(5000);

int n;
for ( n = 0; n < 4; n++) {
digitalWrite(ledPinGreen, HIGH);
delay(250);
digitalWrite(ledPinGreen, LOW);
delay(250);
} 

digitalWrite(ledPinRed, LOW);
digitalWrite(ledPinYellow, HIGH);
digitalWrite(ledPinGreen, LOW);
delay(3000);
}
}

void oo() {
  for (int a = 0; a < 8; a++) {
    digitalWrite(ledPinYellow, HIGH);
    delay(400);
    digitalWrite(ledPinYellow, LOW);
    delay(400);
  }
}

Video:

https://drive.google.com/file/d/1MX1kyGkabEdkpWODh9-lnnWfUV3r8_rz/view?usp=drive_link

Uued Funktsioonid:

Serial.println () — Näitab ekraanil fraasi, mis on sulgudes.
analogRead() — Loeb analoogandureid.

Rakendamine:

Näitamiseks (näitamaks, et midagi töötab või ei tööta);
Valgustus;
Dekoratiivne valgustus;
Ekraanid ja ekraanid;
Häiresignaalid ja turvalisus.