Nupp, Switch ja Photoresistor

Katse 3.1 – Nuppude ja Slideswitch’i kasutamise võimalus

1. näidis – Nupp

Используемые компоненты:

  • Arudiono Uno 1 шт
  • Плата 1 шт
  • Кнопка 1 шт
  • Светодиод 1 шт
  • Резистор 220 Om
  • Резистор 10 кОм 2 шт
  • Провода 7 шт

Схема соединения:

Код:

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

  }    	

  }

Пояснение кода:

Этот код управляет светодиодом, основываясь на нажатии двух кнопок. Светодиод загорается только тогда, когда нажата одна кнопка, но не обе одновременно.

  • pinMode(button1Pin, INPUT); – Устанавливаем пин кнопки 1 как вход
  • pinMode(button2Pin, INPUT); – Устанавливаем пин кнопки 2 как вход
  • pinMode(ledPin, OUTPUT); – Устанавливаем пин светодиода как выход
  • button1State = digitalRead(button1Pin); – Читаем состояние кнопки 1 (HIGH или LOW)
  • button2State == LOW – кнопка нажата
  • digitalWrite(ledPin, HIGH); – Включаем светодиод
  • digitalWrite(ledPin, LOW); – Иначе — выключаем светодиод

2. näidis – Slideswitch’i kasutamine

Схема соединения:

Katse 3.2 – Photoresistor

Используемые компоненты:

  • Arudiono Uno 1 шт
  • Плата 1 шт
  • Светодиод 1 шт
  • Резистор 220 Om
  • Фоторезистор 1 шт
  • Провода 7 шт

Схема соединения:

Код:

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

}

Пояснение кода:

Этот код предназначен для управления яркостью светодиода (LED) в зависимости от освещённости, считываемой с фоторезистора (подключённого к аналоговому пину A0).
Яркость светодиода изменяется плавно: чем светлее, тем ярче (или наоборот, если изменить логику). Также предусмотрены функции ручной и автоматической настройки диапазона освещенности.

  • int lightLevel – текущее значение света
  • high = 0, low = 1023 – храним максимальные и минимальные значения для автонастройки
  • lightLevel = analogRead(sensorPin); – Считываем уровень освещенности с фоторезистора (диапазон от 0 до 1023)
  • manualTune(); – Вызываем функцию ручной настройки освещенности
  • autoTune(); – Альтернативная функция — автонастройка диапазона на основе текущего min/max света
  • lightLevel = map(lightLevel, 300, 800, 0, 255); – Преобразуем диапазон 300–800 (примерно темно — светло) в 0–255
  • lightLevel = constrain(lightLevel, 0, 255); – Ограничиваем значение, чтобы не выходило за границы 0–255

Ülesanne 3.1 Öölamp

Описание работы:

Создать реактивный ночник, который:

  • Автоматически регулирует яркость LED в зависимости от освещения.
  • Позволяет вручную контролировать поведение с помощью потенциометра.

Используемые компоненты:

  • Arudiono Uno 1 шт
  • Плата 1 шт
  • RGB 5 шт
  • Резистор 220 Om 3 шт
  • Резистор 1 кОм 1 шт
  • Фоторезистор 1 шт
  • Потенциометр 10 кОм 1 шт
  • Провода 12 шт

Схема соединения:

Код:

const int lightSensorPin = A1;  // Фоторезистор
const int potPin = A0;          // Потенциометр

const int redPin = 11;           // Красный канал
const int greenPin = 10;         // Зелёный канал
const int bluePin = 9;          // Синий канал

const int lightThreshold = 600;

void setup() {
  Serial.begin(9600);

  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}

void loop() {
  int lightValue = analogRead(lightSensorPin); // Уровень света (0–1023)
  int potValue = analogRead(potPin);           // Значение потенциометра (0–1023)

  int red = 0, green = 0, blue = 0;

  // Определение цвета по положению потенциометра
  int section = potValue / 341; // делим диапазон на 3 части
  int val = potValue % 341;

  switch (section) {
    case 0: // Красный → Зелёный
      red = 255 - val * 255 / 340;
      green = val * 255 / 340;
      blue = 0;
      break;
    case 1: // Зелёный → Синий
      red = 0;
      green = 255 - val * 255 / 340;
      blue = val * 255 / 340;
      break;
    case 2: // Синий → Красный
      red = val * 255 / 340;
      green = 0;
      blue = 255 - val * 255 / 340;
      break;
  }

  // Если темно — включаем светодиод с выбранным цветом
  if (lightValue < lightThreshold) {
    analogWrite(redPin, red);
    analogWrite(greenPin, green);
    analogWrite(bluePin, blue);
  } else {
    // Иначе — выключаем всё
    analogWrite(redPin, 0);
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
  }

  // Отладка
  Serial.print("Light: ");
  Serial.print(lightValue);
  Serial.print(" | Pot: ");
  Serial.print(potValue);
  Serial.print(" | RGB: ");
  Serial.print(red); Serial.print(", ");
  Serial.print(green); Serial.print(", ");
  Serial.println(blue);

  delay(200);
}

Процесс работы:

Программа предназначена для управления RGB-светодиодом с помощью фоторезистора и потенциометра на платформе Arduino. Светодиод реагирует на уровень освещённости окружающей среды и изменяет свой цвет в зависимости от положения потенциометра.

1. Инициализация пинов

В блоке setup() задаются пины красного, зелёного и синего каналов RGB-светодиода как выходные. Также инициализируется последовательный порт для отладки.

2. Считывание входных данных

В функции loop() с помощью analogRead() считываются два значения:

  • Освещённость с фоторезистора;
  • Положение потенциометра.

3. Обработка потенциометра (выбор цвета)

Диапазон значения потенциометра (0–1023) условно делится на три сегмента:

  • 0–340 — переход от красного к зелёному;
  • 341–681 — от зелёного к синему;
  • 682–1023 — от синего обратно к красному.

Это реализовано через оператор switch-case, создавая плавный градиент между цветами. Каждому каналу (R, G, B) присваивается соответствующее значение интенсивности в диапазоне от 0 до 255.

4. Обработка освещённости (включение/выключение света)

Если уровень света, полученный с фоторезистора, ниже заданного порога (lightThreshold), значит в помещении темно — и RGB-светодиод включается с выбранным цветом.
Если же освещённость выше порога, значит светло — и все каналы RGB выключаются, лампа не горит.

5. Управление светодиодом

Значения для R, G и B каналов подаются на соответствующие пины с помощью analogWrite().
Если лампа должна быть выключена, на все каналы подаётся 0.

6. Вывод отладочной информации

Программа выводит значения освещённости, положения потенциометра и текущий RGB-цвет в Serial Monitor, что упрощает тестирование и отладку.

Видео:

Применение фоторезистора в разных проектах:

Учебные и хобби-проекты

  • Ночник с автоматическим включением — когда темно, свет включается сам.
  • Тест “светло или темно” — простой проект для новичков, чтобы познакомиться с аналоговыми входами.
  • Секретная коробка — открыл крышку (стало светло) → сработала сигнализация.
  • Солнечный будильник — срабатывает, когда солнце поднимается и освещает фоторезистор.

Умный дом

  • Автоматическая подсветка прихожей — срабатывает только в темноте при движении.
  • Регулировка яркости оконной подсветки — в зависимости от уровня уличного освещения.
  • Шторы “умного окна” — фоторезистор определяет солнечную сторону и регулирует жалюзи.
  • Экономия энергии — система знает, когда не нужно включать свет.

Автомобильные проекты

  • Автоматическое включение фар — как только стемнеет, фары включаются.
  • Подсветка приборной панели — яркость адаптируется к окружающему свету.
  • Контроль дневного света в салоне — например, для запуска вентиляции или затемнения стёкол.

Робототехника и мехатроника

  • Робот, идущий на свет (или убегающий от света) — классика курсов по робототехнике.
  • Линия следования по свету — робот следует за фонариком.
  • Активация действий — например, робот “просыпается”, если его осветили.

Арт и инсталляции

  • Интерактивные картины — реагируют на освещённость: меняется звук, движение или свет.
  • Скульптуры, оживающие при свете — можно сделать, чтобы элементы открывались или светились.
  • “Световые ловушки” — например, включение музыки, когда кто-то загораживает свет.

Научные и лабораторные приборы

  • Солнечные измерения — отслеживание интенсивности света для экспериментов.
  • Измерение времени суток — можно использовать как основу для самодельных солнечных часов.
  • Оптические датчики прерывания — фоторезистор фиксирует изменения света при прохождении объекта.