Задача:
Создать ночник, реагирующий на окружающий свет и управляемый ручкой или потенциометром. Цель проекта – применить знания о плате Arduino, электронных компонентах и программировании для создания практичного и визуально привлекательного решения для освещения.
Включение лампы: ночник можно включать и выключать нажатием кнопки или поворотом потенциометра.
Нажимая на кнопку или поворачивая потенциометр, можно регулировать яркость света в зависимости от окружающего освещения:
Если используется один светодиод, его яркость регулируется в зависимости от окружающего освещения с помощью analogWrite(PIN, 0..255).
Если используется несколько светодиодов, то при более темном освещении загорается больше светодиодов (с помощью digitalWrite(PIN, HIGH/LOW)).
При использовании RGB-светодиодов потенциометр позволяет выбирать различные цвета (путем изменения значений красного, зеленого и синего).
Для сборки понадобится:
- х1 Фоторезистор
- х1 Потенциометр
- х1 RGB LED
- х3 Резистор (220 Ом)
- х1 Резистор (10 КОм)
- х12 Провод
Прототип в TinkerCad:

Как работает:
- Фоторезистор подключён к А1 модулю, потенциометр к А0 модулю
- RGB LED Подключён к 11, 10 и 9 разъёму, соединён 3 резисторами и подключён напрямую к минусу
- Для работы фоторезистора нужен резистор с сопротивлением 10 КОм
- Подключёны базовые провода
Код:
const int potPin = A0;
const int ldrPin = A1;
const int buttonPin = 2;
const int redPin = 11;
const int greenPin = 10;
const int bluePin = 9;
bool lampOn = false;
bool lastButtonState = HIGH;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Кнопка замыкает GND
Serial.begin(9600);
}
void loop() {
// Чтение кнопки
bool currentButtonState = digitalRead(buttonPin);
if (lastButtonState == HIGH && currentButtonState == LOW) {
lampOn = !lampOn;
delay(200); // простая защита от дребезга
}
lastButtonState = currentButtonState;
int potValue = analogRead(potPin); // 0–1023
int ldrValue = analogRead(ldrPin); // 0–1023
if (lampOn && ldrValue > 700) {
// Используем потенциометр для выбора цвета
int r = 0, g = 0, b = 0;
if (potValue < 341) {
r = map(potValue, 0, 340, 0, 255);
g = 0;
b = 255 - r;
} else if (potValue < 682) {
g = map(potValue, 341, 681, 0, 255);
r = 255 - g;
b = 0;
} else {
b = map(potValue, 682, 1023, 0, 255);
g = 255 - b;
r = 0;
}
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
} else {
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
}
delay(50);
}
Видео:
