Tema 2: POTENTSIOMEETER \ Katse -Potentsiomeetri kasutamine

2. Katse -Potentsiomeetri kasutamine-

int sensorPin = 0;        
 
int ledPin = 13;                                      
 
int sensorValue = 0;                      
 
void setup()
 
{       
 
  pinMode(ledPin, OUTPUT);  
 
  Serial.begin(9600);
 
}
 
void loop() {                              
 
  sensorValue = analogRead(sensorPin); //   loeb analoog sisendi väärtust ja saadab tagasi täisarvu vahemikus 0 kuni 1023. See tähendab 10 bitilist täpsust (2^10 = 1024).        
 
  digitalWrite(ledPin, HIGH);         
 
  delay(sensorValue);                 
 
  digitalWrite(ledPin, LOW);              
 
  delay(sensorValue);  
 
  float voltage = sensorValue * (5.0 / 1023.0); // konverteerime väärtuse (0 - 1023)  ja tagastab (0 - 5V):
 
  Serial.println(voltage);   // Saadud tulemused kirjutame Serial Monitori.         
 
}

int sensorPin = 0; — Объявляется переменная sensorPin, которая будет использоваться для подключения датчика. В данном случае используется аналоговый пин 0. // Deklareeritakse muutuja sensorPin, mida kasutatakse anduri ühendamiseks. Antud juhul kasutatakse analoogpinni 0.

int ledPin = 13; — Здесь создается переменная ledPin для пина, к которому подключен светодиод. Это пин 13 // Siin luuakse muutuja ledPin, mis tähistab viigu, millega LED on ühendatud. See on viik 13

int sensorValue = 0; — Переменная sensorValue будет хранить значение, которое считывается с датчика. // Muutuja sensorValue salvestab andurilt loetud väärtuse.

void setup() — Функция setup() — выполняется один раз при старте программы. // käivitatakse üks kord programmi alguses.
{
pinMode(ledPin, OUTPUT); — 
настраивает пин 13 как выход для управления светодиодом. // konfigureerib viigu 13 väljundina LED-i juhtimiseks.

Serial.begin(9600) — инициализирует последовательный порт со скоростью 9600 бод для вывода данных в Serial Monitor. // Initsialiseerib 9600 baudi jadapordi andmete väljastamiseks seeriamonitorile.

void loop() { — Функция loop() выполняется бесконечно, после запуска программы. // Funktsiooni loop() täidetakse lõpmatult pärast programmi käivitamist.

sensorValue = analogRead(sensorPin); — Считывается значение с аналогового пина 0 (где подключен датчик). Значение будет в диапазоне от 0 до 1023. // Väärtus loetakse analoogviigult 0 (kuhu on ühendatud andur). Väärtus jääb vahemikku 0-1023.

digitalWrite(ledPin, HIGH); — Включается светодиод (пин 13). // LED (viik 13) lülitub sisse.

delay(sensorValue); — Задержка (пауза) равная значению sensorValue (в миллисекундах). Чем больше значение датчика, тем дольше будет задержка. // Viivitus (paus), mis on võrdne sensorValue väärtusega (millisekundites). Mida suurem on sensori väärtus, seda pikem on viivitus.

digitalWrite(ledPin, LOW); — Выключается светодиод. // LED on välja lülitatud.

float voltage = sensorValue * (5.0 / 1023.0); — Преобразуется значение с датчика (от 0 до 1023) в напряжение от 0 до 5 В. Это делается через умножение на коэффициент (5.0 / 1023.0). // Teisendab andurilt saadud väärtuse (0 kuni 1023) pingeks 0 kuni 5 V. Selleks korrutatakse see teguriga (5,0 / 1023,0).

Serial.println(voltage); — Выводится вычисленное напряжение на Serial Monitor. // Arvutatud pinge väljastatakse seeriamonitorile.

Ülesanne 2 Valguskett

Tinkercad

Minu kood

/*
  Подключение светодиодов (сверху вниз):
  1: Красный    – пин 3
  2: Серый      – пин 2
  3: Зелёный    – пин 11
  4: Красный    – пин 10
  5: Зелёный    – пин 9
  6: Жёлтый     – пин 8
  7: Зелёный    – пин 7
  8: Жёлтый     – пин 6
  9: Зелёный    – пин 4

  Потенциометр подключён к аналоговому входу A0.
*/

int ledPins[] = {3, 2, 11, 10, 9, 8, 7, 6, 4};
int arrayLength = sizeof(ledPins) / sizeof(ledPins[0]);

// Пин для выбора режима (считываем значение с потенциометра)
int modePin = A0;

void setup() {
  // Инициализация пинов для светодиодов как выходов
  for (int i = 0; i < arrayLength; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  
  // Инициализация пина для потенциометра
  pinMode(modePin, INPUT);
  
  // Инициализация генератора случайных чисел (используем чтение с A1 как seed)
  randomSeed(analogRead(A1));
}

void loop() {
  // Читаем значение с потенциометра
  int sensorVal = analogRead(modePin);
  sensorVal = constrain(sensorVal, 0, 1023);
  // Преобразуем значение в диапазон от 1 до 5 для выбора режима работы
  int mode = map(sensorVal, 0, 1023, 1, 5);

  // Выбор режима работы в зависимости от положения потенциометра
  switch (mode) {
    case 1:
      mode1(); // Последовательно включаем от первого к последнему светодиоду
      break;
    case 2:
      mode2(); // Последовательно включаем в обратном порядке (снизу вверх)
      break;
    case 3:
      mode3(); // Сначала включаем светодиоды с четными индексами, затем с нечетными
      break;
    case 4:
      mode4(); // Все светодиоды включаются одновременно, затем выключаются
      break;
    case 5:
      mode5(); // Случайное включение светодиодов
      break;
    default:
      mode1();
      break;
  }
}

// Режим 1: Последовательно включаем светодиоды (сверху вниз)
void mode1() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
}

// Режим 2: Последовательно включаем светодиоды в обратном порядке (снизу вверх)
void mode2() {
  for (int i = arrayLength - 1; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
}

// Режим 3: Сначала включаем светодиоды с четными индексами, затем с нечетными
void mode3() {
  // Сначала – четные индексы массива (0, 2, 4, ...)
  for (int i = 0; i < arrayLength; i += 2) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
  // Затем – нечетные индексы массива (1, 3, 5, ...)
  for (int i = 1; i < arrayLength; i += 2) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
}

// Режим 4: Все светодиоды включаются одновременно, затем выключаются
void mode4() {
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], HIGH);
  }
  delay(1000);
  for (int i = 0; i < arrayLength; i++) {
    digitalWrite(ledPins[i], LOW);
  }
  delay(1000);
}

// Режим 5: Случайное включение светодиодов
void mode5() {
  for (int i = 0; i < arrayLength; i++) {
    int rndIndex = random(0, arrayLength);
    digitalWrite(ledPins[rndIndex], HIGH);
    delay(200);
    digitalWrite(ledPins[rndIndex], LOW);
  }
}

Funktsioonid
setup() – Seadistab pinnid (LEDide ja potentsiomeetri jaoks) ning käivitab juhuslike arvude generaatori.

loop() – Programmi põhitsiirkond: loeb potentsiomeetri väärtust, määrab režiimi ja kutsub välja vastava kasutajafunktsiooni.

mode1() – Režiim 1: LEDide järjestikune süttimine ülevalt alla.

pinMode(pin, mode) – Seadistab pinni töörežiimi (sisse- või väljund).

digitalWrite(pin, value) – Seab määratud pinnile kõrge või madala loogika taseme.

delay(milliseconds) – Peatab programmi täitmise etteantud millisekundiks.

analogRead(pin) – Loeb antud pinnilt analoogsignaali väärtust.

constrain(x, a, b) – Piirab väärtuse x vahemikku a kuni b.

map(value, fromLow, fromHigh, toLow, toHigh) – Teisendab väärtuse ühest vahemikust teise.

randomSeed(seed) – Initsialiseerib juhuslike arvude generaatori sädeme.

random(min, max) – Tagastab juhusliku arvu antud väärtusvahemikus.

Kuidas programm töötab
Režiim 1: LEDide järjestikune süttimine ülalt alla.

Režiim 2: LEDide süttimine vastupidises järjekorras (alt üles).

Režiim 3: Esmalt süttivad LEDid, mille indeksid on paarisarvulised, seejärel need, mille indeksid on paaritud.

Režiim 4: Kõik LEDid süttivad samaaegselt, seejärel kustutatakse.

Režiim 5: Ühe LEDi juhuslik süttimine.

Mida ma kasutan

Arduino plaat (näiteks Arduino Uno).

9 LED-d, ühendatud järgmistele pinnadele:

  • Punane – pin 3
  • Hall – pin 2
  • Roheline – pin 11
  • Punane – pin 10
  • Roheline – pin 9
  • Kollane – pin 8
  • Roheline – pin 7
  • Kollane – pin 6
  • Roheline – pin 4

Kuidas elus kasutada

Õppeprojektid: See kood on suurepärane näide algajatele elektroonika ja mikrokontrollerite programmeerimisel. Õpilased saavad õppida, kuidas töötada pinnide, analoogandurite ja juhuslike arvude funktsioonidega ning mõista programmistruktuuri erinevate töörežiimidega.

Dekoratatiivne valgustus: Loo interaktiivne garland või valgusinstallatsioon pühadeks, pidude jaoks või lihtsalt ruumi kaunistamiseks. Potentsiomeeter võimaldab käsitsi valida erinevaid valgustuse stiile, luues mitmekesiseid valguseefekte.

Video

https://drive.google.com/file/d/1XyK9m8UqUhQIub-5Wh28l7XdKFuWZ09Z/view?usp=sharing