Скроллинг текста на светодиодной матрице 8х8 под управлением Arduino

В этой статье мы рассмотрим подключение к плате Arduino светодиодной матрицы 8х8 и реализуем на ней скроллинг текста.

Внешний вид устройства для скроллинга текста на светодиодной матрице 8х8 под управлением Arduino

Светодиодная матрица 8х8 содержит 64 светодиода, упорядоченных в форме матрицы. Ее можно изготовить самому, спаяв 64 светодиода на макетной плате (с контактными отверстиями) или на точечной плате. Светодиоды можно выбрать любого цвета, какие у вас есть в наличии. Затем мы напишем программу для платы Arduino, которая будет подавать питание на светодиоды в нашей матрице таким образом, чтобы на ней отображались символы алфавита.

Необходимые компоненты

Плата Arduino Uno
Источник питания с напряжением 5 В
64 светодиода
Плата для изготовления светодиодной матрицы
Резистор 1 кОм (8 шт.)

Работа схемы

Итак, у нас есть 64 светодиода, упорядоченных в форме матрицы. То есть у нас есть 8 столбцов и 8 строк. Все положительные выводы строк соединены вместе. То есть для каждой строки у нас есть один общий положительный вывод для всех 8 светодиодов в ней как показано на следующем рисунке.

Общие положительные выводы для всех строк светодиодной матрицыФактически, для 8 строк мы имеем 8 общих положительных выводов. Если рассматривать первую строку, как показано на рисунке, 8 светодиодов с D57 по D64 имеют общий положительный вывод обозначенный ‘POSITIVE0’. Теперь, если мы хотим зажечь один или все светодиоды в первой строке, мы должны подать питание на контакт PIN0 светодиодной матрицы. Аналогично, если мы хотим зажечь светодиод(ы) в любой другой строке, нам необходимо будет подать питание на общий положительный вывод соответствующей строки.

Но это еще не все – кроме этого необходимо еще подать землю на те светодиоды, которые мы хотим зажечь. В светодиодной матрице 8х8 все отрицательные выводы светодиодов в каждом столбце соединены вместе и образуют, таким образом, 8 общих отрицательных выводов. К примеру, все отрицательные выводы в первом столбце соединены вместе в общий контакт PIN-A1 (NEGATIVE7) как показано на следующем рисунке.
Следует обратить внимание на этот факт когда будете спаивать светодиоды на макетной плате (с контактными отверстиями).

Общие отрицательные выводы для всех столбцов светодиодной матрицыТеперь, если мы хотим подать землю на какой-нибудь светодиод в первом столбце нам необходимо ее подать на общий отрицательный вывод PIN-A1 (NEGATIVE7) первого столбца матрицы. Аналогично и для других столбцов матрицы.

Теперь вы знаете как работают общие положительные и общие отрицательные выводы в матрице. Общая получившаяся схема нашего устройства показана на следующем рисунке.

Схема устройства для скроллинга текста на светодиодной матрице 8х8 под управлением Arduino

Управление светодиодной матрицей 8х8 с использованием технологии мультиплексирования

Допустим, мы хотим зажечь светодиод LED57 – для этого нам необходимо подать питание (напряжение высокого уровня) на контакт PIN0 платы Arduino и землю (напряжение низкого уровня) на ее контакт PIN8. Если же мы хотим зажечь одновременно светодиоды LED57 и LED50, то нам будет необходимо подать питание на PIN0, PIN1 и землю на PIN8, PIN9. Но при этом кроме светодиодов D57, D50 также зажгутся светодиоды D49, D58. Чтобы предотвратить это мы будем использовать так называемую технологию мультиплексирования. Подробно эта технология описана в статье про подключение светодиодной матрицы 8х8 к микроконтроллеру AVR ATmega8, здесь же рассмотрим ее кратко.

Человеческий глаз не может различать частоту более 30 Гц. То есть если светодиод будет включаться и выключаться с частотой 30 Гц или более, то человеческий глаз будет воспринимать его как непрерывно горящим, хотя на самом деле это не так. В этом и заключается смысл технологии мультиплексирования.

К примеру, нам нужно зажечь светодиоды LED57 и LED50, но чтобы при этом не зажигались светодиоды D49 и D58. Фокус здесь будет состоять в том, что мы сначала подадим питание чтобы зажечь LED57, затем подождем 1 мс, и затем выключим его. Затем мы подадим питание на вторую строку чтобы включить LED50, подождем 1 мс, и выключим его. Этот цикл будет продолжаться на высокой скорости и светодиоды LED57 & LED50 будут включаться и выключаться, в результате чего нашему глазу будет казаться что они постоянно горят. То есть в один момент времени мы подаем питание только на одну строку матрицы, исключая благодаря этому возможность включения светодиодов в других строках матрицы. Таким образом мы сможем отобразить на матрице все необходимые нам символы.

Мы в нашем проекте будем использовать библиотеку LedControlMS.h для того, чтобы нас не заботили все сложности этой технологии мультиплексирования. С использованием данной библиотеки нам всего лишь будет нужно вводить число или символ, который мы хотим отобразить на светодиодной матрице, а все остальное библиотека сделает самостоятельно.

Исходный код программы

В тексте нашей программы мы запишем десятичные значения для каждого символа. Программа будет переключать эти значения со скоростью 0.2 сек., поэтому будет создаваться эффект скроллинга вверх.

Чтобы изменить набор отображаемых символов вам необходимо будет сменить значения в массиве ALPHA[] на те, которые вам будут нужны.

24,60,102,126,102,102,102,0,0,0, // A
124,102,102,124,102,102,124,0,0,0, // B
60,102,96,96,96,102,60,0, 0,0, // C
120,108,102,102,102,108,120,0, 0,0, // D
126,96,96,120,96,96,126,0, 0,0, // E
126,96,96,120,96,96,96,0, 0,0, // F
60,102,96,110,102,102,60,0, 0,0, // G
102,102,102,126,102,102,102,0, 0,0, // H
60,24,24,24,24,24,60,0, 0,0, // I
30,12,12,12,12,108,56,0, 0,0, // J
102,108,120,112,120,108,102,0, 0,0, // K
96,96,96,96,96,96,126,0, 0,0, // L
99,119,127,107,99,99,99,0, 0,0, // M
102,118,126,126,110,102,102,0, 0,0, // N
60,102,102,102,102,102,60,0, 0,0, // O
124,102,102,124,96,96,96,0, 0,0, // P
60,102,102,102,102,60,14,0, 0,0, // Q
124,102,102,124,120,108,102,0, 0,0, // R
60,102,96,60,6,102,60,0, 0,0, // S
126,24,24,24,24,24,24,0, 0,0, // T
102,102,102,102,102,102,60,0, 0,0, // U
102,102,102,102,102,60,24,0, 0,0, // V
99,99,99,107,127,119,99,0, 0,0, // W
102,102,60,24,60,102,102,0, 0,0, // X
102,102,102,60,24,24,24,0, 0,0, // Y
126,6,12,24,48,96,126,0, 0,0, // Z

К примеру, если вы захотите отобразить (проскроллить) слово DAD на светодиодной матрице, то в этом случае массив ALPHA[] будет выглядеть следующим образом:

char ALPHA[] = {0,0,0,0,0,0,0,0,0,0,0,
120,108,102,102,102,108,120,0,0,0,
24,60,102,126,102,102,102,0,0,0,
120,108,102,102,102,108,120,0,0,0,
0,0,0,0,0,0,0,0,0,0,0};

Общее число значений сейчас 5*10=50, поэтому

замените,
for(int x=0;x<142;x++) //150-8(to stop overflow)
{……..
на,
for(int x=0;x<42;x++) //50-8(to stop overflow)
{……..

Далее приведен полный текст программы.

char ground[8] = {8,9,10,11,12,13,A0,A1};
char ALPHA[] = {0,0,0,0,0,0,0,0,0,0,0,
60,102,96,96,96,102,60,0,0,0,
60,24,24,24,24,24,60,0,0,0,
124,102,102,124,120,108,102,0,0,0,
60,102,96,96,96,102,60,0,0,0,
102,102,102,102,102,102,60,0,0,0,
60,24,24,24,24,24,60,0,0,0,
126,24,24,24,24,24,24,0,0,0,
120,108,102,102,102,108,120,0,0,0,
60,24,24,24,24,24,60,0,0,0,
60,102,96,110,102,102,60,0,0,0,
126,96,96,120,96,96,126,0,0,0,
60,102,96,60,6,102,60,0,0,0,
126,24,24,24,24,24,24,0,0,0,
0,0,0,0,0,0,0,0,0,0,0
};
void setup()
{
for (int x=8;x<14;x++)
{
pinMode(x, OUTPUT);
}
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);

for (int i=0;i<8;i++)
{
digitalWrite(ground[i],HIGH);
}
DDRD = 0xFF;
PORTD =0;
}
void loop()
{
for(int x=0;x<142;x++)
{
for(int a=0;a<20;a++)
{
for (int i=0;i<8;i++)
{
digitalWrite(ground[i],LOW);
PORTD = ALPHA[i+x];
delay(1);
digitalWrite(ground[i],HIGH);
}
}
}
delay(1000);
}

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
9 просмотров

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *