Ülesanne 3 Nupp, Switch ja Photoresistor

1️⃣ Katse Nuppude ja Slideswitch’i kasutamise võimalus:

Цель:
Изучить управление светодиодом с помощью двух кнопок, реализуя логическую операцию «исключающее ИЛИ» (XOR).

Компоненты:

  • Плата Arduino Uno
  • 2 кнопки
  • Светодиод
  • Резисторы (по 220 Ом)
  • Макетная плата (breadboard)
  • Соединительные провода

Схема подключения:

  • Кнопки подключаются к цифровым пинам 2 и 3.
  • Светодиод подключается к пину 13 через резистор.
  • Все компоненты заземлены через GND.

Код программы:

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

  }    	
  }

Принцип работы:

  • Светодиод загорается, если нажата только одна из кнопок.
  • Если нажаты обе кнопки или ни одна, светодиод не светится.

2️⃣ Näidis- Slideswitch’i kasutamine:

Цель:
Понять, как с помощью слайд-переключателя можно управлять включением светодиода.

Компоненты:

  • Плата Arduino Uno
  • Слайд-переключатель
  • Светодиод
  • Резистор (220 Ом)
  • Макетная плата (breadboard)
  • Соединительные провода

Схема подключения:

  • Переключатель подключается к цифровому пину 4.
  • Светодиод подключается к пину 10 через резистор.
  • Все компоненты заземлены через GND.

Код программы:

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

Принцип работы:

  • Светодиод включается, когда переключатель находится в положении HIGH.
  • Светодиод выключается, когда переключатель в положении LOW.

3️⃣ Katse Photoresistor:

Цель:
Изучить, как фоторезистор может управлять яркостью светодиода в зависимости от освещенности.

Компоненты:

  • Плата Arduino Uno
  • Фоторезистор
  • Светодиод
  • Резистор (10 кОм)
  • Макетная плата (breadboard)
  • Соединительные провода

Схема подключения:

  • Фоторезистор подключается к аналоговому пину A0.
  • Светодиод подключается к пину 9 через резистор.
  • Все компоненты заземлены через GND.

Код программы:

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

}

Принцип работы:

  • Фоторезистор считывает уровень освещенности (0–1023).
  • Значение преобразуется в диапазон яркости светодиода (0–255).
  • При уменьшении освещенности яркость светодиода увеличивается, и наоборот.

⭐️ Projektiülesanne: Öölamp (Ночник)

Цель:
Создать ночник с возможностью изменения цвета и яркости в зависимости от положения потенциометра и уровня освещенности.

Компоненты:

  • Плата Arduino Uno
  • RGB-светодиод (или 3 отдельных светодиода: красный, зелёный, синий)
  • Потенциометр
  • Фоторезистор
  • Резисторы (по 220 Ом для светодиодов, 10 кОм для фоторезистора)
  • Макетная плата (breadboard)
  • Соединительные провода

Схема подключения:

  • Потенциометр подключается к аналоговому пину A0.
  • Фоторезистор подключается к аналоговому пину A1.
  • Красный светодиод — к пину 9, зелёный — к пину 10, синий — к пину 11 через резисторы.
  • Все компоненты заземлены через GND.

Код программы:

const int ledPin  = 9;     // Первый светодиод (красный)
const int led2Pin  = 10;    // Второй светодиод (зелёный)
const int led3Pin = 11;     // Третий светодиод (синий)
 
int sensorPote = A0;        // Потенциометр подключен к A0
int sensorPoteValue;        // Значение с потенциометра
 
int sensorPhoto = A1;       // Фоторезистор подключен к A1
int sensorPhotoValue;       // Значение с фоторезистора
 
int Value;                  // Значение от 0 до 8, которое определяет цвет
 
void setup()
{
  pinMode(ledPin, OUTPUT);     // Устанавливаем пины для светиков как выходы
  pinMode(led2Pin, OUTPUT);
  pinMode(led3Pin, OUTPUT);
  Serial.begin(9600);          // Включаем серийный порт для отладки
}
 
void pinidOFF()
{
  // Выключаем все светодиоды
  digitalWrite(ledPin, LOW);
  digitalWrite(led2Pin, LOW);
  digitalWrite(led3Pin, LOW);  
}
 
// Функция зажигает КРАСНЫЙ цвет
void red(int sensorPhotoValue)
{  
  analogWrite(ledPin, sensorPhotoValue); // яркость от фоторезистора
  analogWrite(led2Pin, 0);
  analogWrite(led3Pin, 0);
}
 
// Функция зажигает ЗЕЛЁНЫЙ цвет
void green(int sensorPhotoValue)
{
  analogWrite(ledPin, 0);
  analogWrite(led2Pin, 0);
  analogWrite(led3Pin, sensorPhotoValue);
}
 
// Функция зажигает БЕЛЫЙ цвет (все цвета включены)
void white(int sensorPhotoValue)
{
  analogWrite(ledPin, sensorPhotoValue);
  analogWrite(led2Pin, sensorPhotoValue);
  analogWrite(led3Pin, sensorPhotoValue);
}
 
// Функция зажигает ГОЛУБОЙ цвет
void blue(int sensorPhotoValue)
{
  analogWrite(ledPin, 0);
  analogWrite(led2Pin, sensorPhotoValue);
  analogWrite(led3Pin, sensorPhotoValue);  
}
 
// Функция зажигает ЖЁЛТЫЙ цвет
void yellow(int sensorPhotoValue)
{
  analogWrite(ledPin, sensorPhotoValue);
  analogWrite(led2Pin, sensorPhotoValue);
  analogWrite(led3Pin, 0);  
}
 
// Функция зажигает РОЗОВЫЙ цвет
void pink(int sensorPhotoValue)
{
  analogWrite(ledPin, sensorPhotoValue);
  analogWrite(led2Pin, 0);
  analogWrite(led3Pin, sensorPhotoValue);  
}
 
void loop()
{
  sensorPoteValue = analogRead(sensorPote); // считываем значение потенциометра
  Value = map(sensorPoteValue, 0, 1023, 0, 8); // переводим значение в диапазон от 0 до 8
 
  sensorPhotoValue = analogRead(sensorPhoto); // считываем значение фоторезистора
  sensorPhotoValue = map(sensorPhotoValue, 300, 800, 0, 255); // переводим яркость в 0–255
  sensorPhotoValue = constrain(sensorPhotoValue, 0, 255); // не даём выйти за пределы 0–255
 
  Serial.print(sensorPhotoValue); // выводим в порт для проверки
  Serial.print("->");  
  Serial.println(sensorPhotoValue);  
 
  // В зависимости от значения Value выбираем цвет
  if (Value == 0)
  {    
    pinidOFF(); // всё выключено
  }
  else if (Value == 1)
  {  
    red(sensorPhotoValue);
  }
  else if (Value == 2)
  {    
    green(sensorPhotoValue);
  }
  else if (Value == 3)
  {    
    blue(sensorPhotoValue);  
  }
  else if (Value == 4)
  {    
    yellow(sensorPhotoValue);
  }
  else if (Value == 5)
  {    
    pink(sensorPhotoValue);  
  }
  else
  {    
    white(sensorPhotoValue); // если что-то другое — пусть будет белый
  }
 
  delay(500); // пауза, чтобы не мигало слишком быстро
}

Принцип работы:

  • Потенциометр выбирает цвет свечения ночника.
  • Фоторезистор регулирует яркость в зависимости от освещенности.
  • При низкой освещенности ночник светится ярче, при высокой — тусклее.

💿 Демонстрация на 🔗 ВИДЕО (click)


💚 Вывод:

В ходе выполнения задания были изучены различные способы управления светодиодами с помощью кнопок, переключателей и фоторезистора. Также был реализован проект ночника с регулировкой цвета и яркости. Это позволило понять основы работы с цифровыми и аналоговыми входами/выходами на Arduino, а также научиться использовать функции digitalRead(), digitalWrite(), analogRead(), analogWrite(), map() и constrain() для обработки входных данных и управления выходными устройствами.