====== Светодиодная панель с Arduino ======
Светодиодные матрицы не содержат на борту микроконтроллеров, памяти и контроллеров ШИМ. По принципу своей работы панели
рассчитаны на использования технологии «CPLD» или «FPGA». [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Arduino Mega 2560]] удалось адаптировать для управления матрицей, но для полной раскачки панели вам необходимо найти более высокоскоростной контроллер.
{{ :продукты:rgb-led-matrix-64x32:rgb-led-matrix-64x32.6.jpg?nolink |}}
===== Видеообзор =====
{{youtube>oggOUJt_Ihc?large}}
===== Что понадобится =====
* [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Arduino Mega 2560]] или [[amp>product/iskra-mega?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Iskra Mega]]
* [[amp>product/rgb-led-matrix-64x32?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Светодиодная LED панель]]
* [[amp>product/ac-dc-rs-25-5?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Блок питания (5 вольт, 5 ампер)]]
* [[amp>product/wire-mm?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Соединительные проводов «папа-папа»]]
===== Подключение и настройка =====
Перед подключением советуем [[:продукты:rgb-led-matrix-64x32#сигнальные_разъёмы_на_матрице|ознакомиться с распиновкой разъёма «HUB-75» и ответного шлейфа.]]
==== Шаг 1 ====
Подключите 16-проводной шлейф к входному сигнальному разъёму матрицы ''DATA IN''.{{ :projects:rgb-led-matrix-arduino:rgb-led-matrix-arduino_scheme.1.png?nolink |}}
==== Шаг 2 ====
С помощью [[amp>product/wire-mm?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|проводов «папа-папа»]] подключите второй конец шлейфа к платформе [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Arduino Mega 2560.]]
Номера пинов изменять нельзя
^ Вывод шлейфа ^ Вывод Arduino Mega ^
| R1 | 24 |
| G1 | 25 |
| B1 | 26 |
| GND | GND |
| R2 | 27 |
| G2 | 28 |
| B2 | 29 |
| GND | GND |
| A | A0 |
| B | A1 |
| C | A2 |
| D | A3 |
| CLK | 11 |
| LAT | 10 |
| OE | 9 |
| GND | GND |
{{ :projects:rgb-led-matrix-arduino:rgb-led-matrix-arduino_scheme.2.png?nolink |}}
==== Шаг 3 ====
Подключите питание на светодиодную матрицу через силовой шнур. Один конец провода к блоку питания, а второй — в разъём ''POWER'' на матрице. Каждая LED панель питается строго от 5 вольт. Потребление тока зависит от вида матрицы.
Рекомендуем использовать блок питания с выходным напряжением 5 вольт и током не менее 4 ампер. Идеально подойдёт [[amp>product/ac-dc-rs-25-5?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|блок питания с выходным напряжением 5 вольт и током 5 ампер]].
При подключении нескольких светодиодных панелей, соответственно увеличивайте запас по току в N-раз, где N — количество матриц в цепочке.
На схеме матрицы нет встроенного регулятора напряжения. При подаче напряжения более 5 вольт — вы убьёте LED панель.
{{ :projects:rgb-led-matrix-arduino:rgb-led-matrix-arduino_scheme.3.png?nolink |}}
Железо собрано. Теперь можно переходить к примерам работы.
===== Примеры работы =====
Для работы примеров скачайте и установите библиотеки [[https://github.com/adafruit/RGB-matrix-Panel|RGBmatrixPanel]],[[https://github.com/adafruit/Adafruit_BusIO|Adafruit_BusIO]] и [[https://github.com/adafruit/Adafruit-GFX-Library|Adafruit GFX]] через менеджер библиотек Arduino.
==== Тест матрицы ====
Для начала сделаем простой тест светодиодов «битых пикселей» на матрице.
// библиотека для работы с матрицей
#include
// установите и скачайте также библиотеку «Adafruit GFX Library»
// «RGBmatrixPanel» наследуется от «Adafruit GFX Library»
// управляющие пины матрицы
#define CLK 11
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
// объявляем объект для работы с матрицей 64х32
// включаем двойную буферизацию
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);
int color;
void setup() {
// инициируем работу с матрицей
matrix.begin();
}
void loop() {
// закрашиваем матрицу в красный цвет
matrix.fillScreen(matrix.Color888(255, 0, 0));
// выводим цвет из буфера на экран
matrix.swapBuffers(false);
delay(1000);
// закрашиваем матрицу в зелёный цвет
matrix.fillScreen(matrix.Color888(0, 255, 0));
// выводим цвет из буфера на экран
matrix.swapBuffers(false);
delay(1000);
// закрашиваем матрицу в синий цвет
matrix.fillScreen(matrix.Color888(0, 0, 255));
// выводим цвет из буфера на экран
matrix.swapBuffers(false);
delay(1000);
// закрашиваем матрицу в белый цвет
matrix.fillScreen(matrix.Color888(255, 255, 255));
// выводим цвет из буфера на экран
matrix.swapBuffers(false);
delay(1000);
}
{{ :projects:rgb-led-matrix-arduino:fillcolortest.gif?nolink |}}
==== Вывод геометрических фигур ====
Методы библиотеки легко позволяют выводить геометрические фигуры.
// библиотека для работы с матрицей
#include
// установите и скачайте также библиотеку «Adafruit GFX Library»
// «RGBmatrixPanel» наследуется от «Adafruit GFX Library»
// управляющие пины матрицы
#define CLK 11
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
// объявляем объект для работы с матрицей 64х32
// включаем двойную буферизацию
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);
// выводимая строка на матрицу
const char textStr[] = "Hello, World!";
// переменная с X-координатой текста
int textX = matrix.width();
// минимальное значение координаты текста
// количество символов в строке умноженное на ширину одного символа,
// после которой текст начнёт повторно выводиться
int textMin = sizeof(textStr) * -6;
void setup() {
// инициируем работу с матрицей
matrix.begin();
int width = matrix.width();
int height = matrix.height();
// рисуем две диагонали
matrix.drawLine(0, 0, width - 1, height - 1, matrix.Color333(7, 0, 0));
matrix.drawLine(0, height - 1, width - 1, 0, matrix.Color333(7, 0, 0));
// рисуем окружность в центре дисплея и радиусом 12
matrix.drawCircle(width / 2, height / 2, 12 , matrix.Color333(7, 7, 0));
// рисуем диск (закрашенную окружность) в центре дисплея и радиусом 8
matrix.fillCircle(width / 2, height / 2, 8, matrix.Color333(0, 7, 7));
// выводим текст из буфера на матрицу
matrix.swapBuffers(false);
}
void loop() {
}
{{ :projects:rgb-led-matrix-arduino:geometricfigures.jpg?nolink |}}
==== Анимация шариков ====
Заставим фигуры двигаться и отталкиваться от стен.
// библиотека для работы с матрицей
#include
// установите и скачайте также библиотеку «Adafruit GFX Library»
// «RGBmatrixPanel» наследуется от «Adafruit GFX Library»
// управляющие пины матрицы
#define CLK 11
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
// объявляем объект для работы с матрицей 64х32
// включаем двойную буферизацию
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);
// массив с начальными координатами кругов и значениями смещения
// первые две координаты в каждой строке — координаты трёх кругов
// вторые две — координаты смещения кругов
int ball[3][4] = {
{ 6, 6, 1, 1 },
{ 17, 15, 1, -1 },
{ 27, 6, -1, 1 }
};
// цвет кругов
static const int ballColor[3] = {
matrix.Color333(3, 0, 0),
matrix.Color333(0, 3, 0),
matrix.Color333(0, 0, 3)
};
// радиус кругов
static int const ballRadius = 3;
void setup() {
// инициируем работу с матрицей
matrix.begin();
}
void loop() {
// очищаем экран
matrix.fillScreen(0);
// запускаем счётчик для смены координат кругов
for (int i = 0; i < 3; i++) {
// рисуем три круга с одинаковыми радиусами
// разными начальными координатами и цветами
matrix.fillCircle(ball[i][0], ball[i][1], ballRadius, ballColor[i]);
// обновляем Х-координату кругов
ball[i][0] += ball[i][2];
// Обновляем Y-координату кругов
ball[i][1] += ball[i][3];
// если круг по Х дошёл до границы экрана
if ((ball[i][0] == ballRadius) || (ball[i][0] == (matrix.width() - ballRadius))) {
// инициируем движение в обратную сторону
ball[i][2] *= -1;
}
// если круг по Y дошёл до границы экрана
if ((ball[i][1] == ballRadius) || (ball[i][1] == (matrix.height() - ballRadius))) {
// инициируем движение в обратную сторону
ball[i][3] *= -1;
}
}
// выводим объекты из буфера на экран
matrix.swapBuffers(false);
}
{{ :projects:rgb-led-matrix-arduino:movingcircles.gif?nolink |}}
==== Вывод текста ====
Матрицы идеально подходят для объявлений и рекламных вывесок. Выведем цветной и яркий текст.
// библиотека для работы с матрицей
#include
// установите и скачайте также библиотеку «Adafruit GFX Library»
// «RGBmatrixPanel» наследуется от «Adafruit GFX Library»
// управляющие пины матрицы
#define CLK 11
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
// объявляем объект для работы с матрицей 64х32
// включаем двойную буферизацию
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);
// выводимая строка на матрицу
const char textStr[] = "Hello, World!";
// переменная с X-координатой текста
int textX = matrix.width();
// минимальное значение координаты текста
// количество символов в строке умноженное на ширину одного символа,
// после которой текст начнёт повторно выводиться
int textMin = sizeof(textStr) * -6;
void setup() {
randomSeed(analogRead(A5));
// инициируем работу с матрицей
matrix.begin();
// отключаем перенос текста на следующую строку
matrix.setTextWrap(false);
// устанавливаем размер текста
matrix.setTextSize(1);
// очищаем экран
matrix.fillScreen(0);
// выставляем курсор
matrix.setCursor(10, 0);
// печатаем первую строку
matrix.println("Amperka");
// выставляем курсор
matrix.setCursor(0, 15);
// выводимая вторая строка
char strText[] = "LED MATRIX!";
// перебираем по очереди каждый символ
for (int i = 0; i < strlen(strText); i++) {
// генерируем случайное число от 0 до 1536
int hue = random(0, 1536);
// устанавливаем случайный цвет по шкале «HSV»
matrix.setTextColor(matrix.ColorHSV(hue, 255, 255, false));
// печатаем символ текущего цикла
matrix.print(strText[i]);
}
// выводим текст из буфера на матрицу
matrix.swapBuffers(false);
}
void loop() {
}
{{ :projects:rgb-led-matrix-arduino:printstring.jpg?nolink |}}
==== Бегущая строка ====
Добавим тексту движения — сделаем бегущую строку.
// библиотека для работы с матрицей
#include
// установите и скачайте также библиотеку «Adafruit GFX Library»
// «RGBmatrixPanel» наследуется от «Adafruit GFX Library»
// управляющие пины матрицы
#define CLK 11
#define OE 9
#define LAT 10
#define A A0
#define B A1
#define C A2
#define D A3
// объявляем объект для работы с матрицей 64х32
// включаем двойную буферизацию
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);
// выводимая строка на матрицу
const char textStr[] = "Hello, World!";
// переменная с X-координатой текста
int textX = matrix.width();
// минимальное значение координаты текста
// количество символов в строке умноженное на ширину одного символа,
// после которой текст начнёт повторно выводиться
int textMin = sizeof(textStr) * -6;
void setup() {
// инициируем работу с матрицей
matrix.begin();
// отключаем перенос текста на следующую строку
matrix.setTextWrap(false);
// устанавливаем размер текста
matrix.setTextSize(1);
}
void loop() {
// очищаем экран
matrix.fillScreen(0);
// устанавливаем цвет текста
matrix.setTextColor(matrix.Color888(255, 0, 255));
// указываем начальную координату вывода текста {textX; 12}
matrix.setCursor(textX, 12);
// выводим текст
matrix.print(textStr);
// сдвигаем текст на один пиксель при каждом выполнении цикла
textX--;
// если был отображён весь текст
if (textX < textMin) {
// начинаем выводить текст заново
textX = matrix.width();
}
// выводим текст из буфера на матрицу
matrix.swapBuffers(false);
}
{{ :projects:rgb-led-matrix-arduino:runningstring.gif?nolink |}}
===== Ресурсы =====
* [[amp>product/rgb-led-matrix-64x32?utm_source=man&utm_campaign=rgb-led-matrix&utm_medium=wiki|Светодиодная RGB Матрица 64×32]] в магазине.
* [[:продукты:rgb-led-matrix-64x32|Техническая документация на светодиодную RGB Матрица 64×32]]
* Библиотеки [[https://github.com/adafruit/RGB-matrix-Panel|RGBmatrixPanel]],[[https://github.com/adafruit/Adafruit_BusIO|Adafruit_BusIO]] и [[https://github.com/adafruit/Adafruit-GFX-Library|Adafruit GFX]] для работы с матрицами через Arduino.
* [[:projects:rgb-led-matrix-raspberry|Примеры работы для Raspberry Pi.]]
* [[:продукты:rgb-led-matrix-64x32|Техническая документация на светодиодную RGB матрицу 64×32]]
* [[:продукты:rgb-led-matrix-driver-cap|Техническая документация на драйвер матрицы]]