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

ساعت رومیزی مینیمال با حلقه نئوپیکسل و برد ESP8266

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

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

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

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

  • چاپ سه‌بعدی قطعات بدنه ساعت
  • چهار عدد ماژول نئوپیکسل ربع دایره‌ای WS2812 (هر کدوم 15 ال‌ای‌دی)
  • برد توسعه ESP8266 مدل Wemos D1 mini
  • مقاومت 470 اهم
  • خازن الکترولیتی 1000 میکروفاراد
  • دو عدد پیچ سرتخت M3 سایز 12 میلی‌متری
  • دو عدد مهره M3
  • سیم افشان برای اتصالات
  • سیم مفتولی نازک برای ایجاد پل‌های لحیم‌کاری
  • چسب قطره‌ای قوی
  • سوکت مادگی آداپتور سایز 5.5 در 2.1 میلی‌متر
  • دو عدد پیچ خودکار M2 سایز 3 میلی‌متری
  • آداپتور تغذیه 5 ولت 3 آمپر
مرحله ۱

ایده طراحی و مصرف برق ساعت

بدنه این ساعت دقیقا بر اساس ابعاد حلقه نئوپیکسل طراحی شده. هدف این بود که یه ظاهر کاملا مینیمال و یکپارچه داشته باشیم تا فقط یه ساعت ساده نباشه، بلکه مثل یه اثر هنری روی میزت خودنمایی کنه. برای حفظ این سادگی، هیچ دکمه یا کلیدی روی بدنه نذاشتیم.

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

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

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

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

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

مرحله ۲

دریافت زمان دقیق از طریق اینترنت

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

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

وقتی این بسته به دست برد رسید، رمزگشایی می‌شه تا یه عدد بزرگ از توش استخراج بشه. این عدد، تعداد ثانیه‌های سپری شده از اول ژانویه سال 1900 میلادی رو نشون می‌ده. مثلا فرض کن دیتای دریافتی شامل یه سری اعداد مثل 28، 1، 13 و کلی عدد دیگه باشه که تو 48 بخش کنار هم چیده شدن.

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

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

مرحله ۳

رقص نور و منطق عقربه‌های نئوپیکسلی

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

اما عقربه ساعت‌شمار یه کم هوشمندانه‌تر عمل می‌کنه. دقیقا مثل ساعت‌های واقعی، این عقربه هم بسته به دقیقه، بین اعداد حرکت می‌کنه. مثلا وقتی ساعت یک و نیم باشه، چراغ قرمز دقیقا بین عدد یک و دو روشن می‌شه تا حس یه ساعت مکانیکی رو کامل بهت منتقل کنه. در مورد رقص نورها هم ایده‌های جالبی پیاده کردیم.

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

برای این افکت‌های نوری از توابع آماده و جذاب کتابخونه‌های استاندارد استفاده کردیم. تو هم می‌تونی با تغییر کدها، افکت‌های دلخواه خودت رو بسازی. من یه حالت تعقیب‌کننده نور سفید هم بهش اضافه کردم که مثل یه آلارم بصری ملایم عمل می‌کنه.

مرحله ۴

تنظیم خودکار تغییرات ساعت تابستانی

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

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

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

مرحله ۵

مونتاژ و لحیم‌کاری حلقه نئوپیکسل

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

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

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

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

حالا باید سه تا سیم رو با زاویه 90 درجه به ورودی حلقه لحیم کنی. سیم قرمز برای تغذیه 5 ولت، سیم مشکی برای زمین و سیم سبز برای ورود دیتا.

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

مرحله ۶

پرینت سه‌بعدی بدنه ساعت

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

مرحله ۷

مونتاژ قطعات و بستن قاب

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

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

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

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

مرحله ۸

آپلود کدهای پروژه روی برد

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

بخش‌هایی از کد که مربوط به تغییرات ساعت تابستانی هست رو می‌تونی بر اساس وضعیت کشور خودت شخصی‌سازی کنی یا اگه نیازی بهش نداری، اون تیکه‌ها رو پاک کنی تا کد سبک‌تر بشه.

مرحله ۹

تکمیل و نهایی‌سازی ساعت

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

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

مرحله ۱۰

جزئیات طراحی و تست راه‌اندازی

یه نکته جالب تو طراحی این ساعت هست. حلقه ال‌ای‌دی از نظر الکترونیکی یه نقطه شروع و پایان داره. اول قرار بود نقطه شروع رو بذاریم بالای ساعت، یعنی موقعیت عدد 12، تا برنامه‌نویسی راحت‌تر بشه. اما این کار باعث می‌شد که سیم‌کشی‌های ضخیم بره بالای قاب و ظاهر مینیمال ساعت رو به هم بریزه.

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

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

برای اینکه بدونی ساعت درست کار می‌کنه، یه سیستم تست اولیه مثل کامپیوترها براش برنامه‌ریزی شده. به محض اینکه ساعت رو به برق می‌زنی، اول یه حلقه قرمز روشن می‌شه تا نشون بده ال‌ای‌دی‌ها سالمن.

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

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

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

امیدوارم از ساخت این ساعت فضایی لذت برده باشی؛ وسایلت رو جمع‌وجور کن و منتظر آموزش‌های خفن بعدی باش!

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

STL Base.stl
STL neopixel support ring.stl
STL Base Cover.stl

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

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

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

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

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

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