جدول المحتويات:

ساعة حائط خفية: 27 خطوة (مع صور)
ساعة حائط خفية: 27 خطوة (مع صور)

فيديو: ساعة حائط خفية: 27 خطوة (مع صور)

فيديو: ساعة حائط خفية: 27 خطوة (مع صور)
فيديو: وجاءت سكرة الموت بالحق 2024, يوليو
Anonim
ساعة حائط خفية
ساعة حائط خفية

إن مرور الوقت أمر لا يمكننا التحكم فيه. يحدث بنفس المعدل إذا كنا نائمين أو مستيقظين أو نشعر بالملل أو منخرطين. مع الأحداث الجارية ، من المهم أن تتذكر أن الوقت سيمضي. بينما ننتظر مرور الوقت ، لماذا لا نصنع شيئًا يجعل مرور الوقت أكثر جاذبية للمشاهدة.

هذه الساعة مستوحاة من Mengenlehreuhr الموجودة في برلين بألمانيا ويمكن قراءتها بنفس الطريقة. تمامًا مثل الأصل ، يخبر الوقت عن طريق الحقول الملونة المضيئة.

يتميز بـ 96 مصباحًا تضيء مناطق 52 "رقمًا". على عكس النسخة الأصلية ، فهي تتميز بتصميم دائري يتضمن حلقة ثانية ، بدلاً من تخطيط شريط أفقي. يشير النطاق الخارجي إلى الثواني بالتزامن مع النقطة الوسطى ، ويشير النطاقان التاليان إلى الدقائق ، بينما تشير النطاقات الداخلية النهائية إلى الساعات.

إذا كان لديك بعض المواد الخردة ووقتًا إضافيًا على يديك ، فلماذا لا تستغل هذا الوقت لصنع شيء سيظهر ذلك!

هناك بعض التغييرات التي قد أجريها على هذا المشروع إذا كنت سأقوم به مرة أخرى. أولاً ، كنت أرسم الإطار ولوحة LED باللون الأبيض بدلاً من الأسود. سيعكس هذا مزيدًا من الضوء من خلال العدسة الكبيرة في المقدمة. أود أيضًا الانتظار حتى النهاية لإدخال مصابيح LED. كنت بحاجة إلى الانتهاء من اللوحة في وقت مبكر حتى يمكن أن تساعدني في كتابة الكود. مع هذا بعيدًا ، دعنا نتعلم أولاً كيفية قراءته!

صورة
صورة

الخطوة 1: كيف تقرأ الساعة

تتم قراءة الساعة من الدوائر الداخلية إلى الخارج. تشير الحلقة الداخلية لأربعة حقول إلى خمس ساعات كاملة لكل منها ، جنبًا إلى جنب مع الحلقة الثانية ، أيضًا من أربعة حقول ، والتي تشير إلى ساعة كاملة لكل منها ، وتعرض قيمة الساعة بتنسيق 24 ساعة. تتكون الحلقة الثالثة من أحد عشر حقلاً ، والتي تشير إلى خمس دقائق كاملة لكل منها ، وتحتوي الحلقة التالية على أربعة حقول أخرى ، والتي تحدد دقيقة كاملة لكل منها. أخيرًا ، تشير الحلقة الخارجية المكونة من 29 حقلاً إلى الثواني الزوجية مع وميض الضوء في المنتصف للإشارة إلى الثواني الفردية (عند الإضاءة) أو الزوجية (عند عدم الإضاءة).

صورة
صورة

على سبيل المثال ، تحتوي الصورة أعلاه على 1 من خانات الخمس ساعات ، و 3 أرقام من ساعة واحدة ، و 8 أرقام من خمس دقائق ، و 4 أرقام من الدقيقة الواحدة ، و 23 من الرقمين الثانيين والرقم الثاني الأوسط مضاء.

1x5 + 3x1: 8x5 + 4x1: 23x2 + 1x1 = 8:44:47 = 8:44:47 ص

صورة
صورة

الوقت الموضح أعلاه هو: 3x5 + 0x1: 3x5 + 2x1: 5x2 + 1x1 = 15:17:11 = 3:17:11 مساءً

صورة
صورة

الوقت الموضح أعلاه هو: 3x5 + 2x1: 3x5 + 3x1: 16x2 + 1x1 = 17:18:33 = 5:18:33 مساءً

الخطوة 2: الأدوات والمواد

الأدوات والمواد
الأدوات والمواد
الأدوات والمواد
الأدوات والمواد
الأدوات والمواد
الأدوات والمواد

مواد الإلكترونيات:

  • اردوينو نانو
  • ساعة الوقت الحقيقي
  • مصابيح LED قابلة للعنونة
  • قابس الطاقة
  • سلك الطاقة
  • قابس طاقة USB
  • مقاوم يعتمد على الضوء ومقاوم متوازن (إذا كنت تريده أن يخفت في الليل)
  • الأسلاك

مواد النجارة:

  • 3/4 بوصة. خشب رقائقي
  • رقيقة الخشب الرقائقي
  • خشب الخردة (لقد استخدمت 2x4s لكن الخشب الصلب سيعمل أيضًا)
  • رسم
  • أكريليك 30 × 36 بوصة. ورقة (موجودة في متجر محلي لتحسين المنزل)
  • تظليل النافذة (جرب المصدر محليًا. إذا لم يتوفر أي شيء ، يمكنك العثور على ورقة كبيرة بما يكفي هنا)
  • سائل تطبيق تظليل النوافذ (استخدمت الماء الممزوج بشامبو الأطفال في زجاجة رذاذ)
  • ويندكس
  • قطع الورق
  • مسامير
  • رذاذ لاصق
  • صمغ
  • غراء قوي

أدوات:

  • مسطرة
  • سكين Xacto
  • الشريط
  • شريط مزدوج
  • بوصلة
  • رقصة قطع الدائرة
  • بانوراما
  • المنشار الحزامي
  • المغزل ساندر
  • بالم ساندر
  • قرص ساندر
  • جدول الموجه
  • أول
  • لقم الثقب / السائقين
  • المشابك
  • لحام حديد
  • جندى
  • أدوات تقشير الأسلاك

الخطوة 3: تجميع القوالب

تجميع القوالب
تجميع القوالب
تجميع القوالب
تجميع القوالب

للقالب الكبير ، اطبعه باستخدام إعداد الملصق في Adobe Reader. قم بقص الهوامش لكل ورقة وشريط لاصق معًا. ستساعد الخطوط الرأسية والأفقية والقطرية في محاذاة القالب. تحتوي جميع الصفحات على أرقام صغيرة للمساعدة في إبقائها منظمة في حالة تعطلها.

تم العثور على جميع القوالب والملفات المطلوبة في الخطوة 26.

الخطوة 4: دوائر قطع خشنة

دوائر قطع خشنة
دوائر قطع خشنة
دوائر قطع خشنة
دوائر قطع خشنة

بعد وضع النموذجين على ورقة من 3/4 بوصة من الخشب الرقائقي ، ارسم دوائر أكبر قليلاً من المطلوب باستخدام البوصلة. باستخدام بانوراما ، قطع الشكل الخام.

الخطوة 5: قص حسب الحجم

قص للحجم
قص للحجم
قص للحجم
قص للحجم

باستخدام رقصة قطع دائرية على المنشار الحزامي ، قم بقص الدوائر إلى الحجم النهائي.

الخطوة 6: تطبيق النموذج

تطبيق القالب
تطبيق القالب
تطبيق القالب
تطبيق القالب
تطبيق القالب
تطبيق القالب

باستخدام لاصق الرش ، ضع كل قالب على دائرة. أدخل مسمارًا في وسط القالب لتوسيطه على الدائرة.

الخطوة 7: قص القالب

قطع القالب
قطع القالب
قطع القالب
قطع القالب
قطع القالب
قطع القالب

باستخدام بانوراما ، قم بقص كل نافذة فردية من القالب. إذا كان لديك وصول إلى CNC ، فستكون هذه الخطوة أسهل بكثير! لقد قمت بحفر حفرة في كل نافذة للمساعدة في هذه العملية. عندما تبدأ في القص ، قد يبدأ القالب في الظهور. إذا حدث هذا ، يمكنك تثبيته في مكانه بقطع صغيرة من الشريط اللاصق.

الخطوة 8: الصنفرة

الصنفرة
الصنفرة
الصنفرة
الصنفرة
الصنفرة
الصنفرة

باستخدام ورق الصنفرة المطبق على عصا ، وآلة صنفرة المغزل ، وآلة صنفرة النخيل ، والرمل ، وتنعيم القطع الخام الذي خلفه المنشار.

الخطوة 9: عقد المثقاب لمصابيح LED

المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED
المثقاب يحمل لمصابيح LED

ضع علامة على مركز كل ثقب بفتحات ثقب المخرز والحفر لمصابيح LED. لقد استخدمت دليلًا للمساعدة في إبقاء المثقاب عموديًا على قطعة العمل الخاصة بي ولوح خلفي لمنعه من نفخ الخشب على الظهر.

الخطوة 10: دمج الألواح

الجمع بين المجالس
الجمع بين المجالس
الجمع بين المجالس
الجمع بين المجالس
الجمع بين المجالس
الجمع بين المجالس

قم بتبديل الألواح الأمامية والخلفية وتتبع أجزاء من الإطار على الجزء الخلفي من لوحة LED. حرك الإطار مرة أخرى إلى مقدمة لوحة LED وحفر ثقوبًا وربط القطع معًا.

انظر ملاحظات الصورة لمزيد من المعلومات.

الخطوة 11: أدخل مصابيح LED

أدخل المصابيح
أدخل المصابيح
أدخل المصابيح
أدخل المصابيح

ادفع مصابيح LED من خلال الجزء الخلفي من لوحة LED. يجب أن تكون المسافات بين الثقوب كافية بحيث لا تحتاج إلى قطع أي أسلاك باستثناء الانتقال من دائرة إلى أخرى.

من الخلف ، تبدأ مصابيح LED في المركز ثم تعمل عكس اتجاه عقارب الساعة ثم حتى الحلقة التالية.

الخطوة 12: إرفاق الجزء 1

إرفاق الجزء 1
إرفاق الجزء 1
إرفاق الجزء 1
إرفاق الجزء 1
إرفاق الجزء 1
إرفاق الجزء 1

قص 9 أجزاء من قالب "الجزء 1" المرفق على 3/4 بوصة من الخشب الرقائقي (الموجود في الخطوة 26). نعلق على لوحة LED مع الغراء والمشابك. إذا كنت لا تتحلى بالصبر ، يمكنك أيضًا استخدام المسامير لتثبيتها في مكانها.

بمجرد أن تجف ، قم برمل الحافة باستخدام جهاز صنفرة القرص.

الخطوة 13: الطلاء

رسم
رسم
رسم
رسم
رسم
رسم
رسم
رسم

رش الطلاء على كل من لوحة LED والإطار. إذا كنت أقوم بهذا مرة أخرى ، كنت سأختار استخدام الطلاء الأبيض بدلاً من الأسود لأنه سيكون أكثر انعكاسًا من خلال العدسة.

الخطوة 14: الجزء 2

الجزء 2
الجزء 2
الجزء 2
الجزء 2
الجزء 2
الجزء 2

قم بقص 9 أجزاء من قالب "الجزء 2" المرفق من الخشب بسمك 2 3/8 بوصة (الموجود في الخطوة 26). لقد استخدمت بعض الخردة 2x4s من جميع أنحاء المتجر. قم بتجفيف الأجزاء وتأكد من ملاءمتها جيدًا لمشبك الشريط. إذا تم فحص كل شيء ، فقم بتغطية الجزء الخارجي بشريط رسامين لمنع الغراء من الالتصاق واتركه يجف لمدة ساعة على الأقل قبل الانتقال إلى الخطوة التالية.

الخطوة 15: الجزء 3

الجزء 3
الجزء 3
الجزء 3
الجزء 3
الجزء 3
الجزء 3

قم بقص 9 أجزاء من قالب "الجزء 3" المرفق من 3/8 بوصة من خشب الخردة السميك (الموجود في الخطوة 26). ألصقها بالغراء بحيث تكون اللحامات من الجزء 2 في منتصف كل جزء 3. وهذا سوف يقوي الحلقة.

الخطوة 16: حلقة ناعمة وطلاء

حلقة ناعمة وطلاء
حلقة ناعمة وطلاء
حلقة ناعمة وطلاء
حلقة ناعمة وطلاء

لقد صنعت كتلة صنفرة مخصصة من قطعة القطع في الحلقة الكبيرة. قم بصقل الجزء الداخلي والخارجي من الحلقة وملء أي تشققات قد تكون ظهرت أثناء عملية لصق الغراء.

بمجرد أن تصبح ناعمة ، ضع بضع طبقات من الطلاء الأسود وطبقة شفافة.

الخطوة 17: قص الأكريليك

قص اكريليك
قص اكريليك
قص اكريليك
قص اكريليك
قص اكريليك
قص اكريليك
قص اكريليك
قص اكريليك

قطع الأكريليك إلى مربع بقياس 30 × 30 بوصة ووضع علامة على المركز. نعلق الأكريليك بشريط لاصق مزدوج الجوانب. باستخدام ريشة التوجيه ، قم بإزالة الأكريليك الزائد

الخطوة 18: تطبيق Window Tint

تطبيق لون النافذة
تطبيق لون النافذة
تطبيق لون النافذة
تطبيق لون النافذة
تطبيق لون النافذة
تطبيق لون النافذة

في بيئة خالية من الغبار ، قم بإزالة الفيلم الواقي من الأكريليك. ضع الرذاذ وقم بإزالة الغطاء الخلفي من ظل النافذة. ضع الجانب اللاصق للنافذة لأسفل. باستخدام ممسحة أو بطاقة ائتمان ، قم بإخراج السائل بالكامل من تحت لون النافذة. بمجرد إزالة جميع الفقاعات والتجاعيد ، قم بقص تظليل النافذة الزائد باستخدام سكين حاد.

الخطوة 19: إرفاق معطل القصف

إرفاق معطل القنبلة
إرفاق معطل القنبلة
إرفاق معطل القنبلة
إرفاق معطل القنبلة

لقد استخدمت قطعة كبيرة من ورق الجزار لتكون بمثابة معطل القذائف. ضع الورقة على سطح مستو. قم بتغطية وجه الإطار بالغراء من عصا الغراء. قبل أن يجف الغراء ، ضع مقدمة الساعة ووجهها لأسفل على الورق وقم بقص الفائض. بمجرد أن يجف ، استخدم سكينًا حادًا لتقليم التدفق.

الخطوة 20: تطبيق العزل

تطبيق العزل
تطبيق العزل

لقد استخدمت شريطًا كهربائيًا لإبقاء خطوط الطاقة والبيانات منفصلة.

الخطوة 21: التجميع

جمعيه
جمعيه
جمعيه
جمعيه
جمعيه
جمعيه

قم بإزالة الطبقة الواقية الأخرى من الأكريليك. ضع الأكريليك داخل الحلبة مع جعل الجانب الملون للنافذة لأعلى. حرك باقي الساعة في الحلقة. استخدم مشبكًا لتطبيق ضغط خفيف أثناء حفر ثقب عبر الحلقة وفي لوحة LED. يجب أن يكون هذا حوالي 1 1/8 بوصة من الخلف. احرص على عدم الثقب في LED. برغي مسمار رأس الجمالون في الحفرة. كرر ما مجموعه ثمانية براغي حول محيط الساعة.

الخطوة 22: إرفاق نقاط التثبيت

إرفاق نقاط الربط
إرفاق نقاط الربط

يشير مثبت الغراء إلى الجزء الخلفي من الساعة حتى يعلق الغطاء الخلفي عليه. يبلغ سمكها 3/4 بوصة وطولها حوالي 2 بوصة.

الخطوة 23: حفر ثقوب الطاقة ومستشعر LDR

ثقوب طاقة الحفر ومستشعر LDR
ثقوب طاقة الحفر ومستشعر LDR

قم بحفر فتحة طاقة في الجزء السفلي من الساعة لقابس الطاقة وفتحة في الجزء العلوي لمستشعر المقاوم المعتمد على الضوء (LDR).

الخطوة 24: قم بتثبيت حامل الإلكترونيات

تثبيت حامل الإلكترونيات
تثبيت حامل الإلكترونيات
تثبيت حامل الإلكترونيات
تثبيت حامل الإلكترونيات

قم بتثبيت حامل الطباعة ثلاثية الأبعاد لـ RTC و Arduino Nano. قم بتوصيل جميع الأجهزة الإلكترونية كما هو موضح في التخطيطي.

الخطوة 25: الغطاء الخلفي

غطاء خلفي
غطاء خلفي
غطاء خلفي
غطاء خلفي
غطاء خلفي
غطاء خلفي
غطاء خلفي
غطاء خلفي

قطع الغطاء الخلفي من الخشب الرقائقي الرقيق أصغر بقليل من خارج الساعة. حفر ثقوب في نقاط التثبيت. ابحث عن مركز الظهر وقم بقياس 8 بوصات في أي اتجاه لقطع ثقوب المفاتيح (المعيار 16 في مراكز الأزرار في الولايات المتحدة). لقد قمت بحفر الفتحة الرئيسية أكبر بقليل من رأس المسامير اللولبية التي سأستخدمها ورفعت الفتحة بشكل أكبر في اتجاه واحد. قم بالطلاء باللون الأسود وقم بتثبيت الغطاء في مكانه.

الخطوة 26: التعليمات البرمجية والملفات

مرة أخرى ، أنا جديد إلى حد ما في استخدام العديد من مكتبات Arduino المستخدمة هنا ، لذلك أنا متأكد من أن هناك طرقًا أفضل لاستخدامها.

لقد كتبت الكود ليتم تحديثه بسهولة بناءً على عدد مصابيح LED التي تستخدمها إذا تم توسيع نطاق المشروع أو تصغيره. كل ما عليك فعله هو تحديث مواضع البداية والنهاية لمصباح LED بالإضافة إلى عدد مصابيح LED التي تشكل جزءًا من كل رقم.

لقد أضفت بعض الرسوم المتحركة التي يتم تشغيلها عند بدء التشغيل وكذلك على مدار الساعة. إنها sudo عشوائية استنادًا إلى مولد الأرقام العشوائي الموجود على متنها.

يمكنك ضبط الساعة للتنقل بين الألوان أو البقاء ثابتًا عند واحد. يمكنك أيضًا تمييز رقم المؤشر للمساعدة في قراءة الوقت كما هو موضح في المقدمة.

لا تتردد في تعديل وتغيير الرمز كما يحلو لك.

# تضمين "RTClib.h"

# تضمين # تعريف NUM_LEDS 96 # تعريف DATA_PIN 3 # تعريف LDR A0 RTC_DS1307 rtc ؛ منطقية timeChange = خطأ ؛ boolean printTime = خطأ ؛ // اضبط على صواب إذا كنت تريد رؤية الإخراج في وحدة التحكم. مفيد في التصحيح. redDown منطقي = صحيح ؛ منطقية greenDown = خطأ ؛ منطقية blueDown = خطأ ؛ دورة منطقية = خطأ ؛ // تعيين صحيح إذا كنت تريد أن تقوم ألوان الساعة بدورة تمييز منطقي = صحيح ؛ // تعيين صحيح لتمييز "آخر رقم". // مواقع بداية ونهاية كل مجموعة من الوقت الثابت SECOND_1_LOCATION = 0 ؛ const int HOUR_2_START_LOCATION = 1 ، const int HOUR_2_END_LOCATION = 8 ، const int HOUR_1_START_LOCATION = 9 ، const int HOUR_1_END_LOCATION = 20 ، const int MINUTE_2_START_LOCATION = 21 ، CONST int MINUTE_2_END_LOCATION = 42 ، const int MINUTE_1_START_LOCATION = 43 ، const int MINUTE_1_END_LOCATION = 66 ، const int SECOND_2_START_LOCATION = 67 ؛ const int SECOND_2_END_LOCATION = 95 ؛ const int LEDS_PER_HOUR_1 = 3 ، const int LEDS_PER_HOUR_2 = 2 ، const int LEDS_PER_MINUTE_1 = 6 ، const int LEDS_PER_MINUTE_2 = 2 ، // المضاعفات المستخدمة لتقسيم الوقت الثابت int MULTIPLIER_FIVE = 5 ؛ const int MULTIPLIER_TWO = 2 ، const int START_UP_DELAY = 1 ، // قم بتغيير هذا لتسريع أو إبطاء الرسوم المتحركة لبدء التشغيل const int CYCLE_SPEED = 1 ؛ // قم بتغيير المعدل هنا لدورة تغيير اللون (يجب أن تكون أعلى من 1) // Declare variables int lastSecond = 0 ؛ int currentHour = 0 ؛ int currentMinute = 0 ؛ int currentSecond = 0 ؛ ساعة int1 = 0 ؛ int hour2 = 0 ؛ دقيقة 1 = 0 ؛ دقيقة 2 = 0 ؛ int second1 = 0 ؛ int second2 = 0 ؛ int cycleCount = 1 ؛ تعويم fadeValue = 255 ؛ تعويم fadeCheck = 255 ؛ uint8_t مشرق = 255 ؛ عدد int numberOfAnimations = 5 ؛ العشوائية int = 0 ؛ // تعيين الألوان uint8_t red = 0 ؛ uint8_t أخضر = 0 ؛ uint8_t أزرق = 255 ؛ uint8_t High_red = 60 ؛ uint8_t High_green = 60 ؛ uint8_t High_blue = 255 ؛ // تحديد مجموعة المصابيح CRGB المصابيح [NUM_LEDS] ؛ إعداد باطل () {Serial.begin (19200) ؛ FastLED.addLeds (المصابيح ، NUM_LEDS) ، LEDS.setBrightness (مشرق) ؛ FastLED.clear () ، rtc.begin () ، // Uncomment سطر أدناه لضبط الوقت. // rtc.adjust (DateTime (2020، 2، 19، 23، 59، 50)) ؛ // rtc.adjust (DateTime (F (_ DATE_)، F (_ TIME_))) ؛ // تحريك الرسوم المتحركة لبدء التشغيل (العشوائية) ؛ } void loop () {// Get time DateTime now = rtc.now ()؛ CurrentHour = now.hour () ؛ CurrentMinute = now.minute () ؛ CurrentSecond = now.second () ؛ timeChange = خطأ ؛ // استخدم هذه لضبط الوقت يدويًا بدون RTC. مفيدة لتصحيح الأخطاء // currentHour = 5 ؛ // currentMinute = 30 ؛ // currentSecond = 30 ؛ // إعادة تعيين كل وحدات البت إلى صفر لـ (int i = SECOND_1_LOCATION ؛ i <= SECOND_2_END_LOCATION ؛ i ++) {المصابيح = CRGB:: Black ؛ } // Set Hour // Set hour 1 hour1 = (currentHour٪ MULTIPLIER_FIVE) * LEDS_PER_HOUR_1 ؛ // سيحسب هذا إجمالي مؤشرات LED للوحدة الزمنية التي ستضيء لـ (int i = HOUR_1_START_LOCATION ؛ i 0) // && hour1 <12) {for (int i = (HOUR_1_START_LOCATION + hour1 - 1)؛ i> = (HOUR_1_START_LOCATION + hour1 - LEDS_PER_HOUR_1) ؛ i--) {المصابيح = CRGB (light_red ، light_green ، light_blue) ؛ }} // ضبط الساعة 2 hour2 = (currentHour / MULTIPLIER_FIVE) * LEDS_PER_HOUR_2 ؛ // سيحسب هذا إجمالي مصابيح LED للوحدة الزمنية التي ستضيء لـ (int i = HOUR_2_START_LOCATION ؛ i 0) // && hour2 <8) {for (int i = (HOUR_2_START_LOCATION + hour2-1)؛ i> = (HOUR_2_START_LOCATION + hour2 - LEDS_PER_HOUR_2) ؛ i--) {المصابيح = CRGB (light_red ، light_green ، light_blue) ؛ }} // تعيين دقيقة // تعيين دقيقة 1 دقيقة 1 = (currentMinute٪ MULTIPLIER_FIVE) * LEDS_PER_MINUTE_1 ؛ // سيحسب هذا إجمالي مؤشرات LED للوحدة الزمنية التي ستضيء لـ (int i = MINUTE_1_START_LOCATION ؛ i 0) // && minutes1 <24) {لـ (int i = (MINUTE_1_START_LOCATION + minutes1-1) ؛ i> = (MINUTE_1_START_LOCATION + minutes1 - LEDS_PER_MINUTE_1) ؛ i--) {المصابيح = CRGB (high_red ، light_green ، light_blue) ؛ }} // Set minutes 2 minutes2 = (currentMinute / MULTIPLIER_FIVE) * LEDS_PER_MINUTE_2 ؛ // سيحسب هذا إجمالي مؤشرات LED للوحدة الزمنية التي ستضيء لـ (int i = MINUTE_2_START_LOCATION ؛ i 0) // && minutes2 <22) {لـ (int i = (MINUTE_2_START_LOCATION + minutes2-1) ؛ i> = (MINUTE_2_START_LOCATION + minutes2 - LEDS_PER_MINUTE_2) ؛ i--) {المصابيح = CRGB (light_red ، light_green ، light_blue) ؛ }} // Set Second if (currentSecond! = lastSecond) {timeChange = true؛ } // Set second 1 second1 = currentSecond٪ MULTIPLIER_TWO ؛ إذا (second1 == 1) {leds [SECOND_1_LOCATION] = CRGB (أحمر ، أخضر ، أزرق) ؛ } // تعيين الثانية 2 ثانية 2 = currentSecond / MULTIPLIER_TWO ؛ لـ (int i = SECOND_2_START_LOCATION؛ i 0) // && second2 <29) {for (int i = (SECOND_2_START_LOCATION + second2 - 1)؛ i> = (SECOND_2_START_LOCATION + second2 - 1)؛ i--) {المصابيح = CRGB (light_red، light_green، light_blue)؛ }} lastSecond = currentSecond ؛ // عد دورات البرنامج واستدعاء وظيفة setColor لتغيير لون مصابيح LED من أي وقت مضى دورات CYCLE_SPEED. إذا كان (cycleCount مشرق) // {// fadeValue = مشرق ؛ //} // else if (fadeValue <150) // {// fadeValue = 150 ؛ //} // LEDS.setBrightness (fadeValue) ؛ FastLED.show () ، // اطبع الوقت الحالي إلى وحدة التحكم إذا (timeChange == true && printTime == true) {printToConsole ()؛ }} // تضيف وظيفة الرسوم المتحركة المزيد من الرسوم المتحركة هنا كما ترغب في تحريك باطل (تحديد int) {if (select == 0) {for (int i = SECOND_1_LOCATION؛ i <= SECOND_2_END_LOCATION؛ i ++) {leds = CRGB (احمر اخضر ازرق)؛ FastLED.show () ، تأخير (START_UP_DELAY) ، } لـ (int i = SECOND_2_END_LOCATION؛ i> = SECOND_1_LOCATION؛ i--) {المصابيح = CRGB:: أسود ؛ FastLED.show () ، تأخير (START_UP_DELAY) ، }} else if (select == 1) {for (int i = 0؛ i <250؛ i ++) {int light = random (95)؛ المصابيح [الضوء] = CRGB (أحمر ، أخضر ، أزرق) ؛ FastLED.show () ، }} else if (select == 2) {leds [0] = CRGB (أحمر ، أخضر ، أزرق) ؛ لـ (int i = 0 ؛ i <= SECOND_2_END_LOCATION - SECOND_2_START_LOCATION ؛ i ++) {المصابيح [SECOND_2_START_LOCATION + i] = CRGB (أحمر ، أخضر ، أزرق) ؛ إذا (i <= (MINUTE_1_END_LOCATION - MINUTE_1_START_LOCATION)) {المصابيح [MINUTE_1_START_LOCATION + i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (MINUTE_2_END_LOCATION - MINUTE_2_START_LOCATION)) {المصابيح [MINUTE_2_START_LOCATION + i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (HOUR_1_END_LOCATION - HOUR_1_START_LOCATION)) {المصابيح [HOUR_1_START_LOCATION + i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (HOUR_2_END_LOCATION - HOUR_2_START_LOCATION)) {المصابيح [HOUR_2_START_LOCATION + i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } تأخير (34)؛ FastLED.show () ، }} else if (select == 3) {leds [0] = CRGB (أحمر ، أخضر ، أزرق) ؛ لـ (int i = 0 ؛ i <= SECOND_2_END_LOCATION - SECOND_2_START_LOCATION ؛ i ++) {المصابيح [SECOND_2_END_LOCATION - i] = CRGB (أحمر ، أخضر ، أزرق) ؛ إذا (i <= (MINUTE_1_END_LOCATION - MINUTE_1_START_LOCATION)) {المصابيح [MINUTE_1_END_LOCATION - i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (MINUTE_2_END_LOCATION - MINUTE_2_START_LOCATION)) {المصابيح [MINUTE_2_END_LOCATION - i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (HOUR_1_END_LOCATION - HOUR_1_START_LOCATION)) {المصابيح [HOUR_1_END_LOCATION - i] = CRGB (أحمر ، أخضر ، أزرق) ؛ } إذا (i <= (HOUR_2_END_LOCATION - HOUR_2_START_LOCATION)) {المصابيح [HOUR_2_END_LOCATION - i] = CRGB (أحمر ، أخضر ،أزرق)؛ } تأخير (34)؛ FastLED.show () ، }} else if (select == 4) {for (int i = SECOND_2_END_LOCATION؛ i> = SECOND_1_LOCATION؛ i--) {leds = CRGB:: Black؛ } FastLED.show () ، تأخير (200) ؛ لـ (int i = SECOND_1_LOCATION ؛ i <= SECOND_2_END_LOCATION ؛ i ++) {المصابيح = CRGB (أحمر ، أخضر ، أزرق) ؛ } FastLED.show () ، تأخير (200) ؛ لـ (int i = SECOND_2_END_LOCATION؛ i> = SECOND_1_LOCATION؛ i--) {المصابيح = CRGB:: أسود ؛ } FastLED.show () ، تأخير (200) ؛ لـ (int i = SECOND_1_LOCATION ؛ i <= SECOND_2_END_LOCATION ؛ i ++) {المصابيح = CRGB (أحمر ، أخضر ، أزرق) ؛ } FastLED.show () ، تأخير (200) ؛ لـ (int i = SECOND_2_END_LOCATION؛ i> = SECOND_1_LOCATION؛ i--) {المصابيح = CRGB:: أسود ؛ } FastLED.show () ، تأخير (200) ؛ }} // color cycling function void setColor (boolean cycleColors) {if (cycleColors == true) {if (redDown == true && greenDown == false) {red ++؛ لون أخضر--؛ إذا (أخضر <= 0) {أحمر = 255 ؛ redDown = خطأ ؛ greenDown = صحيح ؛ }} else if (greenDown == true && blueDown == false) {green ++؛ أزرق--؛ إذا (أزرق <= 0) {أخضر = 255 ؛ greenDown = خطأ ؛ blueDown = صحيح ؛ }} else if (blueDown == true && redDown == false) {blue ++؛ أحمر--؛ إذا (أحمر <= 0) {أزرق = 255 ؛ blueDown = خطأ ؛ redDown = صحيح ؛ }}} else {red = 0؛ أخضر = 0 ؛ أزرق = 255 ؛ }} // Print to Serial Monitor function void printToConsole () {Serial.print ("Current Time:")؛ Serial.print (CurrentHour) ؛ Serial.print (":") ؛ Serial.print (CurrentMinute) ؛ Serial.print (":") ؛ Serial.println (CurrentSecond) ؛ Serial.println ("") ؛ لـ (int i = HOUR_2_START_LOCATION ؛ i <= HOUR_2_END_LOCATION ؛ i ++) {Serial.print (المصابيح ) ؛ إذا (i٪ 2 == 0) {Serial.print ("") ؛ }} Serial.println ("") ؛ لـ (int i = HOUR_1_START_LOCATION ؛ i <= HOUR_1_END_LOCATION ؛ i ++) {Serial.print (المصابيح ) ؛ إذا (((i - HOUR_1_START_LOCATION + 1)٪ 3) == 0) {Serial.print ("") ؛ }} Serial.println ("") ؛ لـ (int i = MINUTE_2_START_LOCATION ؛ i <= MINUTE_2_END_LOCATION ؛ i ++) {Serial.print (المصابيح ) ؛ إذا (((i - MINUTE_2_START_LOCATION) + 1)٪ 2 == 0) {Serial.print ("") ؛ }} Serial.println ("") ؛ لـ (int i = MINUTE_1_START_LOCATION ؛ i <= MINUTE_1_END_LOCATION ؛ i ++) {Serial.print (المصابيح ) ؛ إذا (((i - MINUTE_1_START_LOCATION) + 1)٪ 6 == 0) {Serial.print ("") ؛ }} Serial.println ("") ؛ لـ (int i = SECOND_2_START_LOCATION ؛ i <= SECOND_2_END_LOCATION ؛ i ++) {Serial.print (المصابيح ) ؛ Serial.print ("") ؛ } Serial.println ("") ؛ Serial.println (المصابيح [SECOND_1_LOCATION]) ؛ Serial.println () ، لـ (int i = 0 ؛ i <NUM_LEDS ؛ i ++) {Serial.print (المصابيح ) ؛ } Serial.println () ، Serial.println () ، }

الخطوة 27: استمتع

صورة
صورة

في الختام ، هذه الساعة رائعة للمشاهدة وبمجرد أن تعتاد عليها ، من السهل نسبيًا قراءتها. إذا قمت بعمل مشروع الساعة الخاص بك ، أخبرني!

موصى به: