Описание: Этот скетч автоматически регулирует яркость и цвет 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.