====== Светодиодная панель с 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|Техническая документация на драйвер матрицы]]