Подключение WS2811 к Arduino

27-02-2020, 15:14 1 комментариев
Тема нашей сегодняшней информационной статьи – подключение WS2811 к Ардуино. О чем конкретно мы будем говорить? – О достаточно популярном сегменте на рынке современных электронных технологий – адресных светодиодных лентах (в нашем случае - на базе микрочипа WS2811).

Эта модель представляет собой интегральную микросхему в корпусе. Используют подобные устройства для различных задач конструирования и проектирования (создание светомузыки, бегущей строки, декоративных подсветок и светильников с управлением «soft lights», декорирование LED-видео экранов уличных «бордов» и рекламных табло и т.д.). Ну а в целом ардуинщики и радиолюбители ценят этот модуль за возможность создания подсветки с изменением тональности и яркости согласно заданных алгоритмов.

По традиции разберем технические параметры RGB SMART-ленты:
  • рабочее напряжение: до 12В;
  • максимальный ток: 1.6 А/м;
  • потребляемая мощность: 18 Вт/м;
  • плотность светодиодов: 60 шт/м;
  • ширина ленты: 10мм;
  • рабочая температура: -20 до +80 ℃;
  • встроенный регулятор напряжения питания VDD.
Передача сигнала от одной микросхемы к другой происходит через сигнальный провод. Управление «умными» светодиодами - по цифровому протоколу (т.е. без контроллера не обойтись). А потому рассмотрим схему подключения WS2811 к Ардуино:

В ней мы использовали плату расширения Arduino Nano, адресную LED-ленту, зарядное устройство, соединительные провода.
Прежде чем работать с кодами, проверим наличие необходимой библиотеки. «Продвинутые» пользователи рекомендуют использовать FastLED, хотя она достаточно требовательна к ресурсам, особенно объемам памяти (но есть еще варианты: AdafruitNeoPixel и LightWS2812, правда, с меньшими возможностями и более низкой скоростью).
Скачать их можно ТУТ:
https://github.com/FastLED/FastLED
https://github.com/adafruit/Adafruit_NeoPixel
https://github.com/cpldcpu/light_ws2812

Теперь напишем такой программный скетч:
#define PIN 13        // пин DI
#define NUM_LEDS 16   // число диодов
#include "Adafruit_NeoPixel.h"
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  strip.begin();
  strip.setBrightness(50);    // яркость, от 0 до 255
  strip.clear();                          // очистить
  strip.show();                           // отправить на ленту
}
void loop() {
  // заливаем трёмя цветами плавно
  for (int i = 0; i < NUM_LEDS / 3; i++ ) {   // от 0 до первой трети
    strip.setPixelColor(i, 0xff0000);     // залить красным
    strip.show();                         // отправить на ленту
    delay(100);
  }
  for (int i = NUM_LEDS / 3; i < NUM_LEDS * 2 / 3; i++ ) {   // от 1/3 до 2/3
    strip.setPixelColor(i, 0x00ff00);     // залить зелёным
    strip.show();                         // отправить на ленту
    delay(100);
  }
  for (int i = NUM_LEDS * 2 / 3; i < NUM_LEDS; i++ ) {   // от 2/3 до конца
    strip.setPixelColor(i, 0x0000ff);     // залить синим
    strip.show();                         // отправить на ленту
    delay(100);
  }
  delay(1000);
  // заливаем белым
  for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту
    strip.setPixelColor(i, 0xffffff);     // залить белым
    strip.show();                         // отправить на ленту
    delay(10);
  }
  delay(1000);
  // заливаем чёрным
  for (int i = 0; i < NUM_LEDS; i++ ) {   // всю ленту
    strip.setPixelColor(i, 0x000000);     // залить чёрным
    strip.show();                         // отправить на ленту
    delay(10);
  }
  delay(1000);
  // включаем случайные диоды жёлтым
  for (int i = 0; i < 50; i++ ) {         // 50 раз
    strip.setPixelColor(random(0, NUM_LEDS), 0xffff00);     // залить жёлтым
    strip.show();                         // отправить на ленту
    delay(500);
  }
}
Важно! Во время загрузки прошивки должно быть подключено внешнее питание!

И помните, чтобы скетч скомпилировался и сразу заработал, следует в заголовке указать верное количество светодиодов и конечно же номер порта!
На этом все! Удачных вам проектов!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Сегодня речь пойдет о том, как подключить модуль MAX7219 к Ардуино, и что собственно он собой представляет. Начнем с последнего пункта. Речь идет о...

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

Тема нашей сегодняшней статьи - драйвер для шаговых двигателей TB6560 и его подключение к Ардуино. Мы уже говорили с вами о практичности и основных...

Сегодня поговорим о том, как подключить 7 сегментный индикатор к Ардуино и в целом об особенностях этого механизма. Речь идет об устройстве отображения...

Тема нашей сегодняшней статьи – подключение датчика сердечного ритма AD8232 к Ардуино. Про целесообразность и практичность подобного устройства много говорить...

1 комментария
  1. Radik
    18 июля 2024 18:40 Radik

    Подскажите, а можно на адресной светодиодной ленте управлять каждым светодиодом отдельно?
    Например с/диод №1 - красный цвет, с/диод №2 - мигает синий 1 Гц, с/диод №3 - мигает зеленый 0,5 Гц,

    replyОтветить
Оставить комментарий