ماتریس LED 8x8 با استفاده از ماجیول آردوینو MAX7219
در این آموزش، یاد خواهیم گرفت که چگونه یک ماتریس LED 8x8 را با استفاده از ماجیول MAX7219 و یک آردوینو کنترل کنیم. MAX7219 کنترل چندین LED را ساده میکند و به ما این امکان را میدهد که به راحتی کاراکترها و الگوها را نمایش دهیم. در پایان این پروژه، شما قادر خواهید بود کلمه "ROBOJAX" را بر روی ماتریس نمایش دهید.
برای دستیابی به این هدف، از کتابخانه LedControl استفاده خواهیم کرد که به طور خاص برای ارتباط با MAX7219 طراحی شده است. این کتابخانه به ما این امکان را میدهد که دادهها را با کمترین تلاش به ماتریس LED ارسال کنیم. اگر میخواهید درک بهتری از سیمکشی و شِفر (کود) داشته باشید، حتماً ویدئوی مرتبط را بررسی کنید (در ویدئو در ۰:۳۰).
توضیح سختافزار
اجزای اصلی این پروژه شامل ماجیول MAX7219 و ماتریس LED 8x8 است. MAX7219 یک مدار مجتمع است که نمایش LED ها را مدیریت می کند و سیگنال های ارتباطی و کنترلی را از آردوینو پردازش می کند. این ماجیول از یک رابط سریال استفاده می کند، به این معنی که می توانیم بسیاری از LED ها را تنها با چند پایه از آردوینو کنترل کنیم.
ماتریس LED 8x8 از 64 LED فردی تشکیل شده است که در یک شبکه چیده شدهاند. هر LED میتواند با ارسال دستورات مناسب از طریق MAX7219 روشن یا خاموش شود. این امکان نمایش شخصیتها و گرافیکهای مختلف را بر روی ماتریس فراهم میکند.
جزئیات برگه داده
| تولیدکننده | مکسیم اینتگریدید |
|---|---|
| شماره قطعه | MAX7219 |
| ولتاژ منطقی/ورودی و خروجی | ۳.۳ ولت تا ۵.۵ ولت |
| ولتاژ تأمین | ۴.۰ ولت تا ۵.۵ ولت |
| جریان خروجی (به ازای هر کانال) | حداکثر 40 میلیآمپر |
| جریان اوج (به ازای هر کانال) | حداکثر 100 میلیآمپر |
| راهنمایی فرکانس PWM | 100 هرتز |
| آستانههای منطقی ورودی | ۲.۰ ولت (بالا) / ۰.۸ ولت (پایین) |
| افت ولتاژ / RDS(on)/ اشباع | 0.2 ولت معمولی |
| محدودیتهای حرارتی | ۱۵۰ درجه سانتیگراد |
| بسته | 16-DIP |
| یادداشتها / انواع | پیکربندی آند مشترک |
- تأمین منبع تغذیه مناسب (۴.۰ ولت تا ۵.۵ ولت).
- از مقاومتهای محدودکننده جریان برای هر LED استفاده کنید تا از آسیب جلوگیری شود.
- کابلها را کوتاه نگهدارید تا از تداخل جلوگیری شود.
- انتشار حرارت را زیر نظر داشته باشید؛ در صورت لزوم از یک هیت سینک استفاده کنید.
- اتصالات پایه را دوباره بررسی کنید تا از بروز سوءتفاهم جلوگیری شود.
دستورالعملهای سیمکشی
برای اتصال MAX7219 به آردوینو، پایههای زیر را وصل کنید:
- متصل کنید
VCCپایه MAX7219 به 5V آردوینو. - متصل کنید
GNDپایه به زمین آردوینو. - متصل کنید
DINپایه (داده ورودی) به پایه ۱۲ آردوینو. - متصل کنید
CLKپایه (ساعت) به پایه ۱۱ آردوینو. - متصل کنید
CSپایه (انتخاب چیپ) به پایه ۱۰ آردوینو.
قبل از روشن کردن مدار، مطمئن شوید که همه اتصالات محکم هستند. سیمکشی ساده است، اما اگر با مشکلاتی مواجه شدید، اتصالات را با دقت بررسی کنید (در ویدیو در :45).
نمونههای شِفر (کود) و راهنمایی
در شِفر (کود)، ما با وارد کردن کتابخانه LedControl شروع میکنیم که برای ارتباط با MAX7219 ضروری است. بخش زیر شیء LedControl را مقداردهی اولیه میکند:
LedControl lc=LedControl(12,11,10,1);این خط پایه داده، پایه ساعت، پایه انتخاب تراشه و تعداد دستگاهها (در این مورد ۱) را تنظیم میکند. سپس، درsetup()تابع، ما MAX7219 را بیدار میکنیم و شدت نمایش را تنظیم میکنیم:
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);این اطمینان میدهد که نمایشگر فعال است و آماده نمایش کاراکترها میباشد. عملکرد اصلی که نمایشگر را به حرکت در میآورد،writeArduinoOnMatrix()که به ترتیب ردیفهای ماتریس را روشن میکند تا حروف را نمایش دهد.
نمایش / چه انتظاری باید داشت
پس از اینکه همه چیز متصل شد و شِفر (کود) بارگذاری شد، ماتریس LED باید کلمه "ROBOJAX" را نمایش دهد. اگر نمایش کار نکرد، مشکلاتی مانند اتصالات شل یا تخصیص نادرست پایهها را بررسی کنید. همچنین، اطمینان حاصل کنید که منبع تغذیه کافی است (در ویدیو در ۲:۳۰).
فصلها
- مقدمه (۰:۰۰)
- بررسی سختافزار (0:30)
- دستورالعملهای سیمکشی (۱:۴۵)
- شِفر (کود) walkthrough (۲:۱۵)
- نمایش (۳:۰۰)
/*
* این ویدیو نحوه استفاده از ماجیول MAX7219 با ماتریکس LED 8x8 را برای نمایش متن یا هر کاراکتری روی LED نشان میدهد.
* تماشای ویدیو در یوتیوب: https://youtu.be/AAiDwBKs9uE
*
* نوشته شده توسط احمد شمشیری برای Robojax.com
* در ۲۶ فوریه ۲۰۱۷ در اِجَکس، انتاریو، کانادا
* این شِفر (کود) و سایر کدهای آردوینو را از Robojax.com دریافت کنید
* آردوینو را گام به گام در یک دوره ساختاریافته با تمام مطالب، نمودارهای سیمکشی و کتابخانهها بیاموزید
* همه در یک مکان.
*
* دسترسی زودهنگام به ویدیوهای من را از طریق Patreon دریافت کنید و نام خود را در انتهای هر
* ویدیویی که در یوتیوب منتشر میکنم ذکر کنید: 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"
/*
* 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 با یک ماتریس LED 8x8 برای نمایش متن یا هر کاراکتری روی LED را نشان میدهد.
* تماشای ویدئوی یوتیوب: https://youtu.be/AAiDwBKs9uE
*
* نوشته شده توسط احمد س. برای Robojax.com
* در ۲۶ فوریه ۲۰۱۷ در اِجَکس، انتاریو، کانادا
* اجازه انتشار این شِفر (کود) با شرط حفظ این یادداشت همراه شِفر (کود) داده شده است.
* سلب مسئولیت: این شِفر (کود) "همانطور که هست" و تنها برای اهداف آموزشی ارائه شده است.
*
* /
*
* // همیشه باید کتابخانه را شامل شویم
* // بر اساس پروژهای که در 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 ///////
منابع و مراجع
-
مستنداتمشاهده تنظیمات مختلف پایه بورد برای SPIarduino.cc
فایلها📁
هیچ فایلی موجود نیست.