Светодиодная матрица. Урок 17. Ардуино

led matrix
Светодиодная матрица WS2812B (SK6812) и Ардуино
Светодиодная матрица WS2812B (SK6812) и Ардуино

Привет! Что может быть лучше rgb светодиода? Конечно 256 светодиодов вместе. Да еще и адресуемых. Это значит, что мы сможем зажечь любой из 256 светодиодов из программы на Ардуино. Сегодня в обзоре светодиодная матрица WS2812B (SK6812).

В предыдущей статье мы говорили о гироскопе GY-521. Это тоже очень интересный модуль для Ардуино. Посмотрите тот обзор, если пропустили или уже забыли.

Для того, чтобы выполнить этот урок нам понадобиться

  • Ардуино UNO
  • Перемычки
  • Макетная плата
  • Светодиодная матрица
  • Резистор 220 Ом
  • Кабель USB

Светодиодная матрица

Я использовал матрицу 16 на 16 светодиодов на черной подложке. Ссылка на Алиэкспресс будет внизу. Матрица хорошо гнется. Работает от 5 вольт и бывает во многих формфакторах. 8 на 8, 16 на 16 и 8 на 32 светодиодов.

Светодиодная матрица WS2812B (SK6812)
Светодиодная матрица WS2812B (SK6812)

Характеристики

  • Можно использовать только внутри сухих помещений.
  • Напряжением 5 вольт.
  • Рабочая температура матрицы от -25 до + 80 °C Работая при температуре ниже — 25 лента может «тормозить» или вообще не выполнять команды контроллера. Однако изменения при переохлаждении не фатальны. При повышении температуры, диоды продолжат полноценно работать.

Подключение

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

Матрица работает от 5 вольт. А значит мы сможем подключить ее напрямую к Ардуино. Однако, для реальных проектов рекомендую сделать для нее отдельное питание от аккумулятора или блока питания. В соответствии с характеристиками производителя при ярком белом свете, матрица потребляет 76,8 Вт. А ток может быть от 12 до 18 А, в соответствии с таблицей производителя.

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

Подключение матрицы. 
+5V - питание 5 вольт на плате, GND - земля, 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

Остальную программу изменять не будем, загрузим скетч в Ардуино и посмотрим на результат.

FastLed DemoReel100 program
FastLed DemoReel100 program

Теперь попробуем использовать код из примера и напишем свой небольшой скетч.

Объявим настройки матрицы и инициализируем их.

#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 светодиодов. Подключили ее к Ардуино и научились обращаться к каждому светодиоду. Это сильно поможет нам в будущих проектах.

Где купить

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

Ваш адрес email не будет опубликован.