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

КомпонентНазначение
Arduino UnoКонтроллер, управляющий всей системой
RGB LED (общий анод)Основной источник света
ПотенциометрПереключение цветового режима
Фоторезистор (LDR)Измеряет уровень освещённости
РезисторыПодключение LDR и RGB-LED
Макетная плата, проводаМонтаж
USB-кабель или батареяПитание

⚙️ Принцип работы

🌡 Освещённость (LDR)

  • Фоторезистор подключён к аналоговому входу A1.
  • Значение освещённости от 300 до 800 преобразуется в диапазон яркости от 255 до 0.
  • Чем темнее вокруг — тем ярче светит LED

🎛 Потенциометр (выбор цвета)

  • Потенциометр подключён к A2, его значение (0–1023) делится на 3 зоны:
    • 0–319 → Красный
    • 320–700 → Зелёный
    • 701–1024 → Синий

🔄 RGB-светодиод

  • Используется общий анод → значения PWM инвертируются (255 - яркость).
  • В зависимости от положения потенциометра — включается один из цветов с яркостью, зависящей от освещения

🖥 Отладка через Serial Monitor

  • В монитор выводятся текущие значения LDR, потенциометра и используемые RGB-компоненты

Готовая модель

Код:

const int sensorPin = A1;  // LDR
const int potPin = A2;     // Потенциометр
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;

int lightLevel;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  lightLevel = analogRead(sensorPin);
  manualTune(); // Преобразование 300–800 → 255–0

  int potValue = analogRead(potPin);
  int red = 0, green = 0, blue = 0;

  if (potValue <= 319) red = lightLevel;
  else if (potValue <= 700) green = lightLevel;
  else blue = lightLevel;

  analogWrite(redPin, 255 - red);
  analogWrite(greenPin, 255 - green);
  analogWrite(bluePin, 255 - blue);

  Serial.print("LDR: "); Serial.print(lightLevel);
  Serial.print(" | POT: "); Serial.print(potValue);
  Serial.print(" | RGB: ");
  Serial.print(red); Serial.print(", ");
  Serial.print(green); Serial.print(", ");
  Serial.println(blue);

  delay(100);
}

void manualTune() {
  lightLevel = map(lightLevel, 300, 800, 255, 0);
  lightLevel = constrain(lightLevel, 0, 255);
}

Рабочий процесс:

🌿 Применение

  • Ночник с регулируемой атмосферой — можно настроить под настроение.
  • Часть «умного дома» — адаптивная подсветка для детской, спальни или витрины