Описание: Этот скетч автоматически регулирует яркость и цвет RGB-ленты на основе данных с фоторезистора (датчика освещенности). При низкой освещенности лента плавно включает теплый белый свет, а при высокой — отключается.
Необходимые компоненты:
Arduino (Uno/Nano)
Фоторезистор + резистор 10 кОм
RGB-лента (адресная WS2812B)
Макетная плата и провода
Код:
#include <Adafruit_NeoPixel.h> // Библиотека для RGB-ленты
#define PHOTO_PIN A0 // Пин фоторезистора
#define LED_PIN 6 // Пин ленты
#define LED_COUNT 30 // Количество светодиодов
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(9600);
strip.begin(); // Инициализация ленты
strip.show(); // Очистка ленты
}
void loop() {
int lightLevel = analogRead(PHOTO_PIN); // Чтение освещенности (0–1023)
Serial.print("Light: ");
Serial.println(lightLevel);
// Преобразуем значение в яркость (0–255)
int brightness = map(lightLevel, 0, 1023, 255, 0);
brightness = constrain(brightness, 0, 255); // Ограничиваем диапазон
// Если темно (значение ниже порога)
if (brightness > 150) {
// Плавное включение теплого света (R=255, G=150, B=50)
for (int i = 0; i < LED_COUNT; i++) {
strip.setPixelColor(i, strip.Color(255, 150, 50, brightness));
}
} else {
// Выключение ленты
strip.clear();
}
strip.show(); // Применяем изменения
delay(100); // Задержка для плавности
}Как это работает?
Фоторезистор измеряет уровень света. Чем темнее — тем выше значение на аналоговом пине.
Значение преобразуется в яркость (0–255) с инверсией (чем темнее — тем ярче свет).
При превышении порога (brightness > 150) лента загорается теплым белым (оранжевый оттенок).
Для плавности используется постепенное изменение яркости.
Дополнения:
1. Режим цветового градиента
Замените блок if на:
// Градиент от синего (дневной свет) к красному (ночь) int red = map(lightLevel, 0, 1023, 255, 50); int blue = map(lightLevel, 0, 1023, 50, 255); strip.fill(strip.Color(red, 0, blue, brightness));
2. Ручная настройка порога
Добавьте потенциометр для регулировки чувствительности:
int threshold = analogRead(A1); // Потенциометр на A1
if (brightness > threshold) {
// Включение света
}Схема подключения
| Компонент | Arduino |
|---|---|
| Фоторезистор | A0 → 5V |
| Резистор 10 кОм | A0 → GND |
| RGB-лента | Pin 6 → DIN |
| 5V → +5V | |
| GND → GND |
Оптимизации:
Калибровка датчика: Добавьте начальную калибровку в setup():
int ambientLight = analogRead(PHOTO_PIN); // Замер фонового света
Энергосбережение: Уменьшите яркость ночью:
if (brightness > 200) strip.setBrightness(100); // 40% мощности
Этот скетч легко адаптировать под умный дом — например, добавить управление через Bluetooth или MQTT.

