مصفوفة الثنائيات الضوئية ( Led Matrix MAX7219)
مصفوفة الثنائيات الضوئية (8*8) MAX7219:
عبارة عن مصفوفة ثنائية الأبعاد على شكل 8 صفوف و 8 أعمدة من الثنائيات الضوئية ( 64LED)، تتصل الثنائيات الموجودة ضمن العمود الواحد بالقطب الموجب أو السالب وكذلك الأسطر بناءً على اتجاه الثنائيات الضوئية في المصفوفة .
يمكن استخدامها لعرض الأرقام أو الأحرف أو حتى الرسم عليها ، لذلك كثيراً ما نجدها تستخدم في اللوحات الإعلانية وشاشات العرض وفي المشاريع الصغيرة لعرض البيانات عليها .

آلية العمل :
تتصل الثنائيات الموجودة في السطر الواحد بالقطب السالب في حين تتصل الثنائيات الموجودة في العمود الواحد بالقطب الموجب .
في مصفوفة الثنائيات الضوئية يتم تفعيل أحد الأسطر ومن ثم إرسال القيمة المراد إظهارها على ذلك السطر و تكرر العملية لبقية الأسطر وهكذا. نتيجة لذلك فإن الثنائيات الضوئية في السطر الواحد ستعمل لفترة زمنية ، و ستتوقف لفترة زمنية أخرى ، وبسبب كون عملية المسح سريعة فإن العين ستلاحظ أن ثنائيات ذلك السطر بحالة عمل ON .
بما أنها كاثود مشترك ، يتم تفعيل الثنائي بإعطاء واحد منطقي عليه ، وإطفاءه صفر منطقي

توصيل المصفوفة (8*8)مع الاردوينو :
يتم الاتصال بين الأردوينو ومصفوفة الليدات وفق بروتوكول الاتصال التسلسلي SPI DIN(Data line) : لاتصال SPI (يقبل البيانات التسلسليّة من المتحكّم والتي ستكون بطول 16 بت، حيث تُستخدَم أوّل 8 بتات (D0-D7) للتّحكّم بأعمدة المصفوفة و منفذ DP الخاص بدارة القيادة، والثمانية بتات اللاحقة (D8-D15) للتّحكّم بأسطر المصفوفة).
CS (Chip Select) :خط اختيار الجهاز التابع .
CLK (Serial Clock):خط نبضات الساعة لتزامن إرسال البيانات
Arduino uno | Led Matrix |
---|---|
5V | VCC |
GND | GND |
D11 | DIN(DATA LINE) |
D10 | CS (Chip Select) |
D13 | CLK (Serial Clock) |

المكتبة
لإظهار الحروف والرسوم المختلفة على مصفوفة الإضاءة 8×8 تستخدم مكتبة LedControl، ويمكن تنزيل هذه المكتبة عن طريق Manage Libraries كما هو موضح في الصورة. كما يمكنك أيضا تحميل المكتبة بشكل مباشر عن طريق موقع Github بالضغط على الرابط بالأسفل.

إنشاء الرسومات بسهولة
لعرض حروف وأرقام أو رموز على مصفوفة الإضاءة، ما عليك سوى تحويل نمط ضوء الـ LED إلى سلسلة بت. وللقيام بذلك يمكنك الاستعانة بتطبيق على موقع في الإنترنت اسمه Dot Matrix Tool أو تحميل تطبيق خفيف جدا سعته 22KB يدعى PixelToMatrix حيث توفر هذه الأدوات واجهة رسومية لرسم الشكل المراد إظهاره في المصفوفة وبالضغط على إنشاء ستحصل على مصفوفة البايت (الكود المطلوب) للشكل المحدد الذي قمت بإدخاله، ومن ثم نسخه ولصقه في الكود في بيئة تطوير الأردوينو IDE.
للذهاب إلى تطبيق Dot Matrix Tool تنزيل تطبيق PixelToMatrix قم بالضغط على الروابط أدناه.
التمرين الأول: إظهار حروف وأرقام ورموز وعلامات في مصفوفة
الإضاءة 8×8
في هذا التمرين سنقوم بإظهار حروف وأشكال وأرقام مختلفة في مصفوفة الإضاءة 8×8 وذلك من خلال تحويل نمط المصفوفة إلى سلسلة بت ووضعها في الكود وتوصيل المصفوفة مع الأردوينو كما هو مبين في الصورة أدناه.

#include
int DIN = 12;
int CS = 11;
int CLK = 10;
byte smile[8]= {0x3C,0x42,0xA5,0x81,0xA5,0x99,0x42,0x3C};
byte Uarrow[8]={0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x00};
byte Rarrow[8]={0x00, 0x08, 0x0c, 0x7e, 0x7e, 0x0c, 0x08, 0x00};
byte Darrow[8]={0x00, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00};
byte x[8]= {0x83, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x83};
byte c[8]= {0x7E,0x7E,0x60,0x60,0x60,0x60,0x7E,0x7E};
byte eight[8]= {0x7E,0x7E,0x66,0x7E,0x7E,0x66,0x7E,0x7E};
byte s[8]= {0x7E,0x7C,0x60,0x7C,0x3E,0x06,0x3E,0x7E};
byte dot[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18};
byte o[8]= {0x7E,0x7E,0x66,0x66,0x66,0x66,0x7E,0x7E};
LedControl lc=LedControl(DIN,CLK,CS,0);
void setup(){
lc.shutdown(0,false); //The MAX72XX is in power-saving mode on startup
lc.setIntensity(0,15); // Set the brightness to maximum value
lc.clearDisplay(0); // and clear the display
}
void printByte(byte character [])
{
int i = 0;
for(i=0;i<8;i++)
{
lc.setRow(0,i,character[i]);
}
}
void loop(){
printByte(smile);
delay(1000);
printByte(Uarrow);
delay(1000);
printByte(Rarrow);
delay(1000);
printByte(Darrow);
delay(1000);
printByte(x);
delay(1000);
printByte(c);
delay(1000);
printByte(eight);
delay(1000);
printByte(s);
delay(1000);
printByte(dot);
delay(1000);
printByte(o);
delay(1000);
}
التمرين الثاني: إظهار حروف وأرقام ورموز وعلامات متحركة في
مصفوفة الإضاءة 8×8
بالإمكان أيضا عرض أشكال ورسومات على مصفوفة الإضاءة ولكن بصورة متحركة، وذلك بنفس طريقة توصيل المصفوفة وإنشاء الرسومات ولكن مع تغيير الكود بعض الشيء وبإضافة المكتبة MaxMatrix عن طريق موقع Github بالضغط على الرابط بالأسفل.
#include
int DIN = 12;
int CS = 11;
int CLK = 10;
int maxInUse = 2;
MaxMatrix m(DIN, CS, CLK, maxInUse);
byte pakman[] = {8, 8, 0x1c, 0x22, 0x41, 0x49, 0x55, 0x22, 0x00, 0x08};
void setup() {
m.init();
m.setIntensity(2);
}
void loop(){
m.writeSprite(0, 0, pakman);
delay(300);
for (int i = 0; i < 8; i++) {
m.shiftRight(false, true);
delay(300);
}
m.clear();
}
مصفوفة الثنائيات الضوئية (MAX7219 (4-in–1 :
يمكننا التحكم بأكثر من مصفوفة ، وذلك بوصلهم معاً، إذ تمتلك المصفوفات على جانبيها أرجلاً لتوسيع المصفوفة يتم توصيل Dout خرج الشاشة الأولى بدخل الشاشة التالية Din و بقية المداخل بشكل متطابق .
هي عبارة عن 4 مصفوفات كل مصفوفة 8 أسطر و 8 أعمدة (32*8) ، مناسب لعرض النصوص و الرسوم المتحركة .


توصيل المصفوفة (8*32) مع الاردوينو :
_ لإظهار الرسوم و النصوص المتحركة يجب إضافة المكتبات MD_MAX72XX و MD_Parola .
Arduino uno | Led Matrix |
---|---|
5V | VCC |
GND | GND |
D11 | DIN(DATA LINE) |
D10 | CS (Chip Select) |
D13 | CLK (Serial Clock) |

المكتبات
لإظهار الرسوم والنصوص المتحركة على مصفوفة الإضاءة 32×8 يجب إضافة المكتبات MD_Parola و MD_MAX72xx عن طريق Library Manager كما هو موضح في الصورة أو بتحميل المكتبات مباشرة عن طريق موقع Githb بالنقر على الروابط بالأسفل.

التمرين الثالث: إظهار عبارة متحركة باللغة الإنجليزية في
مصفوفة الإضاءة 32×8
يمكن إظهار عبارة متحركة على المصفوفة وذلك بالاستفادة من مثال جاهز، بالذهاب إلى :
Example<<< MD_Parola<<<Parola_Scrolling
ولاختيار العبارة المراد إظهارها على المصفوفة يمكننا تعديل وحذف بعض الأكواد مثل:
PAROLA_HW إلى FC16_HW
تحديد عدد المصفوفات الموصلة الى 4 مصفوفات:
#define MAX_DEVICES 4
إنشاء كائن جديد وتحديد العبارة المراد اظهارها وتحديد اتجاه حركة النص من اليسار إلى اليمن أو العكس مثل
myDisplay.displayText(“Welcome “, PA_CENTER, 200 , 0, PA_SCROLL_LEFT);


#include
#include
#include
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 10
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
myDisplay.begin();
myDisplay.setIntensity(5);
myDisplay.displayClear();
myDisplay.displayText("Welcome ", PA_CENTER, 200 ,0, PA_SCROLL_LEFT);
}
void loop() {
if (myDisplay.displayAnimate()) {
myDisplay.displayReset();
}
}
التمرين الرابع: إظهار عبارات ونصوص باللغة العربية في
مصفوفة الإضاءة 32×8
في هذا التمرين سنقوم بإظهار عبارة باللغة العربية في المصفوفة وذلك عن طريق تحويل نمط المصفوفة الى سلسلة بت باستخدام أداة إنشاء الرسومات، وبالاستعانة بالمكتبة المستخدمة في التمرين الأول LedControl.
ستظهر الكتابة على المصفوفة كما في الصورة أدناه حيث اخترنا كتابة عبارة مرحبا على سبيل المثال.

#include
LedControl lc=LedControl(11,13,10,4); // DIN=11, CLK=13, CS=10
unsigned long delayTime=200;
byte invader1a[ ] =
{0x00,0x00,0x00,0xF8,0x28,0x38,0x00,0x00,};
byte invader2a[ ] =
{0x00,0x00,0x00,0x0F,0x08,0x08,0x30,0x00,};
byte invader3a[ ] =
{0x00,0x00,0x00,0x0E,0x02,0xFE,0x00,0x00,};
byte invader4a[ ] =
{0x20,0x20,0x20,0x21,0x21,0x3F,0x00,0x01,};
void setup()
{
lc.shutdown(0,false);
lc.shutdown(1,false);
lc.shutdown(2,false);
lc.shutdown(3,false);
lc.setIntensity(0,5);
lc.setIntensity(1,5);
lc.setIntensity(2,5);
lc.setIntensity(3,5);
lc.clearDisplay(0);
lc.clearDisplay(1);
lc.clearDisplay(2);
lc.clearDisplay(3);
}
void loop()
{
for (int i = 0; i<8; i++)
{
lc.setRow(0,i,invader1a[i]);
}
delay(delayTime);
for (int i = 0; i<8; i++)
{
lc.setRow(1,i,invader2a[i]);
}
delay(delayTime);
for (int i = 0; i<8; i++)
{
lc.setRow(2,i,invader3a[i]);
}
delay(delayTime);
for (int i = 0; i<8; i++)
{
lc.setRow(3,i,invader4a[i]);
}
delay(delayTime);
}