Ничего не найдено :(
    В гостях у Самоделкина! » Электроника » Arduino » Скетч гирлянды для Arduino с описанием

    Скетч гирлянды для Arduino с описанием


    Этот скетч представляет собой простую гирлянду, управляемую Arduino. Он перебирает несколько различных эффектов (например, мигание, радуга, бегущая строка) и позволяет настраивать скорость и яркость.


    Необходимые компоненты:

    • Arduino (Uno, Nano, Mega и т.д.)
    • Светодиодная лента WS2812B (или аналогичная с управляемыми RGB-светодиодами)
    • Резистор (обычно 300-500 Ом) - для защиты первого светодиода ленты (опционально)
    • Провода для соединения


    Схема подключения:

    1. Подключите вывод Data (Data In, DI) светодиодной ленты к цифровому пину Arduino. В примере используется пин 6. Не забудьте использовать резистор между пином Arduino и первым светодиодом (опционально, но рекомендуется).
    2. Подключите вывод +5V светодиодной ленты к +5V на Arduino. ВАЖНО: Если лента большая и требует много тока, лучше использовать отдельный источник питания на 5V для ленты, а землю источника питания соединить с землей Arduino.
    3. Подключите вывод GND светодиодной ленты к GND (земле) на Arduino.

    Скетч Arduino:

    #include <FastLED.h>
    
    // --- Настройки ---
    #define DATA_PIN    6      // Пин, к которому подключен Data In светодиодной ленты
    #define NUM_LEDS    30     // Количество светодиодов в ленте
    #define BRIGHTNESS  100    // Глобальная яркость (0-255)
    #define COLOR_ORDER GRB    // Порядок цветов (обычно GRB для WS2812B)
    
    // --- Переменные ---
    CRGB leds[NUM_LEDS];      // Массив для хранения цветов каждого светодиода
    uint8_t currentEffect = 0; // Индекс текущего эффекта
    unsigned long lastChangeTime = 0; // Время последнего переключения эффекта
    unsigned long effectDuration = 5000; // Длительность каждого эффекта (в миллисекундах)
    
    // --- Эффекты ---
    void effectSolidColor(CRGB color);
    void effectBlink(CRGB color, uint8_t blinkSpeed);
    void effectRainbow(uint8_t rainbowSpeed);
    void effectRunningLights(CRGB color, uint8_t speed);
    void effectRandomColors();
    
    void setup() {
      FastLED.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
      FastLED.setBrightness(BRIGHTNESS);
      FastLED.clear(); // Гасим все светодиоды
      FastLED.show();  // Отправляем данные на ленту
      Serial.begin(9600); // Инициализируем Serial Monitor для отладки
    }
    
    void loop() {
      // Переключение эффектов каждые effectDuration миллисекунд
      if (millis() - lastChangeTime > effectDuration) {
        currentEffect = (currentEffect + 1) % 5; // 5 - количество эффектов
        lastChangeTime = millis();
        Serial.print("Effect: ");
        Serial.println(currentEffect); // Вывод текущего эффекта в Serial Monitor
      }
    
      // Выбор и запуск текущего эффекта
      switch (currentEffect) {
        case 0:
          effectSolidColor(CRGB::Red);
          break;
        case 1:
          effectBlink(CRGB::Blue, 50);
          break;
        case 2:
          effectRainbow(10);
          break;
        case 3:
          effectRunningLights(CRGB::Green, 20);
          break;
        case 4:
          effectRandomColors();
          break;
      }
    
      FastLED.show(); // Отправляем данные на ленту
      delay(10);      // Небольшая задержка
    }
    
    // --- Реализация эффектов ---
    
    // Просто светит все светодиоды одним цветом
    void effectSolidColor(CRGB color) {
      fill_solid(leds, NUM_LEDS, color);
    }
    
    // Мигает всеми светодиодами одним цветом
    void effectBlink(CRGB color, uint8_t blinkSpeed) {
      static bool state = false;
      if (millis() % blinkSpeed == 0) {
        state = !state;
        fill_solid(leds, NUM_LEDS, state ? color : CRGB::Black);
      }
    }
    
    // Радужный эффект
    void effectRainbow(uint8_t rainbowSpeed) {
      static uint8_t hue = 0;
      for (int i = 0; i < NUM_LEDS; i++) {
        leds[i] = CHSV(hue + i * (255 / NUM_LEDS), 255, 255);
      }
      hue += rainbowSpeed;
      if (hue > 255) hue = 0;
    }
    
    // Эффект "бегущие огни"
    void effectRunningLights(CRGB color, uint8_t speed) {
      static int position = 0;
      fill_solid(leds, NUM_LEDS, CRGB::Black); // Гасим все светодиоды
    
      leds[position] = color; // Зажигаем один светодиод
    
      position++;
      if (position >= NUM_LEDS) {
        position = 0;
      }
      delay(speed);
    }
    
    // Случайные цвета для каждого светодиода
    void effectRandomColors() {
      for (int i = 0; i < NUM_LEDS; i++) {
        leds[i] = CHSV(random(255), 255, 255);
      }
    }

    Описание кода:

    1. #include <FastLED.h>: Подключает библиотеку FastLED, которая упрощает работу с адресными светодиодными лентами.
    2. #define:Определяет константы для настроек.
    3. DATA_PIN: Пин Arduino, к которому подключен Data In ленты.
    4. NUM_LEDS: Количество светодиодов в ленте.
    5. BRIGHTNESS: Глобальная яркость (0-255).
    6. COLOR_ORDER: Порядок цветов (обычно GRB для WS2812B). Может потребоваться изменить (например, на RGB) в зависимости от вашей ленты.
    7. CRGB leds[NUM_LEDS]: Объявляет массив 
    8. leds типа 
    9. CRGB. Этот массив хранит значения красного, зеленого и синего цветов для каждого светодиода в ленте.
    10. currentEffect
    11. lastChangeTime
    12. effectDuration: Переменные для управления переключением эффектов.
    13. setup():
    14. FastLED.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);: Инициализирует библиотеку FastLED, указывая тип ленты (WS2812B), пин данных, порядок цветов, массив светодиодов и их количество. 
    15. setCorrection(TypicalLEDStrip) оптимизирует цвета для стандартных светодиодных лент.
    16. FastLED.setBrightness(BRIGHTNESS);: Устанавливает глобальную яркость.
    17. FastLED.clear();: Гасит все светодиоды.
    18. FastLED.show();: Отправляет данные на ленту (необходимо после изменения цветов).
    19. Serial.begin(9600);: Инициализация последовательного порта для отладки.
    20. loop():
    21. if (millis() - lastChangeTime > effectDuration): Проверяет, прошло ли достаточно времени для смены эффекта.
    22. currentEffect = (currentEffect + 1) % 5;: Переключает на следующий эффект (циклически, от 0 до 4).
    23. switch (currentEffect): Выбирает и запускает соответствующий эффект.
    24. FastLED.show();: Отправляет данные на ленту.
    25. delay(10);: Небольшая задержка для стабильной работы.
    26. Функции эффектов (effectSolidColoreffectBlinkeffectRainboweffectRunningLightseffectRandomColors): Каждая функция реализует свой уникальный световой эффект.


    Как использовать:

    1. Установите библиотеку FastLED в Arduino IDE (Sketch -> Include Library -> Manage Libraries… -> Search for “FastLED” -> Install).
    2. Загрузите скетч в Arduino.
    3. Наблюдайте за гирляндой и наслаждайтесь эффектами!


    Настройка:

    • NUM_LEDS: Измените это значение, чтобы соответствовало количеству светодиодов в вашей ленте.
    • DATA_PIN: Измените это значение, если вы используете другой цифровой пин Arduino.
    • BRIGHTNESS: Настройте яркость гирлянды.
    • effectDuration: Измените длительность каждого эффекта (в миллисекундах).
    • COLOR_ORDER: Если цвета отображаются неправильно, попробуйте изменить COLOR_ORDER (например, на RGB).
    • Параметры внутри функций эффектов: Измените значения blinkSpeedrainbowSpeed и другие параметры, чтобы настроить поведение каждого эффекта.


    Дополнительные возможности:

    • Добавьте больше эффектов, создав новые функции effect...().
    • Используйте кнопки или потенциометры для управления скоростью, яркостью и выбором эффекта в реальном времени.
    • Используйте датчики (например, датчик звука) для управления эффектами в зависимости от окружающей среды.
    • Добавьте поддержку WiFi или Bluetooth для управления гирляндой с мобильного приложения.

    Этот скетч - отправная точка. Вы можете расширить и настроить его в соответствии со своими потребностями и творческими идеями. Удачи!

    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

    Скетч: Управление сервоприводом с помощью потенциометра

    0
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 0.0 из 10 (голосов: 0 / История оценок)

    Добавить комментарий

    1 комментарий
    Investigator #97412

    Как ограничить максимальный ток гирлянды ws2812 в вашем скетче?

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии