Как подключить последовательно лед матрицы одним драйвером
Перейти к содержимому

Как подключить последовательно лед матрицы одним драйвером

  • автор:

Каскадное подключение LED матриц 8х8

Продолжаем цикл статей про светодиодные LED матрицы 8х8, для тех кто что то пропустил — приведу ссылки на предыдущие статьи:

  1. Статья первая. Первое знакомство с LED матрицами 8х8.
  2. Статья вторая. Создание простейшего шрифта для LED матрицы 8х8.

Итак, в этой статье я покажу как подключить несколько LED матриц при помощи так называемого каскадного подключения. В общем то всё просто — нужно соединить последовательно проводами контакты на матрицах, как показано на схеме. При этом нумерация матриц будет начинаться слева направо, то есть крайняя левая матрица будет по умолчанию пронумерована адресом 0, следующая за ней адресом 1, 2, 3 и так далее. На нижеприведённой схеме показано всё это подробно, как видите, никаких сложностей не должно возникнуть.

Зальём скетч в плату Arduino Nano, программа которая будет вести счет и визуализировать числа счетчика от 0 до 999. Скетч достаточно хорошо прокомментирован:

#include "LedControl.h" //Синтаксис создания класса LedControl(dataPin,clockPin,csPin,numDevices) //Где LedControl - объект класса //dataPin - пин на плате Arduino к которому будет подключен пин DIN //clockPin - пин на плате Arduino к которому будет подключен пин CLK //csPin - пин на плате Arduino к которому будет подключен пин CS //numDevices - количество устройств на шине //Создать объект класса matrix в нашем случае с тремя подключенными устройствами LedControl matrix = LedControl(12, 11, 10, 3); //Время между сменой анимации цифры const int delayTime = 200; //Счетчик от 0 до 999 - нам хватит трёх матриц //соответсвенно число будет трёхразрядным //Первый разряд(десятые) - крайняя правая матрица static int value1 = 0; //Второй разряд(сотые) - средняя матрица static int value2 = 0; //Третий разряд(тысячные) - крайняя левая матрица static int value3 = 0; //Объявляем прототип функции Counter() //эта функция будет обрабатывать значения счетчиков для матриц void Counter(); void setup() < //Создаём переменную для хранения количества устройств на шине SPI //которое мы указали при создании объекта matrix класса LedControl //в нашем случае это три устройста //Функция getDeviceCount() вернёт указанное количество устройств int numDevices = matrix.getDeviceCount(); //Проведём инициализацию устройств в цикле for for(int address = 0; address < numDevices; address ++) < //Устройству с адресом "address" на SPI шине выйти из спящего режима по умолчанию matrix.shutdown(address, false); //Установить яркость Led матрицы на 8 из 15 matrix.setIntensity(address, 8); //Очистить дисплей matrix.clearDisplay(address); >> //Объявляем массив из 10-ти символов //Каждый символ включает в себя массив из 8-ти байт //закодированных числом в шестнадцатиричном коде byte CountDigits[10][8] = < , //0 , //1 , //2 , //3 , //4 , //5 , //6 , //7 , //8 //9 >; void loop() < Counter(); //Проведём повторное считывание количества устройств int numDevices = matrix.getDeviceCount(); for(int address = 0; address < numDevices; address ++) < for(int i = 0; i < 8; i ++) < if(address == 2) < //Для крайней правой матрицы - десятые matrix.setRow(address, i, CountDigits[value1][i]); >if(address == 1) < //Для средней матрицы - сотые matrix.setRow(address, i, CountDigits[value2][i]); >if(address == 0) < //Для крайней левой матрицы - тысячные matrix.setRow(address, i, CountDigits[value3][i]); >> > delay(delayTime); > void Counter() < if(value1 >= 9) < value1 = 0; if(value2 >= 9) < value2 = 0; if(value3 >= 9) < value3 = 0; >else < value3 ++; >> else < value2 ++; >> else < value1 ++; >> 

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

Как подключить последовательно лед матрицы одним драйвером

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Необходимо обновить браузер или попробовать использовать другой.

Дорогие друзья! Если Ваш дом украшает и обогревает финская печь Туликиви, у вас есть отличная возможность пригласить съёмочную группу FORUMHOUSE для съёмок обзорного сюжета о вашем доме и об этой классной печи! Впереди зима, согреемся от теплой истории!) Пишите нам! expert@forumhouse.ru

1 2 3 4 5 6 7 8 9 10 0 /10 0,00 оценок: 0

Первое знакомство с LED матрицами 8х8.

Доброго времени суток всем от автора статьи. В этот раз мы начинаем знакомство с LED матрицами 8х8. Вот так выглядит устройство в готовом собранном виде.

Матричный дисплей — устройство состоящее из LED матрицы 8×8 и платы управления на базе микросхемы MAX7219 c минимальной необходимой обвязкой. На фото вы уже видети готовое устройство, но мне оно пришло по почте вот в таком виде, так что пришлось взять в руки паяльник и спаять всё в нужном виде.

Базовое подключение к плате Arduino Nano показано на принципиальной схеме.

Как видно из схемы — всё просто, нужно лишь соединить проводами контакты обеих плат в следующем порядке:

Arduino Nano Matrix 8×8
PIN 12 PIN DIN
PIN 11 PIN CLK
PIN 10 PIN CS
PIN 5V PIN 5V
PIN GND PIN GND

Итак, наконец-то пришло время поработать с кодом, и для того чтобы запустить LED матрицу, нужно скачать и установить библиотеку LedControl. Библиотека поддерживает работу с микросхемами MAXIM 7221 и 7219. LED матрица в качестве драйвера использует MAX7219, это то что нам нужно. Я думаю что нужно начать с небольшого скетча, демонстрирующего базовые функции данной библиотеки. В скетче, для включения/ выключения светодиодов использована функция setRow(). Синтаксис вызова функции setRow():

matrix.setRow(0, row, col, set);

Где matrix — объект класса LedControl

0 — адрес устройства на шине SPI, в данном случае устройство одно, и нумерация начинается с нулевого адреса

row — ряд(Возможные значения от 0 до 7)

col — колонка(Возможные значения от 0 до 7)

set — значение установки( true — включить, false — выключить)

matrix.setRow(0, 1, 4, true)

Включить на матрице светодиод, находящийся в 1-м ряду и в 4-м столбце.

matrix.setRow(0, x, y, true);

То же самое только с использованием переменных, и последующим выключением зажженного светодиода по заданным координатам. Итак, в скетче проигрывается несколько анимаций, с использованием функции setRow().

#include "LedControl.h" //Синтаксис создания класса LedControl(dataPin,clockPin,csPin,numDevices) //Где LedControl - объект класса //dataPin - пин на плате Arduino к которому будет подключен пин DIN //clockPin - пин на плате Arduino к которому будет подключен пин CLK //csPin - пин на плате Arduino к которому будет подключен пин CS //numDevices - количество устройств на шине //Создать объект класса matrix в нашем случае с одним подключенным устройством LedControl matrix = LedControl(12, 11, 10, 1); //Время задержки включения/выключения светодиода на матрице const int delayValue = 100; //Прототипы функций //Последовательное включение/выключение void PointSerialSet(); //Змейка справа - налево void PointRigthToLeft(); //Змейка снизу - вверх void PointDownToUp(); //Змейка слева - направо void PointLeftToRigth(); //Змейка сверху - вниз void PointUpToDown(); //Эффект - затухающий импульс void PointFading(); //Эффект - импульс void PointPulse(); //Эффект - нарастающий импульс void PointClimbing(); //Эффект закручивание спирали внутрь void PointToSpiralIn(); //Эффект раскручивание спирали наружу void PointToSpiralOut(); void setup() < //Устройству с адресом 0 выйти из спящего режима по умолчанию matrix.shutdown(0, false); //Установить яркость Led матрицы на 8 //Возможные значения от 0 до 15 matrix.setIntensity(0, 8); //Очистить дисплей matrix.clearDisplay(0); >void loop() < //Вызываем функции поочередно PointSerialSet(); PointRigthToLeft(); PointDownToUp(); PointLeftToRigth(); PointUpToDown(); PointFading(); PointPulse(); PointClimbing(); PointToSpiralIn(); PointToSpiralOut(); >//Тела функций void PointSerialSet() < //Используем функцию setLed(address, row, col, set) //Последовательное включение по рядам for(int i = 0; i < 8; i ++) < for(int j = 0; j < 8; j ++) < //Включить светодиод matrix.setLed(0, i, j, true); delay(delayValue); //Выключить светодиод matrix.setLed(0, i, j, false); >> > void PointRigthToLeft() < //Используем функцию setLed(address, row, col, set) //Змейка справа - налево for(int i = 7; i >= 0; i --) < for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) < if((i % 2) >0) < matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); >else < matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); >> > > void PointDownToUp() < //Используем функцию setLed(address, row, col, set) //Змейка снизу - вверх for(int i = 7; i >= 0; i --) < for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) < if((i % 2) >0) < matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); >else < matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); >> > > void PointLeftToRigth() < //Используем функцию setLed(address, row, col, set) //Змейка слева - направо for(int i = 0; i < 8; i ++) < for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) < if((i % 2) >0) < matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); >else < matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); >> > > void PointUpToDown() < //Используем функцию setLed(address, row, col, set) //Змейка сверху - вниз for(int i = 0; i < 8; i ++) < for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) < if((i % 2) >0) < matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); >else < matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); >> > > void PointFading() < //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 0; int downValue = 7; for(int i = 0; i < 8; i ++) < if(i % 2) < for(int n = downValue; n >= upValue; n --) < matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); >downValue --; > else < for(int j = upValue; j < downValue + 1; j ++) < matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); >upValue ++; > > > void PointClimbing() < //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 4; int downValue = 4; for(int i = 0; i < 8; i ++) < if(i % 2) < for(int n = downValue; n >= upValue; n --) < matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); >downValue ++; > else < for(int j = upValue; j < downValue + 1; j ++) < matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); >upValue --; > > > void PointPulse() < //Используем функцию setLed(address, row, col, set) //Эффект пульса for(int i = 0; i < 8; i ++) < if(i == 4) < for(int climb = i; climb >= 0; climb --) < matrix.setLed(0, climb, i, true); delay(delayValue / 4); matrix.setLed(0, climb, i, false); >for(int fade = 1; fade < 8; fade ++) < matrix.setLed(0, fade, i, true); delay(delayValue / 4); matrix.setLed(0, fade, i, false); >> else < matrix.setLed(0, 4, i, true); delay(delayValue); matrix.setLed(0, 4, i, false); >> > void PointToSpiralIn() < //Используем функцию setLed(address, row, col, set) //Эффект спирали внутрь int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 0; int pointY = 0; int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 0; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) < matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) < pointX ++; if(pointX >= lengthX - 1 - offset) < dir = 1; >continue; > if(dir == 1) < pointY ++; if(pointY >= lengthY - 1 - offset) < dir = 2; >continue; > if(dir == 2) < pointX --; if(pointX continue; > if(dir == 3) < pointY --; if(pointY continue; > > > void PointToSpiralOut() < //Используем функцию setLed(address, row, col, set) //Эффект спирали внаружу int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 3; //начать с этих координат int pointY = 3; //начать с этих координат int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 3; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) < matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) < pointX ++; if(pointX >= lengthX - 1 - offset) < dir = 1; >continue; > if(dir == 1) < pointY ++; if(pointY >= lengthY - 1 - offset) < dir = 2; >continue; > if(dir == 2) < pointX --; if(pointX continue; > if(dir == 3) < pointY --; if(pointY continue; > > > 

Подключение 4-х панелей к одному драйверу

У меня есть 4 светильника Армстронг 600х600мм, ультратонкие . У каждого свой драйвер 36-65v 48w 600Ma. Требуется запитать эти лампы одним драйвером, как это возможно реализовать?

Как их подключить, учитывая что линейки внутри соединены последовательно? И какой драйвер нужно подобрать, а так же есть ли у вас такой?

Ответ

Для начала заметим два факта.

  1. Ваши светильники имеют реальную мощность 30 ватт (среднее напряжение 50 вольт * 600 мА = 30 ватт).
  2. Нельзя удалять драйвер от светильника слишком далеко. С учётом того, что напряжение около 50 вольт, расстояние не должно превышать (умозрительно) 10-15 метров.

Чтобы соединить их вместе параллельно, нужен драйвер на 2400 мА и со средним напряжением порядка 50 вольт.

Для последовательного соединения — соответственно, 600 мА и порядка 200 вольт.

Оба варианта нежелательны – вся конструкция получается слишком хлипкой, «уход» характеристик одной из панелей неизбежно потянет остальные. И в итоге могут сгореть все.

Можно также соединить попарно последовательно, а эти пары — параллельно. Тогда нужен драйвер на 1200 мА с напряжение около 100 вольт. Относительно первых двух этот вариант чуть более надёжен.

Но ни одного такого драйвера у нас нет. И также нет уверенности, что Вы их сможете найти.

А самый лучший вариант с точки зрения надёжности – оставить всё, как есть.

Найти похожие вопросы по хэш-тегам

У Вас есть вопрос? Спросите консультанта.

Позвоните нам.
Или кликните здесь и задайте свой вопрос — подробный ответ Вы получите очень быстро.
Мы всегда стараемся помочь.

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

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