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

ساعت معمایی فیبوناچی با میکروکنترلر Atmega328P

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

دنباله فیبوناچی یکی از معروف‌ترین الگوهای ریاضیه که از جمع شدن دو عدد قبلی به دست میاد (1، 1، 2، 3، 5). حالا فرض کن از همین الگوی جذاب ریاضی استفاده کنیم تا یه ساعت دیواری کاملا متفاوت و معمایی بسازیم! این ساعت به جای اعداد معمولی یا عقربه‌های تکراری، از مربع‌های رنگی برای نمایش زمان استفاده می‌کنه و هر کسی که بهش نگاه کنه، برای فهمیدن ساعت باید یه معمای کوچیک رو تو ذهنش حل کنه.

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

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

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

  • میکروکنترلر Atmega328P (یا یک برد آردوینو کامل)
  • ماژول ساعت زمان واقعی DS1307
  • باتری سکه‌ای 3 ولت برای ماژول ساعت
  • کریستال ساعت 32 کیلوهرتز
  • نوارهای ال‌ای‌دی آدرس‌پذیر (مدل WS2811 یا WS2812)
  • مقاومت‌های 10 کیلواهم و 22 کیلواهم
  • خازن 0.1 میکروفاراد
  • چند عدد کلید فشاری (Push Button)
  • ورق چوبی برای قاب (ضخامت‌های مختلف) و طلق پلکسی‌گلاس مات
  • مبدل FTDI برای پروگرام کردن میکروکنترلر
مرحله ۱

این ساعت چطور زمان رو نشون می‌ده؟

دنباله فیبوناچی توسط یه ریاضیدان ایتالیایی تو قرن سیزدهم میلادی معرفی شد. این الگو با اعداد 1 و 1 شروع می‌شه و هر عدد بعدی، حاصل جمع دو عدد قبلیه. برای ساخت این ساعت، ما از 5 عدد اول این الگو استفاده می‌کنیم: 1، 1، 2، 3 و 5.

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

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

برای خوندن دقیقه‌ها هم باید مقادیر مربع‌های سبز و آبی رو با هم جمع کنی. از اونجایی که دقیقه‌ها در ضریب 5 نمایش داده می‌شن (از 0 تا 12)، باید عدد به دست اومده رو ضرب در 5 کنی تا دقیقه واقعی رو به دست بیاری.

نکته جذابش اینه که برای نمایش یه زمان خاص، چندین ترکیب رنگی مختلف وجود داره! برای اینکه ساعت چالش‌برانگیزتر بشه، کدها طوری نوشته شدن که ترکیبات رو به صورت تصادفی انتخاب کنن. مثلا برای نمایش ساعت 6:30، حدود 16 ترکیب مختلف وجود داره و تو هیچ‌وقت نمی‌دونی ساعتت این بار از کدوم الگو استفاده می‌کنه!

مرحله ۲

طراحی مدار و کنترلر اصلی ساعت

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

مرحله ۳

اضافه کردن دکمه‌های تنظیم زمان

برای تنظیم زمان، به سه تا دکمه نیاز داریم که به پین‌های 3، 4 و 6 آردوینو وصل می‌شن. دکمه‌ای که به پین 3 متصله، به تنهایی می‌تونه پالت رنگی ال‌ای‌دی‌ها رو هم تغییر بده. یه دکمه اضافه هم روی پین 5 در نظر گرفتیم تا باهاش بتونی حالت‌های مختلف ساعت رو عوض کنی.

این ساعت دو تا حالت چراغ خواب داره و یه حالت پیش‌فرض که همون نمایش زمانه. حواست باشه که همه این دکمه‌ها باید با یه مقاومت پول‌دان (Pull-down) 10 کیلواهمی به صورت موازی به پین‌های میکروکنترلر وصل بشن تا نویز اضافی حذف بشه.

مرحله ۴

راه‌اندازی ماژول ساعت زمان واقعی (RTC)

برای اینکه ساعت همیشه دقیق کار کنه، تراشه DS1307 از طریق رابط I2C به میکروکنترلر وصل می‌شه. پین 5 (SDA) این تراشه به پین 27 میکرو (همون A4 در آردوینو) و پین 6 (SCL) به پین 29 میکرو (A5 در آردوینو) متصل می‌شه و هر دو به مقاومت‌های پول‌آپ 22 کیلواهمی نیاز دارن. برای اینکه وقتی برق قطع می‌شه تنظیمات ساعت به هم نریزه، یه باتری سکه‌ای 3 ولت رو به پایه‌های 3 و 4 این تراشه وصل کن.

در نهایت، برای ایجاد پالس‌های دقیق زمانی، یه کریستال 32 کیلوهرتز به پایه‌های 1 و 2 تراشه لحیم می‌شه و تغذیه 5 ولت هم به پین 8 داده می‌شه.

مرحله ۵

اتصال پیکسل‌های LED آدرس‌پذیر

برای روشن کردن مربع‌ها از پیکسل‌های ال‌ای‌دی مبتنی بر درایور WS2811 استفاده کردیم. خوبیش اینه که این چیپ‌های هوشمند اجازه می‌دن رنگ هر ال‌ای‌دی رو به صورت کاملا مستقل و فقط از طریق یک پین خروجی آردوینو کنترل کنی. پین دیتای این ال‌ای‌دی‌ها تو این پروژه به پین 8 آردوینو (که می‌شه پین 14 روی تراشه Atmega328P) وصل می‌شه.

مرحله ۶

برنامه‌ریزی میکروکنترلر Atmega328P

از اونجایی که داریم یه برد کاستوم بر پایه Atmega328P می‌سازیم، باید راهی برای پروگرام کردنش داشته باشیم. برای همین یه پورت FTDI روی مدار در نظر گرفتیم. پایه اول این پورت رو از طریق یه خازن 0.1 میکروفاراد به پین Reset میکروکنترلر وصل کن تا فرآیند بوت‌آپ و آپلود کدها به درستی همگام‌سازی بشه.

پایه دوم پورت (RX) باید به پایه سوم میکرو (TX آردوینو) و پایه سوم پورت (TX) باید به پایه دوم میکرو (RX آردوینو) وصل بشه.

در نهایت پین 4 مبدل به 5 ولت و پین‌های 5 و 6 به Ground (زمین) مدار متصل می‌شن.

مرحله ۷

ساخت قاب چوبی شبکه‌بندی‌شده

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

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

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

مرحله ۸

تبدیل ساعت به یک چراغ خواب رنگی

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

چون سورس کدهای این پروژه در دسترسه، به راحتی می‌تونی دستکاری‌شون کنی و افکت‌های نوری دلخواه خودت رو برای حالت چراغ خواب بنویسی!

مرحله ۹

نتیجه نهایی

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

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

مرحله ۱۰

نصب و شخصی‌سازی کدها

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

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

ZIP fibo-master.zip

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

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

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

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

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

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