Katse 3

3.1.1 Katse Nuppude ja Slideswitch’i kasutamise võimalus

Töö kirjeldus:

Looma situatsiooni kui LED põleb nuppu vajutamisel

Komponendid:

Arduino Uno
Arendusplaat
LED valgusdiood
Takisti 3 tk 220 Om
Juhtmed 7 tk

Ühendamise skeem:

Programm:

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 ( переменные для сохранения состояния кнопок)

  // Поскольку кнопки имеют только два состояния (нажаты и не нажаты) мы будем

  // работать с ними используя цифровые порты ввода. Для того чтобы считывать

  // digitalRead() функция позволяет получить один параметр с цифрового порта и возвратить либо HIGH (+5V), либо LOW ("0").

  button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse

  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);  // süütame LEDi (включаем светодиод)

  }

  else                          

  {

    digitalWrite(ledPin, LOW);  // kustutame LEDi (выключаем светодиод)

  }    	

  }

Foto:

Nuppu vajutamisel LED põleb

3.1.2 Slideswitch’i kasutamine

Töö kirjeldus:

Looma

Komponenid:

Arduino Uno
Arendusplaat
Patarei 9V
SlideSwitch 1tk
LED valgusdiood
Takisti 1 tk 220 Om
Juhtmed 7 tk

Ühendamise skeem:

Programm:

// C++ code
//
  int swPin = 4;
  int ledPin = 10;
  int switchstate = 0; 
void setup()
{
 pinMode(swPin, INPUT);
 pinMode(ledPin, OUTPUT);
}

void loop()
{
switchstate=digitalRead(swPin);
  if(switchstate==HIGH)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}

Foto:

Switch ON — LED põleb, Switch OFF — LED ei põle

3.2 Katse Photoresistor

Töö kirjeldus:

Imiteerima pime ja valgust, et LED põleks pime ajal ja valguse ajal ei põleks

Komponendid:

Arduino Uno
Arendusplaat
Fototakisti 1tk
LED valgusdiood
Takisti 1 tk 220 Om, 1 tk 10 kOm
Juhtmed 6 tk

Ühendamise skeem:

Programm:

const int sensorPin = 0;

const int ledPin = 9;

int lightLevel, high = 0, low = 1023;  // создадим глобальные переменные для уровней яркости high (высокий), low (низкий):

void setup()

{

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600); // //Serial monitori seadistamine (для отладки, чтобы увидеть показания датчиков)

}

void loop()

{

  // Диапазон чисел с которыми работает функция analogRead() находится в пределах от 0 (0 вольт) и 1023 (5 вольт).

  // Но! Управлением яркостью светодиода занимается функция analogWrite(),  она использует диапазон от от 0 до 255.

  lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse

  // Эту проблему можно решить с помощью двух полезных функций под названием map() и constrain():

  // Функция map() может преобразовывать один диапазон значений в другой. К примеру - мы указываем map() в параметрах, диапазон "из" 0-1023 "в" 0-255, она преобразует первый больший диапазон во второй, более мелкий.

  // Поскольку map() может столкнуться с числами за пределами диапазона,  скажем или больше, или меньше, или даже с отрицательными. 

  // Поэтому нужно за ранее подготовиться к такому повороту событий, для этого можно, и даже нужно использовать еще одну функцию - constrain().

  // Функция constrain() проверит содержится ли число в заданном диапазоне.

  // Если число выше диапазона, он будет уменьшено до самого большого, а если число ниже диапазона, он будет увеличенно до самого низкого

  // Пример:  если constrain() столкнулось с числами 1024, 1025, 1026.., она их преобразует в 1023, 1023, 1023..). С отрицательными числами она сделает тоже самое, т.е все отрицательные станут 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)   // если уровень "lightLevel" меньше 1023, то присвоим

  {                      

    low = lightLevel;     // теперь самым "низким" ~ 800

  }

  if (lightLevel > high)

  {

    high = lightLevel;

  }

  lightLevel = map(lightLevel, low+0, high-30, 0, 255);

  lightLevel = constrain(lightLevel, 0, 255);

}

Foto:

Valguse vahetamisel LED põleb kui on pime, kui on valgus siis LED ei põle

Ülesanne 3.1 Öölamp

Töö kirjeldus:

Luua öölamp

Komponenid:

Arduino Uno
Arendusplaat
RGB LED valgusdiood 1tk
Potentsioometr 1tk
Fototakisti 1 tk
Takisti 1 tk 10 K Om
Takisti 1 tk 220 Om
Juhtmed 12 tk

Ühendamise skeem:

https://www.tinkercad.com/things/lelwMBRu5Ni-powerful-esboo/editel?sharecode=cXjQBuuIfGx0T78DZGIUa4XCUpCTL9D-5zkarf2bD38

Seletamine:

Öölamp ei põle kui potentsiomeetri väärtus on väiksem või võrdleb 10 ning kui fototakisti väärtus on <100 siis ei põle.
Juhul kui eespool nimetatud kriteriiumid on suurem siis random funktsioonil valib põlemise intensiivsus 0-255.

Programm:

//defineerime pinne RGB LED, potentsiometer ja fototakisti
int redPin = 4;
int greenPin = 2;
int bluePin = 3;

int potentiometerPin = A0;

int photoresistorPin = A1;

void setup() {
  Serial.begin(9600);
  
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}

void loop() {
  int photoresistorValue = analogRead(photoresistorPin); //loeme fototakisti andmed
  int potentiometerValue = analogRead(potentiometerPin); //loeme potentsiometri andmed
  Serial.println(photoresistorValue);
  if (photoresistorValue < 100) { //juhul kui fototakisti väärtus on <100 siis ei põle
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, LOW);
    digitalWrite(bluePin, LOW);
  } 
  else {
    if (potentiometerValue <= 10) { //juhul kui potenstiomeetri väärtus on <= 10 siis ei põle
      digitalWrite(redPin, LOW);
      digitalWrite(greenPin, LOW);
      digitalWrite(bluePin, LOW);
    }
    else {
      analogWrite(redPin, random(255)); //kui potentsioometri väärtus on suurem > 10 siis põleb random 0-255 tugevusel
      analogWrite(greenPin, random(255));
      analogWrite(bluePin, random(255));
      delay(300);
    }
  }
}

Video:

https://drive.google.com/drive/folders/1QIIOFeZJeWjZsU1fwYtt2furDs4VmduP

Kus võib seda kasutada:

Öölampid, öösel põleb, päeval ei põle
Päikesepaneelid, mis võtavad vastu elektri valgusest
Trükimasinasse esitatavate paberilehtede arvu kontrollimine
infrapunakiirguse
infrapuna soojus- ja spektromeetria sensorite
keskkonnasaaste kontrolli aparatuuri
kosmoseuuringute
termodiagnostika meditsiinis


Ülesanne 3.1 Öölamp (Teine variant)

https://www.tinkercad.com/things/hD7mw7Z6SU6-funky-amur-hillar/editel?sharecode=7rwmR2OIZ2-NNAdQ8sycXD59NUF-kikxo-KYE_Rehbc

Programm:

const int slideSwitchPin = 12;
const int rgbRedPin = 7;
const int rgbGreenPin = 6;
const int rgbBluePin = 5;
const int buttonPin = 4;
const int photoresistorPin = A0;

int brightnessMode = 0; // 0 = madal heledus, 1 = keskmine heledus, 2 = kõrg heledus
int photoresistorValue = 0;
bool isDark = false;

void setup() {
  pinMode(slideSwitchPin, INPUT_PULLUP);
  pinMode(rgbRedPin, OUTPUT);
  pinMode(rgbGreenPin, OUTPUT);
  pinMode(rgbBluePin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
// Loe fototakisti väärtust
photoresistorValue = analogRead(photoresistorPin);

  // Kontrollige, kas slaidilüliti on sisse lülitatud
if (digitalRead(slideSwitchPin) == HIGH) 
{
  // Kontrollige, kas on pime
  if (photoresistorValue > 500) 
  {
    isDark = true;
  } 
  else 
  {
    isDark = false;
  }
  
  // Kui on pime, lülitage sisse RGB LED
  if (isDark) {
    // Kontrollige, kas nuppu vajutatakse heledusrežiimi muutmiseks
    if (digitalRead(buttonPin) == LOW) {
      brightnessMode = (brightnessMode + 1) % 3;
      delay(100); // Wait for button debounce
    }

    // RGB LED-i heleduse määramine heleduse režiimi alusel
    switch (brightnessMode) 
    {
      case 0:
        setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 20);
        break;
      case 1:
        setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 127);
        break;
      case 2:
        setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 255);
        break;
    }
    
    // RGB LED-i värvi määramine valgeks
    setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 255, 255, 255);
  } 
  else 
  {
    // Kui see pole pime, lülitage RGB LED välja ja lähtestage heledusrežiim
    setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0, 0, 0);
    brightnessMode = 0;
  }
} 
  
else 
{
  // Kui slaidilüliti on välja lülitatud, lülitage RGB LED välja ja lähtestage heledusrežiim
  setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0, 0, 0);
  brightnessMode = 0;
}
  // Prindi fototakisti ja isDark (0 on hele, 1 on tume) väärtus Serial Monitor
  Serial.print("Photoresistor value: ");
  Serial.print(photoresistorValue);
  Serial.print(", isDark: ");
  Serial.println(isDark);
  
}

// Helper function to set the color of the RGB LED
void setRgbColor(int redPin, int greenPin, int bluePin, int redValue, int greenValue, int blueValue) {
  analogWrite(redPin, redValue);
  analogWrite(greenPin, greenValue);
  analogWrite(bluePin, blueValue);
}

// Helper function to set the brightness of the RGB LED
void setRgbBrightness(int redPin, int greenPin, int bluePin, int brightness) {
  analogWrite(redPin, brightness);
  analogWrite(greenPin, brightness);
  analogWrite(bluePin, brightness);
}