Показ различных объявлений на разнообразных досках/панелях играет существенную роль в жизни современного общества. Одними из самых популярных средств отображения подобной информации в настоящее время являются цифровые светодиодные панели ввиду их высокой надежности и других достоинств. Ранее на нашем сайте мы уже рассматривали ряд проектов, в которых мы использовали светодиодную матрицу 8x8, но в этой статье мы рассмотрим светодиодную матрицу значительно большего размера.
В данной статье мы будем использовать модули матричных дисплеев размером 32x16 светодиодов, которые также известны как светодиодные матричные дисплеи P10 (P10 LED Display Module), для скроллинга на них текста под управлением платы Arduino. Эти модули P10 можно объединять вместе как по горизонтали, так и по вертикали, и создавать из них светодиодные панели/матрицы практически любых размеров.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- 32*16 P10 LED display module (светодиодный матричный дисплей) (купить на AliExpress).
- 16-пиновый FRC коннектор.
- Импульсный источник питания (SMPS) на 5 В, 3 А (купить на AliExpress).
- Соединительные провода.
Принцип работы светодиодных матричных дисплеев P10
Светодиодные матричные дисплеи P10 наиболее удобны для создания наружных и внутренних досок объявлений. Подобный дисплей содержит 512 светодиодов высокой яркости, смонтированных на пластиковом основании. Любое количество этих дисплеев можно объединить как по горизонтали, так и по вертикали.
Обозначение 32*16 у этих дисплеев обозначает, что они содержат 32 светодиода в каждой строке и 16 светодиодов в каждом столбце. Итого получаем 512 светодиодов.
Технические характеристики светодиодных матричных дисплеев P10:
- яркость: 3500-4500nits;
- максимальная потребляемая мощность: 20 Вт;
- напряжение питания: 5 В постоянного тока;
- водонепроницаемость: IP65;
- конфигурация 1 Вт на пиксел;
- широкие углы обзора;
- высокая контрастность.
Назначение контактов светодиодных дисплеев P10
- Enable: этот контакт используется яркостью дисплея при помощи подачи на него импульса ШИМ (широтно-импульсной модуляции);
- A, B: контакты мультиплексирования, позволяют обратиться к любым контактам при помощи технологии мультиплексирования;
- Shift clock (CLK), Store clock (SCLK) и Data: контакты управления обычным регистром сдвига. В этих дисплеях используется регистр сдвига 74HC595.
Распиновка модуля P10 показана на следующем рисунке.
Схема проекта
Схема подключения светодиодного дисплея P10 к плате Arduino представлена на следующем рисунке.
Схема соединений светодиодного дисплея P10 и платы Arduino показана в следующей таблице.
Дисплей P10 | Плата Arduino |
ENABLE | 9 |
A | 6 |
B | 7 |
CLK | 13 |
SCLK | 8 |
DATA | 11 |
GND | GND |
Внешний вид собранной конструкции проекта показан на следующем рисунке.
Примечание: подключайте контакты питания каждого модуля P10 к импульсному источнику питания (SMPS) 5 В по отдельности. Если вы планируете использовать больше модулей P10 для создания светодиодной матрицы, то соответствующим образом вам будет необходимо масштабировать и импульсный источник питания (SMPS).
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе мы должны подключить все используемые библиотеки. Библиотека “DMD.h” будет использоваться для работы со светодиодными дисплеями P10. Скачайте ее по этой ссылке и установите ее в вашу Arduino IDE. Библиотека “TimerOne.h” будет использоваться для задач обработки прерываний, ее можно скачать по следующей ссылке.
Также мы будем использовать библиотеку “Arial Black font” для отображения текста на нашем дисплее.
1 2 3 4 5 |
#include <SPI.h> #include <DMD.h> #include <TimerOne.h> #include "SystemFont5x7.h" #include "Arial_black_16.h" |
Далее следует указать количество строк и столбцов нашей светодиодной панели – поскольку для ее создания мы использовали только один модуль P10, то число строк и столбцов должно быть равно 1. Затем укажем шрифт Arial_Black_16, который будет использоваться для скроллинга текста на дисплее.
1 2 3 4 |
#define ROW 1 #define COLUMN 1 #define FONT Arial_Black_16 DMD led_module(ROW, COLUMN); |
Функция scan_module() будет проверять все поступающие по интерфейсу SPI данные. Если данные будут поступать, то будет срабатывать прерывание, в обработчике которого будут выполняться необходимые действия.
1 2 3 4 |
void scan_module() { led_module.scanDisplayBySPI(); } |
Внутри функции void setup() мы будем инициализировать таймер и прикреплять прерывание к функции scan_module. Функция clearScreen(true) будет использоваться для очистки экрана дисплея.
1 2 3 4 5 6 |
void setup() { Timer1.initialize(2000); Timer1.attachInterrupt(scan_module); led_module.clearScreen( true ); } |
Далее, для отображения строки на экране дисплея, необходимо с помощью функции selectFont() задать используемый шрифт. После задания шрифта мы будем высвечивать на экране дисплея приветственное сообщение “Welcome to Circuit Digest” с помощью функции drawMarquee().
1 2 |
led_module.selectFont(FONT); led_module.drawMarquee("Welcome to Circuit Digest",25, (32 * ROW), 0); |
И, наконец, чтобы производить скроллинг текста на нашем светодиодном дисплее, мы будем переключать наше сообщение справа налево с заданным временным интервалом.
1 2 3 4 5 6 7 8 9 10 11 |
long start = millis(); long timming = start; boolean flag = false; while (!flag) { if ((timming + 20) < millis()) { flag = led_module.stepMarquee(-1, 0); timming = millis(); } } |
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <SPI.h> #include <DMD.h> #include <TimerOne.h> #include "SystemFont5x7.h" #include "Arial_black_16.h" #define ROW 1 #define COLUMN 1 #define FONT Arial_Black_16 DMD led_module(ROW, COLUMN); void scan_module() { led_module.scanDisplayBySPI(); } void setup() { Timer1.initialize(2000); Timer1.attachInterrupt(scan_module); led_module.clearScreen( true ); } void loop() { led_module.selectFont(FONT); led_module.drawMarquee("Welcome to Circuit Digest",25, (32 * ROW), 0); long start = millis(); long timming = start; boolean flag = false; while (!flag) { if ((timming + 20) < millis()) { flag = led_module.stepMarquee(-1, 0); timming = millis(); } } } |
Почему у меня высвечивает темные буквы на светлом фоне? Панель P10R4S 32x16HUB12. Помогите разобраться, пожалуйста.
Добрый вечер. К сожалению не знаком с такой панелью, не смогу помочь
Добрый вечер, а обойтись без контакта enable как то возможно? Нужно чтобы уменьшить количество проводов, может туда шим генератор какой, не знаю...
Добрый. Не особенно хорошо знаком с этим дисплеем, но на всех схемах подключения, которые я нашел в сети, контакт enable дисплея подключен. Поэтому, скорее всего, обойтись без него нельзя. А чем он вам мешает? У вас не хватает свободных контактов на плате Ардуино? Я бы просто на других контактах сэкономил, которые не используются как ШИМ, такие контакты можно мультиплексировать с помощью регистров сдвига как раз.
Если вам такой вариант не подходит, то да, на этот контакт можно подавать ШИМ и с какого нибудь внешнего источника, не обязательно это делать с Ардуино. Посмотрите, там в сети есть схемы, где этим дисплеем в простейшем варианте управляют вообще без использования микроконтроллера.
Просто мк находится на удалении от матрицы, а на подходящем проводе нет столько жил, да и не нужно управлять яркостью, на максимум, да и все что мне нужно)
Понятно. Успехов тогда вам в этом проекте.
Здравствуйте, если вам нужна интерактивная плоская панель, смарт-доска или интерактивная доска, пожалуйста, напишите мне в WhatsApp по номеру: 008618578623258.
Добрый день, спамить не хорошо. Оставляю ваш комментарий только из-за того, что сейчас с доставкой этих товаров в Россию есть некоторые проблемы, может быть кому-нибудь из пользователей вашего сайта пригодятся предлагаемые вами услуги
у меня 4 панели почему когда я прописываю в прошивке несколько у меня ничего не высвечивается а если в Arduino
#define ROW 1
#define COLUMN 1
вернуть как было по одному то все работает мне надо соединить 4, шлейфа я подключил между ними если ставлю в этих значениях больше одного то нет ничего
А попробуйте два дисплея соединить вместе, заработают или нет. В сети есть информация по поводу того что вроде как возможностей Ардуино Уно не хватает для управления 4 такими дисплеями и поэтому нужно использовать плату помощнее. К примеру, вот здесь можно про это почитать - arduino.ru/forum/programmirovanie/dva-p10-rgb-displeya-arduino-uno. Лично такое не пробовал, поэтому точно сказать не могу, к сожалению.
Здравствуйте. Спасибо за статью. Скажите, а будет ли работать этот скетч для нескольких панелей, например 4 шт. По схеме 2х2, т.е.2 по горизонтали и 2 по вертикали. И как соединить панели в таком режиме
Добрый день, эти панели можно соединять вместе и по горизонтали, и по вертикали, но лично я это не пробовал, у меня нет такого количества данных панелей. Скорее всего, программу будет необходимо немного изменить поскольку изменится общее количество строк и столбцов в составной панели
У нас в городе на остановках транспорта висят табло, на которые выводится инфа о прибывающих автобусах и троллейбусах.
Так вот, недавно приносили мне такое табло в ремонт. В нём 4 панели соединены зигзагом, управляющий контроллер - из PIC-ов был. Точную маркировку не скажу. Была затёрта. В прошивку залезть не довелось. Причина неисправности была в цепях питания. Конденсаторы не вынесли скачка напряжения от блока питания.
А часто маркировку затирают, по вашему опыту?
Здравствуйте! А кто может сделать блок для FLProg
Добрый день, к сожалению я не могу. Не знаю, отпишется ли здесь кто-нибудь из тех, кто может