مصفوفة الثنائيات الضوئية ( Led Matrix MAX7219)

مصفوفة الثنائيات الضوئية (8*8) MAX7219:

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

يمكن استخدامها لعرض الأرقام أو الأحرف أو حتى الرسم عليها ، لذلك كثيراً ما نجدها تستخدم في اللوحات الإعلانية  وشاشات العرض وفي المشاريع الصغيرة لعرض البيانات عليها .

Led matrix For Arduino

آلية العمل :

تتصل الثنائيات الموجودة في السطر الواحد بالقطب السالب   في حين تتصل الثنائيات الموجودة في العمود الواحد بالقطب الموجب   .

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

بما أنها كاثود مشترك ، يتم تفعيل  الثنائي بإعطاء واحد منطقي عليه ، وإطفاءه صفر منطقي 

MAX7219 Cathode matrix

توصيل المصفوفة (8*8)مع الاردوينو :

يتم الاتصال بين الأردوينو ومصفوفة الليدات وفق بروتوكول الاتصال التسلسلي SPI  DIN(Data line) :  لاتصال SPI (يقبل البيانات التسلسليّة من المتحكّم  والتي ستكون بطول 16 بت، حيث تُستخدَم أوّل   8 بتات (D0-D7) للتّحكّم بأعمدة المصفوفة  و منفذ DP الخاص بدارة القيادة، والثمانية  بتات اللاحقة (D8-D15) للتّحكّم بأسطر المصفوفة).

CS (Chip Select) :خط اختيار الجهاز التابع .

 CLK (Serial Clock):خط نبضات الساعة لتزامن إرسال البيانات  

 

Arduino unoLed Matrix
5VVCC
GNDGND
D11DIN(DATA LINE)
D10CS (Chip Select)
D13 CLK (Serial Clock)
led matrix max7219 with arduino

المكتبة

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

 

 

إنشاء الرسومات بسهولة

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

 

للذهاب إلى تطبيق Dot Matrix Tool تنزيل تطبيق PixelToMatrix قم بالضغط على الروابط أدناه.

التمرين الأول: إظهار حروف وأرقام ورموز وعلامات في مصفوفة

الإضاءة 8×8

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

				
					#include <LedControl.h>

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 <MaxMatrix.h>

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) ، مناسب لعرض النصوص و الرسوم المتحركة .

MAX7219 DOUT,DIN
led matrix MAX7219 (4-in-1)

توصيل المصفوفة (8*32) مع الاردوينو :

_ لإظهار الرسوم و النصوص  المتحركة يجب إضافة المكتبات MD_MAX72XX و  MD_Parola .

Arduino unoLed Matrix
5VVCC
GNDGND
D11DIN(DATA LINE)
D10CS (Chip Select)
D13 CLK (Serial Clock)
Led matrix MAX7219(4-IN-1) with arduino

المكتبات

لإظهار الرسوم والنصوص المتحركة على مصفوفة الإضاءة 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);

 

 

 

إظهار عبارة متحركة على MAX7219
				
					#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

#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.h>

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);
}
				
			

انتقل إلى المتجر

وحدة مصفوفة لمبات MAX7219

25.00 ر.س

اردينو أونو

70.00 ر.س

وحدة مصفوفة لمبات MAX7219 1*4

35.00 ر.س
انتقال إلى الأعلى