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, что упрощает тестирование и отладку.
Видео:
Применение фоторезистора в разных проектах:
Учебные и хобби-проекты
- Ночник с автоматическим включением — когда темно, свет включается сам.
- Тест “светло или темно” — простой проект для новичков, чтобы познакомиться с аналоговыми входами.
- Секретная коробка — открыл крышку (стало светло) → сработала сигнализация.
- Солнечный будильник — срабатывает, когда солнце поднимается и освещает фоторезистор.
Умный дом
- Автоматическая подсветка прихожей — срабатывает только в темноте при движении.
- Регулировка яркости оконной подсветки — в зависимости от уровня уличного освещения.
- Шторы “умного окна” — фоторезистор определяет солнечную сторону и регулирует жалюзи.
- Экономия энергии — система знает, когда не нужно включать свет.
Автомобильные проекты
- Автоматическое включение фар — как только стемнеет, фары включаются.
- Подсветка приборной панели — яркость адаптируется к окружающему свету.
- Контроль дневного света в салоне — например, для запуска вентиляции или затемнения стёкол.
Робототехника и мехатроника
- Робот, идущий на свет (или убегающий от света) — классика курсов по робототехнике.
- Линия следования по свету — робот следует за фонариком.
- Активация действий — например, робот “просыпается”, если его осветили.
Арт и инсталляции
- Интерактивные картины — реагируют на освещённость: меняется звук, движение или свет.
- Скульптуры, оживающие при свете — можно сделать, чтобы элементы открывались или светились.
- “Световые ловушки” — например, включение музыки, когда кто-то загораживает свет.
Научные и лабораторные приборы
- Солнечные измерения — отслеживание интенсивности света для экспериментов.
- Измерение времени суток — можно использовать как основу для самодельных солнечных часов.
- Оптические датчики прерывания — фоторезистор фиксирует изменения света при прохождении объекта.