


Привет! Что может быть лучше rgb светодиода? Конечно 256 светодиодов вместе. Да еще и адресуемых. Это значит, что мы сможем зажечь любой из 256 светодиодов из программы на Ардуино. Сегодня в обзоре светодиодная матрица WS2812B (SK6812).
Содержание
В предыдущей статье мы говорили о гироскопе GY-521. Это тоже очень интересный модуль для Ардуино. Посмотрите тот обзор, если пропустили или уже забыли.
Для того, чтобы выполнить этот урок нам понадобиться
- Ардуино UNO
- Перемычки
- Макетная плата
- Светодиодная матрица
- Резистор 220 Ом
- Кабель USB
Светодиодная матрица
Я использовал матрицу 16 на 16 светодиодов на черной подложке. Ссылка на Алиэкспресс будет внизу. Матрица хорошо гнется. Работает от 5 вольт и бывает во многих формфакторах. 8 на 8, 16 на 16 и 8 на 32 светодиодов.



Характеристики
- Можно использовать только внутри сухих помещений.
- Напряжением 5 вольт.
- Рабочая температура матрицы от -25 до + 80 °C Работая при температуре ниже — 25 лента может «тормозить» или вообще не выполнять команды контроллера. Однако изменения при переохлаждении не фатальны. При повышении температуры, диоды продолжат полноценно работать.
Подключение
- +5V — питание 5 вольт на плате
- GND — земля
- DIN — пин для данных на плате Ардуино
Матрица работает от 5 вольт. А значит мы сможем подключить ее напрямую к Ардуино. Однако, для реальных проектов рекомендую сделать для нее отдельное питание от аккумулятора или блока питания. В соответствии с характеристиками производителя при ярком белом свете, матрица потребляет 76,8 Вт. А ток может быть от 12 до 18 А, в соответствии с таблицей производителя.
Кроме того, сигнальный контакт DIN подключим через резистор, чтобы оградить контакт Ардуино от перепадов напряжения.



+5V — питание 5 вольт на плате, GND — земля, DIN — пин для данных на плате Ардуино



Библиотека FastLed
Для работы со светодиодными матрицами уже написано не мало библиотек. Сегодня используем одну из них. И посмотрим на примеры программ из нее. С помощью менеджера библиотек установим FastLED и откроем пример из меню File -> Examples -> FastLED -> DemoReel100
В начале скетча есть раздел с настройками матрицы. Нам нужно изменить несколько параметров. Поставим количество светодиодов равное 256, а яркость уменьшим, чтобы потреблять меньше тока, на 8.
Контакт DIN подключен к 3 контакту Ардуино.
#define DATA_PIN 3
//#define CLK_PIN 4
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS 256
CRGB leds[NUM_LEDS];
#define BRIGHTNESS 8
#define FRAMES_PER_SECOND 120
Остальную программу изменять не будем, загрузим скетч в Ардуино и посмотрим на результат.



Теперь попробуем использовать код из примера и напишем свой небольшой скетч.
Объявим настройки матрицы и инициализируем их.
#include <FastLED.h>
#define NUM_LEDS 256
#define DATA_PIN 3
#define BRIGHTNESS 8
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // GRB ordering
FastLED.setBrightness(BRIGHTNESS);
}
А цикле loop() возьмем каждый отдельный светодиод и будем зажигать и гасить его в цикле. Таким образом мы сможем обратиться к каждому конкретному светодиоду.
void loop() {
for (int i = 0; i <= 256; i++){
leds[i] = CRGB::Red;
FastLED.show();
delay(100);
leds[i] = CRGB::Black;
FastLED.show();
delay(100);
}
}



Полный текст программы
#include <FastLED.h>
#define NUM_LEDS 256
#define DATA_PIN 3
#define BRIGHTNESS 8
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // GRB ordering is assumed
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
for (int i = 0; i <= 256; i++){
leds[i] = CRGB::Red;
FastLED.show();
delay(100);
leds[i] = CRGB::Black;
FastLED.show();
delay(100);
}
}
Возможные проблемы
При подключении питания матрицы к Ардуино. Контроллер может сильно нагреться в процессе использования. Особенно, если включить все светодиоды на большой яркости. В этом случае, пожалуйста, используйте отдельное питание.
Заключение
Мы рассмотрели светодиодную матрицу 16х16 светодиодов. Подключили ее к Ардуино и научились обращаться к каждому светодиоду. Это сильно поможет нам в будущих проектах.