8x8 светодиодная матрица с использованием модуля MAX7219 для Arduino
В этом уроке мы научимся управлять 8x8 светодиодной матрицей с помощью модуля MAX7219 и Arduino. MAX7219 упрощает управление несколькими светодиодами, позволяя нам легко отображать символы и узоры. К концу этого проекта вы сможете отобразить слово "ROBOJAX" на матрице.
Для достижения этой цели мы будем использовать библиотеку LedControl, которая специально разработана для взаимодействия с MAX7219. Эта библиотека позволяет нам отправлять данные на светодиодную матрицу с минимальными усилиями. Если вы хотите лучше понять схему подключения и код, обязательно посмотрите связанное видео (в видео на 0:30).
Объяснение аппаратного обеспечения
Основные компоненты этого проекта включают модуль MAX7219 и матрицу светодиодов 8x8. MAX7219 - это интегральная схема, которая управляет отображением светодиодов, обрабатывая сигналы связи и управления от Arduino. Она использует последовательный интерфейс, что означает, что мы можем управлять многими светодиодами всего с помощью нескольких выводов от Arduino.
8x8 светодиодная матрица состоит из 64 отдельных светодиодов, расположенных в сетке. Каждый светодиод можно включать и выключать, отправляя соответствующие команды через MAX7219. Это позволяет отображать различные символы и графику на матрице.
Технические характеристики
| Производитель | Максим Интегрейтед |
|---|---|
| Номер детали | MAX7219 |
| Логическое/входное напряжение | 3.3В до 5.5В |
| Напряжение питания | 4.0В до 5.5В |
| Выходной ток (на канал) | 40 мА макс |
| Пиковый ток (на канал) | 100 мА макс |
| Руководство по частоте ШИМ | 100 Гц |
| Входные логические пороги | 2.0В (высокий) / 0.8В (низкий) |
| Падение напряжения / RДС(включено)/ насыщение | 0.2В тип. |
| Термальные пределы | 150°C |
| Пакет | 16-ДИП |
| Заметки / варианты | Общая анодная конфигурация |
- Обеспечьте правильное питание (от 4,0 В до 5,5 В).
- Используйте ограничивающие ток резисторы для каждого светодиода, чтобы предотвратить повреждение.
- Держите проводку короткой, чтобы избежать помех.
- Контролируйте рассеивание тепла; при необходимости используйте радиатор.
- Дважды проверьте соединения пинов, чтобы избежать недопонимания.
Инструкции по проводке
Чтобы подключить MAX7219 к Arduino, соедините следующие контакты:
- Подключите
VCCпин MAX7219 к 5В Arduino. - Подключите
GNDподключите к земле Arduino. - Подключите
DINпин (Data In) к пину Arduino 12. - Подключите
CLKподключите (Часы) к пину Arduino 11. - Подключите
CSпин (выбор чипа) к пину 10 на Arduino.
Убедитесь, что все соединения надежны, прежде чем включать цепь. Провода проложены просто, но если у вас возникнут проблемы, внимательно проверьте соединения (в видео на 1:45).
Примеры кода и пошаговое руководство
В коде мы начинаем с подключения библиотеки LedControl, которая необходима для связи с MAX7219. Следующий фрагмент инициализирует объект LedControl:
LedControl lc=LedControl(12,11,10,1);Эта строка устанавливает вывод данных, вывод тактового сигнала, вывод выбора чипа и количество устройств (1 в данном случае). Далее, вsetup()функция, мы активируем MAX7219 и устанавливаем яркость дисплея:
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);Это обеспечивает активность дисплея и готовность к отображению символов. Основная функция, которая управляет дисплеем, этоwriteArduinoOnMatrix(), который последовательно подсвечивает ряды матрицы для отображения букв.
Демонстрация / Что ожидать
Как только все будет подключено и код загружен, светодиодная матрица должна отобразить слово "ROBOJAX". Если дисплей не работает, проверьте наличие проблем, таких как плохие соединения или неправильные назначения выводов. Кроме того, убедитесь, что источник питания достаточен (в видео на 2:30).
Главы
- Введение (0:00)
- Обзор оборудования (0:30)
- Инструкции по проводке (1:45)
- Обзор кода (2:15)
- Демонстрация (3:00)
/*
* Это видео показывает, как использовать модуль MAX7219 с LED-матрицей 8x8 для отображения текста или любых символов на светодиодах.
* Смотрите видео на YouTube: https://youtu.be/AAiDwBKs9uE
*
* Автор: Ахмад Шамшири для Robojax.com
* 26 февраля 2017 года в Айаксе, Онтарио, Канада
* Получите этот код и другие коды Arduino на Robojax.com
* Учите Arduino шаг за шагом в структурированном курсе с полными материалами, схемами подключения и библиотеками
* всё в одном месте.
*
* Получите ранний доступ к моим видео через Patreon и укажите ваше имя в конце каждого
* видео, которое я публикую на YouTube здесь: http://robojax.com/L/?id=63 (смотрите до конца этого видео для списка моих спонсоров)
*
* Или сделайте пожертвование с помощью PayPal http://robojax.com/L/?id=64
*
* Этот код предоставляется "КАК ЕСТЬ" без гарантии или обязательств. Может использоваться свободно, если вы сохраняете это уведомление в целости.
* Этот код был загружен с Robojax.com
* Эта программа является бесплатным программным обеспечением: вы можете перераспределять её и/или изменять
* её в соответствии с условиями Общей публичной лицензии GNU, как опубликовано
* Фондом свободного программного обеспечения, версии 3 Лицензии или
* (по вашему выбору) любой более поздней версии.
*
* Эта программа распространяется в надежде, что она будет полезной,
* но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
* ТОРГОВОЙ СВОБОДЫ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ. См.
* Общую публичную лицензию GNU для получения дополнительных сведений.
*
* Вы должны были получить копию Общей публичной лицензии GNU
* вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
* /
*
* // Мы всегда должны включать библиотеку
* // На основе проекта, опубликованного https://github.com/wayoda/LedControl
*/
#include "LedControl.h"
/*
* Now we need a LedControl to work with.
* // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
* **** These pin numbers will probably not work with your hardware *****
* pin 12 is connected to the DataIn
* pin 11 is connected to the CLK
* pin 10 is connected to CS
* We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,11,10,1);
/*
* we always wait a bit between updates of the display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* The MAX72XX is in power-saving mode on startup,
* we have to do a wakeup call
*/
lc.shutdown(0,false);
/*
* Set the brightness to a medium value */
* lc.setIntensity(0,8);
* /* and clear the display
*/
lc.clearDisplay(0);
}
/*
* This method will display the characters for the
* word "Arduino" one after the other on the matrix.
* (you need at least 5x7 LEDs to see the whole characters)
*/
void writeArduinoOnMatrix() {
/*
* here is the data for the characters */
*
* // K
* byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};
*
*
* /* Letter R
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,R[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ////////////// END of Letter R ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter O ///////
*
*
* /* Letter B
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,B[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ////////////// END of Letter B ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter O ///////
*
* /* Letter J
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,J[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ////////////// END of Letter J ///////
/*
* Letter A */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter A ///////
*
* /* Letter X
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,X[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ////////////// END of Letter X ///////
/*
* Это видео показывает, как использовать модуль MAX7219 с матрицей светодиодов 8x8 для отображения текста или любых символов на светодиодах.
* Смотрите видео на YouTube: https://youtu.be/AAiDwBKs9uE
*
* Написано Ахмадом С. для Robojax.com
* 26 февраля 2017 года в Ajax, Онтарио, Канада
* Разрешение дано на распространение этого кода при условии, что эта запись сохранена вместе с кодом.
* Отказ от ответственности: Этот код предоставлен "КАК ЕСТЬ" и исключительно в образовательных целях.
*
* /
*
* // Мы всегда должны подключать библиотеку
* // Основано на проекте, опубликованном на https://github.com/wayoda/LedControl
*/
#include "LedControl.h"
/*
* Now we need a LedControl object to work with.
* // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
* **** These pin numbers will probably not work with your hardware *****
* pin 1 is connected to the DataIn
* pin 4 is connected to the CLK
* pin 53 is connected to CS
* We have only a single MAX72XX.
*/
LedControl lc=LedControl(1,4,53,1); // this line determines if this code can work with Arduino Mega or Arduino UNO
/*
* we always wait a bit between updates of the display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* The MAX72XX is in power-saving mode on startup,
* we have to do a wakeup call
*/
lc.shutdown(0,false);
/*
* Set the brightness to a medium value */
* lc.setIntensity(0,8);
* /* and clear the display
*/
lc.clearDisplay(0);
}
/*
* This method will display the characters for the
* word "Arduino" one after the other on the matrix.
* (you need at least 5x7 LEDs to see the whole characters)
*/
void writeArduinoOnMatrix() {
/*
* here is the data for the characters */
*
* // K
* byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};
*
*
* /* Letter R
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,R[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ///////////// END of Letter R ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter O ///////
*
*
* /* Letter B
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,B[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ///////////// END of Letter B ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter O ///////
*
* /* Letter J
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,J[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ///////////// END of Letter J ///////
/*
* Letter A */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter A ///////
*
* /* Letter X
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,X[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // this is for blank
}
// ///////////// END of Letter X ///////
Ресурсы и ссылки
-
Документация
Файлы📁
Нет доступных файлов.