Teema 3: NUPP ja PHOTORESISTOR

Katse 3.1. ( Näidis 1 )

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

  }    	

  }

const int button1Pin = 2; — Määrab nupp 1 pin-i numbri, mis on ühendatud pin-iga 2. // Определяет номер пина для первой кнопки, которая подключена к пину 2.

const int ledPin = 13; — Määrab LED pin-i numbri, mis on ühendatud pin-iga 13. // Определяет номер пина для светодиода, подключенного к пину 13.

void setup() — Algfunktsioon, mis käivitatakse ainult korra enne põhitsükli alustamist. // Функция настройки, которая выполняется один раз при запуске программы перед основным циклом.

pinMode(button1Pin, INPUT); — Määrab button1Pin sisendiks, et lugeda nupp 1 seisundit (HIGH või LOW). // Устанавливает пин кнопки 1 как входной, чтобы считывать его состояние (HIGH или LOW).

pinMode(button2Pin, INPUT); Määrab button2Pin sisendiks, et lugeda nupp 2 seisundit. // Устанавливает пин кнопки 2 как входной для считывания состояния.

void loop() — Peamine tsükkel, mis käivitub pidevalt pärast setup() funktsiooni lõppemist. // Основной цикл программы, который выполняется бесконечно после выполнения функции setup().

int button1State, button2State; — Loome muutujad button1State ja button2State, et salvestada nuppude olekud. // Объявляются переменные button1State и button2State, чтобы сохранить состояние кнопок.

button1State = digitalRead(button1Pin); — Loeme button1Pin seisundi (HIGH või LOW) ja salvestame selle muutujasse button1State. // Считываем состояние пина кнопки 1 (HIGH или LOW) и сохраняем его в переменную button1State.

digitalWrite(ledPin, HIGH); — Kui eelmine tingimus on täidetud, siis lülitab LED sisse. // Если условие выполнено, включает светодиод (устанавливает высокий уровень на пин светодиода).

digitalWrite(ledPin, LOW); — Kui LED ei tohiks olla sisse lülitatud, siis lülitame selle välja (seame pinge madalaks). // Если светодиод не должен быть включен, выключаем его (устанавливаем низкий уровень на пин светодиода).

( Näidis 2 )

Katse 3.2.

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

}

int lightLevel, high = 0, low = 1023; — Loome muutujad lightLevel, high ja low, et salvestada valguse taset ja määrata madalamad ja kõrgemad piirväärtused. // Создаем переменные lightLevel, high и low для хранения уровня освещенности и задания минимальных и максимальных значений.

Serial.begin(9600); — Seab Serial Monitori kiiruseks 9600 bitti sekundis, et edastada andmeid arvutisse. // Настроит скорость передачи данных через Serial Monitor на 9600 бит в секунду для вывода данных на компьютер.

lightLevel = analogRead(sensorPin); — Loeme sensori analoogväljundi väärtuse (vahemik 0–1023), mis sõltub valgustaseme tugevusest. // Считывает значение с аналогового пина (диапазон от 0 до 1023), которое зависит от уровня освещенности.

lightLevel = map(lightLevel, 300, 800, 0, 255); — Funktsioon map() muudab väärtuse vahemiku 300-800 vahemikku 0-255, et kohandada valgustugevuse taset LED-il. // Функция map() преобразует значение из диапазона 300-800 в новый диапазон 0-255, чтобы настроить яркость светодиода.

manualTune(); — Kutsub välja käsitsi kohandamise funktsiooni, mis reguleerib valgustugevust käsitsi määratud vahemikus. // Вызывает функцию manualTune(), которая вручную настраивает уровень освещенности в заданном диапазоне.

analogWrite(ledPin, lightLevel); — Lülitab LED-i heleduse vastavalt lightLevel väärtusele. Seda saab kasutada sujuvaks valgustuse reguleerimiseks. // Устанавливает яркость светодиода на основе значения lightLevel. Это позволяет плавно регулировать освещенность.

Serial.print(lightLevel); — Kuvab Serial Monitoris valgustugevuse väärtuse (0–1023). // Делает значение уровня освещенности в Serial Monitor (от 0 до 1023).

Serial.println(«»); — Kuvab Serial Monitoris tühja rea, et eraldada erinevad andmed. // Печатает пустую строку в Serial Monitor, чтобы разделить данные.

—————————————————Ülesanne Öölamp——————————————————

Töö kirjeldus:

Nelja töörežiimiga öövalgusti fotoresistoriga:
Režiim 1) Kõik LED-id välja lülitatud
Režiim 2) Ainult üks kahest valgusdioodist on sisse lülitatud.
Režiim 3) Kõik kaks dioodi on sisse lülitatud.
Režiim 4) Kõik 2 dioodi töötavad täisvõimsusel sõltumata fotoresistori valgustusest!

Kasutatud komponenid:

Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (10tk)
Takisti (3tk, 220Om ja 10000Om)
LED (2tk: 1 valge ja 1 roheline)
PHOTORESISTOR (1tk)
Potentsiomeetr (1tk)

Töö protsess:

Öövalgusti, millel on 4 erinevat töörežiimi, mida saab lülitada potentsiomeetri abil ja mis töötab fotoresistori ja valgusallikaga.
1) Kõik valgusdioodid on välja lülitatud ka siis, kui fotoresistori valgus on sisse lülitatud.
2) Üks LED on sisse lülitatud ja mõjutab valguse
3) Kaks valgusdioodi on sisse lülitatud ja mõjutavad valgust
4) Kõik kaks LED-i põlevad maksimaalselt (sõltumata fotoresistori valgusest!).

LED-ide rakendamine:

Valgustus kodus või õues inimeste mugavuse huvides. Valgustub sõltuvalt ümbritsevast valguse hulgast

Skeem:

Programm:

// Pins
const int ldrPin = A0;
const int potPin = A1;

const int ledPins[] = {8, 9, 10};
const int ledCount = 3;

void setup() {
  for (int i = 0; i < ledCount; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], LOW);
  }

  Serial.begin(9600);
}

void loop() {
  int lightLevel = analogRead(ldrPin);
  int potValue = analogRead(potPin);

  // Potentsiomeetri väärtus 5 tsooni kohta
  int mode = map(potValue, 0, 1023, 1, 5);

  Serial.print("Režiim: ");
  Serial.print(mode);
  Serial.print(" | Valgustus: ");
  Serial.println(lightLevel);

  switch (mode) {
    case 1: // Kõik välja lülitatud
      controlLeds(0);
      break;

    case 2: // Üks LED sõltuvalt valgustusest
      if (lightLevel < 500) controlLeds(1);
      else controlLeds(0);
      break;

    case 3: // Kaks valgusdioodi sõltuvalt valgustusest
      if (lightLevel < 500) controlLeds(2);
      else controlLeds(0);
      break;

    case 4: // Kolm valgusdioodi sõltuvalt valgusest
      if (lightLevel < 500) controlLeds(3);
      else controlLeds(0);
      break;

    case 5: // Kõik alati kaasa arvatud
      controlLeds(3);
      break;
  }

  delay(100);
}

void controlLeds(int numberOn) {
  for (int i = 0; i < ledCount; i++) {
    digitalWrite(ledPins[i], i < numberOn ? HIGH : LOW);
  }
}

Video:

https://drive.google.com/file/d/1UX8YoPA5zNEzMOKGgGgiXt0ASJgVhz-e/view?usp=sharing

Uued funktsioonid :

map(lightLevel, 0, 1023, 255, 0) — Esimene parameeter on algväärtus, mida tahame teisendada (lightLevel), Teine ja kolmas parameeter on algväärtuste vahemik, st 0 kuni 1023, Neljas ja viies parameeter on sihtvahemik, millesse me tahame väärtust teisendada, st 255 kuni 0. See tähendab, et kui lightLevel on minimaalne (0), on heledus maksimaalne (255) ja vastupidi.

abs() — on sisseehitatud funktsioon, mis tagastab arvu absoluutväärtuse. Käesoleval juhul rakendatakse seda praeguse potentsiomeetri väärtuse (potValue) ja eelmise väärtuse (previousPotValue) vahe suhtes.

int lightLevel = analogRead(ldrPin);
int potValue = analogRead(potPin); — Loeb analoogväärtused LDR-st ja potentsiomeetrist.

int mode = map(potValue, 0, 1023, 1, 5); — Teisendab potentsiomeetri väärtuse vahemikku 1 kuni 4 (režiimi valik).


Warning: Undefined array key "sfsi_facebook_display" in /data01/virt140713/domeenid/www.martinrossakov24.thkit.ee/htdocs/wp/wp-content/plugins/ultimate-social-media-icons/libs/controllers/sfsiocns_OnPosts.php on line 450