Neopixel что это
Перейти к содержимому

Neopixel что это

Новинки собственного производства. Neopixel эмулятор. 3-х ваттный RGB светодиод с драйвером

Всем хорошо известны RGB светодиоды с пиксельной адресацией WS2812b или их модификации от различных производителей. Их ещё называют «Neopixel». Как правило, «Neopixel» — это сборка из миниатюрного 3-х канального светодиодного драйвера (с интегрированным стабилизатором тока, PWM модулятором и сдвиговым регистром), подключенная к RGB светодиоду. Светодиоды очень просты в управлении. По одному проводу с помощью микроконтроллера можно задать любой цвет, любой яркости и насыщенности в любом месте практически бесконечной линейки из этих светодиодов. Они достаточно яркие, очень эффектные и динамичные. Но нам показалось этого мало и поэтому был спроектирован модуль с названием RDC-NeoModule. Это Neopixel эмулятор.

Neopixel эмулятор

Модуль собран на микроконтроллере STM32F030F4P6, производительность которого оказалась достаточной для обработки протокола управления светодиодами с пиксельной адресацией. Если к разъему XP4 на плате пристегнуть модуль RDC-RGB LED (3-х Ваттный RGB светодиод с драйвером), то вы получите мощный, сверхяркий аналог WS2812b. Можете включать эту конструкцию в любой ваш проект с WS2812b.

RDC-RGB LED

«Электронные войска» не могли остаться в стороне от ярких визуализаций с применением WS2812b. Мы сделали множество ярких проектов с этими светодиодами. Один из самых популярных и эмоциональных проектов это VU-meter. Простой перепрошивкой NeoModule вы получите эмоциональный визуализатор музыки. На странице проекта есть подробная инструкция об изменении длинны светодиодной линейки, цвета, яркости, чувствительности…

Все наши проекты полностью открыты, исходники можно посмотреть, скачать или поправить на нашей странице в github.

Адресные светодиоды, модули NeoPixel

Trema-модуль NeoPixel — это 4 RGB-светодиода со встроенными драйверами в одном корпусе, установленные на одном модуле. Эти модули можно соединять в ленты NeoPixel, используя всего одну линию данных, а их «адресность» позволяет управлять цветом каждого светодиода на одной линии.

В этой статье речь пойдёт о модулях NeoPixel, построенных на адресных светодиодах WS2812B.

Видео:

Спецификация:

  • Входное напряжение питания модуля: 5 В
  • Ток потребляемый драйвером каждого светодиода: < 1 мкА
  • Ток потребляемый каждым светодиодом: < 45 мА (по 15 мА на полную яркость свечения каждого цвета светодиода)
  • Уровень логической «1» на входе IN: > 0,7 Vcc
  • Уровень логического «0» на входе IN: < 0,3 Vcc
  • Входная ёмкость: 15 пФ
  • Задержка передачи данных: < 300 нс
  • Время передачи одного бита данных: 1,25 мкс
  • Длительность импульса для передачи бита «1»: 900 нс (±150 нс)
  • Длительность импульса для передачи бита «0»: 350 нс (±150 нс)
  • Время простоя линии данных перед применением новых цветов > 50 мкс
  • Длина световой волны: 620 . 630 нм (для красного цвета)
  • Длина световой волны: 515 . 530 нм (для зелёного цвета)
  • Длина световой волны: 465 . 470 нм (для синего цвета)
  • Рабочая температура: -25 . 80 °C
  • Температура хранения: -55 . 150 °C
  • Габариты: 30х30х30 мм (с учётом колодки выводов)
  • Вес: 9 г

Все модули линейки «Trema» выполнены в одном формате

Подключение:

Модули NeoPixel подключаются входом (IN) к любому выводу Arduino.

Модуль удобно подключать 2 способами, в зависимости от ситуации:

Способ — 1 : Используя проводной шлейф и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.

Способ — 2 : Используя проводной шлейф и Shield

Используя 3-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

При подключении нескольких модулей их можно соединить друг с другом (выход OUT каждого модуля со входом IN следующего), а вход IN первого модуля к любому выводу Arduino. Или подключить вход IN каждого модуля к своему выводу Arduino.

Подключение модуля NeoPixel к Arduino

Нумерация (адрес) светодиодов является сквозной и начинается от ближайшего к выводу Arduino. Например, если Вы подключили к одному выводу Arduino два модуля из 4 светодиодов, то первый светодиод первого модуля будет иметь адрес 0, а первый светодиод второго модуля будет иметь адрес 4.

Питание:

Входное напряжение 5 В постоянного тока, подаётся на выводы Vcc и GND модуля NeoPixel.

Подробнее о модуле:

Адресные светодиоды WS2812B это три светодиода RGB (Red — красный, Green — зелёный и Blue — синий) и драйвер (микросхема) для управления этими светодиодами, в одном SMD (Surface Mounted Device — прибор монтируемый поверхностно) корпусе.

Корпус каждого светодиода имеет 4 вывода: два вывода данных (IN — вход и OUT — выход) и два вывода питания (Vcc и GND). В модулях NeoPixel выходы (OUT) предыдущих светодиодов соединены со входами (IN) следующих создавая цепочку светодиодов. Но и сами модули NeoPixel также имеют 4 вывода: два вывода данных (IN, OUT) и два вывода питания (Vcc, GND), и модули также можно соединять в цепочку. Таким образом к одному выводу Arduino можно подключить «неограниченное» количество модулей NeoPixel.

Цвет каждого адресного светодиода задаётся 3 байтами (каждый байт указывает яркость одного цвета: 1-G, 2-R, 3-B). После того как первый адресный светодиод получил на вход (IN) первые 3 байта, он сохраняет их в своей ОЗУ, а остальные байты пропускает со входа (IN) на выход (OUT). Второй адресный светодиод сохранит в своей ОЗУ следующие 3 байта а остальные пропустит и т.д. Если в линию данных перестали поступать биты (на линии установлен уровень логического «0» дольше 50 мкс), светодиоды установят свои цвета. Каждый бит данных имеет длительность 1,25 мкс и состоит из импульса и паузы. Бит «0» отличается от бита «1» длительностью импульса: • бит «0» — импульс 350 нс, пауза 900 нс; • бит «1» — импульс 900 нс, пауза 350 нс.

Для работы с модулем предлагаем воспользоваться библиотекой iarduino_NeoPixel, которая позволяет работать с модулями NeoPixel если суммарное количество адресных светодиодов WS2812B не превышает 65534 шт.

Подробнее про установку библиотеки читайте в нашей инструкции..

Примеры:

Установка цвета для каждого из 4 светодиодов модуля NeoPixel:

Перелив всех цветов радуги на модуле NeoPixel из 4 светодиодов:

Данный пример может работать и с модулями на большее количество светодиодов, тогда Вам нужно указать их количество во второй строке скетча. Скорость перелива зависит от значения константы z, чем больше её значение, тем медленнее перелив.

Библиотека Adafruit NeoPixel

Библиотека Adafruit NeoPixel предназначена для работы с различными светодиодными лентами и кольцами (NeoPixel Ring), основанные на светодиодах WS2812 и WS2811.. Поддерживаются микроконтроллеры Arduino, ESP32 и некоторых других популярных платформ.

Домашняя страница https://github.com/adafruit/Adafruit_NeoPixel. Доступна через менеджер библиотек в Arduino IDE. На момент написания версия 1.3.5.

Библиотека NeoPixel резервирует 3 байта оперативной памяти на каждый светодиод. Это может быть критично для Arduino UNO при использовании больших лент (от 200 светодиодов и больше). Выбирайте мощные платы Arduino Mega, Arduino Duo, ESP32.

Подключение

Инициализация. Конструктор имеет три параметра.

  1. NUMPIXELS — количество светодиодов в ленте
  2. PIN — порт, к которому подключена лента. По умолчанию используется порт 6
  3. NEO_GRB + NEO_KHZ800 — дополнительные флаги. Могут принимать значения (приводится только часть из возможных вариантов).
    • NEO_KHZ800 – по умолчанию. Передача данных на частоте 800 кГц (для лент на светодиодах WS2812)
    • NEO_KHZ400 – передача данных на частоте 400 кГц (для лент на светодиодах WS2811)
    • NEO_GRB – последовательность цветов при передаче данных (зелёный, красный, синий)
    • NEO_RGB – последовательность цветов при передаче данных (красный, зелёный, синий)
    • NEO_GRBW — используются дополнительные белые светодиоды
    • NEO_RGBW — используются дополнительные белые светодиоды

По умолчанию библиотека настраивается на светодиоды WS2812, флаг NEO_GRB + NEO_KHZ800 в этом случае можно опустить. Если вы подключаете светодиодную ленту к порту 6, то номер порта можно не указывать. Таким образом обязательным параметром является только количество светодиодов в ленте.

Функции

  • begin() — начало работы с лентой
  • numPixels() — возвращает количество светодиодов в ленте. Используется в циклах или при работе с несколькими светодиодными лентами
  • updateLength()
  • updateType()
  • show() — передаёт данные в ленту. Функцию необходимо вызывать каждый раз после того, как вы изменили цвета или настройки ленты
  • delay_ns()
  • setPin()
  • getPixelColor() — возвращает цвет светодиода в виде 32-битного числа. В единственном параметре функции указывается номер светодиода — задаёт цвет заданному светодиоду
  • fill()
  • ColorHSV()
  • setBrightness() — задаёт общую яркость светодиодной ленты. Не рекомендуется использовать при создании световых эффектов, следует вызывать её разово в функции setup(). Изменения вступают в силу только после вызова функции show()
  • getBrightness()
  • clear()
  • gamma32()

setPixelColor()

Функция setPixelColor() позволяет задать любому светодиоду ленты определённый цвет. Существует три перегруженные версии функции.

Первая версия. В первом параметре n указывается номер светодиода в ленте (отсчёт с 0). В параметре red указывается число от 0 до 255, определяющее яркость красного цвета, в green — число от 0 до 255, определяющее яркость зелёного цвета, blue — число от 0 до 255, определяющее яркость синего цвета. Устанавливая разную яркость, мы смешиваем три цвета — красный, зелёный и синий, получая другие цвета и оттенки.

Вторая версия аналогична первому, только добавляется дополнительный параметр white. Используется в RGBW-лентах, в которых помимо трёхцветных светодиодов, установлены ещё и белые светодиоды, и данным параметром устанавливается их яркость. При создании объекта в последнем параметре необходимо указать NEO_GRBW или NEO_RGBW.

Третья версия задаёт цвет в виде 32-битного числа. Самый удобный вариант для создания различных эффектов.

Библиотека Adafruit NeoPixel

Библиотека Adafruit NeoPixel, разрабатывается компанией Adafruit Industries. Библиотека предназначена для работы с различными светодиодными лентами и неопиксельными кольцами (NeoPixel Ring), продаваемыми в фирменном интернет магазине компании Adafruit. Популярность библиотека получила благодаря открытому исходному коду, простотой реализации и поддержки всех микроконтроллеров Arduino и некоторых других популярных платформ.

Библиотека написана на C++, поддерживает светодиодные ленты и неопиксельные кольца, основанные на светодиодах WS2812 и WS2811.

Подробнее о светодиодных лентах на пикселях WS2812B вы можете посмотреть здесь.

Установка

Добавить библиотеку Adafruit NeoPixel в Arduino IDE можно двумя способами:

1. Через «Менеджер библиотек»

Открываем «Менеджер библиотек» перейдя по следующим вкладкам меню: «Скетч»«Подключить библиотеку»«Управлять библиотеками…»

В открывшемся окне «Менеджер библиотек» в поле «Отфильтровать результаты поиска…» вписать название библиотеки «NeoPixel». В получившемся списке выбрать «Adafruit NeoPixel by Adafruit» и нажать на кнопку «Установка».

2. Самостоятельная установка

Для самостоятельной установки библиотеки, необходимо перейти на страницу библиотеки в GitHub.

В правом углу нажать на кнопку «Clone or download»«Download ZIP».

После скачивания библиотеки, запустить Arduino IDE и перейти по следующим меню: «Скетч»«Подключить библиотеку»«Добавить .ZIP библиотеку…», выбрать скачанный архив и нажать на кнопку «Открыть».

Подключение

Для того чтобы подключить библиотеку к своему скетчу необходимо в самом его начале прописать следующее:

Эта строчка подключит заголовочный файл библиотеки и даст возможность использовать ее в своем проекте.

Далее необходимо создать основной объект библиотеки с которым мы и будем работать.

Здесь мы создаем объект strip для управления светодиодной лентой состоящей из 60 пикселей типа WS2812B. И указываем, что вход управления лентой подключен к 6 порту Arduino.

1. По умолчанию библиотека настраивается на светодиоды WS2812, то есть выставляет флаги NEO_GRB + NEO_KHZ800, по этому, если вы используете ленту WS2812 или WS2812B данный параметр можно игнорировать и указать только порт и количество пикселей в ленте.
2. Если вы подключаете светодиодную ленту к 6 порту, то и порт можно не указывать, таким образом обязательным параметром является только количество пикселей в ленте.

Инициализация

Для инициализации нашей ленты и дальнейшей работы с ней, необходимо в секции setup() вызвать две команды ранее созданного объекта ленты.

Функция show() в секции setup() не обязательная. Так как после инициализации все данные сброшены по умолчанию, функция по сути просто передает команды на выключение ленты.

Управление

1. setPixelColor()

Для того чтобы задать любому пикселю ленты определенный цвет, существует переопределяемая функция setPixelColor(), переопределяемая потому, что имеет аж три варианта входящих параметров.

Первый вариант это:

Где параметр:

  • n — Номер пикселя в ленте (отсчет идет с нуля, то есть если в вашей ленте 60 пикселей, то первый из них будет 0, а последний 59).
  • red — Число от 0 до 255 определяющее яркость красного светодиода в пикселе.
  • green — Число от 0 до 255 определяющее яркость зеленого светодиода в пикселе.
  • blue — Число от 0 до 255 определяющее яркость синего светодиода в пикселе.

Таким образом, устанавливая разную яркость трем разноцветным светодиодам в пикселе, мы как бы смешиваем три цвета — красный, зеленый и синий, получая при этом недостающие цвета и их оттенки. Например, для того, чтобы получить желтый цвет, нам надо смешать зеленый и красный, а чтобы получить пурпурный цвет, надо смешать синий и красный. Белый цвет достигается смешиванием всех трех цветов. Данная технология смешивания цветов широко распространена в современных телевизорах, мониторах, и в цветных принтерах.

Следующий вариант функции аналогичен первому, с тем лишь исключением, что имеет дополнительный пятый параметр "white".

Данный параметр используется в лентах, в которых помимо трехцветных пикселей, установлены еще и белые светодиоды, и данным параметром устанавливается их яркость.
Для того, чтобы использовать данную функцию, необходима как сама RGBW лента, так и при создании объекта «strip» в параметре №3 необходимо указать NEO_GRBW или NEO_RGBW.

Последний вариант функции задает цвет пикселю в виде 32-битного числа. Данный вариант удобен для большинства людей и различных эффектов, так как позволяет работать с одним, а не тремя — четырьмя числам характеризующими один цвет.

2. Color()

Функция Color() объединяет цвета в одно 32-битное число.

3. show()

Функция show() передает данные в ленту. Данную функцию необходимо вызывать каждый раз после того, как вы изменили цвета пикселей или настройки ленты.

4. getPixelColor()

Функция getPixelColor() возвращает цвет пикселя в виде 32-битного числа. В параметре n задается номер пикселя, цвет которого необходимо вернуть.

5. numPixels()

Функция возвращает количество пикселей в ленте. Используется как правило в циклах или при работе с несколькими светодиодными лентами.

6. setBrightness()

Функция задает общую яркость светодиодной ленты. Например в примере ниже задается 1/4 яркость ленты.
Как и в случае с setPixelColor(), изменения вступают в силу, только после вызова функции show().

Авторы библиотеки не рекомендуют использовать данную функцию при создании световых эффектов, и рекомендуют вызывать ее разово в секции setup().

Вопросы / Ответы

Я задаю цвета пикселям но ничего не происходит!

1. Убедитесь, что вы вызвали функцию strip.begin() в секции setup().
2. Убедитесь, что вы вызываете функцию strip.show() после того как изменяете цвета пикселей.

Могу ли я использовать несколько объектов для лент подключенных к разным портам?

Конечно, для этого необходимо создать второй объект со своим уникальным наименованием.

В данном примере создается два объекта (strip_a и strip_b) для двух лент подключенных к портам 5 и 6.

Могу ли я подключить несколько лент к одному порту Arduino?

Да можете, для этого необходимо соединить выход одной ленты со входом другой, а при создании объекта указать сумму пикселей обоих лент.

Неправильно отображаются цвета, вместо красного горит синий!

Скорее всего вы перепутали ключ, указывающий последовательность цветов при передаче данных. Попробуйте поменять ключ NEO_RGB на NEO_GRB и наоборот.

Цвета расплываются когда я использую setBrightness().

Как я уже писал ранее, функцию setBrightness() надо использовать разово, в секции setup(). Она не предназначена для использовании при создании спецэффектов.

Выделяемая память

Библиотека NeoPixel резервирует 3 байта оперативной памяти на каждый пиксель. Учитывая, что в Arduino UNO всего два килобайта оперативной памяти, плюс она нужна для реализации ваших спецэффектов и скетча, ее может не хватить для подключения больших лент (от 200 пикселей и больше). По этому если вы хотите использовать ленты с несколькими сотнями пикселей, посмотри в сторону Arduino Mega или Arduino Duo.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *