![](https://duino4projects.com/wp-content/uploads/2021/06/Life-and-Tetris-and-Pong...Oh-My.jpg)
چند ماه پیش من یک معامله واقعا خوب در یک صفحه نمایش بزرگ LED ماتریسی 32×32 RGB دریافت کردم. این با رابط سیمکشی نشاندادهشده در وبسایت Adafruit برای نمایش ۳۲×۳۲ مطابقت دارد، بنابراین من آزمایشهای معمول را با کتابخانههای آنها انجام دادم. اخیراً به دنبال ایده هایی برای پروژه های این نمایشگر بودم. یکی از آنها که ظاهر شد Conway Game of Life بود. من هیچ نسخه ای را پیدا نکردم که بدون تغییر در فضای محدود رم آردوینو نانو اجرا شود، بنابراین کد خودم را نوشتم. من چند قطعه کد را پیدا کردم و قرض گرفتم که به طور خلاصه وضعیت همسایگان سلول را بررسی می کند و قوانین بازی را اجرا می کند.
بازی زندگی نمایشگر جالبی داشت، اما تصمیم گرفتم ببینم آیا میتوانم یک نسخه متقارن بسازم، بنابراین در نهایت با نمایشگر Snowflake مواجه شدم. نه یکی از آنها که به اندازه کافی تنها باشم، من شروع به تحقیق در مورد برخی از بازی هایی کردم که ممکن است برای این نوع نمایشگر مناسب باشند. این باعث شد که یک بازی مار، یک بازی پنگ و یک بازی تتریس انجام دهم. در نهایت، تصمیم گرفتم ببینم که آیا میتوان هر پنج نسخه را در فضای محدود حافظه آردوینو نانو جای کفش کرد یا خیر. تنظیماتی در تک تک قطعات نرم افزار انجام شد اما کار کرد. زمانی که آردوینو ریست یا روشن می شود، انتخاب نمایشگر یا بازی برای فعال سازی انجام می شود.
در حالی که این بیشتر فقط یک تمرین سرگرم کننده بود، اما هم از نظر کار با ماتریس LED و هم در کشف قوانین و عناصر بازی های مختلف آموزشی بود. در این Instructable من برخی از اطلاعات آموزشی در مورد کار با ماتریس و همچنین اطلاعات اولیه در مورد بازی ها و نمایشگرهای مختلف ارائه می دهم. حتی اگر قصد ندارید کل پروژه را بسازید، باید چند قطعه مفید از نرم افزار در اینجا وجود داشته باشد.
مرحله 1: RGB
اگر از قبل همه چیزهایی را که باید در مورد کدگذاری رنگی RGB (قرمز-سبز-آبی) بدانید، از این بخش صرفنظر کنید. اساساً تمام معنی این است که هر عنصر ماتریس دارای سه LED است که در آن تعبیه شده است. این بدان معناست که شما می توانید رنگ هر عنصر داده شده را بر اساس اینکه کدام یک از سه LED را روشن می کنید تغییر دهید. بدیهی است که می توانید قرمز، سبز و آبی را دریافت کنید، اما ترکیب این سه رنگ نیز رنگ های متفاوتی می دهد. به عنوان مثال، قرمز و سبز و آبی سفید را تشکیل می دهند. این یک ترفند از منابع نور است، بنابراین رنگ قرمز، سبز و آبی را با هم ترکیب نکنید و انتظار داشته باشید که سفید شوید. قرمز و آبی رنگ فوشیا (نوعی صورتی)، آبی و سبز فیروزه ای (آبی کم رنگ) و قرمز و سبز باعث زرد می شوند. هر سه LED را برای مشکی خاموش کنید. بد نیست، هشت رنگ از سه منبع نور.
بنابراین چگونه نمایشگرهای ویدئویی و تلویزیون ها می توانند تبلیغ کنند که می توانند هزاران یا حتی میلیون ها رنگ را از RGB دریافت کنند؟ خوب، آنها نمی توانند. کاری که آنها در واقع انجام می دهند این است که چشمان شما را فریب می دهند و فکر می کنند که همه آن رنگ های مختلف را می بینید. زمانی که در واقعیت، مجموعهای از عکسهای ثابت را میبینید، به نوعی مانند فیلم سینمایی باعث میشود که چشمان شما فکر کنند که حرکت صاف را میبینید. صاف به نظر می رسد زیرا تصاویر سریعتر از آنچه چشم شما قادر به تشخیص آن است در حال تغییر است. یک اصل مشابه با RGB برای دریافت تمام آن رنگ های دیگر اتفاق می افتد. به عنوان مثال، اگر LED قرمز و سبز را همزمان روشن کنیم، رنگ زرد را مشاهده می کنیم. اما فرض کنید که LED سبز را با شدت نصف روشن می کنیم. سپس رنگ متفاوتی را می دیدیم. اما LED فقط روشن یا خاموش است، بنابراین چگونه می توانیم شدت متغیر را دریافت کنیم؟ ما این کار را با چرخاندن LED سبز تنها در بخشی از زمانی که LED قرمز روشن است انجام می دهیم. برای اینکه این کار بدون تشخیص کره چشم کار کند، باید زمانهای روشن/خاموش را با سرعتی سریعتر از تشخیص چشم انجام دهیم. برای مثال میتوانیم LED سبز را با یک موج مربعی 100 هرتزی روشن/خاموش کنیم و به نظر میرسد که شدت آن تقریباً نصف باشد. عوامل دیگری نیز دخیل هستند، اما برای سادگی، این یک قانون کلی خوب است. آن نیمه سبز را با یک قرمز با شدت کامل مخلوط کنید و به رنگ نارنجی خواهید رسید. بسیار جالب است، اما هر چه رنگ های بیشتری بخواهید، به سطوح بیشتری از شدت نیاز دارید و به قدرت پردازش بیشتری نیاز دارید. برای ماتریس 32×32 ما، باید 6144 بیت داده را برای هر به روز رسانی نمایشگر به صورت سریال جابجا کنید. این در واقع تنها منجر به 1024 تغییر می شود زیرا 6 ورودی کنترل رنگ وجود دارد که برای هر تغییر بارگذاری می شود. برای جزئیات بیشتر به بخش "انواع ماتریس" مراجعه کنید برای مثال میتوانیم LED سبز را با یک موج مربعی 100 هرتزی روشن/خاموش کنیم و به نظر میرسد که شدت آن تقریباً نصف باشد. عوامل دیگری نیز دخیل هستند، اما برای سادگی، این یک قانون کلی خوب است. آن نیمه سبز را با یک قرمز با شدت کامل مخلوط کنید و به رنگ نارنجی خواهید رسید. بسیار جالب است، اما هر چه رنگ های بیشتری بخواهید، به سطوح بیشتری از شدت نیاز دارید و به قدرت پردازش بیشتری نیاز دارید. برای ماتریس 32×32 ما، باید 6144 بیت داده را برای هر به روز رسانی نمایشگر به صورت سریال جابجا کنید. این در واقع تنها منجر به 1024 تغییر می شود زیرا 6 ورودی کنترل رنگ وجود دارد که برای هر تغییر بارگذاری می شود. برای جزئیات بیشتر به بخش "انواع ماتریس" مراجعه کنید برای مثال میتوانیم LED سبز را با یک موج مربعی 100 هرتزی روشن/خاموش کنیم و به نظر میرسد که شدت آن تقریباً نصف باشد. عوامل دیگری نیز دخیل هستند، اما برای سادگی، این یک قانون کلی خوب است. آن نیمه سبز را با یک قرمز با شدت کامل مخلوط کنید و به رنگ نارنجی خواهید رسید. بسیار جالب است، اما هر چه رنگ های بیشتری بخواهید، به سطوح بیشتری از شدت نیاز دارید و به قدرت پردازش بیشتری نیاز دارید. برای ماتریس 32×32 ما، باید 6144 بیت داده را برای هر به روز رسانی نمایشگر به صورت سریال جابجا کنید. این در واقع تنها منجر به 1024 تغییر می شود زیرا 6 ورودی کنترل رنگ وجود دارد که برای هر تغییر بارگذاری می شود. برای جزئیات بیشتر به بخش "انواع ماتریس" مراجعه کنید آن نیمه سبز را با یک قرمز با شدت کامل مخلوط کنید و به رنگ نارنجی خواهید رسید. بسیار جالب است، اما هر چه رنگ های بیشتری بخواهید، به سطوح بیشتری از شدت نیاز دارید و به قدرت پردازش بیشتری نیاز دارید. برای ماتریس 32×32 ما، باید 6144 بیت داده را برای هر به روز رسانی نمایشگر به صورت سریال جابجا کنید. این در واقع تنها منجر به 1024 تغییر می شود زیرا 6 ورودی کنترل رنگ وجود دارد که برای هر تغییر بارگذاری می شود. برای جزئیات بیشتر به بخش "انواع ماتریس" مراجعه کنید آن نیمه سبز را با یک قرمز با شدت کامل مخلوط کنید و به رنگ نارنجی خواهید رسید. بسیار جالب است، اما هر چه رنگ های بیشتری بخواهید، به سطوح بیشتری از شدت نیاز دارید و به قدرت پردازش بیشتری نیاز دارید. برای ماتریس 32×32 ما، باید 6144 بیت داده را برای هر به روز رسانی نمایشگر به صورت سریال جابجا کنید. این در واقع تنها منجر به 1024 تغییر می شود زیرا 6 ورودی کنترل رنگ وجود دارد که برای هر تغییر بارگذاری می شود. برای جزئیات بیشتر به بخش "انواع ماتریس" مراجعه کنید
مرحله 2: انواع ماتریس
![](https://duino4projects.com/wp-content/uploads/2021/06/Matrix-Types.jpg)
انواع مختلفی از این ماتریس ها وجود دارد که محبوب ترین آنها 32×16 و 32×32 است. وب سایت Adafruit دارای مجموعه ای از اطلاعات فوق العاده است که به شما کمک می کند ماتریس خاص خود را شناسایی و تنظیم کنید. تصویری از برچسب های کانکتور برای من در بالا نشان داده شده است. هنگامی که شما برای یک ماتریس خرید می کنید، دو اصطلاح وجود دارد که ممکن است به خوبی توضیح داده نشوند، بنابراین من آن اطلاعات را در اینجا ارائه می کنم.
نرخ اسکن: «نرخ اسکن» به تعداد آدرسهای جداگانه موجود برای ردیفهای ماتریس اشاره دارد. رایج ترین نسخه های 32×32 به عنوان اسکن "1:16" ذکر شده است. معنای واقعی آن این است که هر خط دارای 32 پیکسل است و برای پوشش دادن همه خطوط به 16 آدرس مختلف (4 ورودی) نیاز دارد. دلیل اینکه فقط 16 آدرس می گیرد این است که ماتریس به صورت دو قطعه 32×16 پیکربندی شده است - یکی در نیمه بالایی و دیگری در نیمه پایینی. هر نیمه دارای ورودی های کنترل رنگ RGB جداگانه است (در مجموع 6). ممکن است فکر کنید که نمایشگرهای 32×16 مانند یک نیمه از یک ماتریس 32×32 عمل می کنند، اما معمولاً اینطور نیست. نمایشگرهای 32×16 عمدتاً به عنوان اسکن "1:8" با 3 ورودی آدرس فهرست شده اند.
Pitch: "پیچ" مشخص شده برای این نمایشگرهای ماتریسی به فضای بین هر LED RGB اشاره دارد. مال من یکی از بزرگترها با گام 7.62 میلی متری است و کل صفحه نمایش حدود 9 و نیم اینچ مربع است. چندین مقدار گام تبلیغاتی وجود دارد، بنابراین فقط به یاد داشته باشید که هرچه عدد زیر و بمی کمتر باشد، نمایشگر کوچکتر است.
مرحله 3: سخت افزار
![](https://duino4projects.com/wp-content/uploads/2021/06/Hardware-1.jpg)
سخت افزار با چهار سوئیچ SPST که معمولاً باز هستند و دو پتانسیومتر خطی بسیار ساده است. پتانسیومترها می توانند تقریباً هر مقداری داشته باشند زیرا آنها فقط به عنوان تقسیم کننده ولتاژ متغیر برای دو ورودی آردوینو نانو عمل می کنند. من از پتانسیومترهای 5k استفاده می کنم فقط به این دلیل که تعداد زیادی از آنها را دارم. از آنجایی که من از نانو استفاده می کنم، به جای استفاده از D0، D1 یا D13 برای هر یک از ورودی های سوئیچ، از دو ورودی آنالوگ اضافی (A6 و A7) استفاده کردم. D13 به LED داخلی متصل است، بنابراین به طور کلی به عنوان یک پورت دیجیتال استفاده نمی شود. D0 و D1 برای اتصال UART هستند و روی هر پایه یک مقاومت درون خطی دارند. اگر میخواهید از آنها به عنوان ورودی دیجیتال استفاده کنید، D0 و D1 باید خوب کار کنند و اگر میخواهید نرمافزار را روی آردوینوهایی که A6 و A7 ندارند (مانند UNO) میزبانی کنید، ضروری است. فقط پتانسیومترها را به A4 و A5 ببرید،
اگر میخواهید قابلیت بازنشانی دستی به غیر از چرخه برق را داشته باشید، میتوانید سوئیچ پنجم را اضافه کنید. یکی از این روش ها برای تغییر به نوع دیگری از بازی یا نمایش مورد نیاز است.