Светодиодная матрица 8×8 (Troyka-модуль)

Troyka Led Matrix — цепочка из шестидесяти четырёх красных светодиодов, собранная на одноюнитовом модуле.

Обычно подключение светодиодных матриц ассоциируется кропотливой работой и острой нехваткой пинов на платах. Мы добавили драйвер управления матрицей. Теперь модуль управляется по скоростному интерфейсу I²C и занимает всего два пина микроконтроллера.

Видеообзор

Подключение и настройка

Светодиодная матрица общается с управляющей электроникой по I²C/TWI. При подключении к Arduino или Iskra JS удобно использовать Troyka Shield. С Troyka Slot Shield можно обойтись без лишних проводов.

Примеры работы

Рассмотрим несколько примеров работы светодиодных матриц с Arduino.

Вывод случайных пикселей

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

drawPixels.ino
// библиотека для работы I²C
#include "Wire.h"
// библиотека для работы со светодиодной матрицей
#include "TroykaLedMatrix.h"
 
// создаём объект matrix для работы с матрицей
TroykaLedMatrix matrix;
 
void setup()
{
  // начало работы с матрицей
  matrix.begin();
  // очищаем матрицу
  matrix.clear();
}
 
void loop()
{
  // заполняем матрицу случайным пикселем
  matrix.drawPixel(random(8),random(8));
  // очищаем на матрице случайный пиксель
  matrix.clearPixel(random(8),random(8));
  // ждём 50 мс
  delay(50);
}

Вывод изображений

Методы библиотеки позволяют выводить изображение форматом 8×8. В качестве примера выведем сердце на матрицу.

drawBitmap.ino
// библиотека для работы I²C
#include "Wire.h"
// библиотека для работы со светодиодной матрицей
#include "TroykaLedMatrix.h"
 
// создаём объект matrix для работы с матрицей
TroykaLedMatrix matrix;
 
// массив картнки сердца
const uint8_t heart[] {
0b00000000,
0b01100110,
0b11111111,
0b11111111,
0b11111111,
0b01111110,
0b00111100,
0b00011000,
};
 
void setup()
{
  // начало работы с матрицей
  matrix.begin();
  // очищаем матрицу
  matrix.clear();
  // отображаем на матрице сердце
  matrix.drawBitmap(heart);
}
 
void loop()
{
 
}

Регулировка яркости матрицы

Контроллер матрицы позволяет регулировать яркость светодиодной матрицы. В качестве примера будем изменять яркость свечения в зависимости от положения потенциометра. Для этого добавьте к проекту Потенциометр (Troyka-модуль)

drawBitmapBrightness.ino
// библиотека для работы I²C
#include "Wire.h"
// библиотека для работы со светодиодной матрицей
#include "TroykaLedMatrix.h"
 
// создаём объект matrix для работы с матрицей
TroykaLedMatrix matrix;
 
// массив картнки сердца
const uint8_t heart[] {
0b00000000,
0b01100110,
0b11111111,
0b11111111,
0b11111111,
0b01111110,
0b00111100,
0b00011000,
};
 
void setup()
{
  // начало работы с матрицей
  matrix.begin();
  // очищаем матрицу
  matrix.clear();
  // отображаем на матрице сердце
  matrix.drawBitmap(heart);
}
 
void loop()
{
  // считываем значение с потенциометра
  int sensorValue = analogRead(A3);
  // в зависимоти от занчения регулятора
  // устанавливаем яркость светодиодной матрицы
  if (sensorValue < 100) {
    matrix.setCurrentLimit(ROW_CURRENT_05MA);
  } else if (sensorValue >= 100 && sensorValue < 200) {
    matrix.setCurrentLimit(ROW_CURRENT_10MA);
  } else if (sensorValue >= 200 && sensorValue < 300) {
    matrix.setCurrentLimit(ROW_CURRENT_15MA);
  } else if (sensorValue >= 300 && sensorValue < 400) {
    matrix.setCurrentLimit(ROW_CURRENT_20MA);
  } else if (sensorValue >= 400 && sensorValue < 500) {
    matrix.setCurrentLimit(ROW_CURRENT_25MA);
  } else if (sensorValue >= 500 && sensorValue < 600) {
    matrix.setCurrentLimit(ROW_CURRENT_30MA);
  } else if (sensorValue >= 600 && sensorValue < 700) {
    matrix.setCurrentLimit(ROW_CURRENT_35MA);
  } else if (sensorValue >= 700 && sensorValue < 800) {
    matrix.setCurrentLimit(ROW_CURRENT_40MA);
  } else if (sensorValue >= 800 && sensorValue < 900) {
    matrix.setCurrentLimit(ROW_CURRENT_45MA);
  } else if (sensorValue >= 900 && sensorValue < 1000) {
    matrix.setCurrentLimit(ROW_CURRENT_45MA);
  } else {
    matrix.setCurrentLimit(ROW_CURRENT_50MA);
  }
}

Вывод символов

Если подключить встроенный в библиотеку шрифт, возможно выводить любой символ из таблицы ASCII. В качестве примера выведем по символьно слово «Amperka».

printSymbolsAmperka.ino
// библиотека для работы I²C
#include "Wire.h"
// библиотека для работы со светодиодной матрицей
#include "TroykaLedMatrix.h"
 
// создаём объект matrix для работы с матрицей
TroykaLedMatrix matrix;
 
void setup()
{
  // начало работы с матрицей
  matrix.begin();
  // очищаем матрицу
  matrix.clear();
  // устанавливаем шрифт
  matrix.selectFont(FONT_8X8_BASIC);
}
 
void loop()
{
  // выводим поочерёдно слово «Amperka»
  matrix.drawSymbol('A');
  delay(1000);
  matrix.drawSymbol('M');
  delay(1000);
  matrix.drawSymbol('P');
  delay(1000);
  matrix.drawSymbol('E');
  delay(1000);
  matrix.drawSymbol('R');
  delay(1000);
  matrix.drawSymbol('K');
  delay(1000);
  matrix.drawSymbol('A');
  delay(1000);
  // очищаем матрицу
  matrix.clear();
  delay(1000);
 
}

Строка из матриц

Одна матрица хорошо, а три ещё лучше. Драйвер управления светодиодной матрицей имеет функцию выбора адреса с возможностью подключения до четырёх матриц. Установите ещё две матрицы на Troyka Slot Shield, заранее модернизировав их для работы с разными адресами. Следующий код будет отображать на трёх матрицах могучий язык «C++».

lotOfMatrix.ino
// библиотека для работы I²C
#include "Wire.h"
// библиотека для работы со светодиодной матрицей
#include "TroykaLedMatrix.h"
 
// создаём объекты matrix для работы с матрицами
// для каждой матрицы передаём свой адрес
// подробнее читайте на:
// http://wiki.amperka.ru/продукты:troyka-led-matrix
TroykaLedMatrix matrix1(0b01100000);
TroykaLedMatrix matrix2(0b01100001);
TroykaLedMatrix matrix3(0b01100010);
 
void setup()
{
  // начало работы с матрицами
  matrix1.begin();
  matrix2.begin();
  matrix3.begin();
  // очищаем матрицы
  matrix1.clear();
  matrix2.clear();
  matrix3.clear();
  // устанавливаем шрифт
  matrix1.selectFont(FONT_8X8_BASIC);
  matrix2.selectFont(FONT_8X8_BASIC);
  matrix3.selectFont(FONT_8X8_BASIC);;
  // выводим на каждую матрицу по символу из строки «C++»
  matrix1.drawSymbol('C');
  matrix2.drawSymbol('+');
  matrix3.drawSymbol('+');
}
 
void loop()
{
 
}

Элементы платы

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

Светодиодная матрица 788BS — это панель из 64 красных светодиодов.

Принципиальная схема

Драйвер светодиодной матрицы

Драйвер IS31FL3728 представляет из себя контроллер светодиодной матрицы 8×8. Общение с управляющей платой осуществляется по протоколу I²C. Контроллер в разы облегчает работу с матрицей и уменьшает количество занятых пинов до двух: SDA и SCL. Приятным бонусом является выбор адреса контроллера, благодаря чему есть возможность подключить до четырёх матриц к управляющей плате по двум проводам.

Площадки выбора адреса

Соедините капелькой припоя контакты специальных перемычек на модуле. Это позволит использовать до 4 матриц в одном проекте.

Контакты подключения трёхпроводных шлейфов

Группа питания и сигнальный

  • Сигнальный пин (S) — входной пин аудио сигнала. Используется только в режиме эквалайзера. При обычной работе с модулем не используется.
  • Питание (V) — соедините с питанием микроконтроллера
  • Земля (G) — соедините с землёй микроконтроллера

Шина I2C

  • Сигнальный (D) — подключите к пину SDAмикроконтроллера.
  • Сигнальный (C) — подключите к пину SCLмикроконтроллера.

Принципиальная и монтажная схемы

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

  • Контроллер матрицы: IS31FL3728
  • Модуль матрицы: светодиодная матрица 788BS
  • Количество светодиодов: 64
  • Рабочее напряжение: 3,3–5 В
  • Потребляемый ток: до 2 А
  • Габариты: 25,4×25,4 мм

Ресурсы