كود البحث

مصفوفة LED 8x8 باستخدام وحدة Arduino MAX7219

مصفوفة LED 8x8 باستخدام وحدة Arduino MAX7219

في هذا الدرس، سنتعلم كيفية التحكم في مصفوفة LED بحجم 8x8 باستخدام وحدة MAX7219 مع لوحة Arduino. تُبسط MAX7219 التحكم في عدة مصابيح LED، مما يتيح لنا عرض الأحرف والأنماط بسهولة. بنهاية هذا المشروع، ستكون قادرًا على عرض كلمة "ROBOJAX" على المصفوفة.

لتحقيق ذلك، سنستخدم مكتبة LedControl، التي تم تصميمها خصيصًا للتواصل مع MAX7219. تتيح لنا هذه المكتبة إرسال البيانات إلى مصفوفة LED بأقل جهد ممكن. إذا كنت ترغب في فهم أوضح للتوصيلات والرمز، تأكد من مشاهدة الفيديو المرتبط (في الفيديو عند 0:30).

شرح الأجهزة

تشمل المكونات الأساسية لهذا المشروع وحدة MAX7219 ومصفوفة LED 8x8. MAX7219 هو دائرة متكاملة تدير عرض LEDs، حيث تتعامل مع إشارات الاتصال والتحكم من الأردوينو. تستخدم واجهة تسلسلية، مما يعني أنه يمكننا التحكم في العديد من LEDs باستخدام عدد قليل من الدبابيس من الأردوينو.

يتكون مصفوفة LED 8x8 من 64 LED فردي مرتبة في شبكة. يمكن تشغيل كل LED أو إيقافه عن طريق إرسال الأوامر المناسبة عبر MAX7219. وهذا يسمح بعرض شخصيات ورسومات متنوعة على المصفوفة.

تفاصيل ورقة البيانات

المصنعماكسيم إنتغريتد
رقم الجزءماكس7219
جهد المنطق/المدخلات والمخرجات3.3 فولت إلى 5.5 فولت
جهد الإمداد4.0 فولت إلى 5.5 فولت
التيار الناتج (لكل قناة)40 مللي أمبير كحد أقصى
التيار الذروي (لكل قناة)100 مللي أمبير كحد أقصى
إرشادات تردد PWM100 هرتز
عتبات منطق الإدخال2.0 فولت (مرتفع) / 0.8 فولت (منخفض)
انخفاض الجهد / Rدي إس (أون)/ تشبع0.2 فولت تقريباً
الحدود الحرارية١٥٠°م
حزمة16-DIP
ملاحظات / متغيراتتكوين الأنود المشترك
  • تأكد من توفير الطاقة بشكل صحيح (4.0 فولت إلى 5.5 فولت).
  • استخدم مقاومات محددة للتيار لكل LED لمنع التلف.
  • احتفظ بالأسلاك قصيرة لتجنب التداخل.
  • راقب تبديد الحرارة؛ استخدم مبردًا إذا لزم الأمر.
  • تحقق مرة أخرى من اتصالات الدبابيس لتجنب سوء التواصل.

تعليمات التوصيل

لتوصيل MAX7219 بـ Arduino، قم بتوصيل الدبابيس التالية:

  • اتصل بـVCCدبوس MAX7219 إلى 5 فولت من الأردوينو.
  • اتصل بـGNDقم بتوصيل الدبوس بالأرضي للاردوينو.
  • اتصل بـDINقم بتوصيل الدبوس (البيانات الداخلة) إلى دبوس أردوينو 12.
  • اتصل بـCLKقم بتوصيل الدبوس (الساعة) بدبوس أردوينو 11.
  • اتصل بـCSقم بتوصيل دبوس (اختيار الشريحة) بدبوس 10 في الأردوينو.

تأكد من التحقق من أن جميع الاتصالات آمنة قبل تشغيل الدائرة. الأسلاك بسيطة، ولكن إذا واجهت مشاكل، راجع الاتصالات بعناية (في الفيديو عند 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()، الذي يضيء صفوف المصفوفة بالتتابع لعرض الحروف.

عرض / ماذا تتوقع

بمجرد توصيل كل شيء وتحميل الكود، يجب أن تعرض مصفوفة LED كلمة "ROBOJAX". إذا لم يعمل العرض، تحقق من المشكلات مثل الاتصالات غير المحكمة أو تعيينات الدبابيس غير الصحيحة. بالإضافة إلى ذلك، تأكد من أن مصدر الطاقة كافٍ (في الفيديو عند 2:30).

فصول

  • مقدمة (0:00)
  • نظرة عامة على الأجهزة (0:30)
  • تعليمات التوصيل (1:45)
  • جولة في الشيفرة (2:15)
  • عرض (3:00)
4-8x8 LED matrix using a MAX7219 Arduino module
اللغة: C++
/*
 * يُظهر هذا الفيديو كيفية استخدام وحدة MAX7219 مع مصفوفة LED مقاس 8x8 لعرض النصوص أو أي أحرف على LED.
 * شاهد الفيديو على 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
 * هذا البرنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله
 * تحت شروط رخصة جنو العمومية كما نشرتها
 * مؤسسة البرمجيات الحرة، إما الإصدار الثالث من الرخصة، أو
 * (حسب اختيارك) أي إصدار لاحق.
 * 
 * يُوزَّع هذا البرنامج على أمل أن يكون مفيدًا،
 * ولكن دون أي ضمان؛ حتى دون الضمان الضمني
 * للتسويق أو الملاءمة لغرض معين. انظر
 * رخصة جنو العمومية لمزيد من التفاصيل.
 * 
 * يجب أن تكون قد تلقيت نسخة من رخصة جنو العمومية
 * مع هذا البرنامج. إذا لم يكن كذلك، انظر <https://www.gnu.org/licenses/>.
 * 
 * // يجب علينا دائمًا تضمين المكتبة
 * // مستند إلى مشروع منشور على https://github.com/wayoda/LedControl
 */
#include "LedControl.h"

/*
 * الآن نحتاج إلى LedControl للعمل معه.
 *   // مخصص لـ RoboJax.com في 26 فبراير 2017 في أجاكس، أونتاريو، كندا.
 * **** هذه الأرقام للأطراف قد لا تعمل مع جهازك *****
 *   الطرف 12 متصل بـ DataIn
 *   الطرف 11 متصل بـ CLK
 *   الطرف 10 متصل بـ CS
 *   لدينا فقط وحدة MAX72XX واحدة.
 */
 LedControl lc=LedControl(12,11,10,1);

/*
 * ننتظر دائمًا قليلًا بين تحديثات الشاشة */
 *  unsigned long delaytime=600;
 *  
 *  void setup() {
 *    /*
 *     وحدة MAX72XX في وضع توفير الطاقة عند بدء التشغيل،
 *     علينا القيام باستدعاء إيقاظ
 */
   lc.shutdown(0,false);
/*
 * عيّن السطوع إلى قيمة متوسطة */
 *    lc.setIntensity(0,8);
 *    /* وامسح الشاشة
 */
   lc.clearDisplay(0);
 }

/*
 * ستعرض هذه الطريقة أحرف كلمة "Arduino" واحدًا تلو الآخر على المصفوفة. (تحتاج إلى 5x7 مصابيح LED على الأقل لرؤية الأحرف كاملة)
 */
 void writeArduinoOnMatrix() {
/*
 * ها هي البيانات الخاصة بالأحرف */
 * 
 *    // K
 *    بايت R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
 *    بايت O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};  
 *    بايت B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
 *    بايت J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
 *    بايت A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};     
 *    بايت X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
 *    بايت love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};  
 * 
 *    /* الحرف 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); // هذا من أجل الفراغ
   }
 // ////////////// نهاية الحرف R ///////

/*
 * /* الحرف 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);// هذا للفراغ
 *    }  
 *  //////////////// نهاية الحرف O ///////
 *  
 *  
 *    /* الحرف 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); // هذا من أجل الفراغ
   }
 // ////////////// نهاية الحرف B ///////

/*
 * /* الحرف 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);// هذا للفراغ
 *    }  
 *  //////////////// نهاية الحرف O ///////
 *  
 *    /* الحرف 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); // هذا من أجل الفراغ
   }
 // ////////////// نهاية الحرف J ///////

/*
 * الحرف 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); // هذا للفراغ
 *    }
 * //////////////// نهاية الحرف A ///////
 * 
 *    /* الحرف 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); // هذا من أجل الفراغ
   }
 // ////////////// نهاية الحرف X ///////



5-8x8 LED Matrix using a MAX7219 Arduino Module
اللغة: C++
/*
 * يُظهر هذا الفيديو كيفية استخدام وحدة MAX7219 مع مصفوفة LED 8x8 لعرض النصوص أو أي أحرف على LED.
 * شاهد الفيديو على يوتيوب: https://youtu.be/AAiDwBKs9uE
 * 
 * كتبه أحمد س. لموقع Robojax.com
 * في 26 فبراير 2017 في أياكس، أونتاريو، كندا
 * ممنوح الإذن بمشاركة هذا الكود، بشرط الإبقاء على هذه الملاحظة مع الكود.
 * تنويه: هذا الكود مُقدم "كما هو" ولأغراض تعليمية فقط.
 * 
 * /
 * 
 * // يجب علينا دائمًا تضمين المكتبة
 * // مستند إلى مشروع منشور على https://github.com/wayoda/LedControl
 */
#include "LedControl.h"

/*
 * الآن نحتاج إلى كائن LedControl للعمل معه.
 *  // مخصص لـ RoboJax.com في 26 فبراير 2017 في أجاكس، أونتاريو، كندا.
 * **** هذه الأرقام للأطراف ربما لن تعمل مع جهازك *****
 *  الطرف 1 متصل بـ DataIn
 *  الطرف 4 متصل بـ CLK
 *  الطرف 53 متصل بـ CS
 *  لدينا فقط جهاز MAX72XX واحد.
 */
LedControl lc=LedControl(1,4,53,1); // هذا السطر يحدد ما إذا كان هذا الرمز يمكن أن يعمل مع Arduino Mega أو Arduino UNO.

/*
 * دائماً ننتظر قليلاً بين تحديثات الشاشة */
 * unsigned long delaytime=600;
 * 
 * void setup() {
 *   /*
 *    شريحة MAX72XX تكون في وضع توفير الطاقة عند بدء التشغيل،
 *    علينا إجراء استدعاء إيقاظ
 */
  lc.shutdown(0,false);
/*
 * عيّن السطوع إلى قيمة متوسطة */
 *   lc.setIntensity(0,8);
 *   /* وامسح الشاشة
 */
  lc.clearDisplay(0);
}

/*
 * هذه الطريقة ستعرض أحرف كلمة "Arduino" واحدًا تلو الآخر على المصفوفة. (تحتاج إلى 5x7 مصابيح LED على الأقل لرؤية الأحرف كاملة)
 */
void writeArduinoOnMatrix() {
/*
 * ها هي البيانات للأحرف */
 * 
 *   // 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};  
 * 
 * 
 *   /* الحرف 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); // هذا من أجل ____
  }
 // ///////////// نهاية الحرف R ///////

/*
 * /* الحرف 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); // هذا للفراغ
 *   }  
 * /////////////// نهاية الحرف O ///////
 * 
 * 
 *   /* الحرف 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); // هذا من أجل ____
  }
 // ///////////// نهاية الحرف ب ///////

/*
 * /* الحرف 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); // هذا للفراغ
 *   }  
 * /////////////// نهاية الحرف O ///////
 * 
 *   /* الحرف 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); // هذا من أجل ____
  }
 // ///////////// نهاية الحرف J ///////

/*
 * الحرف 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);// هذا للفراغ
 *   }  
 * /////////////// نهاية الحرف A ///////
 * 
 *   /* الحرف 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); // هذا من أجل ____
  }
 // ///////////// نهاية الحرف X ///////



ملفات📁

لا توجد ملفات متاحة.