جدول المحتويات:
فيديو: تحسين مكعب مزاج LED من Arduino (بسيط) (يتضمن الفيديو): 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
بعد رؤية مشروع مكعب مزاج صغير LED تم إنشاؤه بواسطة إيرل ، قررت عمل نسخة محسنة من LED Mood Cube. سيكون الإصدار الخاص بي أكثر تعقيدًا من الإصدار الأصلي ، حيث سيكون أكبر قليلاً من الإصدار الأصلي ، ويحتوي على لونين إضافيين مقارنة بالمكعب الأصلي (مضافان الأصفر والأبيض) ، ويحتويان على قدر غير محدود من دوران الألوان ، وما إلى ذلك. يجب أن يكون مشروعًا جيدًا للتدرب على المزيد من استخدام مصابيح LED لأولئك الذين فهموا مفهوم توصيل مصابيح LED بالأسلاك.
الخطوة 1: المواد
فيما يلي بعض المواد التي ستحتاجها لصنع Mood Cube:
- اللوح
- اردوينو - (لدي ليوناردو هنا)
- مصدر طاقة اردوينو / كابل USB
- اللوح
- أسلاك العبور (الكثير منها ، استخدمت 29 سلكًا)
- الصمام الأحمر × 2
- LED أزرق × 2
- مصباح LED أخضر × 2
- الصمام الأصفر × 2
- LED أبيض × 1
- 9 مقاومات
- صندوق كبير بما يكفي ليلائم اللوح (استخدمت صندوق أحذية)
- سكين متعدد الاستخدام
- ورق
الخطوة 2: الكود
بعض الشرح للرمز الوارد هنا:
يعود الفضل في الرموز إلى المصدر الأصلي لمشروعي حيث أنشأ محرر المشروع هذه الرموز. لقد قمت فقط بتحسين بعضها من خلال جعلها أكثر تعقيدًا. في بعض الرموز ، قد ترى // 改 في النهاية. هذا يعني أن هذا الرمز تم تحريره بواسطتي ، لذا فهو يختلف عن مصدري الأصلي.
لدي أيضًا نسخة من الكود على Arduino Creator.
/ * رمز لـ 3 مصابيح LED ، أحمر وأخضر وأزرق (RGB) لإنشاء تلاشي ، تحتاج إلى القيام بأمرين: 1. وصف الألوان التي تريد عرضها 2. سرد الترتيب الذي تريده أن يتلاشى فيه
وصف اللون:
اللون عبارة عن مجموعة من ثلاث نسب ، 0-100 ، تتحكم في المصابيح الحمراء والخضراء والزرقاء
الأحمر هو مؤشر LED الأحمر بالكامل ، والأزرق والأخضر متوقف
الأحمر الخافت = {100 ، 0 ، 0} الأبيض الخافت هو جميع مصابيح LED الثلاثة عند 30٪ int dimWhite = {30 ، 30 ، 30} إلخ.
يتم توفير بعض الألوان الشائعة أدناه ، أو اصنعها بنفسك
سرد الطلب:
في الجزء الرئيسي من البرنامج ، تحتاج إلى سرد الترتيب الذي تريد ظهور الألوان به ، على سبيل المثال CrossFade (أحمر) ؛ CrossFade (أخضر) ؛ CrossFade (أزرق) ؛
ستظهر تلك الألوان بهذا الترتيب ، تتلاشى
لون واحد واللون الذي يليه
بالإضافة إلى ذلك ، هناك 5 إعدادات اختيارية يمكنك ضبطها:
1. يتم ضبط اللون الأولي على الأسود (بحيث يتلاشى اللون الأول) ، ولكن يمكنك ضبط اللون الأولي ليكون أي لون آخر 2. تعمل الحلقة الداخلية لـ 1020 interations ؛ يعيّن متغير "الانتظار" المدة التقريبية لتلاشي التلاشي الفردي. من الناحية النظرية ، يجب أن يؤدي "الانتظار" بمقدار 10 مللي ثانية إلى حدوث تلاشي متقاطع لمدة 10 ثوانٍ تقريبًا. من الناحية العملية ، فإن الوظائف الأخرى التي يؤديها الكود تؤدي إلى إبطاء هذا إلى حوالي 11 ثانية على لوحي. YMMV. 3. إذا تم ضبط "تكرار" على 0 ، فسيقوم البرنامج بالتكرار إلى أجل غير مسمى. إذا تم تعيينه على رقم ، فسيتم تكرار هذا العدد من المرات ، ثم يتوقف عند اللون الأخير في التسلسل. (اضبط "return" على 1 ، واجعل اللون الأخير أسودًا إذا كنت تريده أن يتلاشى في النهاية.) 4. يوجد متغير "Hold" اختياري ، والذي يمرر البرنامج لـ "Hold" مللي ثانية عندما يكون اللون اكتمل ، ولكن قبل أن يبدأ اللون التالي. 5. اضبط علامة DEBUG على 1 إذا كنت تريد إرسال إخراج التصحيح إلى الشاشة التسلسلية.
الأجزاء الداخلية للبرنامج ليست معقدة ، لكنها كذلك
صعب بعض الشيء - يتم شرح الإجراءات الداخلية أسفل الحلقة الرئيسية.
أبريل 2007 ، كلاي شيركي
*
/ انتاج
int ylwPin = 5 ؛ // مؤشر LED أصفر متصل بالدبوس الرقمي 5 // 改 int redPin = 6 ؛ // Red LED ، متصل بالدبوس الرقمي 6 // 改 int grnPin = 7 ؛ // Green LED ، متصل بالطرف الرقمي 7 // 改 int bluPin = 8 ؛ // Blue LED متصل بالطرف الرقمي 8 // 改 int whiPin = 9 ؛ // مصباح LED أبيض ، متصل بالدبوس الرقمي 9 // 改 int ylwPin2 = 10 ؛ // مؤشر LED أصفر متصل بالدبوس الرقمي 10 // 改 int redPin2 = 11 ؛ // Red LED ، متصل بالدبوس الرقمي 11 // 改 int grnPin2 = 12 ؛ // Green LED ، متصل بالطرف الرقمي 12 // 改 int bluPin2 = 13 ؛ // LED أزرق ، متصل بالرقم الرقمي 13 // 改
// مصفوفات اللون
int black [9] = {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ؛ // 改 int أبيض [9] = {100 ، 100 ، 100 ، 100 ، 100 ، 100 ، 100 ، 100، 100}؛ // 改 int red [9] = {0، 0، 100، 0، 0، 0، 100، 0، 0}؛ // 改 int green [9] = {0، 100، 0، 0 ، 0 ، 0 ، 0 ، 100 ، 0} ؛ // 改 int أزرق [9] = {0 ، 0 ، 0 ، 100 ، 0 ، 0 ، 0 ، 0 ، 100} ؛ // 改 int أصفر [9] = {100 ، 0 ، 0 ، 0 ، 0 ، 100 ، 0 ، 0 ، 0} ؛ // 改 int أرجواني [9] = {0 ، 50 ، 0 ، 50 ، 0 ، 0 ، 50 ، 0 ، 50} ؛ // 改 int orange [9] = {50، 50، 0، 0، 0، 50، 50، 0، 0} ؛ // 改 int pink [9] = {0، 50، 0، 0، 50، 0، 0، 50، 0،} ؛ // 改 // إلخ.
// تعيين اللون الأولي
int redVal = أسود [0] ؛ int grnVal = أسود [1] ؛ int bluVal = أسود [2] ؛ int ylwVal = أسود [3] ؛ // 改 int whiVal = أسود [4] ؛ // 改
انتظر int = 15 ؛ // 10 مللي ثانية تأخير التداخل الداخلي ؛ زيادة يتلاشى أبطأ // 改
عقد int = 1 ؛ // تعليق اختياري عند اكتمال اللون ، قبل التقاطع التالي // 改 int DEBUG = 1 ؛ // عداد DEBUG ؛ إذا تم ضبطه على 1 ، فسيتم إعادة كتابة القيم عبر serial int loopCount = 60 ؛ // كم مرة يجب أن تبلغ DEBUG؟ تكرار int = 0 ؛ // كم مرة يجب أن نكررها قبل التوقف؟ (0 بدون توقف) // 改 int j = 0 ؛ // حلقة العداد للتكرار
// تهيئة متغيرات اللون
int prevR = redVal ؛ int prevG = grnVal ؛ int prevB = bluVal ؛ int prevY = ylwVal ؛ int prevW = whiVal ؛ // 改
// إعداد نواتج LED
إعداد باطل () {pinMode (redPin ، الإخراج) ؛ // يعين المسامير كإخراج pinMode (grnPin ، الإخراج) ؛ pinMode (bluPin ، الإخراج) ؛ pinMode (ylwPin ، الإخراج) ؛ // 改 pinMode (whiPin ، الإخراج) ؛ // 改 pinMode (grnPin2 ، الإخراج) ؛ // 改 pinMode (bluPin2 ، الإخراج) ؛ // 改 pinMode (ylwPin2 ، الإخراج) ؛ // 改 pinMode (redPin2 ، الإخراج) ؛ // 改
إذا (DEBUG) {// إذا أردنا رؤية قيم لتصحيح الأخطاء …
Serial.begin (9600) ؛ // … إعداد الإخراج التسلسلي}}
// البرنامج الرئيسي: قائمة بترتيب التلاشي المتقاطع
حلقة باطلة () {crossFade (أحمر) ؛ CrossFade (أخضر) ؛ CrossFade (أزرق) ؛ CrossFade (أصفر) ؛ 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 color ) {// 改
// تحويل إلى 0-255 int R = (color [0] * 255) / 100 ؛ int G = (color [1] * 255) / 100 ؛ int B = (color [2] * 255) / 100 ؛ int Y = (color [3] * 255) / 100 ؛ // 改 int W = (color [4] * 255) / 100 ؛ // 改
int stepR = calculateStep (prevR، R) ؛
int stepG = calculateStep (prevG، G) ؛ int stepB = calculateStep (prevB، B) ؛ int stepY = calculateStep (prevY، Y)؛ // 改 int stepW = calculateStep (prevW، W)؛ // 改
لـ (int i = 0 ؛ i <= 1020 ؛ i ++) {redVal = calculateVal (stepR، redVal، i) ؛ grnVal = calculateVal (stepG، grnVal، i) ؛ bluVal = calculateVal (stepB، bluVal، i) ؛ ylwVal = calculateVal (stepY، ylwVal، i) ؛ // 改 whiVal = calculateVal (stepW، whiVal، i) ؛ // 改
analogWrite (redPin ، redVal) ؛ // اكتب القيم الحالية إلى دبابيس LED
analogWrite (grnPin ، grnVal) ؛ analogWrite (bluPin ، bluVal) ؛ analogWrite (ylwPin ، ylwVal) ؛ // 改 analogWrite (whiPin ، whiVal) ؛ // 改 analogWrite (grnPin2 ، grnVal) ؛ // 改 analogWrite (bluPin2 ، bluVal) ؛ // 改 analogWrite (ylwPin2 ، ylwVal) ؛ // 改 analogWrite (redPin2 ، redVal) ؛ // 改
تأخير (انتظر) ؛ // توقف لمدة مللي ثانية "انتظر" قبل استئناف الحلقة
إذا (DEBUG) {// إذا أردنا إخراج تسلسلي ، فقم بطباعته على
إذا (i == 0 أو i٪ loopCount == 0) {// بداية ، وكل حلقة تكرار مرات Serial.print ("Loop / RGBYW: #") ؛ Serial.print (i) ؛ Serial.print ("|") ؛ Serial.print (redVal) ؛ Serial.print ("/") ؛ Serial.print (grnVal) ؛ Serial.print ("/") ؛ Serial.println (bluVal) ؛ Serial.print ("/") ؛ Serial.println (ylwVal) ؛ // 改 Serial.print ("/") ؛ // 改 Serial.println (whiVal) ؛ // 改 Serial.print ("/") ؛ // 改} تصحيح + = 1 ؛ }} // تحديث القيم الحالية للحلقة التالية prevR = redVal ؛ prevG = grnVal ؛ prevB = bluVal ؛ prevY = ylwVal ؛ // 改 prevW = whiVal ؛ // 改 تأخير (تعليق) ؛ // إيقاف مؤقت لملي ثانية "انتظار" اختياري قبل استئناف الحلقة}
الخطوة 3: الإعداد
- احصل على اللوح.
-
عرض توضيحي لتوصيل الأسلاك حتى يتألق ضوء LED:
- ضع المصباح على اللوح. ضع الطرف الأطول على اليسار والنهاية الأقصر على اليمين.
- ضع أحد طرفي سلك العبور في مكان موجود في نفس الصف مع الطرف الأطول لمصباح LED. ضع الطرف الآخر على قسم Digital PWM. حدد الكود أن المصابيح الصفراء متصلة بـ 10 و 5 ، والأحمر بـ 6 و 11 ، والأزرق بـ 8 و 13 ، والأخضر إلى 7 و 12 ، وأخيراً LED الأبيض بـ 9.
- ضع أحد طرفي المقاوم في نفس الصف مع الطرف الأقصر لمصباح LED. ضع الطرف الآخر في مكان قريب.
- ضع طرفًا لسلك توصيل آخر بنفس الصف مع نهاية المقاوم الذي لا يوجد في نفس الصف مع الطرف الأقصر لمصباح LED. ضع الطرف الآخر من السلك على صف الشحنة السالبة.
- ضع طرفًا لسلك توصيل آخر على صف الشحنة السالبة وضع الطرف الآخر على GND.
- كرر الخطوة 2 لمدة 8 مرات كما تريد 9 مصابيح LED للتألق
-
ضع اللوح داخل الصندوق. بعض التذكيرات هنا:
- لقد استخدمت مصدر طاقة. قم بإنشاء ثقب صغير للأسلاك الخاصة بك باستخدام سكين فائدة لتمرير الصندوق والاتصال بلوح التجارب.
- تأكد من أن الصندوق مفتوح كجانب واحد. يحتوي صندوق الأحذية بالفعل على جانب واحد مفتوح. إذا كان الصندوق مغلقًا تمامًا ، فقم بقص جانب واحد من الصندوق لتوفير مساحة مفتوحة.
- قم بتغطية الجانب بالورق. هذا هو لأضواء LED لتسطع من خلال الورق.
موصى به:
مكعب Lightbox LED بسيط: 7 خطوات (بالصور)
مكعب Lightbox LED بسيط: مرحبًا بالجميع ، أود هذه المرة أن أشارككم نموذجًا لمكعب Lightbox بسيط يمكن استخدامه مع فتح (لتصوير جزء من الكائن الكبير) وجوانب مغلقة للأجزاء الصغيرة. يحتوي هذا المكعب على بنية معيارية ، ويمكن بسهولة د
مكعب اردوينو RGB LED بسيط (3x3x3): 18 خطوة (مع صور)
مكعب Arduino RGB LED بسيط (3x3x3): لقد كنت أبحث في مكعبات LED ولاحظت أن معظمها إما معقدة أو باهظة الثمن. بعد النظر إلى الكثير من المكعبات المختلفة ، قررت أخيرًا أن يكون مكعب LED الخاص بي: سهل وبسيط لبناء
مكعب LED بسيط 2 × 2 × 2: 4 خطوات (مع صور)
مكعب LED بسيط 2X2X2: تم تطوير مكعب LED هذا باستخدام 8 مصابيح LED خضراء ومتحكم Arduino Uno بينما كان يحتاج فقط إلى مقاومين لإدارة الطائرتين المكونتين من 4 مصابيح LED لكل منهما. بعد زيارة http: //pastebin.com ، يمكنك تحميل الكود على: http://pastebin.com/8qk
مكعب RGB LED بسيط 2X2X2: 5 خطوات (مع صور)
مكعب RGB LED بسيط 2X2X2: هذا المشروع عبارة عن مكعب RGB LED لأنه يتيح لك مضاعفة كمية الألوان التي تحصل عليها من المكعب باستخدام 14 إخراجًا من Arduino uno بحيث يمكنك استخدام 12 مخرجًا للتحكم في المصابيح ومخرجين من أجل التحكم في طائرات المكعب من خلال 2
مكعب إنفينيتي بسيط: 7 خطوات (بالصور)
مكعب إنفينيتي البسيط: أعلم أن هناك الكثير من الأدوات اللانهائية هناك - لذا ها هو آخر !. لقد وجدت أنه من السهل صنعه وعادة ما يحصل على & quot؛ نجاح باهر! & quot؛ أفترض أن أي شخص يكتب أطروحات لديه مهارات أساسية (مهاراتي أساسية جدًا!) في الشكل الأساسي للإنفيني