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

شجرة لولبية LED: 4 خطوات (بالصور)
شجرة لولبية LED: 4 خطوات (بالصور)

فيديو: شجرة لولبية LED: 4 خطوات (بالصور)

فيديو: شجرة لولبية LED: 4 خطوات (بالصور)
فيديو: عمل شجرة (tree) اخر جزء للشجرة اللولي الجزء(4) خطوه خطوة معايه = fatma Saber 2024, يوليو
Anonim
شجرة لولبية LED
شجرة لولبية LED
شجرة لولبية LED
شجرة لولبية LED
شجرة لولبية LED
شجرة لولبية LED

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

الخطوة 1: تحكم

مراقب
مراقب
مراقب
مراقب
مراقب
مراقب

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

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

انتهى بي الأمر باستخدام عرض تلاشي بطيء كقاعدة للشجرة.

/ ** رمز التلاشي المتقاطع 3 مصابيح LED ، أحمر وأخضر وأزرق (RGB) * لإنشاء تلاشي ، تحتاج إلى القيام بأمرين: * 1. وصف الألوان التي تريد عرضها * 2. ضع قائمة بالترتيب الذي تريده تتلاشى * * وصف اللون: * اللون هو مجرد مجموعة من ثلاث نسب ، 0-100 ، * التحكم في المصابيح الحمراء والخضراء والزرقاء * * الأحمر هو مؤشر LED الأحمر بالكامل ، والأزرق والأخضر متوقف عن التشغيل * أحمر = {100 ، 0 ، 0} * أبيض خافت هو كل المصابيح الثلاثة بنسبة 30٪ * int dimWhite = {30 ، 30 ، 30} * إلخ. * * بعض الألوان الشائعة متوفرة أدناه ، أو اخترها بنفسك * * قائمة ORDER: * في الجزء الرئيسي من البرنامج ، تحتاج إلى سرد الترتيب * الذي تريد ظهور الألوان فيه ، على سبيل المثال * CrossFade (أحمر) ؛ * CrossFade (أخضر) ؛ * CrossFade (أزرق) ؛ * * ستظهر هذه الألوان بهذا الترتيب ، حيث تتلاشى من * لون واحد وتنتقل إلى اللون التالي * * بالإضافة إلى ذلك ، هناك 5 إعدادات اختيارية يمكنك ضبطها: * 1. يتم ضبط اللون الأولي على الأسود (بحيث يتلاشى اللون الأول in) ، ولكن * يمكنك ضبط اللون الأولي ليكون أي لون آخر * 2. تعمل الحلقة الداخلية لـ 1020 interations ؛ يعيّن متغير "الانتظار" * المدة التقريبية لتلاشي التلاشي الفردي. من الناحية النظرية ، * يجب أن يؤدي "الانتظار" بمقدار 10 مللي ثانية إلى حدوث تلاشي متقاطع بمقدار 10 ثوانٍ تقريبًا. في الممارسة * ، فإن الوظائف الأخرى التي يؤديها الكود بطيء * حتى 11 ثانية تقريبًا على لوحي. YMMV. * 3. إذا تم ضبط "تكرار" على 0 ، فسيقوم البرنامج بالتكرار إلى أجل غير مسمى. * إذا تم ضبطه على رقم ، فسيتم تكرار هذا العدد من المرات ، * ثم يتوقف عند اللون الأخير في التسلسل. (اضبط "return" على 1 ، * واجعل اللون الأخير باللون الأسود إذا كنت تريده أن يتلاشى في النهاية.) * 4. يوجد متغير "Hold" اختياري ، والذي يمرر البرنامج * لـ "Hold" مللي ثانية عندما اكتمال اللون ، * ولكن قبل أن يبدأ اللون التالي. * 5. اضبط علامة DEBUG على 1 إذا كنت تريد إرسال إخراج التصحيح إلى الشاشة التسلسلية. * * الأجزاء الداخلية للبرنامج ليست معقدة ، لكنها * صعبة بعض الشيء - يتم شرح الإجراءات الداخلية * أسفل الحلقة الرئيسية. * * أبريل 2007 ، كلاي شيركي *

/ انتاج

int grnPin = 9 ؛ // أخضر LED ، متصل بالدبوس الرقمي 10 int redPin = 10 ؛ // Red LED ، متصل بالدبوس الرقمي 9 int bluPin = 11 ؛ // LED أزرق ، متصل بالدبوس الرقمي 11

// مصفوفات اللون

int black [3] = {0، 0، 0} ؛ int white [3] = {100، 100، 100} ؛ int red [3] = {100، 0، 0} ؛ int green [3] = {0، 100، 0} ؛ int blue [3] = {0، 0، 100} ؛ int yellow [3] = {40، 95، 0} ؛ int dimWhite [3] = {30، 30، 30} ؛ // إلخ.

// تعيين اللون الأولي

int redVal = أسود [0] ؛ int grnVal = أسود [1] ؛ int bluVal = أسود [2] ؛

انتظر int = 3 ؛ // 10 مللي ثانية تأخير التداخل الداخلي ؛ زيادة يتلاشى بشكل أبطأ

عقد int = 0 ؛ // تعليق اختياري عند اكتمال اللون ، قبل التقاطع التالي int DEBUG = 0 ؛ // عداد DEBUG ؛ إذا تم ضبطه على 1 ، فسيتم إعادة كتابة القيم عبر serial int loopCount = 60 ؛ // كم مرة يجب أن تبلغ DEBUG؟ تكرار int = 0 ؛ // كم مرة يجب أن نكررها قبل التوقف؟ (0 بدون توقف) int j = 0 ؛ // حلقة العداد للتكرار

// تهيئة متغيرات اللون

int prevR = redVal ؛ int prevG = grnVal ؛ int prevB = bluVal ؛

// إعداد نواتج LED

إعداد باطل () {pinMode (redPin ، الإخراج) ؛ // يعين المسامير كإخراج pinMode (grnPin ، الإخراج) ؛ pinMode (bluPin ، الإخراج) ؛

إذا (DEBUG) {// إذا أردنا رؤية قيم لتصحيح الأخطاء …

Serial.begin (9600) ؛ // … إعداد الإخراج التسلسلي}}

// البرنامج الرئيسي: قائمة بترتيب التلاشي المتقاطع

حلقة باطلة () {crossFade (أحمر) ؛ CrossFade (أخضر) ؛ CrossFade (أزرق) ؛ CrossFade (أصفر) ؛

إذا (كرر) {// هل نكرر عددًا محدودًا من المرات؟

ي + = 1 ؛ إذا (j> = كرر) {// هل وصلنا بعد؟ خروج (ي) ؛ // إذا كان الأمر كذلك ، توقف. }}}

/ * يوجد أسفل هذا السطر الرياضيات - يجب ألا تحتاج إلى تغيير هذا من أجل الأساسيات

* * يعمل البرنامج على النحو التالي: * تخيل تلاشيًا متقاطعًا يحرك مؤشر LED الأحمر من 0-10 ، * الأخضر من 0-5 ، والأزرق من 10 إلى 7 ، في * عشر خطوات. * نرغب في حساب 10 خطوات وزيادة أو * تقليل قيم الألوان بزيادات تدريجية متساوية. * تخيل أن a + يشير إلى رفع قيمة بمقدار 1 ، و a - * يساوي خفضها. سيبدو التلاشي المكون من 10 خطوات كما يلي: * * 1 2 3 4 5 6 7 8 9 10 * R + + + + + + + + + * G + + + + * B - - - * * يرتفع اللون الأحمر من من 0 إلى 10 في عشر خطوات ، والأخضر من * 0-5 في 5 خطوات ، والأزرق يسقط من 10 إلى 7 في ثلاث خطوات. * * في البرنامج الحقيقي ، يتم تحويل نسب الألوان إلى قيم * 0-255 ، وهناك 1020 خطوة (255 * 4). * * لمعرفة حجم الخطوة التي يجب أن تكون بين علامة واحدة لأعلى أو * لأسفل لإحدى قيم LED ، نسمي calculateStep () ، * الذي يحسب الفجوة المطلقة بين قيم البداية والنهاية ، * ثم يقسم هذه الفجوة على 1020 لتحديد حجم الخطوة * بين عمليات الضبط في القيمة. * /

int calculateStep (int prevValue، int endValue) {

خطوة int = endValue - prevValue ؛ // ما هي الفجوة الإجمالية؟ إذا (الخطوة) {// إذا كانت غير صفرية ، الخطوة = 1020 / الخطوة ؛ // قسمة على 1020} خطوة إرجاع ؛ }

/ * الوظيفة التالية هي calculateVal. عندما تكون قيمة الحلقة ، i ،

* يصل إلى حجم الخطوة المناسب لأحد الألوان * ، فهو يزيد أو ينقص قيمة ذلك اللون بمقدار 1. * (يتم حساب كل من R و G و B على حدة.) * /

int calculateVal (int step، int val، int i) {

إذا ((الخطوة) && i٪ step == 0) {// إذا كانت الخطوة غير صفرية ووقتها لتغيير القيمة ،

إذا (الخطوة> 0) {// قم بزيادة القيمة إذا كانت الخطوة موجبة … val + = 1؛ } else if (الخطوة 255) {val = 255 ؛ } else if (val <0) {val = 0 ؛ } إرجاع val؛ }

/ * crossFade () يحول النسبة المئوية للألوان إلى أ

* 0-255 النطاق ، ثم حلقات 1020 مرة ، والتحقق لمعرفة ما إذا كانت * القيمة بحاجة إلى التحديث في كل مرة ، ثم كتابة * قيم اللون على الدبابيس الصحيحة. * /

تلاشي باطل (لون int [3]) {

// تحويل إلى 0-255 int R = (color [0] * 255) / 100 ؛ int G = (color [1] * 255) / 100 ؛ int B = (color [2] * 255) / 100 ؛

int stepR = calculateStep (prevR، R) ؛

int stepG = calculateStep (prevG، G) ؛ int stepB = calculateStep (prevB، B) ؛

لـ (int i = 0 ؛ i <= 1020 ؛ i ++) {redVal = calculateVal (stepR، redVal، i) ؛ grnVal = calculateVal (stepG، grnVal، i) ؛ bluVal = calculateVal (stepB، bluVal، i) ؛

analogWrite (redPin ، redVal) ؛ // اكتب القيم الحالية إلى دبابيس LED

analogWrite (grnPin ، grnVal) ؛ analogWrite (bluPin ، bluVal) ؛

تأخير (انتظر) ؛ // توقف لمدة مللي ثانية "انتظر" قبل استئناف الحلقة

إذا (DEBUG) {// إذا أردنا إخراج تسلسلي ، فقم بطباعته على

إذا (i == 0 أو i٪ loopCount == 0) {// بداية ، وكل حلقة عدد مرات Serial.print ("Loop / RGB: #") ؛ Serial.print (i) ؛ Serial.print ("|") ؛ Serial.print (redVal) ؛ Serial.print ("/") ؛ Serial.print (grnVal) ؛ Serial.print ("/") ؛ Serial.println (bluVal) ؛ } تصحيح + = 1 ، }} // تحديث القيم الحالية للحلقة التالية prevR = redVal ؛ prevG = grnVal ؛ prevB = bluVal ؛ تأخير (تعليق) ؛ // إيقاف مؤقت لملي ثانية "انتظار" اختياري قبل استئناف الحلقة}

الخطوة الثانية: لف الشجرة

التفاف الشجرة
التفاف الشجرة
التفاف الشجرة
التفاف الشجرة
التفاف الشجرة
التفاف الشجرة
التفاف الشجرة
التفاف الشجرة

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

الخطوة 3: لا تنسى النجم في المقدمة

لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة
لا تنسى النجم على القمة

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

الخطوة 4: جربها

Image
Image

المحاولة الأولى كانت السرعة كبيرة جدًا….

بمجرد أن هدأت ، بدا الأمر جيدًا.

موصى به: