Рубрики
Схемы на Arduino

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

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

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

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

Работа схемы

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

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

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

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

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

Управление светодиодной матрицей 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)
{……..

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

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

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

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