ماتریس 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"
/*
* اکنون به یک LedControl برای کار نیاز داریم.
* // سفارشیشده برای RoboJax.com در ۲۶ فوریه ۲۰۱۷ در اِجَکس، انتاریو، کانادا.
* **** این شمارههای پایه احتمالاً با سختافزار شما کار نخواهند کرد *****
* پایه ۱۲ به DataIn متصل است
* پایه ۱۱ به CLK متصل است
* پایه ۱۰ به 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);
}
/*
* این روش حروف کلمه "آردوینو" را یکی پس از دیگری روی ماتریس نمایش خواهد داد.
* (برای دیدن کامل حروف به حداقل ۵x7 الئیدی نیاز دارید)
*/
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 */
* برای (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* تاخیر(delaytime);
* برای(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 */
* برای (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* تاخیر(delaytime);
* برای(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 */
* برای (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* تأخیر(delaytime);
* برای(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 ///////
/*
* این ویدئو نحوه استفاده از ماجیول MAX7219 با یک ماتریس LED 8x8 برای نمایش متن یا هر کاراکتری روی LED را نشان میدهد.
* تماشای ویدئوی یوتیوب: https://youtu.be/AAiDwBKs9uE
*
* نوشته شده توسط احمد س. برای Robojax.com
* در ۲۶ فوریه ۲۰۱۷ در اِجَکس، انتاریو، کانادا
* اجازه انتشار این شِفر (کود) با شرط حفظ این یادداشت همراه شِفر (کود) داده شده است.
* سلب مسئولیت: این شِفر (کود) "همانطور که هست" و تنها برای اهداف آموزشی ارائه شده است.
*
* /
*
* // همیشه باید کتابخانه را شامل شویم
* // بر اساس پروژهای که در https://github.com/wayoda/LedControl منتشر شده است
*/
#include "LedControl.h"
/*
* اکنون برای کار به یک شیء LedControl نیاز داریم.
* // سفارشیشده برای RoboJax.com در ۲۶ فوریه ۲۰۱۷ در اِجَکس، انتاریو، کانادا.
* **** این شمارههای پایه احتمالاً با سختافزار شما کار نخواهند کرد *****
* پایه ۱ به DataIn متصل است
* پایه ۴ به CLK متصل است
* پایه ۵۳ به CS متصل است
* ما تنها یک MAX72XX داریم.
*/
LedControl lc=LedControl(1,4,53,1); // این خط مشخص میکند که آیا این شِفر (کود) با آردوینو مگا یا آردوینو یونو کار میکند.
/*
* ما همیشه بین بهروزرسانیهای صفحه نمایش کمی صبر میکنیم */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* MAX72XX در حالت صرفهجویی در انرژی هنگام راهاندازی است،
* باید یک فراخوان بیدار کردن انجام دهیم
*/
lc.shutdown(0,false);
/*
* شدت روشنایی را روی مقدار متوسط تنظیم کنید */
* lc.setIntensity(0,8);
* /* و صفحه نمایش را پاک کنید
*/
lc.clearDisplay(0);
}
/*
* این روش حروف کلمه "آردوینو" را یکی پس از دیگری روی ماتریس نمایش خواهد داد.
* (برای دیدن تمام حروف به حداقل ۵ در ۷ الئیدی نیاز دارید)
*/
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 ///////
منابع و مراجع
-
مستنداتمشاهده تنظیمات مختلف پایه بورد برای SPIarduino.cc
فایلها📁
هیچ فایلی موجود نیست.