Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

Содержание

Основы программного управления WS2812B

Уже упоминалось, что для управления микросхемами WS2812B надо сформировать импульсы с определенной длиной, выдерживая высокую точность. В языке Ардуино для формирования коротких импульсов есть команды delayMicroseconds и micros. Проблема в том, что разрешение этих команд составляет 4 микросекунды. То есть, сформировать временные задержки с заданной точностью не получится. Надо переходить к средствам С++ или Ассемблера. А можно организовать управление адресной светодиодной лентой через Arduino с помощью специально созданных для этого библиотек. Начать знакомство можно с программы Blink, заставляющей светоизлучающие элементы мигать.

FastLed

Эта библиотека универсальна. Помимо адресной ленты она поддерживает множество устройств, включая ленты с управлением по интерфейсу SPI. Обладает широкими возможностями.

Сначала библиотеку надо подключить. Это делается до блока setup, а строка выглядит так:

#include <FastLED.h>

Следующим шагом надо создать массив для хранения цветов каждого светоизлучающего диода. Он будет иметь наименование strip и размерность 15 – по числу элементов (этому параметру лучше назначить константу).

CRGB strip

В блоке setup надо указать, с какой лентой будет работать скетч:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);

int g;

}

Параметр RGB устанавливает порядок чередования цветов, 15 означает количество светодиодов, 7 – номер вывода, назначенного для управления (последнему параметру тоже лучше назначить константу).

Блок loop начинается с цикла, который последовательно записывает в каждый раздел массива Red (красное свечение):

for (g=0; g< 15;g++)

{strip=CRGB::Red;}

Далее сформированный массив отправляется в светильник:

FastLED.show();

Задержка 1000 миллисекунд (секунда):

delay(1000);

Затем можно таким же способом выключить все элементы, записав в них черный цвет.

for (int g=0; g< 15;g++)

{strip=CRGB::Black;}

FastLED.show();

delay(1000);

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Скетч для мигающей ленты на основе FastLed.

После компиляции и загрузки скетча лента будет мигать с периодом в 2 секунды. Если надо управлять каждой цветовой составляющей раздельно, то вместо строки {strip=CRGB::Red;} используется несколько строк:

{

strip.r=100;// устанавливается уровень свечения красного элемента

strip.g=11;// то же для зеленого

strip.b=250;// то же для синего

}

NeoPixel

Эта библиотека работает только с LED-кольцами NeoPixel Ring, но она менее ресурсоемка и содержит только самое необходимое. На языке Ардуино программа выглядит так:

#include <Adafruit_NeoPixel.h>

Как и в предыдущем случае подключается библиотека, и декларируется объект lenta:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// где 15 – количество элементов, а 6 – назначенный вывод

В блоке setup инициализируется лента:

void setup() {

lenta.begin ()

}

В блоке loop все элементы засвечиваются красным, переменная передается в ленту и создается задержка в 1 секунду:

for (int y=0; у<15;y++)// 15 – количество элементов в светильнике

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

lenta.show();

delay(1000);

Прекращается свечение записью черного цвета:

for (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

lenta.show();

delay(1000);

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Скетч для программы Blink на основе NeoPixel.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

Видео-урок: Образцы визуальных эффектов с использованием адресных лент.

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

Как работает светодиодная лента и каковы ее свойства?

Изделие представляет собой гибкую плату на полимерной основе. На ней закреплены 2 проводника и включенные между ними диоды, излучающие при протекании тока свет.

Если компьютер находится в спальне, изделие можно зафиксировать на тыльной стороне монитора или под столом. Освещение отраженными лучами позволит читать тексты, но не будет мешать спать другим членам семьи.

Популярны приборы в виде гибких трубок из ПВХ с диодами внутри. Их стенки имеют матовую прозрачность, поэтому светильник похож на неоновую лампу.

Диоды пропускают ток лишь в одном направлении. Соответственно, на ленту подается постоянное напряжение.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

Ардуино и адресная светодиодная лента

Этот проект — простой способ начать работу, но идеи, которые он охватывает, могут быть расширены для действительно эффектного освещения. С помощью всего лишь нескольких компонентов вы можете создать свой собственный восход солнца. Если у вас есть стартовый комплект с Arduino, вы можете использовать любую кнопку или датчик для запуска светодиодов при входе в комнату, например:

Теперь, когда мы рассмотрели схему с обычной светодиодной лентой, перейдем к адресным светодиодным лентам SPI RGB лента.

Ремонт системы освещения светодиодной RGB лентой

Светодиодная лента Ардуино — Яркие идеи.

Эти ленты требуют меньшего количества компонентов для запуска, и есть некоторая свобода в отношении именно того, какие значения компонентов вы можете использовать. Конденсатор в этой цепи гарантирует, что светодиоды 5v получают постоянный источник питания. Резистор становится гарантом того, что сигнал данных, полученный от Arduino, не загружен всяческими помехами.

Вам понадобится:

● Светодиодная лента 5v WS2811/12/12B; Все три модели имеют встроенные микросхемы и работают одинаково.

● 1 x Arduino Uno или аналогичная совместимая плата;

● 1 x резистор 220-440 Ом;

● 1 x конденсатор microFarad 100-1000 (все, что между этими двумя значениями, отлично подойдет);

● Макет и монтажные провода;

● Блок питания 5 В.

Настройте схему, как показано на рисунке:

Arduino для начинающих. Урок 1. Мигающий светодиод

Обратите внимание, что конденсатор должен быть правильной ориентации. Вы можете понять, какая сторона прикрепляется к рейке земля, ища знак минуса (-) на корпусе конденсатора

На этот раз мы задействуем Arduino, используя источник питания 5 В. Это позволит устройству работать автономно

Вы можете понять, какая сторона прикрепляется к рейке земля, ища знак минуса (-) на корпусе конденсатора. На этот раз мы задействуем Arduino, используя источник питания 5 В. Это позволит устройству работать автономно.

Во-первых, убедитесь, что ваша плата может работать с 5 В, прежде чем присоединить ее к источнику питания. Почти все платы работают на 5V через USB-порт, но штыри питания на некоторых могут иногда пропускать регуляторы напряжения и превращать их в поджаренные тосты.

Кроме того, рекомендуется убедиться, что несколько отдельных источников питания не подключены к Arduino — отсоединяйте USB-кабель всякий раз, когда используете внешний источник питания.

Светодиодная лента Ардуино — Бегущий огонь или световая волна

Чтобы безопасно запрограммировать нашу плату, отсоедините линию VIN от линии электропередач. Вы подключите ее позже обратно.

Присоедините свой Arduino к компьютеру и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный в меню «Сервис»> «Сервис и инструменты»> «Порт».

Мы будем использовать библиотеку FastLED для тестирования нашей установки. Вы можете добавить библиотеку, нажав на Эскиз> Включить библиотеку> Управление библиотеками и поиск FastLED. Нажмите «Установить», и библиотека будет добавлена в среду IDE.

В разделе «Файл»> «Примеры»> «FastLED» выберите эскиз DemoReel100. В этом эскизе задействованы различные эффекты, которые можно сделать с помощью светодиодных полос WS2812, и невероятно легко настроить.

Популярные статьи  Дартс - крутая самоделка своими руками

Все, что вам нужно изменить, — это переменная DATA_PIN, чтобы она соответствовала значку 13 и переменной NUM_LEDS для определения количества светодиодов, находящихся в полосе, которую вы используете. В этом случае я применяю только небольшую линию из 10 светодиодов, вырезанных из более длинной полосы.

Используйте большее количество для красивейшего светового шоу!

Наконец, подключите VIN Arduino к линии электропередач и наслаждайтесь представлением.

Светодиодная лента Ардуино — Безграничные возможности

Учиться работать со светодиодными лентами — хороший способ познакомиться с базовым программированием на Arduino, но лучший способ учиться — изменять коды. Побалуйтесь с приведенным выше кодом и посмотрите, что вы можете сделать! Если все это слишком сложно для вас, подумайте о проектах Arduino для начинающих.

Адресная светодиодная лента – это украшение любого проекта Arduino. С ее помощью вы можете создавать светомузыку, умную подсветку для телевизора, бегущие строки и другие проекты, в которых требуется отобразить информацию на широком экране. Благодаря встроенным контроллерам, вы можете управлять каждым из светодиодов ленты в отдельности, управляя ими как пикселями на экране. В этой статье мы разберемся, как работает адресная светодиодная лента, как ее подключить к Ардуино и какие библиотеки лучше использовать для управления.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

Рад снова все приветствовать на сайте «У Самоделкина». Я люблю иногда поиграть в компьютерные игры. Иногда это спокойные пошаговые стратегии типа Heroes или XCOM, а иногда зубодробительный экшен по типу DOOM-ма. И, конечно, я хочу, чтобы мой компьютер выглядел красиво и интересно. Способов достичь этого много, но сегодня я остановлюсь на инструкции по добавлению подсветки в системник. Просто добавить светодиодов или светящихся кулеров – слишком просто и неинтересно. Мы будем обклеивать системник изнутри светодиодной лентой из WS2812 и поставим Arduino или Attiny85 или ESP8266 для управления лентой. Можно будет запускать кучу эффектов, что разнообразит вид системника. Гирлянда из системника это конечно круто, но тоже как-то слишком просто и скучно. Поэтому будет и другое применение, кроме красоты. Мы будем использовать подсветку для отображения температуры центрального и графического процессоров. На компьютере будем запускать программу, которая в свою очередь будет снимать показания с датчиков компьютера и отправлять их на контроллер, управляющий WS2812 лентой.

— Arduino (любая версия) или ESP8266 или Attiny 85 — Лента ws2812 или кольца — USB-TTL для Arduino Pro mini или ESP8266 — ISP программатор для Attiny (можно использовать любую Arduino вместо него) — Соединительные провода — Коннектор Molex, мама — Паяльник, припой, канифоль — Прямые руки и аккуратность

То есть, в корпус из монолитного поликарбоната, оргстекла ил подобного. Или что-то подобное

Питание светодиодов от блока питания компьютера

Данный способ наиболее прост и надежен. Подключение светодиодной ленты к блоку питания компьютера можно выполнить без нарушения гарантии на БП (т.е. без вскрытия корпуса). Блоки питания современных компьютеров имеют несколько резервных разъемов. Открыв боковую крышку системного блока, можно увидеть жгут проводов, отходящих от блока питания. Разъемы выглядят следующим образом:

Выводы блока питания ПК

Наибольший интерес представляют разъемы под номерами 1 и 2. Первый служит для подключения дисковода, который давно уже не используется, а второй для подключения CD и жестких дисков.

В обоих случаях используются провода черного и желтого цвета. Черный – это минусовой вывод, а желтый включен в цепь формирования 12В.

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

Чтобы не нарушать гарантии и обойтись минимальным вмешательством, можно приобрести переходник для подключения питания устройств SATA и обрезать провода уже на нем.

Мощные блоки питания современных стационарных компьютеров допускают нагрузку в цепи 12В до десятка и более ампер. Таким образом, длина ленты может быть значительной.

Следует учесть токи, которые потребляют системные устройства ПК – материнская плата, видеокарта, жесткий диск и CD-rom. Мощность блока питания и токи, которые могут потребляться в цепях питания, указаны на боковой стенке БП на его бирке. Но практически всегда в цепи питания соблюдается значительный запас по мощности.

Продаваемые светодиодные ленты, по большей части, не имеют данных о потребляемом токе. Примерно его можно определить, зная тип светодиодов и их количество на 1м ленты.

В маркировке светодиодов цифры обозначают их размеры:

  • SMD3528 – 3.5х2.8 мм;
  • SMD5050 – 5х5 мм.

Таким образом, если запас по току в цепи 12В составляет 4 ампера и более, то без особых последствий можно подключить 4м светодиодной ленты SMD3528 с плотностью 120 светодиодов на метр или 3м SMD5050 с плотностью 60 светодиодов.

Последний совет! Перед тем, как подключить светодиодную ленту к компьютеру, внимательно проверьте полярность подключения, отсутствие замыканий в соединительных проводах. Не страшно, если перегорит лента или ее отдельный участок из-за неправильного подключения. Хуже, когда неисправность возникнет на стороне ПК.

Подключение светодиодной ленты к Ардуино

Через реле

Реле подключается к устройству на цифровой выход. Полоса, управляемая с его помощью имеет только два состояния – включенная и выключенная. Для управления red-blue-green ленточкой необходимы три реле. Ток, который может контролировать такое устройство, ограничен мощностью катушки (маломощная катушка не в состоянии замыкать большие контакты). Для подсоединения большей мощности используются релейные сборки.

С помощью биполярного транзистора

Для усиления выходного тока и напряжения можно использовать биполярный транзистор. Он выбирается по току и напряжению нагрузки. Ток управления не должен быть выше 20 мА, поэтому подается через токоограничивающее сопротивление 1 – 10 кОм.

Транзистор лучше применять n-p-n с общим эмиттером. Для большего коэффициента усиления используется схема с несколькими элементами или транзисторная сборка (микросхема-усилитель).

С помощью полевого транзистора

Кроме биполярных, для управления полосами используются полевые транзисторы. Другое название этих приборов – МОП или MOSFET-transistor.

Такой элемент, в отличие от биполярного, управляется не током, а напряжением на затворе. Это позволяет малому току затвора управлять большими токами нагрузки – до десятков ампер.

Подключается элемент через токоограничивающее сопротивление. Кроме того, он чувствителен к помехам, поэтому выход контроллера следует соединить с массой резистором в 10 кОм.

С помощью плат расширения

Кроме реле и транзисторов используются готовые блоки и платы расширения.

Это может быть Wi-Fi или Bluetooth, драйвер управления электродвигателем, например, модуль L298N или эквалайзер. Они предназначены для управления нагрузками разной мощности и напряжения. Такие устройства бывают одноканальными – могут управлять только монохромной лентой, и многоканальными – предназначены для устройств RGB и RGBW, а также лент со светодиодами WS 2812.

Как это было

Раньше мне как-то не доводилось вытаскивать платы вентиляторов, поэтому, немного не рассчитав силы, первую плату я успешно сломал. Обычно я не такой рукожоп (кого я блин обманываю?). Вдохновленный неудачей (нет), я начал разбирать второй вентилятор. Со второй платой рисковать я не хотел, и поэтому просто паяльником расплавил ту часть корпуса вентилятора, которая держит плату, а затем без труда вытащил ее.

К сожалению, фотографий разбора вентиляторов я не делал. Сложного там ничего нет, за исключением извлечения платы, — ее очень легко сломать. Спойлер: кусок сломанной платы я тоже буду использовать в будущем

Популярные статьи  Узор Миссони спицами: схема и описание вязания

Светодиодная лента Ардуино – написание кода.

Подключите плату Arduino к компьютеру через USB и откройте Arduino IDE. Убедитесь, что у вас правильный номер платы и порта, выбранный для вашей платы, в меню «Сервис»> «Сервис и инструменты»> «Порт». Откройте новый эскиз и сохраните его с соответствующим именем. Этот эскиз затухает с одноцветными огнями, держит их в таком состоянии в течение нескольких секунд, а затем исчезает, пока они не погаснут снова.

Вы можете сделать эскиз самостоятельно или просто загрузить готовый код из GitHub (https://gist.github.com/anonymous/d4fa3719478c3c5a9c321cc372e9540).

Начните с определения штырей, которые будут использоваться для управления МОП-транзисторами.

#define RED_LED 6 #define BLUE_LED 5 #define GREEN_LED 9

Затем вам понадобятся переменные. Создайте общую переменную яркости вместе с переменной для яркости каждого цвета. Мы будем использовать только основную переменную яркости для выключения светодиодов, поэтому установите здесь максимальное значение 255. Вам также потребуется создать переменную, чтобы контролировать скорость замирания.

int brightness = 255; int gBright = 0; int rBright = 0; int bBright = 0; int fadeSpeed = 10;

В вашей настройке мы установим выводы Arduino. Мы также будем вызывать пару функций с задержкой в 5 секунд. Этих функций еще не существует, но не беспокойтесь, мы доберемся до них.

void setup() { pinMode(GREEN_LED, OUTPUT); pinMode(RED_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT);

TurnOn(); delay(5000); TurnOff(); } Теперь создайте метод TurnOn (): void TurnOn() { for (int i = 0; i < 256; i++) { analogWrite(RED_LED, rBright); rBright +=1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(BLUE_LED, bBright); bBright += 1; delay(fadeSpeed); } for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, gBright); gBright +=1; delay(fadeSpeed); } }

Эти три цикла for полностью увеличивают яркость каждого цвета за время, указанное значением fadeSpeed. Наконец, вам нужно создать метод TurnOff (): void TurnOff() { for (int i = 0; i < 256; i++) { analogWrite(GREEN_LED, brightness); analogWrite(RED_LED, brightness); analogWrite(BLUE_LED, brightness); brightness -= 1; delay(fadeSpeed); }}void loop() {} Этот метод применяет нашу переменную яркости ко всем трем цветным выводам и уменьшает их до нуля в течение определенного периода времени. Нам также нужен метод пустого цикла, чтобы избежать ошибок компиляции.

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

Плавное включение светодиодной ленты на Ардуино

Теперь вы должны увидеть, что ваша светодиодная лента Ардуино наращивает яркость, удерживая белый оттенок в течение 5 секунд, а затем равномерно исчезает до нуля:

Если у вас возникли трудности, дважды проверьте свою проводку и код.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

↑ Инсталляция

Режем и приклеиваем кабельный канал, придумываем, как и где будет крепиться преобразователь (у меня пока валяется на столе). Дорабатываем концевой датчик — аккуратно разжимаем его контакт и заменяем пружину на пружину от шариковой ручки, иначе (у меня так было) датчик будет управлять полкой, а не наоборот . Если у Вас полка массивная и тяжелая, то датчик дорабатывать не придется — проверьте со своей полочкой. Приклеиваем ленту. «ЛУТим» и собираем преобразователь. Паяем все провода, крепим кнопочку. Т.к. разнообразие компьютерных столов невообразимо, всех тонкостей конструкции не привожу — скорее всего Вы разместите все по-другому…

Лента на базе ws2812b

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Лента на базе ws2812b Лента на чипе ws2812b является более совершенствованной, чем ее предшественник. ШИМ драйвер в адресной ленте компактен, и размещается прямо в корпусе светоизлучающего диода.

Основные преимущества ленты на основе ws2812b:

  • компактные размеры;
  • легкость управления;
  • управление осуществляется всего по одной линии + провода питания;
  • количество включенных последовательно светодиодов не ограничено;
  • невысокая стоимость – покупка отдельно трех светодиодов и драйвера к ним выйдет значительно дороже.

Лента оснащена четырьмя выходами:

  • питание;
  • выход передачи данных;
  • общий контакт;
  • вход передачи данных.

Максимальный ток одного адресного светодиода равняется 60 миллиамперам. Рабочие температуры лежат в пределах от -25 до +80 градусов. Напряжение питания составляет 5 В +-0,5.

ШИМ драйверы ленты 8-мибитные – для каждого цвета возможно 256 градация яркости. Для установки яркости нужно 3 байта информации – по 8 бит с каждого светодиода. Информация передается по однолинейному протоколу с фиксированной скоростью. Нули и единицы кодируются высоким и низким уровнем сигнала по линии.

1 бит передается за 1,25 мкс. Весь пакет из 24 бит для одного светодиода передается за 30 мкс.

Что такое NeoPixel?

RGB светодиод способен излучать любой цвет, комбинируя в нужной пропорции 3 основных базовых цвета – красный, зеленый и синий. Например, красного и синего цвета формирует фиолетовый цвет. То есть если каждым из базовых цветов управлять с помощью соответствующих им значений от 0 до 255, то можно сформировать любой цвет. Например, фиолетовый (magenta) цвет в этом случае будет формироваться совокупностью значений 255 0 255 (в шестнадцатеричном коде — 2550255 = # FF00FF). RGB светодиоды формируют множество цветов, основываясь на этой модели.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГПДля управления RGB светодиодом необходимо 3 цифровых контакта микроконтроллера (платы Arduino). То есть, к примеру, если мы хотим управлять 60 RGB светодиодами (причем цвет каждого из них настраивать независимо от других), то нам для этой цели понадобится 180 цифровых контактов. Естественно, подобный подход очень неудобен, поэтому для управления большой совокупностью RGB светодиодов, объединенных, к примеру, в ленту, стали использовать адресацию.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП

Адресуемые (адресные) светодиоды (addressable LEDs) – это новое поколение светодиодов, включающих помимо RGB светодиоды также микросхему (контроллер) управления им. В настоящее время для управления подобными светодиодами наиболее часто используется контроллер WS2812, который позволяет получить доступ к множеству светодиодов с помощью одного цифрового контакта по интерфейсу one wire (1-wire), используя адреса светодиодов.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГПНо в отличие от обычных светодиодов данные светодиоды не включаются просто при подаче на них напряжения, для управления ими необходим микроконтроллер. NeoPixel – это марка (наименование) компании Adafruit для адресуемых светодиодов.

Пример для Arduino

В качестве мозга для управления светодиодами WS2812 рассмотрим платформу Arduino Uno.

Исходный код

Прошейте платформу Arduino скетчем приведённым ниже.

ws2812SimpleTest.ino
// библиотека для работы со светодиодными модулями WS2811/WS2812
#include <Adafruit_NeoPixel.h>
 
// номер пина, к которому подключен светодиодный модуль
#define LED_MODULE_PIN    6
// количество кластеров
#define CLASTER_COUNT     7
 
// создаём объект класса Adafruit_NeoPixel
Adafruit_NeoPixel matrix = Adafruit_NeoPixel(CLASTER_COUNT, LED_MODULE_PIN, NEO_GRB + NEO_KHZ800);
 
void setup() 
{
  // инициализация светодиодного модуля
  matrix.begin();
}
 
void loop()
{
  // заполняем светодиодный модуль по кластерам «бегущий огонь» красного цвета
  colorWipe(matrix.Color(255, , ), 50);
  // заполняем светодиодный модуль по кластерам «бегущий огонь» зелёного цвета
  colorWipe(matrix.Color(, 255, ), 50);
  // заполняем светодиодный модуль по кластерам «бегущий огонь» синего цвета
  colorWipe(matrix.Color(, , 255), 50);
  // тушим светодиодный модуль по кластерам «бегущая тень»
  colorWipe(matrix.Color(, , ), 50);
}
 
// функция заполнения каждого сегмента (кластера)
void colorWipe(uint32_t c, uint8_t wait)
{
  for (uint16_t i = ; i < matrix.numPixels(); i++) {
    // заполняем текущий сегмент выбранным цветом
    matrix.setPixelColor(i, c);
    matrix.show();
    // ждём
    delay(wait);
  }
}

Как подключить адресную ленту к Ардуино

Для этого занятия понадобится:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • лента WS2812B;
  • макетная плата;
  • 1 резистор от 100 до 500 Ом;
  • провода «папа-папа».

WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Схема подключения адресной ленты 5 Вольт к Ардуино

WS2812B Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
5V 5V 5V 5V
DO 10 10 10
Популярные статьи  Как украсить футболку булавками и бисером

Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

Скетч. Тестирование адресной ленты WS2812

#include <Adafruit_NeoPixel.h> // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {
   strip.setPixelColor(0, strip.Color(255, 0, 0));   // включаем красный цвет на 1 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(1, strip.Color(0, 0, 255));   // включаем синий цвет на 2 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(2, strip.Color(255, 255, 255));   // включаем белый цвет на 3 светодиоде
   strip.show();   // отправляем сигнал на ленту
   delay(500);
   strip.clear();   // выключаем все светодиоды

}

Пояснения к коду:

  1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Схема подключения адресной ленты 12 Вольт к Ардуино

Если у вас лента на 12 Вольт, то ее нужно подключать по схеме, размещенной выше. Резистор на цифровом пине защищает его от выгорания (если питание к ленте будет отключено, то она начнет питаться от цифрового пина, при этом пин может выгореть. Также не стоит подключать питание ленты к плате Ардуино, иначе может выгореть защитный диод на Ардуино или USB порт на компьютере (в худшем случае).

Скетч. Управление адресной лентой Ардуино

#include <Adafruit_NeoPixel.h> // подключаем библиотеку

#define PIN  10              // указываем пин для подключения ленты
#define NUMPIXELS 3  // указываем количество светодиодов в ленте

// создаем объект strip с нужными характеристиками
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

void loop() {

   // поочередно включаем красный цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(255, 0, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем зеленый цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 255, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем синий цвет
   for (int i = -1; i < NUMPIXELS; i++) {
      strip.setPixelColor(i, strip.Color(0, 0, 255));
      strip.show();
      delay(100);
   }

}

Пояснения к коду:

  1. с помощью библиотеки Adafruit NeoPixel довольно просто управлять адресной лентой. В примерах к библиотеке можно найти много различных эффектов. Мы продемонстрировали простой вариант с циклом for для включения ленты.

Заключение. В этом обзоре мы рассмотрели лишь подключение и возможность управления адресной лентой от Ардуино. Так как возможности работы с библиотеками FastLED, AdafruitNeoPixel довольно разнообразны. Больше интересных примеров на Arduino и WS2812B размещено в разделе Проекты на Ардуино, где представлены проекты с бегущей строкой на адресной ленте и другие световые эффекты.

Светодиодная лента на базе WS2812B

Отличие адресной LED-ленты от стандартной RGB заключается в том, что яркость и соотношение цветов каждого элемента регулируются отдельно. Это позволяет получить световые эффекты, принципиально недоступные для других типов осветительных приборов. Управление свечением адресной LED-ленты производится известным способом – с помощью широтно-импульсной модуляции. Особенностью системы является оснащение каждого светодиода своим собственным ШИМ-контроллером. Микросхема WS2812B представляет собой трехцветный светоизлучающий диод и схему управления, объединенные в одном корпусе.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Внешний вид светодиода с драйвером.

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

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Внешний вид адресной ленты.

Шина управления микросхемы WS2812B состоит из одной линии – по ней передаются данные

Данные кодируются в виде импульсов постоянной частоты, но с разной скважностью. Один импульс – один бит

Длительность каждого бита составляет 1,25 мкс, нулевой бит состоит из высокого уровня длительностью 0,4 мкс и низкого 0,85 мкс. Единица выглядит, как высокий уровень в течение 0,8 мкс и низкий 0,45 мкс. Каждому светодиоду отправляется посылка из 24 бит (3 байт), дальше следует пауза в виде низкого уровня в течение 50 мкс. Это означает, что дальше будут передаваться данные для следующего LED, и так для всех элементов цепочки. Завершается передача данных паузой в 100 мкс. Это означает, что цикл программирования ленты завершен, и можно отправлять следующий набор пакетов данных.

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Данные для управления адресной лентой.

Такой протокол позволяет обойтись для передачи данных одной линией, но требует точности выдержки временных интервалов. Расхождение допускается не более 150 нс. Кроме того, помехозащищенность такой шины очень низкая. Любые помехи достаточной амплитуды могут быть восприняты контроллером, как данные. Это накладывает ограничения на длину проводников от схемы управления. С другой стороны, это дает возможность проверки исправности ленты без дополнительных приборов. Если на светильник подать питание и дотронуться пальцем до контактной площадки шины управления, некоторые светодиоды могут хаотически загораться и гаснуть.

Технические характеристики элементов WS2812B

Для создания систем освещения на основе адресной ленты надо знать важные параметры светоизлучающих элементов.

Габариты LED 5×5 мм
Частота модуляции ШИМ 400 Гц
Потребляемый ток на максимальной яркости 60 мА на один элемент
Напряжение питания 5 вольт

Arduino и WS2812B

Популярная в мире платформа Ардуино позволяет создавать скетчи (программы) для управления адресными лентами. Возможности системы достаточно широки, но если их на каком-то уровне перестанет хватать, полученных навыков будет достаточно, чтобы безболезненно перейти на С++ или даже на ассемблер. Хотя начальные знания проще получить на Arduino.

Постепенное затухание свечения светодиодов в ленте

Постепенное затухание свечения светодиодов (fading) – это еще один из замечательных эффектов светодиодов NeoPixel. Чем медленнее происходит затухание, тем более впечатляющим является этот эффект.

Arduino

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUMPIXELS 7

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

void NeoFade(int FadeSpeed)
{
int fspeed;
for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, 165, 242, 243); } for (int j = 255; j > 0; j=j-2)
{
pixels.setBrightness(j);
pixels.show();
delay(FadeSpeed);
}
}

void setup() {
pixels.begin();
}

void loop() {
NeoFade(100);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

#include <Adafruit_NeoPixel.h>
 
#define PIN        6
#define NUMPIXELS 7
 
 

Adafruit_NeoPixelpixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);

 
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
 

voidNeoFade(intFadeSpeed)

{

intfspeed;

for(inti=;i<NUMPIXELS;i++){pixels.setPixelColor(i,165,242,243);}for(intj=255;j>;j=j-2)

{

pixels.setBrightness(j);

pixels.show();

delay(FadeSpeed);

}
}
 

voidsetup(){

pixels.begin();

}
 

voidloop(){

NeoFade(100);

}

Оцените статью
Денис Серебряков
Добавить комментарии

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Подсветка корпуса ПК на Arduino и WS2812 с отображением температуры ЦП и ГП
Самодельный хронограф | Дешевый способ измерить скорость пули