فهرست مطالب:

Ukulele الکترونیکی DIY هوشمند با آردوینو: 14 مرحله (همراه با تصاویر)
Ukulele الکترونیکی DIY هوشمند با آردوینو: 14 مرحله (همراه با تصاویر)

تصویری: Ukulele الکترونیکی DIY هوشمند با آردوینو: 14 مرحله (همراه با تصاویر)

تصویری: Ukulele الکترونیکی DIY هوشمند با آردوینو: 14 مرحله (همراه با تصاویر)
تصویری: Crypto Pirates Daily News - Tuesday January 19th, 2022 - Latest Crypto News Update 2024, نوامبر
Anonim
Ukulele الکترونیکی DIY هوشمند با آردوینو
Ukulele الکترونیکی DIY هوشمند با آردوینو

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

برای تهیه آن ، خرید کیت ukulele ضروری است.

ما قصد داریم نحوه مونتاژ ساز را توضیح دهیم و مشکلات مختلفی را که ممکن است ظاهر شوند حل کنیم.

مرحله 1: مواد

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

مصالح ساختمانی:

کیت نصب ukelele DIY (ممکن است یک کیت متفاوت دیگر باشد) تشکیل شده توسط:

1- بدن.

2-گردن.

3-زین

پشتیبانی از 4 طناب

5-پل

6-مهره رشته ای.

7-حلقه ثابت برای سر دستگاه (x4).

8-سر دستگاه (x4).

9-پیچ نصب سر ماشین (x8).

10-پیچ نصب برای پل ماشین (x2).

11-درپوش برای پیچ های نصب پل (x2).

12-رشته (x4).

مواد الکترونیکی:

  • نانو آردوینو
  • Wheel of Leds WS2812.
  • شتاب سنج BMA220 (اختیاری).
  • کانکتور باتری.
  • باتری 9 ولت
  • تعویض.

دیگران

  • لاک چوبی.
  • Velcro.
  • قلع لحیم کاری.
  • پلاستیک محافظ برای لاک زدن.
  • سیلیکون مذاب داغ.

ابزارها:

  • حکاکی لیزری.
  • سمباده
  • پیچ گوشتی ستاره ای.
  • قلم مو
  • تفنگ مذاب داغ.
  • آهن لحیم کاری قلع.

مرحله 2: Ukulele را سفارشی کنید

Ukulele را سفارشی کنید
Ukulele را سفارشی کنید
Ukulele را سفارشی کنید
Ukulele را سفارشی کنید
Ukulele را سفارشی کنید
Ukulele را سفارشی کنید

برای ظاهر کردن یوکولل ما می توانیم نقاشی را با برش لیزری روی بدن حک کنیم. در صورت نداشتن آن ابزار ، می توانیم آن را رنگ کنیم.

تصویری که ما انتخاب کرده ایم اولین چیزی است که ظاهر می شود.

اول از همه ، ما باید قالب طراحی را برای ایجاد حکاکی طراحی کنیم.

برای انجام این کار ، از نرم افزاری به نام "Inkscape" استفاده می کنیم که می توانیم از این پیوند بدست آوریم:

برای استفاده از آن ، باید تصویری را که می خواهیم از آن استفاده کنیم مانند تصویر دوم تنظیم کنیم. به نظر می رسد که ما تصویر اولیه را بچرخانیم تا بتوانیم سیکل دست را با دایره ساز تنظیم کنیم. همانطور که قبلاً گفتیم ، می توانید هر تصویری را قرار دهید.

مرحله 3: با استفاده از Inkscape یک تصویر را بردار کنید

با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید
با استفاده از Inkscape یک تصویر را بردار کنید

ما خواهیم دید که چگونه می توان یک فایل بردار از یک pixmap-j.webp

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

  1. تصویر را در Inkscape باز کنید
  2. مسیر Trace Bitmap Tool Path-> Trace Bitmap را باز کنید
  3. با گزینه های Trace Bitmap بازی کنید
  4. ردیابی را اجرا کنید
  5. نتایج را تمیز کنید (در صورت لزوم)

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

مرحله 4: حک لوگو

Image
Image
حکاکی لوگو
حکاکی لوگو
حکاکی لوگو
حکاکی لوگو

برای این مهم ، داشتن یک شبح از سطحی است که حکاکی روی آن بر روی آن ایجاد می شود.

برای حکاکی ، ما از نرم افزار "T2Laser" استفاده می کنیم. ما می توانیم این نرم افزار را از آدرس زیر دریافت کنیم:

هنگامی که نرم افزار را باز کردیم ، باید تصویری را که در آخرین مرحله ایجاد کرده ایم بارگذاری کنیم. سپس ، دکمه "کنترل لیزر" را فشار دهید ، و کنترل های cnc ظاهر می شود. دو تصویر روند و نتیجه حکاکی با برش لیزری ما را نشان می دهد.

مرحله 5: سنباده زنی و لاک زدن

سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن
سنباده زنی و لاک زدن

برای اینکه یوکولل خود را روشن و بدون لایه ای از زبری بگذاریم ، می توانیم دو قسمت را که ساز ما را تشکیل می دهند ، به آرامی سنباده بزنیم ، زیرا می توانیم نقاشی ایجاد شده را خراب کنیم (اگر شما رنگ یوکولل را انتخاب کرده اید ، باید ابتدا آن را سنباده بزنید). سپس ما دو قسمت خود را لاک می زنیم تا رنگ تیره تری پیدا کنند و چوب مقاومت بیشتری نشان دهد. ما می توانیم از لاک چوب معمولی استفاده کنیم ، نیازی نیست که خاص باشد.

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

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

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

موادی که برای اینکه بتوانیم درست کار کنیم ، آنهایی هستند که در عکس ها نشان داده شده است. ما عمدتا با قلم مو ، قوطی لاک الکل (در مورد ما رنگ قرمز) ، کمی حلال و حفاظت بصری کار خواهیم کرد. و مهمتر از همه در فضاهای با تهویه خوب کار کنید.

مرحله 6: سخت افزار

سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار
سخت افزار

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

ما همچنین یک نگهدارنده باتری و یک سوئیچ برای راحتی بیشتر آن اضافه کرده ایم و هنگامی که از ابزار استفاده نمی کنیم ، باتری را فرسوده نمی کنیم. ما این پشتیبانی را با یک تکه Velcro (همچنین با سیلیکون و تفنگ مذاب داغ کار می کند) به قسمت داخلی بدنه ukulele وصل می کنیم. از طرف دیگر ، چرخ LED کوچکتر از سوراخ است ، بنابراین سقوط می کند به یک پشتیبانی به گونه ای طراحی شده است که به خوبی نگه داشته می شود و می تواند عملکرد خود را انجام دهد.

مرحله 7: نرم افزار

نرم افزار
نرم افزار
نرم افزار
نرم افزار
نرم افزار
نرم افزار

برای تزئین خاص به یوکولل ما ، می توانیم جلوه های نوری را به لطف چرخ لامپ ها اضافه کنیم. ما قصد داریم از WS2812 استفاده کنیم ، اما شما می توانید از دستورالعمل های زیر استفاده کنید. ما از شتاب سنج (BMA220) نیز استفاده می کنیم که به ما اجازه می دهد تا گرانش را تحت تأثیر قرار دهیم.

در واقع ، ما 4 نمایشنامه نور خواهیم داشت که در کتابخانه رایانه ای به نام "Adafruit" آردوینو موجود است. برای این منظور ، ما باید یک اتصال صحیح بین سه جزء ایجاد کنیم: Arduino NANO ، WS2812 و BMA220 ، مانند تصویر اول.

سیم های قرمز برای تغذیه هستند ، GND مشکی و بقیه اتصالات لازم برای عملکرد صحیح هستند. کدی که ما برای کیت چراغ استفاده کردیم در فایلی به نام "play_of_light_v0.ino" ضمیمه شده است. مطمئن شوید که کتابخانه های لازم را برای عملکرد صحیح برنامه وارد کرده اید. باتری ای که به مدار خارجی اضافه می کنیم باید حداقل ولتاژ 9 ولت داشته باشد و باید مطمئن شویم که قادر است حداقل جریان لازم را برای تغذیه کل مدار بدهد.

// متغیرها contador e interrupciónint counter؛ // متغیرها Ejemplo gravedad #شامل #شامل #شامل #شامل #تعریف NUMBER_OF_LEDS_ON_RING 16 #تعریف NEOPIXEL_RING_DATA_PIN 9

بایت نسخه [3]؛

int8_t x_data؛ int8_t y_data؛ int8_t z_data؛ محدوده بایت = 0x00؛ float divi = 16؛ شناور x ، y ، z ؛ float pi = 3.14159265359 ؛ float nx، ny، angle؛ int led، previousLed؛ QueueList ledQueue؛ Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING ، NEOPIXEL_RING_DATA_PIN ، NEO_GRB + NEO_KHZ800) ؛

// متغیرها Luces arcoiris

#شامل #ifdef _AVR_ #شامل #endif #تعریف PIN 9 // پارامتر 1 = تعداد پیکسل در نوار // پارامتر 2 = شماره پین آردوینو (اکثر آنها معتبر هستند) // پارامتر 3 = پرچم های نوع پیکسل ، در صورت نیاز به هم اضافه کنید: // NEO_KHZ800 800 KHz bitstream (اکثر محصولات NeoPixel با WS2812 LED) // NEO_KHZ400 400 کیلوهرتز (کلاسیک 'v1' (نه v2) پیکسل های FLORA ، درایورهای WS2811) // پیکسل های NEO_GRB برای جریان بیت GRB (بیشتر محصولات NeoPixel)/ / پیکسلهای NEO_RGB برای RGB bitstream (پیکسلهای v1 FLORA ، نه v2) // پیکسلهای NEO_RGBW برای جریانهای RGBW (محصولات NeoPixel RGBW) Adafruit_NeoPixel = Adafruit_NeoPixel (16 ، PIN ، NEO_GRB + NEO) + وصل می شوند // مهم: برای کاهش خطر فرسودگی NeoPixel ، خازن 1000 uF را در سرریزهای // پیکسل اضافه کنید ، مقاومت 300 - 500 اهم را در ورودی اطلاعات پیکسل اول اضافه کنید // و فاصله بین آردوینو و پیکسل اول را به حداقل برسانید. از اتصال // روی یک مدار زنده اجتناب کنید … اگر لازم است ، ابتدا GND را وصل کنید.

// متغیرها Rueda de colores

// طرح ساده NeoPixel Ring (c) 2013 Shae Erisson // منتشر شده تحت مجوز GPLv3 برای مطابقت با بقیه کتابخانه AdaFruit NeoPixel

#عبارتند از

#ifdef _AVR_ #شامل #endif

// کدام پین در آردوینو به NeoPixels متصل است؟

// در Trinket یا Gemma پیشنهاد می کنیم این مورد را به 1 #پین 9 #تعریف کنید

// چند NeoPixel به آردوینو وصل شده است؟

#تعریف NUMPIXELS 16

// وقتی کتابخانه NeoPixel را راه اندازی می کنیم ، به آن می گوییم چند پیکسل است و از کدام پین برای ارسال سیگنال استفاده می کند.

// توجه داشته باشید که برای نوارهای قدیمی NeoPixel ممکن است نیاز به تغییر پارامتر سوم داشته باشید-برای اطلاعات بیشتر در مورد مقادیر احتمالی به مثال strandtest // مراجعه کنید. پیکسل های Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS ، PIN ، NEO_GRB + NEO_KHZ800) ؛ تاخیر int = 50 ؛ // تأخیر 50 میلی ثانیه

// متغیرها colores aleatorios

#شامل #ifdef _AVR_ #شامل #endif

#پین 9 را تعریف کنید

#تعریف NUM_LEDS 16

#روشنایی 200 را تعریف کنید

// نوار Adafruit_NeoPixel = 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 SETUP

void setup () {// 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 در ویکی // فیلتر کم گذر Wire.write (0x20) مراجعه کنید ؛ // آدرس ثبت Wire.write (0x05) ؛ // می تواند در "0x05" "0x04" …… "0x01" "0x00" تنظیم شود ، به Datashhet در wiki Wire.endTransmission () مراجعه کنید.

// کدیگو ؛ لوس آرکویریس

// این برای Trinket 5V 16MHz است ، اگر از Trinket #if #endif // پایان کد کوچک strip.begin ()؛ strip.show ()؛ // مقداردهی اولیه همه پیکسل ها به حالت "خاموش"

// Código Rueda de colores

// این برای Trinket 5V 16MHz است ، اگر از Trinket #if #endif // کد ویژه پایان کار ساده

pixels.begin ()؛ // این کتابخانه NeoPixel را اولیه می کند.

// Codigo Interrupcion

شمارنده = 1 ؛

// Codigo Colores varios

// این برای Trinket 5V 16MHz است ، اگر از Trinket #if #endif // انتهای ترفند ویژه کد ویژه strip.setBrightness (BRIGHTNESS) ؛ strip.begin ()؛ strip.show ()؛ // مقداردهی اولیه همه پیکسل ها به "خاموش"}

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

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

/Bucle infinito

void loop () {// Caso 1: Juego de luces de la gravedad؛ if (counter == 1) {for (int i = 0؛ i 0.0) {if (nx 0.0) angle+= 180؛ else angle += 360؛ } // پایان دیگری if (angle == 360.0) angle = 0.0؛ led = گردش (زاویه / (360 / NUMBER_OF_LEDS_ON_RING)) ؛ // حرکت led را صاف کنید اگر (previousLed == led) {// هیچ کاری انجام ندهید} اگر دیگر (counterClockwiseDistanceBetweenLeds (previousLed، led) <= 8) led = circularize (previousLed + 1) ؛ else led = circularize (previousLed - 1) ؛ ledQueue.push (led) ؛ makeLightShow ()؛ previousLed = led؛ تأخیر (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 (strip. Color (255، 0، 0)، 50)؛ // رنگ قرمز Wipe1 (نوار. رنگ (0 ، 255 ، 0) ، 50) ؛ // رنگ سبز Wipe1 (نوار. رنگ (0 ، 0 ، 255) ، 50) ؛ // رنگ آبی Wipe1 (نوار. رنگ (0 ، 0 ، 0 ، 255) ، 50) ؛ // سفید RGBW // ارسال پیکسل تئاتر در… theaterChase (strip. Color (127 ، 127 ، 127) ، 50) ؛ // White theaterChase (strip. Color (127 ، 0 ، 0) ، 50) ؛ // Red theaterChase (strip. Color (0، 0، 127)، 50)؛ // آبی

رنگین کمان (5) ؛

rainbowCycle (5)؛ TheaterChaseRainbow (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) ؛ int b = تصادفی (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 ()؛ // این رنگ پیکسل به روز شده را به سخت افزار ارسال می کند.

تاخیر (تاخیر) ؛ // تاخیر برای یک دوره زمانی (بر حسب میلی ثانیه).

} a = تصادفی (255) ؛ b = تصادفی (255) ؛ c = تصادفی (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) ؛ // رنگ آبی پاک کردن (نوار. رنگ (0 ، 0 ، 0 ، 255) ، 50) ؛ // سفید سفیدOverRainbow (20 ، 75 ، 5) ؛ نبض سفید (5) ؛ // fullWhite ()؛ // تاخیر (2000) ؛ rainbowFade2White (3 ، 3 ، 1) ؛

}

شمارنده = 1 ؛ }} //////////////////////////////////////////// ///////////////////////////////////////////////////// //////////////////////////////////////////////// //////////////////

/Metodos del Ejemplo de la gravedad

void AccelerometerInit () {Wire.beginTransmission (0x0A)؛ // آدرس شتاب سنج // تنظیم مجدد شتاب سنج Wire.write (0x04) ؛ // X data Wire.endTransmission ()؛ سیم. درخواست از (0x0A ، 1) ؛ // درخواست 6 بایت از دستگاه برده شماره 2 در حالی که (Wire.available ()) // برده ممکن است کمتر از درخواست ارسال کند {نسخه [0] = Wire.read ()؛ // دریافت یک بایت به عنوان کاراکتر} x_data = (int8_t) نسخه [0] >> 2؛ Wire.beginTransmission (0x0A) ؛ // آدرس شتاب سنج // تنظیم مجدد شتاب سنج Wire.write (0x06) ؛ // Y data Wire.endTransmission ()؛ سیم. درخواست از (0x0A ، 1) ؛ // درخواست 6 بایت از دستگاه برده شماره 2 در حالی که (Wire.available ()) // برده ممکن است کمتر از درخواست ارسال کند {نسخه [1] = Wire.read ()؛ // دریافت یک بایت به عنوان کاراکتر} y_data = (int8_t) نسخه [1] >> 2؛ Wire.beginTransmission (0x0A) ؛ // آدرس شتاب سنج // تنظیم مجدد شتاب سنج Wire.write (0x08) ؛ // Z data Wire.endTransmission ()؛ سیم. درخواست از (0x0A ، 1) ؛ // درخواست 6 بایت از دستگاه برده شماره 2 در حالی که (Wire.available ()) // برده ممکن است کمتر از درخواست ارسال کند {نسخه [2] = Wire.read ()؛ // دریافت یک بایت به عنوان کاراکتر} z_data = (int8_t) نسخه [2] >> 2؛ x = (شناور) x_data/divi؛ y = (شناور) y_data/divi؛ z = (شناور) z_data/divi؛ Serial.print ("X =")؛ Serial.print (x) ؛ // چاپ شخصیت Serial.print ("")؛ Serial.print ("Y =")؛ Serial.print (y) ؛ // چاپ شخصیت Serial.print ("")؛ Serial.print ("Z =")؛ // چاپ کاراکتر Serial.println (z)؛ }

int circularize (int pos) {

if (pos> = NUMBER_OF_LEDS_ON_RING) بازگشت (pos - NUMBER_OF_LEDS_ON_RING) ؛ در غیر این صورت اگر (pos <0) بازگشت (pos + NUMBER_OF_LEDS_ON_RING) ؛ در غیر این صورت بازگشت (pos) ؛ }

فاصله بین

int counterClockwiseDistanceBetweenLeds (int prevPos ، int nextPos) {distance = nextPos - prevPos؛ if (فاصله <0) فاصله += NUMBER_OF_LEDS_ON_RING ؛ بازگشت (فاصله) ؛ }

int ledPosition ، currentQueueSize ؛

#تعریف NUMBER_OF_LEDS_TO_SHINE 10 int روشنایی مرحله = 255/NUMBER_OF_LEDS_TO_SHINE ؛

void makeLightShow () {

for (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) ؛ if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition)؛} neoring.show ()؛}

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

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

/Metodos del juego de luces del arcoiris

// نقطه ها را یکی پس از دیگری با رنگ void color پر کنید Wipe (uint32_t c، uint8_t wait) {for (uint16_t i = 0؛ i

رنگین کمان خالی (uint8_t صبر کنید) {

uint16_t i، j؛

برای (j = 0؛ j <256؛ j ++) {برای (i = 0؛ i

// کمی متفاوت ، این باعث می شود رنگین کمان به طور مساوی در سراسر توزیع شود

void rainbowCycle (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))؛ } strip.show ()؛ تأخیر (صبر) ؛ }}

// چراغ های خزنده به سبک تئاتر.

void theaterChase (uint32_t c، uint8_t wait) {for (int j = 0؛ j <10؛ j ++) {// 10 چرخه تعقیب (int q = 0؛ q <3؛ q ++) {برای (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 theaterChaseRainbow (uint8_t wait) {for (int j = 0؛ j <256؛ j ++) {// تمام 256 رنگ موجود در چرخ را برای (int q = 0؛ q <3؛ q ++) {برای (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 (byte WheelPos) {WheelPos = 255 - WheelPos؛ if (WheelPos <85) {strip return. Color (255 - WheelPos * 3 ، 0 ، WheelPos * 3) ؛ } if (WheelPos <170) {WheelPos -= 85؛ نوار بازگشت. رنگ (0 ، WheelPos * 3 ، 255 - WheelPos * 3) ؛ } WheelPos -= 170 ؛ نوار بازگشت. رنگ (WheelPos * 3 ، 255 - WheelPos * 3 ، 0) ؛ }

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

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

/Metodos Rueda de colores

// int elegirColor = random (0x000000، 0xffffff)؛ // Se elige aleatoriamente entre toda la gama de colores comprendida entre 0x000000 y 0xFFFFFF

// CylonEyeColor = HtmlColor (elegirColor) ؛ // int elegirColor = random (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 (0xff) // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020) ؛ // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff) ؛ // Azul Claro // if (elegirColor == 7) CylonEye HtmlColor (0x100010) ؛ // رزا // CylonEyeColor = HtmlColor (0x000000) ؛

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

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

/Metodos luces varias

// نقاط را یکی پس از دیگری با رنگ پر کنید

void colorWipe1 (uint32_t c، uint8_t wait) {for (uint16_t i = 0؛ i

void pulseWhite (uint8_t wait) {

برای (int j = 0؛ j <256؛ j ++) {برای (uint16_t i = 0؛ i

برای (int j = 255؛ j> = 0؛ j-) {

برای (uint16_t i = 0 ؛ i

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

float fadeMax = 100.0 ؛ int fadeVal = 0؛ uint32_t wheelVal؛ int redVal، greenVal، blueVal؛

برای (int k = 0 ؛ k <rainbowLoops ؛ k ++) {برای (int j = 0 ؛ j <256 ؛ j ++) {// 5 چرخه از همه رنگها روی چرخ

برای (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)) ؛

}

// حلقه اول ، محو شوید!

if (k == 0 && fadeVal <fadeMax-1) {fadeVal ++؛ }

// آخرین حلقه ، محو شوید!

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

strip.show ()؛

تأخیر (صبر) ؛ }}

تأخیر (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]))؛ } strip.show ()؛ }

تاخیر (2000) ؛

برای (int j = 255؛ j> = 0؛ j-) {

برای (uint16_t i = 0؛ i <strip.numPixels ()؛ i ++) {strip.setPixelColor (i، strip. Color (0، 0، 0، neopix_gamma [j]))؛ } strip.show ()؛ }}

تأخیر (500) ؛

}

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

if (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1 ؛

int head = white طول - 1 ؛

int tail = 0 ؛

حلقه های int = 3 ؛

int loopNum = 0 ؛

static unsigned long lastTime = 0؛

در حالی که (درست) {

for (int j = 0؛ j <256؛ j ++) {for (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) {

سر ++ ؛ دم ++ ؛ if (head == strip.numPixels ()) {loopNum ++؛ } lastTime = millis ()؛ }

if (loopNum == حلقه ها) بازگشت ؛

head٪ = strip.numPixels ()؛ tail٪ = strip.numPixels ()؛ strip.show ()؛ تأخیر (صبر) ؛ }}} void fullWhite () {for (uint16_t i = 0؛ i

// کمی متفاوت ، این باعث می شود رنگین کمان به طور مساوی در سراسر توزیع شود

void rainbowCycle1 (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))؛ } strip.show ()؛ تأخیر (صبر) ؛ }}

void rainbow1 (uint8_t wait) {

uint16_t i، j؛

برای (j = 0؛ j <256؛ j ++) {برای (i = 0؛ i

// مقدار 0 تا 255 را وارد کنید تا مقدار رنگ بدست آید.

// رنگها یک انتقال r - g - b - بازگشت به r هستند. uint32_t Wheel1 (byte WheelPos) {WheelPos = 255 - WheelPos؛ if (WheelPos <85) {strip return. Color (255 - WheelPos * 3 ، 0 ، WheelPos * 3 ، 0) ؛ } if (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) {

بازگشت (c >> 16) ؛ } uint8_t سبز (uint32_t c) {return (c >> 8)؛ } uint8_t آبی (uint32_t c) {return (c)؛ }

مرحله هشتم: طراحی سه بعدی

طراحی سه بعدی
طراحی سه بعدی
طراحی سه بعدی
طراحی سه بعدی
طراحی سه بعدی
طراحی سه بعدی

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

هر دو پشتیبانی با چاپگر سه بعدی طراحی شده اند که شامل موارد زیر نیز می شوند:

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

در نهایت ، نور مانند دو عکس آخر خواهد بود.

مرحله 9: نصب گردن

نصب گردن
نصب گردن
نصب گردن
نصب گردن

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

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

مهم: بین شروع دکل و شروع چنگال تنظیم 5 میلی متر فاصله بگذارید ، زیرا مهره در آن سوراخ قرار می گیرد.

ما مهره را با چسب ، در جهت مشخص شده در شکل ، چسب می زنیم.

در نهایت ، 4 پین را در سوراخ هایی که در ابتدای دکل قرار دارد معرفی می کنیم و هر پین را با 2 پیچ کوتاه همانطور که در تصویر نشان داده شده نگه می دارد.

مرحله 10: نصب Birdge

نصب پرنده
نصب پرنده
نصب پرنده
نصب پرنده

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

ما چسب را در پیوند دو جزء اعمال می کنیم. ما دو قسمت را با کمک پیچ محکم کننده با دقت ثابت می کنیم تا محل اتصال خشک شود. ما دو سوراخ برای پیچ ها با یک مته 1.5 میلی متری برای چوب ایجاد می کنیم. پل را با دو پیچ بلند در بدنه ثابت کنید. و در نهایت ، کلاهک های محافظ را روی سر پیچ ها قرار می دهیم.

مرحله 11: مجموعه بدن و گردن

مونتاژ بدن و گردن
مونتاژ بدن و گردن
مونتاژ بدن و گردن
مونتاژ بدن و گردن

برای مونتاژ دو قسمت ، سوراخ هایی در سر بدن داریم که در آن گردن با دو برآمدگی که دارد مناسب می شود. می توانیم آنها را با چسب یا با تفنگ مذاب داغ بچسبانیم. برای تثبیت بیشتر ، می توانید سوراخ هایی را که در انتهای چنگال تنظیم قرار دارد ایجاد کنید تا به بدن متصل شود.

مرحله 12: رشته های Ukulele را قرار دهید

Image
Image
رشته های Ukulele را قرار دهید
رشته های Ukulele را قرار دهید
رشته های Ukulele را قرار دهید
رشته های Ukulele را قرار دهید

در نهایت ما باید تارها را طوری قرار دهیم که ساز ما تمام شود.

قبلاً ما حلقه های ثابت سنجاق ها را در برآمدگی هایی که از دکل عبور می کنند وارد می کنیم. برای قرار دادن سیم ها ، 4 سیم را که همراه کیت بود ، برداشتیم. ابتدا باید هر رشته را تشخیص دهید زیرا همه آنها یکسان نیستند. شما باید یک سر هر رشته (دو رشته ضخیم با یک گره معمولی و دو رشته نازک با یک دوبل) را ببندید و رشته ها را در شکاف های پل وارد کنید.

سپس رشته ها را به گونه ای قرار می دهیم که:

• موقعیت اول: رشته G (دومین رشته ضخیم).

• موقعیت دوم: رشته C (رشته ضخیم تر).

• موقعیت سوم: رشته E (رشته نازک دوم).

• موقعیت چهارم: یک رشته (رشته نازک تر).

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

اگر در مورد نحوه ساخت آن شک دارید ، می توانید از آن آموزش استفاده کنید که نحوه صحیح تنظیم رشته ها را توضیح می دهد.

مرحله 13: آزمایش

آزمایش کردن
آزمایش کردن
آزمایش کردن
آزمایش کردن

در نهایت ، باید ببینیم آیا یوکولل به درستی مونتاژ شده است به طوری که فاصله ایده آل در فرت اول 0.1 میلی متر و در دوازدهم تقریبا 1.2 میلی متر است.

لازم است که سیم های ukulele را تنظیم کنید. من این برنامه را به شما توصیه می کنم: GuitarTuna

مرحله 14: از آن لذت ببرید

در حال حاضر ، شما فقط باید از ukulele خود لذت ببرید.

اگر می خواهید اطلاعات بیشتری در مورد ما بدانید ، می توانید ما را در آدرس زیر پیدا کنید:

توییتر:Innovart_cc

فیس بوک:Innovartcc

اینستاگرام:Innovart_cc

وب سایت: Innovart.cc

توصیه شده: