ورکشاپ آموزشی - آیسی مدار
رفتن به محتوا

ساعت وای‌فای با افکت تتریس (ESP32 و ماتریس LED)

ابزار و گجت
۰ نظر
۴۰ نفر
کد ۴۴۹۱

ساعت‌های دیجیتال همیشه جذابیت خودشون رو دارن، اما وقتی پای نوستالژی بازی معروف تتریس بیاد وسط، همه‌چیز هیجان‌انگیزتر می‌شه! توی این آموزش قراره یاد بگیریم چطور با استفاده از یک پنل ماتریس ال‌ای‌دی و برد قدرتمند ESP32، یک ساعت وای‌فای بسازیم که زمان رو با افتادن بلوک‌های تتریس نشون می‌شه. این پروژه هم ظاهر فوق‌العاده‌ای داره و هم به خاطر اتصال به اینترنت، همیشه زمانش دقیقه.

مزیت بزرگ این پروژه اینه که نیازی به تنظیم دستی ساعت نداری؛ چون برد ESP32 از طریق وای‌فای به اینترنت وصل می‌شه و زمان رو به صورت خودکار دریافت می‌کنه. اگر دنبال یک دکوری خاص برای میز کارت هستی یا می‌خوای مهارت‌هات رو تو کار با ماتریس‌های ال‌ای‌دی محک بزنی، این پروژه دقیقا برای توئه. پس وسایلت رو آماده کن تا تو تیم آیسی‌مدار با هم قدم‌به‌قدم این ساعت جذاب و خیره‌کننده رو بسازیم. بریم سراغ ساخت!

قطعات موردنیاز

  • ماژول ماتریس ال‌ای‌دی مدل P3 با رزولوشن 64x32 از نوع RGB
  • برد توسعه ESP32 (مدل Dev kit mini یا مدل‌های مشابه)
  • منبع تغذیه 5 ولت (حداقل با جریان دهی 4 آمپر)
  • کابل جامپر ماده به ماده 20 سانتی‌متری
  • فیش مادگی آداپتور به ترمینال پیچی (برای اتصال راحت‌تر تغذیه)
  • پایه نگهدارنده ماتریس ال‌ای‌دی (می‌تونی پرینت سه‌بعدی کنی یا خودت یه پایه بسازی)
مرحله ۱

مراحل انجام کار

توی این پروژه، تمام جزئیات سیم‌کشی و برنامه‌نویسی رو خط‌به‌خط با هم بررسی می‌کنیم. پس اصلا نگران نباش و فقط کافیه مراحل آموزشی زیر رو با دقت دنبال کنی تا در نهایت یک ساعت تتریسی بی‌نقص داشته باشی.

مرحله ۲

آشنایی با پنل‌های ماتریس LED

کار با ماتریس‌های ال‌ای‌دی یه راه فوق‌العاده برای ساخت پروژه‌های بصری جذابه. این پنل‌ها در اصل برای ساخت نمایشگرهای غول‌پیکر تو کنسرت‌ها و تابلوهای تبلیغاتی طراحی شدن، اما خوشبختانه می‌تونیم با یک میکروکنترلر ساده، تک‌تک پیکسل‌هاشون رو به صورت مجزا کنترل کنیم.

این نمایشگرها تو سایزها و مدل‌های مختلفی تو بازار پیدا می‌شن، اما برای این پروژه ما از یک ماتریس مدل P3 با ابعاد 64 در 32 پیکسل استفاده می‌کنیم.

رزولوشن 64 در 32 یعنی این پنل 64 تا ال‌ای‌دی در طول و 32 تا ال‌ای‌دی در عرض داره. کدهای این پروژه دقیقا برای همین ابعاد نوشته شده، هرچند می‌شه با کمی تغییرات برای پنل‌های دیگه هم ازش استفاده کرد. عبارت P3 هم به این معنیه که فاصله بین مرکز هر ال‌ای‌دی تا ال‌ای‌دی کناری دقیقا 3 میلی‌متریه. طبیعتا اگه پنلی با فاصله پیکسلی بزرگ‌تر انتخاب کنی، ابعاد فیزیکی نهایی ساعتت هم بزرگ‌تر می‌شه.

برای راه‌اندازی این ماتریس‌ها می‌تونی از بردهای مختلفی مثل رزبری‌پای استفاده کنی، ولی ما اینجا برد ESP32 رو انتخاب کردیم. این برد هم مقرون‌به‌صرفه‌ست، هم با آردوینو سازگاره و مهم‌تر از همه، وای‌فای داخلی داره که برای گرفتن زمان اینترنتی کاملا نیازش داریم. پایه‌های نگهدارنده رو هم می‌تونی با پرینتر سه‌بعدی بسازی تا ساعتت قشنگ روی میز وایسه.

فایل‌های طراحی سه‌بعدی پایه تو اینترنت به راحتی پیدا می‌شن و می‌تونی اون‌ها رو به دلخواه خودت شخصی‌سازی کنی.

مرحله ۳

استفاده از شیلدهای ماتریس (اختیاری)

برای راحت‌تر شدن کار با این ماتریس‌ها، شیلدهای مخصوصی طراحی شده که سیم‌کشی رو به حداقل می‌رسونه. البته استفاده از این شیلدها الزامی نیست، ولی کار رو خیلی تمیزتر می‌کنه. بعضی از این شیلدها بر اساس کتابخونه PxMatrix کار می‌کنن و مدل‌های جدیدتر از کتابخونه I2S و قابلیت DMA بهره می‌برن.

برای هر دو مدل شیلد، نسخه‌های متفاوتی از کد وجود داره که می‌تونی بسته به سخت‌افزارت ازشون استفاده کنی. کتابخونه‌های جدیدتر معمولا رفرش‌ریت بهتری بهت می‌دن و تصویر روان‌تری دارن.

اگر دوست داشته باشی پروژه‌ات رو حرفه‌ای‌تر جمع کنی، می‌تونی شیلدهای آماده رو برای این کار تهیه کنی تا دردسرهای سیم‌کشی رو نداشته باشی.

  • شیلد ماتریس ESP32 (مناسب برای کتابخانه PxMatrix)
  • شیلد ماتریس I2S مخصوص ESP32

استفاده از شیلد، درگیری با سیم‌های جامپر رو کم می‌کنه و پایداری مدارت رو بالا می‌بره، مخصوصا اگه بخوای ساعتت رو برای مدت طولانی بدون وقفه روشن بذاری.

  • نسخه معمولی شیلد (PxMatrix)
  • نسخه پیشرفته‌تر I2S
مرحله ۴

سیم‌کشی و اتصالات مدار بدون شیلد

اولین کاری که باید بکنیم، وصل کردن منبع تغذیه به کابل‌های برق ماتریس نمایشگره. برای این کار می‌تونی از یک ترمینال پیچی و یک تکه برد سوراخ‌دار استفاده کنی تا کابل‌های برق ماتریس رو خیلی محکم و تمیز به آداپتور 5 ولت متصل کنی.

اگر بخوای می‌تونی سیم‌ها رو مستقیم به فیش آداپتور وصل کنی، اما معمولا این روش اتصال فیزیکی محکمی بهت نمی‌ده و ممکنه با کوچیک‌ترین تکونی قطعی پیش بیاد. اگر خواستی از این روش استفاده کنی، حتما از چسب برق یا وارنیش حرارتی کمک بگیر تا اتصالاتت محکم و ایمن بشن.

حالا نوبت وصل کردن ESP32 به پنل ماتریسه. پشت پنل دو تا سوکت می‌بینی؛ اونی که فلش‌ها ازش خارج شدن، ورودی یا P-In هست که برد ESP32 مستقیما بهش وصل می‌شه. اما قبل از اون، باید چند تا از پین‌های سوکت P-In رو به سوکت خروجی یا P-out (سوکت با فلش‌های رو به داخل) جامپر بزنی. این اتصالات رو دقیقا به این شکل انجام بده:

پین R2 از P-in رو به R1 از P-out وصل کن. همینطور G1 رو به R2، بعد G2 رو به G1، بعد B1 رو به G2 و در نهایت B2 رو به B1 متصل کن. حالا برای اتصال برد ESP32 به سوکت P-in این ترکیب رو پیش ببر: پین A به 19، پین B به 23، پین C به 18، پین D به 5، پین E به 15، پین STB/LAT به 22، پین P_OE به 2، پین CLK به 14 و پین R1 به 13.

اگر از مدل‌های خاصی از ESP32 استفاده می‌کنی که پین 2 ندارن، می‌تونی P_OE رو به پین 21 وصل کنی.

مرحله ۵

آماده‌سازی محیط برنامه‌نویسی برای ESP32

اگر تا حالا با برد ESP32 کار نکردی، اول باید محیط نرم‌افزاری رو براش آماده کنیم. اول از همه باید نرم‌افزار Arduino IDE رو نصب و باز کنی.

حالا باید تنظیمات آردوینو رو برای پشتیبانی از ESP32 انجام بدیم. از منوی File روی Preferences کلیک کن و لینک مربوط به بردهای ESP32 رو در کادر Additional Boards Manager URLs قرار بده و روی OK کلیک کن.

برگرد به صفحه اصلی، از منوی Tools به بخش Board و بعد Boards Manager برو. کلمه ESP32 رو جستجو کن و پکیج مربوطه رو نصب کن. بسته به سرعت اینترنتت، این کار ممکنه چند دقیقه‌ای زمان ببره.

پیشنهاد می‌کنم بعد از نصب، قبل از اینکه بری سراغ کد اصلی پروژه، یه کد ساده مثل چشمک‌زن (Blink) رو روی برد آپلود کنی. این کار بهت اطمینان می‌ده که برد و تنظیمات نرم‌افزاریت کاملا درست کار می‌کنن و جلوی خیلی از سردرگمی‌های بعدی رو می‌گیره!

مرحله ۶

دریافت کدها و نصب کتابخانه‌ها

کدهای این پروژه رو باید دانلود کنی و تو محیط آردوینو باز کنی. برای این کار مراحل زیر رو به ترتیب طی کن:

  • فایل‌های پروژه رو به صورت زیپ دانلود کن.
  • فایل زیپ دانلود شده رو اکسترکت یا از حالت فشرده خارج کن.
  • وارد پوشه ESP32 بشو و فایل اصلی با پسوند ino رو پیدا کن.
  • فایل رو اجرا کن و دقت کن که تمام فایل‌های کنار کد اصلی باید تو همون پوشه باقی بمونن.

این کد برای اینکه درست کار کنه، به چند تا کتابخونه جانبی آردوینو نیاز داره که باید نصب بشن:

  • کتابخانه Tetris Animation: برای مدیریت و اجرای انیمیشن‌های تتریس ساعت
  • کتابخانه PxMatrix: برای کنترل و راه‌اندازی نمایشگر ماتریسی
  • کتابخانه EzTime: برای دریافت دقیق زمان از طریق اینترنت
  • کتابخانه AdafruitGFX: کتابخونه پایه گرافیکی که PxMatrix بر اساس اون کار می‌کنه

جزئیات مربوط به اینکه کدوم نسخه از کتابخونه‌ها نیازه، تو کامنت‌های بالای خود کد به طور کامل نوشته شده. بعد از اینکه این کتابخونه‌ها رو نصب کردی، یک بار روی دکمه Verify (همون علامت تیک بالای صفحه) تو آردوینو کلیک کن تا مطمئن بشی کد بدون خطا کامپایل می‌شه.

یادت باشه اگر از شیلدهای ماتریس نسخه I2S استفاده می‌کنی، باید کتابخونه HUB75 I2S DMA رو هم نصب کنی و کد مخصوص به همون شیلد رو روی برد آپلود کنی.

مرحله ۷

تنظیمات نهایی کد و شخصی‌سازی ساعت

برای اینکه ساعت درست کار کنه، باید چند تا تغییر کوچیک تو کد بدی. تو قسمت Stuff to configure، نام شبکه وای‌فای (SSID) و رمز عبورت رو وارد کن. کمی پایین‌تر، باید منطقه زمانی (Timezone) خودت رو تنظیم کنی؛ مثلا برای ایران می‌تونی از فرمت Asia/Tehran استفاده کنی.

در نهایت اگر از بردهای متفاوتی استفاده می‌کنی، شاید لازم باشه پین‌های تعریف‌شده تو کد رو بر اساس سیم‌کشی خودت تغییر بدی. تو کد کلمه Generic رو جستجو کن و خطوط مربوط به اون رو از حالت کامنت خارج کن. وقتی تنظیماتت تموم شد، کد رو روی ESP32 آپلود کن؛ حالا باید بلوک‌های تتریس رو در حال ریزش ببینی!

چند تا آپشن جذاب دیگه هم هست که می‌تونی ساعتت رو دقیقا همون‌طوری که دوست داری تنظیم کنی. مثلا اگر می‌خوای ساعت به جای فرمت 12 ساعته، 24 ساعته باشه، کافیه متغیر twelveHourFormat رو روی false بذاری.

متغیر forceRefresh بهت اجازه می‌ده مشخص کنی که در هر دقیقه چطور اعداد روی نمایشگر رفرش بشن. اگر روی true تنظیم بشه، کل صفحه ساعت پاک می‌شه و تمام اعداد دوباره از نو کشیده می‌شن.

اما اگر روی false تنظیمش کنی، فقط اعدادی که نیاز به تغییر دارن پاک می‌شن. مثلا اگر ساعت روی 10:29 باشه و بخواد بشه 10:30، فقط عدد 2 و 9 با افکت تتریس پاک می‌شن و بلوک‌های جدید برای 3 و 0 می‌افتن، در حالی که عدد 10 سر جاش باقی می‌مونه.

راستی! می‌تونی سرعت افتادن بلوک‌های تتریس رو هم تغییر بدی. برای این کار باید مقداری که متغیر animationTimer رو فعال می‌کنه عوض کنی.

این مقدار به‌طور پیش‌فرض روی 100000 میکروثانیه (یعنی یک دهم ثانیه) تنظیم شده. اگر این عدد رو کمتر کنی، سرعت افتادن بلوک‌ها بیشتر می‌شه. مثلا اگر این مقدار رو به 50000 تغییر بدی، سرعت انیمیشن تتریس دقیقا دو برابر می‌شه. وقتی این تغییرات رو اعمال کردی، یک بار دیگه کد رو آپلود کن تا ساعتت دقیقا با سلیقه خودت کار کنه.

مرحله ۸

حرف آخر

امیدوارم از ساخت این ساعت دیواری یا رومیزی بی‌نهایت جذاب لذت برده باشی! ترکیب نوستالژی تتریس با یک ساعت مدرن اینترنتی قطعا دکور اتاقت رو خاص می‌کنه. اگر این پروژه رو ساختی، یادت نره ازش عکس و فیلم بگیری و تو اپلیکیشن آیسی‌مدار با بقیه بچه‌ها به اشتراک بذاری تا ما هم از دیدن نتیجه کارت کیف کنیم. موفق باشی!

فایل‌های پیوست

JSON package_esp32_index.json
ZIP WiFi-Tetris-Clock-master.zip

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!