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

القيثارة الإلكترونية الذكية مع اردوينو DIY: 14 خطوة (بالصور)
القيثارة الإلكترونية الذكية مع اردوينو DIY: 14 خطوة (بالصور)

فيديو: القيثارة الإلكترونية الذكية مع اردوينو DIY: 14 خطوة (بالصور)

فيديو: القيثارة الإلكترونية الذكية مع اردوينو DIY: 14 خطوة (بالصور)
فيديو: اختراع 2023😱😱 2024, شهر نوفمبر
Anonim
القيثارة الإلكترونية الذكية DIY مع اردوينو
القيثارة الإلكترونية الذكية DIY مع اردوينو

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

للقيام بذلك ، من الضروري شراء مجموعة القيثارة.

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

الخطوة 1: المواد

المواد
المواد
المواد
المواد

مواد الهيكل:

طقم تركيب ukelele DIY (يمكن أن يكون مجموعة مختلفة أخرى) يتكون من:

1- الجسم.

2 عنق.

3-السرج

4-دعم الحبل

5-جسر

6-أوتار الجوز.

7-حلقة تثبيت لرأس الماكينة (x4).

8 رؤوس ماكينات (x4).

9- براغي تثبيت لرؤوس الماكينات (x8).

10-براغي تثبيت لجسر الآلة (x2).

11-أغطية غطاء لمسامير تثبيت الجسر (× 2).

12 خيوط (x4).

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

  • نانو اردوينو.
  • عجلة المصابيح WS2812.
  • مقياس التسارع BMA220 (اختياري).
  • موصل البطارية.
  • بطارية 9 فولت.
  • يحول.

آحرون

  • ورنيش الخشب.
  • الفيلكرو.
  • لحام القصدير.
  • البلاستيك الواقي للورنيش.
  • سيليكون تذوب الساخنة.

أدوات:

  • النقش بالليزر.
  • ورق زجاج
  • مفك البراغي ستار.
  • فرشاة الرسم.
  • بندقية تذوب الساخنة.
  • لحام الحديد القصدير.

الخطوة الثانية: تخصيص القيثارة

تخصيص القيثارة
تخصيص القيثارة
تخصيص القيثارة
تخصيص القيثارة
تخصيص القيثارة
تخصيص القيثارة

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

الصورة التي اخترناها هي الصورة الأولى التي تظهر.

بادئ ذي بدء ، يتعين علينا تصميم قالب الرسم لعمل النقش.

لتنفيذ ذلك ، سنستخدم برنامجًا يسمى "Inkscape" والذي يمكننا الحصول عليه من هذا الرابط:

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

الخطوة 3: تحويل الصورة باستخدام Inkscape

تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب
تحويل صورة باستخدام إنكسكيب

سنرى كيفية إنشاء ملف متجه من خريطة pixmap-j.webp

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

  1. افتح الصورة في إنكسكيب
  2. افتح مسار أداة التتبع النقطي-> تتبع الصورة النقطية
  3. العب حول خيارات Trace Bitmap
  4. قم بتشغيل التتبع
  5. تنظيف النتائج (إذا لزم الأمر)

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

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

Image
Image
نقش الشعار
نقش الشعار
نقش الشعار
نقش الشعار

لهذا ، من المهم أن يكون لديك صورة ظلية للسطح الذي سيتم إنتاج نقش الرسم عليه.

لعمل النقش ، سنستخدم برنامج "T2Laser". يمكننا الحصول على هذا البرنامج من: https://descargar.cnet.com/windows/t2-laser/3260-2 …

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

الخطوة 5: الصنفرة والورنيش

الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش
الصنفرة والورنيش

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

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

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

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

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

الخطوة 6: الأجهزة

المعدات
المعدات
المعدات
المعدات
المعدات
المعدات

سيتم إدخال اللوحة الخاصة بنا مع Arduino ، ومقياس التسارع والعجلة المزودة بمصابيح LED في شريحة صغيرة لتجنب تحرك جميع المكونات في الجهاز.

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

الخطوة 7: البرمجيات

برمجة
برمجة
برمجة
برمجة
برمجة
برمجة

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

في الواقع ، سيكون لدينا 4 مسرحيات ضوئية ، مدرجة في مكتبة الكمبيوتر المسماة Adafruit في Arduino. لذلك ، يجب أن نجعل اقترانًا صحيحًا بين المكونات الثلاثة: Arduino NANO و WS2812 و BMA220 ، كما يظهر في الصورة الأولى.

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

// المتغيرات contador e interrupciónint counter؛ // المتغيرات Ejemplo gravedad #include #include #include #define NUMBER_OF_LEDS_ON_RING 16 #define NEOPIXEL_RING_DATA_PIN 9

إصدار البايت [3]؛

int8_t x_data ؛ int8_t y_data ؛ int8_t z_data ؛ نطاق البايت = 0x00 ؛ تعويم divi = 16 ؛ تعويم x ، y ، z ؛ تعويم pi = 3.14159265359 ؛ تعويم nx ، ny ، زاوية ؛ أدى int ، previousLed ؛ QueueList ledQueue؛ Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING ، NEOPIXEL_RING_DATA_PIN ، NEO_GRB + NEO_KHZ800) ؛

// المتغيرات Luces arcoiris

: // NEO_KHZ800 800 KHz bitstream (معظم منتجات NeoPixel w / WS2812 LEDs) // NEO_KHZ400 400 كيلو هرتز (كلاسيكي 'v1' (ليس v2) FLORA بكسل ، برامج تشغيل WS2811) // NEO_GRB Pixels موصلة بأسلاك لـ GRB bitstream (معظم منتجات NeoPixel) / / NEO_RGB Pixels سلكية لـ RGB bitstream (v1 FLORA pixels ، وليس v2) // NEO_RGBW Pixels سلكية لـ RGBW bitstream (منتجات NeoPixel RGBW) Adafruit_NeoPixel strip = Adafruit_NeoPixel (16، PIN، NEO_GRB + NEO_KHZ800) ؛ // هام: لتقليل مخاطر احتراق NeoPixel ، أضف مكثف 1000 uF عبر // خيوط طاقة البكسل ، أضف 300-500 أوم المقاوم على إدخال بيانات البكسل الأول // وتقليل المسافة بين Arduino والبكسل الأول. تجنب الاتصال // على دائرة مباشرة … إذا كان عليك ذلك ، فقم بتوصيل GND أولاً.

// المتغيرات Rueda de colores

// NeoPixel Ring رسم بسيط (c) 2013 Shae Erisson // صدر بموجب ترخيص GPLv3 لمطابقة بقية مكتبة AdaFruit NeoPixel

#يشمل

#ifdef _AVR_ # تضمين #endif

// أي دبوس على Arduino متصل بـ NeoPixels؟

// على Trinket أو Gemma نقترح تغيير هذا إلى 1 #define PIN 9

// كم عدد NeoPixels المتصلة بـ Arduino؟

#define NUMPIXELS 16

// عندما نقوم بإعداد مكتبة NeoPixel ، نخبرها بعدد البكسل والدبوس الذي يجب استخدامه لإرسال الإشارات.

// لاحظ أنه بالنسبة لشرائط NeoPixel الأقدم ، قد تحتاج إلى تغيير المعلمة الثالثة - راجع مثال strandtest // لمزيد من المعلومات حول القيم الممكنة. Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS، PIN، NEO_GRB + NEO_KHZ800) ؛ int delayval = 50 ؛ // تأخير لمدة 50 مللي ثانية

// المتغيرات الملونة aleatorios

# تضمين #ifdef _AVR_ # تضمين #endif

# تعريف رقم التعريف الشخصي 9

# تعريف NUM_LEDS 16

# تعريف السطوع 200

// Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS، PIN، NEO_GRBW + NEO_KHZ800) ؛

بايت neopix_gamma = {

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 92, 93, 95, 96, 98, 99, 101, 102, 104, 105, 107, 109, 110, 112, 114, 115, 117, 119, 120, 122, 124, 126, 127, 129, 131, 133, 135, 137, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 167, 169, 171, 173, 175, 177, 180, 182, 184, 186, 189, 191, 193, 196, 198, 200, 203, 205, 208, 210, 213, 215, 218, 220, 223, 225, 228, 231, 233, 236, 239, 241, 244, 247, 249, 252, 255 }; /////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////

/ إعداد METODO

إعداد باطل () {// Código: Dirección de la gravedad neoring.begin () ؛ neoring.setBrightness (200) ، Serial.begin (9600) ؛ Wire.begin () ؛ Wire.beginTransmission (0x0A) ؛ // عنوان مقياس التسارع // إعدادات النطاق Wire.write (0x22) ؛ // عنوان التسجيل Wire.write (النطاق) ؛ // يمكن تعيينها على "0x00" "0x01" "0x02" "0x03" ، ارجع إلى Datashhet على wiki // مرشح تمرير منخفض Wire.write (0x20) ؛ // تسجيل العنوان Wire.write (0x05) ؛ // يمكن تعيينه على "0x05" "0x04" …… "0x01" "0x00" ، راجع Datashhet على wiki Wire.endTransmission () ؛

// كوديجو. لوسيس أركويرس

// هذا خاص بـ Trinket 5V 16MHz ، يمكنك إزالة هذه الأسطر الثلاثة إذا كنت لا تستخدم Trinket #if محدد (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1) ؛ #endif // نهاية الكود الخاص trinket strip.begin () ؛ عرض الشريط()؛ // تهيئة جميع وحدات البكسل على "إيقاف"

// كوديجو رويدا دي كولورز

// هذا خاص بـ Trinket 5V 16MHz ، يمكنك إزالة هذه الأسطر الثلاثة إذا كنت لا تستخدم Trinket #if محدد (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1) ؛ #endif // نهاية الكود الخاص بحلية صغيرة

pixels.begin () ، // يؤدي هذا إلى تهيئة مكتبة NeoPixel.

// مقاطعة Codigo

عداد = 1 ؛

// Codigo Colores varios

// هذا خاص بـ Trinket 5V 16MHz ، يمكنك إزالة هذه الأسطر الثلاثة إذا كنت لا تستخدم Trinket #if محدد (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1) ؛ #endif // نهاية الكود الخاص للحلية strip.setBrightness (BRIGHTNESS) ؛ strip.begin () ، عرض الشريط()؛ // تهيئة كل وحدات البكسل على "إيقاف"}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ بوكلي إنفينيتو

حلقة فارغة () {// Caso 1: Juego de luces de la gravedad؛ إذا (العداد == 1) {لـ (int i = 0 ؛ i 0.0) {if (nx 0.0) angle + = 180 ؛ زاوية أخرى + = 360 ؛ } // end else if (angle == 360.0) angle = 0.0 ؛ أدى = تعميم (زاوية / (360 / NUMBER_OF_LEDS_ON_RING)) ؛ // اجعل حركة الصمام سلسة إذا (previousLed == led) {// لا شيء يمكن فعله} وإلا إذا (counterClockwiseDistanceBetweenLeds (previousLed، led) <= 8) led = circularize (previousLed + 1)؛ قاد آخر = تعميم (previousLed - 1) ؛ ledQueue.push (led) ؛ makeLightShow () ، الصمام السابق = الصمام ؛ تأخير (25) ؛ } العداد = 2 ؛ } // End if counter == 1 // Caso 2: Codigo del juego de luces del arcoiris else if (counter == 2) {for (int j = 0؛ j <5؛ j ++) {// بعض أمثلة الإجراءات التي توضح كيفية العرض على وحدات البكسل: colorWipe1 (شريط ، لون (255 ، 0 ، 0) ، 50) ؛ // اللون الأحمرWipe1 (لون الشريط (0 ، 255 ، 0) ، 50) ؛ // اللون الأخضرWipe1 (لون الشريط (0 ، 0 ، 255) ، 50) ؛ // Blue colorWipe1 (لون الشريط (0 ، 0 ، 0 ، 255) ، 50) ؛ // أبيض RGBW // أرسل مطاردة بكسل المسرح في… theatreChase (شريط. اللون (127 ، 127 ، 127) ، 50) ؛ // White theatreChase (شريط اللون (127 ، 0 ، 0) ، 50) ؛ // الأحمر theatreChase (شريط اللون (0 ، 0 ، 127) ، 50) ؛ // أزرق

قوس قزح (5) ؛

دورة قوس قزح (5) ؛ theatreChaseRainbow (5) ؛ } العداد = 3 ؛ } // End if counter == 2 // Caso 3: Luces Aleatorias else if (counter == 3) {for (int k = 0؛ k <50؛ k ++) {// بالنسبة لمجموعة من NeoPixels ، يكون أول NeoPixel هو 0 ، الثانية هي 1 ، حتى عدد البكسل مطروحًا منه واحدًا. int a = عشوائي (255) ؛ الباحث ب = عشوائي (255) ؛ int c = عشوائي (255) ؛ لـ (int i = 0 ؛ i

// بكسل. يأخذ اللون قيم RGB ، من 0 ، 0 ، 0 حتى 255 ، 255 ، 255

pixels.setPixelColor (i ، pixels. Color (a ، b ، c)) ؛ // لون أخضر فاتح باعتدال.

pixels.show () ، // هذا يرسل لون البكسل المحدث إلى الجهاز.

تأخير (تأخير) ؛ // تأخير لفترة زمنية (بالمللي ثانية).

} أ = عشوائي (255) ؛ ب = عشوائي (255) ؛ ج = عشوائي (255) ؛ لـ (int i = NUMPIXELS؛ i> 0؛ i -) {

// بكسل. يأخذ اللون قيم RGB ، من 0 ، 0 ، 0 حتى 255 ، 255 ، 255

pixels.setPixelColor (i ، pixels. Color (a ، b ، c)) ؛ // لون أخضر فاتح باعتدال.

pixels.show () ، // هذا يرسل لون البكسل المحدث إلى الجهاز.

تأخير (تأخير) ؛ // تأخير لفترة زمنية (بالمللي ثانية).

}} عداد = 4 ؛ } else if (counter == 4) {for (int g = 0؛ g <= 6؛ g ++) {// بعض أمثلة الإجراءات التي توضح كيفية العرض بالبكسل: colorWipe (strip. Color (255، 0، 0) ، 50) ؛ // اللون الأحمر مسح (شريط اللون (0 ، 255 ، 0) ، 50) ؛ // اللون الأخضر مسح (شريط اللون (0 ، 0 ، 255) ، 50) ؛ // Blue colorWipe (شريط اللون (0 ، 0 ، 0 ، 255) ، 50) ؛ // أبيض whiteOverRainbow (20 ، 75 ، 5) ؛ نبض أبيض (5) ؛ // fullWhite () ؛ // تأخير (2000) ؛ قوس قزح Fade2White (3 ، 3 ، 1) ؛

}

عداد = 1 ؛ }} ////////////////////////////////////////////////////// ///////////////////////////////////// ///////////////// ////////////////////////////////////////////////////// ///////////////////

/ Metodos del Ejemplo de la gravedad

باطل AccelerometerInit () {Wire.beginTransmission (0x0A) ، // عنوان مقياس التسارع // إعادة تعيين مقياس التسارع Wire.write (0x04) ؛ // X data Wire.endTransmission () ؛ Wire.request From (0x0A، 1) ؛ // طلب 6 بايت من الجهاز التابع # 2 بينما (Wire.available ()) // قد يرسل التابع أقل من المطلوب {Version [0] = Wire.read ()؛ // تلقي بايت على هيئة حرف} x_data = (int8_t) الإصدار [0] >> 2 ؛ Wire.beginTransmission (0x0A) ؛ // عنوان مقياس التسارع // إعادة تعيين مقياس التسارع Wire.write (0x06) ؛ // Y data Wire.endTransmission () ؛ Wire.request From (0x0A، 1) ؛ // طلب 6 بايت من الجهاز التابع # 2 بينما (Wire.available ()) // قد يرسل التابع أقل من المطلوب {Version [1] = Wire.read ()؛ // تلقي بايت على هيئة حرف} y_data = (int8_t) الإصدار [1] >> 2 ؛ Wire.beginTransmission (0x0A) ؛ // عنوان مقياس التسارع // إعادة تعيين مقياس التسارع Wire.write (0x08) ؛ // Z data Wire.endTransmission () ؛ Wire.request From (0x0A، 1) ؛ // طلب 6 بايت من الجهاز التابع # 2 بينما (Wire.available ()) // قد يرسل التابع أقل من المطلوب {Version [2] = Wire.read ()؛ // تلقي بايت على هيئة حرف} z_data = (int8_t) الإصدار [2] >> 2 ؛ س = (تعويم) x_data / divi ؛ y = (تعويم) y_data / divi ؛ ض = (تعويم) z_data / divi ؛ Serial.print ("X =") ؛ Serial.print (x) ؛ // طباعة الحرف Serial.print ("") ؛ Serial.print ("Y =") ؛ Serial.print (ذ) ؛ // طباعة الحرف Serial.print ("") ؛ Serial.print ("Z =") ؛ // طباعة الحرف Serial.println (z) ؛ }

int circularize (int pos) {

إذا (نقاط البيع> = NUMBER_OF_LEDS_ON_RING) إرجاع (نقاط البيع - NUMBER_OF_LEDS_ON_RING) ؛ وإلا إذا (نقاط البيع <0) عادت (نقاط البيع + NUMBER_OF_LEDS_ON_RING) ؛ عودة أخرى (نقاط البيع) ؛ }

مسافة كثافة العمليات

int counterClockwiseDistanceBetweenLeds (int prevPos، int nextPos) {Distance = nextPos - prevPos؛ إذا كانت (مسافة <0) مسافة + = NUMBER_OF_LEDS_ON_RING ؛ العودة (المسافة) ؛ }

int ledPosition ، currentQueueSize ؛

#define NUMBER_OF_LEDS_TO_SHINE 10 int BrightnessStep = 255 / NUMBER_OF_LEDS_TO_SHINE ؛

MakeLightShow باطل () {

لـ (int j = 0 ؛ j <NUMBER_OF_LEDS_ON_RING ؛ j ++) neoring.setPixelColor (j ، 0 ، 0 ، 0) ؛ CurrentQueueSize = ledQueue.count () ، لـ (int k = 0؛ k <currentQueueSize؛ k ++) {ledPosition = ledQueue.pop ()؛ neoring.setPixelColor (ledPosition، 0، (BrightnessStep * k)، 0) ؛ إذا ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition) ؛} neoring.show () ؛}

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos del juego de luces del arcoiris

// املأ النقاط واحدة تلو الأخرى بلون فارغ colorWipe (uint32_t c، uint8_t wait) {for (uint16_t i = 0؛ i

قوس قزح باطل (uint8_t انتظر) {

uint16_t أنا ، ي ؛

لـ (j = 0 ؛ j <256 ؛ j ++) {لـ (i = 0 ؛ i

// مختلف قليلاً ، وهذا يجعل قوس قزح موزعًا بالتساوي في جميع الأنحاء

قوس قزح باطل (uint8_t wait) {uint16_t i، j؛

لـ (j = 0 ؛ j <256 * 5 ؛ j ++) {// 5 دورات من كل الألوان على العجلة لـ (i = 0 ؛ i <strip.numPixels () ؛ i ++) {strip.setPixelColor (i ، Wheel ((((i * 256 / strip.numPixels ()) + j) & 255)) ؛ } عرض الشريط()؛ تأخير (انتظر) ؛ }}

// أضواء زاحفة على غرار المسرح.

void theatreChase (uint32_t c، uint8_t wait) {(int j = 0؛ j <10؛ j ++) {// do 10 cycles of chasing for (int q = 0؛ q <3؛ q ++) {for (uint16_t i = 0؛ i <strip.numPixels ()؛ i = i + 3) {strip.setPixelColor (i + q، c)؛ // تشغيل كل بكسل ثالث} strip.show () ؛

تأخير (انتظر) ؛

لـ (uint16_t i = 0 ؛ i <strip.numPixels () ؛ i = i + 3) {strip.setPixelColor (i + q، 0) ؛ // إيقاف تشغيل كل بكسل ثالث}}}}

// أضواء زاحفة على غرار المسرح مع تأثير قوس قزح

void theatreChaseRainbow (uint8_t wait) {for (int j = 0؛ j <256؛ j ++) {// دورة كل 256 لونًا في العجلة لـ (int q = 0؛ q <3؛ q ++) {for (uint16_t i = 0 ؛ i <strip.numPixels () ؛ i = i + 3) {strip.setPixelColor (i + q، Wheel ((i + j)٪ 255)) ؛ // تشغيل كل بكسل ثالث} strip.show () ؛

تأخير (انتظر) ؛

لـ (uint16_t i = 0 ؛ i <strip.numPixels () ؛ i = i + 3) {strip.setPixelColor (i + q، 0) ؛ // إيقاف تشغيل كل بكسل ثالث}}}}

// أدخل القيمة من 0 إلى 255 للحصول على قيمة اللون.

// الألوان هي انتقال r - g - b - العودة إلى r. uint32_t Wheel (بايت WheelPos) {WheelPos = 255 - WheelPos ؛ إذا (WheelPos <85) {return strip. Color (255 - WheelPos * 3 ، 0 ، WheelPos * 3) ؛ } إذا (WheelPos <170) {WheelPos - = 85 ؛ شريط الإرجاع اللون (0 ، WheelPos * 3 ، 255 - WheelPos * 3) ؛ } WheelPos - = 170 ؛ شريط العودة اللون (WheelPos * 3 ، 255 - WheelPos * 3 ، 0) ؛ }

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos Rueda de colores

// int elegirColor = عشوائي (0x000000 ، 0xffffff) ؛ // Se elige aleatoriamente entre toda la gama de colores تشمل إدخال 0x000000 y 0xFFFFFF

// CylonEyeColor = HtmlColor (elegirColor) ؛ // int elegirColor = عشوائي (1 ، 7) ؛ // Podemos elegir aleatoriamente entre los 7 colores que hay debajo0xf0ffff // if (elegirColor == 1) CylonEyeColor = HtmlColor (0xff0000) ؛ // Rojo // if (elegirColor == 2) CylonEyeColor = HtmlColor (0x00ff00) ؛ // Verde // if (elegirColor == 3) CylonEyeColor = HtmlColor (0x0000ff) ؛ // Azul // if (elegirColor == 4) CylonEyeColor = HtmlColor (0xffff00) ؛ // Amarillo // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020) ؛ // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff) ؛ // Azul Claro // if (elegirColor == 7) CylonEyeColor = HtmlColor (0x100010) ؛ // روزا // CylonEyeColor = HtmlColor (0x000000) ؛

///////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////

/ Metodos luces varias

// املأ النقاط واحدة تلو الأخرى بلون

colorWipe1 باطلة (uint32_t c، uint8_t wait) {لـ (uint16_t i = 0؛ i

نبض باطل أبيض (uint8_t انتظر) {

لـ (int j = 0 ؛ j <256 ؛ j ++) {لـ (uint16_t i = 0 ؛ i

لـ (int j = 255 ؛ j> = 0 ؛ ي -) {

لـ (uint16_t i = 0 ؛ ط

void rainbowFade2White (uint8_t wait، int rainbowLoops، int whiteLoops) {

تعويم fadeMax = 100.0 ؛ int fadeVal = 0 ؛ عجلة uint32_tVal؛ int redVal ، greenVal ، blueVal ؛

لـ (int k = 0؛ k <rainbowLoops؛ k ++) {for (int j = 0؛ j <256؛ j ++) {// 5 cycles of all color on wheel

لـ (int i = 0 ؛ i <strip.numPixels () ؛ i ++) {

wheelVal = عجلة (((i * 256 / strip.numPixels ()) + j) & 255) ؛

redVal = أحمر (wheelVal) * تعويم (fadeVal / fadeMax) ؛

greenVal = أخضر (wheelVal) * تعويم (fadeVal / fadeMax) ؛ blueVal = أزرق (wheelVal) * تعويم (fadeVal / fadeMax) ؛

strip.setPixelColor (i ، strip. Color (redVal ، greenVal ، blueVal)) ؛

}

// الحلقة الأولى ، تتلاشى!

إذا (k == 0 && fadeVal <fadeMax-1) {fadeVal ++؛ }

// الحلقة الأخيرة ، تتلاشى!

else if (k == rainbowLoops - 1 && j> 255 - fadeMax) {fadeVal--؛ }

عرض الشريط()؛

تأخير (انتظر) ؛ }}

تأخير (500) ؛

لـ (int k = 0؛ k <whiteLoops؛ k ++) {

لـ (int j = 0 ؛ j <256 ؛ j ++) {

لـ (uint16_t i = 0؛ i <strip.numPixels ()؛ i ++) {strip.setPixelColor (i، strip. Color (0، 0، 0، neopix_gamma [j])) ؛ } عرض الشريط()؛ }

تأخير (2000) ؛

لـ (int j = 255 ؛ j> = 0 ؛ ي -) {

لـ (uint16_t i = 0؛ i <strip.numPixels ()؛ i ++) {strip.setPixelColor (i، strip. Color (0، 0، 0، neopix_gamma [j])) ؛ } عرض الشريط()؛ }}

تأخير (500) ؛

}

void whiteOverRainbow (uint8_t wait، uint8_t whiteSpeed، uint8_t whiteLength) {

إذا (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1 ؛

رئيس int = whiteLength - 1 ؛

ذيل int = 0 ؛

حلقات int = 3 ؛

int loopNum = 0 ؛

ثابت long lastTime غير موقعة = 0 ؛

احيانا صحيح){

لـ (int j = 0؛ j <256؛ j ++) {لـ (uint16_t i = 0؛ i = tail && i head && i> = tail) || (tail> head && i <= head)) {strip.setPixelColor (i، strip. Color (0، 0، 0، 255)) ؛ } else {strip.setPixelColor (i، Wheel (((i * 256 / strip.numPixels ()) + j) & 255)) ؛ }}

if (millis () - lastTime> whiteSpeed) {

رئيس ++ ؛ الذيل ++ ؛ إذا (head == strip.numPixels ()) {loopNum ++ ؛ } lastTime = مللي () ؛ }

إذا (loopNum == حلقات) إرجاع ؛

الرأس٪ = strip.numPixels () ؛ الذيل٪ = strip.numPixels () ؛ عرض الشريط()؛ تأخير (انتظر) ؛ }}} void fullWhite () {for (uint16_t i = 0؛ i

// مختلف قليلاً ، وهذا يجعل قوس قزح موزعًا بالتساوي في جميع الأنحاء

قوس قزح باطل 1 (uint8_t انتظر) {uint16_t i، j؛

لـ (j = 0 ؛ j <256 * 5 ؛ j ++) {// 5 دورات من كل الألوان على العجلة لـ (i = 0 ؛ i <strip.numPixels () ؛ i ++) {strip.setPixelColor (i ، Wheel ((((i * 256 / strip.numPixels ()) + j) & 255)) ؛ } عرض الشريط()؛ تأخير (انتظر) ؛ }}

قوس قزح 1 باطل (uint8_t انتظر) {

uint16_t أنا ، ي ؛

لـ (j = 0 ؛ j <256 ؛ j ++) {لـ (i = 0 ؛ i

// أدخل القيمة من 0 إلى 255 للحصول على قيمة اللون.

// الألوان هي انتقال r - g - b - العودة إلى r. uint32_t Wheel1 (بايت WheelPos) {WheelPos = 255 - WheelPos؛ إذا (WheelPos <85) {return strip. Color (255 - WheelPos * 3 ، 0 ، WheelPos * 3 ، 0) ؛ } إذا (WheelPos <170) {WheelPos - = 85 ؛ شريط العودة اللون (0 ، WheelPos * 3 ، 255 - WheelPos * 3 ، 0) ؛ } WheelPos - = 170 ؛ شريط العودة اللون (WheelPos * 3 ، 255 - WheelPos * 3 ، 0 ، 0) ؛ }

uint8_t أحمر (uint32_t c) {

العودة (ج >> 16) ؛ } uint8_t green (uint32_t c) {return (c >> 8)؛ } uint8_t blue (uint32_t c) {return (c)؛ }

الخطوة 8: تصميم ثلاثي الأبعاد

تصميم ثلاثي الأبعاد
تصميم ثلاثي الأبعاد
تصميم ثلاثي الأبعاد
تصميم ثلاثي الأبعاد
تصميم ثلاثي الأبعاد
تصميم ثلاثي الأبعاد

أولاً ، يجب عليك تحديد حجم مكونات أجهزتك للتأكد من صحة. إذا كانت هي نفسها ملفاتنا ، فيمكنك استخدام نفس الملفات التي نقدمها لك.

تم تصميم كلا الدعامتين باستخدام طابعة ثلاثية الأبعاد ، والتي يتم تضمينها أيضًا على النحو التالي:

ukelele_support_arduino_v0.stl: https://www.tinkercad.com/things/1aAGZ1xFptA-ukel… ukelele_support_WS2812_v0.stl: https://www.tinkercad.com/things/1aAGZ1xFptA-ukel …

أخيرًا ، سيكون الضوء مثل الصورتين الأخيرتين.

الخطوة 9: تركيب العنق

تصاعد الرقبة
تصاعد الرقبة
تصاعد الرقبة
تصاعد الرقبة

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

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

هام: اترك مسافة 5 مم بين بداية الصاري وبداية الشوكة الرنانة ، لأنه سيتم وضع الصمولة في تلك الفتحة.

سنلصق الجوز بالغراء ، في الاتجاه الذي يشير إليه الشكل.

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

الخطوة 10: تركيب الطائر

تركيب الطائر
تركيب الطائر
تركيب الطائر
تركيب الطائر

يتم تثبيت الجسر عن طريق اللصق والمسمارين الطويلين في وضع مركزي على الجسم. يُنصح بتحديد الموضع الصحيح في الجسم بقلم رصاص. سنأخذ المسافات المحددة في الصورة.

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

الخطوة 11: تجميع الجسم والرقبة

تجميع الجسم والرقبة
تجميع الجسم والرقبة
تجميع الجسم والرقبة
تجميع الجسم والرقبة

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

الخطوة 12: ضع أوتار القيثارة

Image
Image
ضع أوتار القيثارة
ضع أوتار القيثارة
ضع أوتار القيثارة
ضع أوتار القيثارة

أخيرًا ، يتعين علينا وضع الأوتار بحيث يتم الانتهاء من أداتنا.

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

ثم نضع الأوتار بطريقة:

• الموضع الأول: سلسلة G (الوتر الثاني السميك).

• الموضع الثاني: سلسلة C (خيط سميك).

• الموضع الثالث: سلسلة E (سلسلة أرق ثانية).

• الموضع الرابع: خيط (خيط رفيع).

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

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

الخطوة 13: الاختبار

اختبارات
اختبارات
اختبارات
اختبارات

أخيرًا ، يجب أن نرى ما إذا تم تجميع القيثارة بشكل صحيح بحيث تكون المسافة المثالية على الحنق الأول 0.1 مم وفي الثانية عشرة تبلغ 1.2 مم تقريبًا.

هناك حاجة لضبط أوتار القيثارة. أوصي بهذا التطبيق: GuitarTuna

الخطوة 14: استمتع بها

الآن ، ما عليك سوى الاستمتاع بالقيثارة.

إذا كنت تريد معرفة المزيد من المعلومات عنا ، يمكنك أن تجدنا في:

تويتر:Innovart_cc

الفيسبوك:Innovartcc

الإنستقرام:Innovart_cc

الويب: Innovart.cc

موصى به: