Mündəricat:

Arduino ilə DIY Ağıllı Elektron Ukulele: 14 Addım (Şəkillərlə)
Arduino ilə DIY Ağıllı Elektron Ukulele: 14 Addım (Şəkillərlə)

Video: Arduino ilə DIY Ağıllı Elektron Ukulele: 14 Addım (Şəkillərlə)

Video: Arduino ilə DIY Ağıllı Elektron Ukulele: 14 Addım (Şəkillərlə)
Video: CS50 2015 - Week 8, continued 2024, Noyabr
Anonim
Arduino ilə DIY Ağıllı Elektron Ukulele
Arduino ilə DIY Ağıllı Elektron Ukulele

Ukulele səthinə istədiyimiz bir şeyi çəkmək və ya bəzi işıq effektləri əlavə etmək kimi öz ukulelinizi necə dizayn edə biləcəyinizi və bənzərsiz edəcək bəzi effektlər əlavə edə biləcəyinizi addım -addım izah edəcəyik.

Bunu etmək üçün bir ukulele dəsti almaq lazımdır.

Aləti necə yığacağımızı və ortaya çıxa biləcək fərqli problemləri həll edəcəyik.

Addım 1: Materiallar

Materiallar
Materiallar
Materiallar
Materiallar

Quruluş materialları:

DIY ukelele montaj dəsti (başqa fərqli bir dəst ola bilər):

1- Bədən.

2 Boyunlu.

3-yəhər

4-İp Dəstəyi

5-Körpü

6-telli qoz.

7-Maşın başı üçün sabitləyici üzük (x4).

8-Maşın başları (x4).

9-Maşın başları üçün montaj vintləri (x8).

Maşın körpüsü üçün 10-montaj vintləri (x2).

Körpü montaj vintləri üçün 11 qapaqlı qapaqlar (x2).

12-simli (x4).

Elektron materiallar:

  • NANO Arduino.
  • Led təkəri WS2812.
  • BMA220 sürətləndirici (isteğe bağlı).
  • Batareya konnektoru.
  • 9V batareya.
  • Keçid edin.

Digərləri

  • Taxta lak.
  • Velcro.
  • Lehimləmə qalay.
  • Laklama üçün qoruyucu plastik.
  • İsti əriyən silikon.

Alətlər:

  • Lazer oyma.
  • Zımpara
  • Ulduz tornavida.
  • Boya fırçası.
  • İsti əridilmiş silah.
  • Qalay lehimləmə dəmiri.

Addım 2: Ukulele'yi fərdiləşdirin

Ukulele'yi fərdiləşdirin
Ukulele'yi fərdiləşdirin
Ukulele'yi fərdiləşdirin
Ukulele'yi fərdiləşdirin
Ukulele'yi fərdiləşdirin
Ukulele'yi fərdiləşdirin

Ukuleleimizi bəzəmək üçün bədənimizdə lazer kəsici ilə bir rəsm oymağı edə bilərik. O alətin olmaması halında onu rəngləyə bilərik.

Seçdiyimiz şəkil ilk görünən şəkildir.

Birincisi, oyma etmək üçün rəsm şablonunu dizayn etməliyik.

Bunu həyata keçirmək üçün bu linkdən əldə edə biləcəyimiz 'Inkscape' adlı bir proqramdan istifadə edəcəyik:

İstifadə etmək üçün ikinci şəkildəki kimi istifadə etmək istədiyimiz şəkli düzəltməliyik. Alətin dairəsi ilə əlin əzələlərini tənzimləmək üçün ilkin görüntünü döndərdiyimizə baxa bilərsiniz. Daha əvvəl dediyimiz kimi, hər hansı bir şəkil qoya bilərsiniz.

Addım 3: Inkscape istifadə edərək görüntünü vektorlaşdırın

Inkscape istifadə edərək görüntünü vektorlaşdırın
Inkscape istifadə edərək görüntünü vektorlaşdırın
Inkscape istifadə edərək bir görüntünü vektorlaşdırın
Inkscape istifadə edərək bir görüntünü vektorlaşdırın
Inkscape istifadə edərək görüntünü vektorlaşdırın
Inkscape istifadə edərək görüntünü vektorlaşdırın
Inkscape istifadə edərək bir görüntünü vektorlaşdırın
Inkscape istifadə edərək bir görüntünü vektorlaşdırın

Bir pixmap -dən bir vektor faylının necə yaradılacağını (jpg, png, Inkscape -in aça biləcəyi hər hansı bir format) görəcəyik.

Inkscape Inkscape, açıq mənbəli vektor qrafik redaktorudur və başlıqdan da göründüyü kimi, bu, logoları vektorlaşdırmaq üçün istifadə edəcəyim bir vasitədir. Vektorlaşdırma addımları Adımlar, etmək istədiyimiz hər hansı bir vektorlaşdırma üçün ortaqdır.

  1. Şəkili Inkscape -də açın
  2. İz Bitmap Aləti Yolunu açın-> Bitmapı İzləyin
  3. Trace Bitmap variantları ətrafında oynayın
  4. İzləməni işə salın
  5. Nəticələri təmizləyin (lazım olduqda)

"Ətrafda oynamaq" hissəsinə diqqət yetirin. İzləmə üzrə mütəxəssis deyiləm, buna görə də bu aləti ən yaxşı nəticə əldə edənə qədər bükülüb dəyişən düymələri və işıqları olan qara qutu kimi qəbul edirəm.

Addım 4: Logo Oyma

Image
Image
Logo Oyma
Logo Oyma
Logo Oyma
Logo Oyma

Bunun üçün rəsmin oyulacağı səthin siluetinin olması vacibdir.

Oyma etmək üçün 'T2Laser' proqramından istifadə edəcəyik. Bu proqramı https://descargar.cnet.com/windows/t2-laser/3260-2… ünvanından əldə edə bilərik.

Proqramı açdıqdan sonra son addımda yaratdığımız görüntünü yükləməliyik. Sonra "nəzarət lazeri" düyməsini basın və cnc idarəetmə elementləri görünür. İki şəkil, lazer kəsicimizlə oyma prosesini və nəticəsini göstərir.

Addım 5: Zımpara və laklama

Zımpara və laklama
Zımpara və laklama
Zımpara və laklama
Zımpara və laklama
Zımpara və laklama
Zımpara və laklama
Zımpara və laklama
Zımpara və laklama

Ukulelimizi parlaq və pürüzsüz bir təbəqə ilə tərk etmək üçün alətimizi təşkil edən iki hissəni diqqətlə zımpara edə bilərik, çünki çəkilmiş rəsmə zərər verə bilərik (əgər ukuleli rəngləməyi seçmisinizsə, əvvəlcə zımpara edin). Sonra iki hissəmizi ləkələyəcəyik ki, daha qaranlıq bir rəng alsınlar və ağac daha çox müqavimət göstərsin. Normal bir ağac lakından istifadə edə bilərik, xüsusi olması lazım deyil.

Lak aldıqdan sonra bir az həll edici ilə qarışdırırıq ki, bir az həll olsun. Sonra, qarışığı boyuna və alətin gövdəsinə bir fırça ilə çəkirik və qurumağa buraxırıq.

Məhsulun ikinci bir təbəqəyə ehtiyacı olduğunu görsək, iki hissəni bir az zımpara edib bir qat seyreltilmiş lak tətbiq edə bilərik.

** TƏDBİRLƏR: Lak kimyəvi bir məhsuldur, buna görə də bu prosesi havalandırılan bir yerdə həyata keçirmək, qoxuların və qoruyucu gözlüklərin nəfəs almaması üçün maska taxmaq lazımdır.

Düzgün işləyə bilməyimiz üçün lazım olan materiallar fotoşəkillərdə olanlardır. Əsasən bir fırça, bir lak qabı (bizim vəziyyətimizdə qırmızı rəng), bir az solvent və vizual qorunma ilə işləyəcəyik. Və hər şeydən əvvəl yaxşı havalandırılan yerlərdə işləyin.

Addım 6: Avadanlıq

Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq
Avadanlıq

Arduino, acelerometr və ledli təkərlə birlikdə lövhəmiz, bütün komponentlərin alətdə hərəkət etməməsi üçün kiçik bir mötərizədə təqdim ediləcək.

Daha rahat etmək üçün bir batareya tutacağı və bir açar da əlavə etdik və cihazı istifadə etmədikdə batareyanı yormuruq. Bu dəstəyi ukulele gövdəsinin daxili üzünə bir parça Velcro (o da silikon və isti əriyən silahla işləyəcək) ilə bağlayacağıq.. Dəstəyi yaxşı tutacaq və öz funksiyasını yerinə yetirəcək şəkildə dizayn edilmişdir.

Addım 7: Proqram təminatı

Proqram təminatı
Proqram təminatı
Proqram təminatı
Proqram təminatı
Proqram təminatı
Proqram təminatı

Ukulele'imizə xüsusi bir bəzək vermək üçün bir LED təkəri sayəsində işıq effektləri əlavə edə bilərik. WS2812 -dən istifadə edəcəyik, ancaq məlumat cədvəlinin təlimatlarına uyğun olaraq digərlərindən istifadə edə bilərsiniz. Cazibə qüvvəsini təsir etməyə imkan verən bir acelerometer (BMA220) də istifadə edəcəyik.

Əslində, Arduinonun 'Adafruit' adlı kompüter kitabxanasına daxil olan 4 işıq oyunumuz olacaq. Bunun üçün üç komponent arasında düzgün bir əlaqə qurmalıyıq: Arduino NANO, WS2812 və BMA220, ilk şəkildəki kimi.

Qırmızı tellər güc üçündür, GND qaraları və qalanları düzgün işləməsi üçün zəruri bağlantılardır. İşıq dəsti üçün istifadə etdiyimiz kod "play_of_light_v0.ino" adlı bir fayla əlavə olunur. Proqramın düzgün işləməsi üçün lazımi kitabxanaları daxil etdiyinizə əmin olun. Dövrə xarici olaraq əlavə etdiyimiz batareyanın minimum 9V gərginliyi olmalıdır və bütün dövrəni gücləndirmək üçün lazım olan minimum cərəyanı verə biləcəyini təmin etməliyik.

// Dəyişənlər sayğacın kəsilməsi; // Dəyişənlər Ejemplo gravedad #include #include #include #define NUMBER_OF_LEDS_ON_RING 16 #NEOPIXEL_RING_DATA_PIN 9 təyin edin

bayt versiyası [3];

int8_t x_data; int8_t y_data; int8_t z_data; bayt aralığı = 0x00; float divi = 16; float x, y, z; float pi = 3.14159265359; float nx, ny, bucaq; int led, previousLed; QueueList ledQueue; Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING, NEOPIXEL_RING_DATA_PIN, NEO_GRB + NEO_KHZ800);

// Dəyişənlər Luces arcoiris

#include #ifdef _AVR_ #include #endif #define PIN 9 // Parametr 1 = zolaqdakı piksel sayı // Parametr 2 = Arduino pin nömrəsi (əksəriyyəti etibarlıdır) // Parametr 3 = piksel tipli bayraqlar, lazım olduqda əlavə edin: // NEO_KHZ800 800 KHz bit axını (WS2812 LEDli əksər NeoPixel məhsulları) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 deyil) FLORA pikselləri, WS2811 sürücüləri) // NEO_GRB Pikselləri GRB bit axını (əksər NeoPixel məhsulları üçün)/ / NEO_RGB Pikselləri RGB bit axını üçün bağlanır (v1 deyil FLORA piksel, v2) // Vacibdir: NeoPixel tükənmə riskini azaltmaq üçün, // piksel güc açarlarına 1000 uF kondansatör əlavə edin, ilk pikselin məlumat girişinə 300 - 500 Ohm müqavimətçi əlavə edin // və Arduino ilə ilk piksel arasındakı məsafəni minimuma endirin. Canlı bir dövrədə // bağlamaqdan çəkinin … əgər lazımdırsa, əvvəlcə GND -ni bağlayın.

// Rueda de colores dəyişənləri

// NeoPixel Ring sadə eskizi (c) 2013 Shae Erisson //, AdaFruit NeoPixel kitabxanasının qalan hissələrinə uyğun olaraq GPLv3 lisenziyası altında buraxılmışdır.

#daxil edin

#ifdef _AVR_ ##endif daxil edin

// Arduino -da hansı pin NeoPixel -ə bağlıdır?

// Bibloda və ya Gemmada bunu 1 #define PIN 9 olaraq dəyişdirməyi təklif edirik

// Arduino -ya neçə NeoPixel qoşulub?

#müəyyən NUMPIXELS 16

// NeoPixel kitabxanasını qurduqda, ona neçə piksel və hansı pinlə siqnal göndərmək lazım olduğunu söyləyirik.

// Köhnə NeoPixel zolaqları üçün üçüncü parametri dəyişdirməyiniz lazım ola biləcəyini unutmayın-mümkün dəyərlər haqqında daha çox məlumat üçün strandtest // nümunəsinə baxın. Adafruit_NeoPixel pikselləri = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int gecikmə müddəti = 50; // 50 ms gecikmə

// Dəyişənlər aleatoriosları rəngləndirir

#include #ifdef _AVR_ #include #endif

#PIN 9 təyin edin

#təyin NUM_LEDS 16

#parlaqlıq 200

// Adafruit_NeoPixel şeridi = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

bayt 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 AYARLARI

void setup () {// Codigo: Dirección de la gravedad neoring.begin (); neoring.setBrightness (200); Serial.begin (9600); Wire.begin (); Wire.beginTransmission (0x0A); // akselerometrin ünvanı // aralıq parametrləri Wire.write (0x22); // qeyd ünvanı Wire.write (aralıq); // "0x00" "0x01" "0x02" "0x03" olaraq təyin edilə bilər, vikidəki Datashhetə baxın // Wire.write aşağı keçid filtri (0x20); // qeyd ünvanı Wire.write (0x05); // "0x05" "0x04" …… "0x01" "0x00" olaraq təyin edilə bilər, wire Wend.endTransmission () Datashhet -ə baxın;

// Codigo; Luces Arcoiris

// Bu, Trinket 5V 16MHz üçündür, əgər (F_CPU == 16000000) clock_prescale_set (clock_div_1) əgər müəyyən edilmiş (_AVR_ATtiny85_) bir Trinket istifadə etmirsinizsə bu üç sətri silə bilərsiniz; #endif // Bibərin sonu xüsusi kod zolağı.begin (); strip.show (); // Bütün pikselləri "söndürmək" üçün başladın

// Código Rueda de colores

// Bu, Trinket 5V 16MHz üçündür, əgər Trinket #if (_AVR_ATtiny85_) əgər (F_CPU == 16000000) clock_prescale_set (clock_div_1) istifadə etmirsinizsə, bu üç sətri silə bilərsiniz; #endif // Bibliya sonunun xüsusi kodu

piksel.begin (); // Bu NeoPixel kitabxanasını işə salır.

// Codigo Interrupcion

sayğac = 1;

// Codigo Colores varios

// Bu, Trinket 5V 16MHz üçündür, əgər Trinket #if (_AVR_ATtiny85_) əgər (F_CPU == 16000000) clock_prescale_set (clock_div_1) istifadə etmirsinizsə, bu üç sətri silə bilərsiniz; #endif // Zinət əşyalarının xüsusi kodu strip.setBrightness (BRIGHTNESS); strip.begin (); strip.show (); // Bütün pikselləri "söndürmək" üçün başladın}

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

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

/Buck 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) bucaq+= 180; başqa bucaq += 360; } // end else if (bucaq == 360.0) bucaq = 0.0; led = dairəvi etmək (bucaq / (360 / NUMBER_OF_LEDS_ON_RING)); // led hərəkətini hamarlaşdırın, əgər (previousLed == led) {// heç bir şey etməz} başqa halda (əksClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = circularize (previousLed + 1); başqa led = dairə halına salın (previousLed - 1); ledQueue.push (led); makeLightShow (); previousLed = led; gecikmə (25); } sayğac = 2; } // Sayaç sona çatsa == 1 // Caso 2: Codigo del juego de luces del arcoiris else if (counter == 2) {for (int j = 0; j <5; j ++) {// Göstərilən bəzi nümunə prosedurlar piksellərə necə göstərmək olar: colorWipe1 (strip. Color (255, 0, 0), 50); // Qırmızı colorWipe1 (strip. Color (0, 255, 0), 50); // Yaşıl colorWipe1 (strip. Color (0, 0, 255), 50); // Mavi colorWipe1 (strip. Color (0, 0, 0, 255), 50); // Ağ RGBW // Teatrın piksel təqibini göndərin… TheaterChase (strip. Color (127, 127, 127), 50); // Ağ teatrChase (strip. Color (127, 0, 0), 50); // Qırmızı teatrChase (strip. Color (0, 0, 127), 50); // Mavi

göy qurşağı (5);

göy qurşağı dövrü (5); teatrChaseRainbow (5); } sayğac = 3; } // Sayaç varsa bitər == 2 // Caso 3: Luces Aleatorias else if (counter == 3) {for (int k = 0; k <50; k ++) {// NeoPixels dəsti üçün ilk NeoPixel 0, ikincisi 1, piksellərin sayına qədər bir eksi. int a = təsadüfi (255); int b = təsadüfi (255); int c = təsadüfi (255); üçün (int i = 0; i

// piksel. Color, RGB dəyərlərini 0, 0, 0 -dan 255, 255, 255 -ə qədər götürür

piksel.setPixelColor (i, piksel. Color (a, b, c)); // Orta parlaq yaşıl rəng.

piksel.show (); // Bu, yenilənmiş piksel rəngini aparata göndərir.

gecikmə (gecikmə); // Bir müddət gecikmə (milisaniyələrdə).

} a = təsadüfi (255); b = təsadüfi (255); c = təsadüfi (255); üçün (int i = NUMPIXELS; i> 0; i-) {

// piksel. Color, RGB dəyərlərini 0, 0, 0 -dan 255, 255, 255 -ə qədər götürür

piksel.setPixelColor (i, piksel. Color (a, b, c)); // Orta parlaq yaşıl rəng.

piksel.show (); // Bu, yenilənmiş piksel rəngini aparata göndərir.

gecikmə (gecikmə); // Bir müddət gecikmə (milisaniyələrdə).

}} sayğac = 4; } else if (counter == 4) {for (int g = 0; g <= 6; g ++) {// Piksellərə necə göstərilməsini göstərən bəzi nümunə prosedurlar: colorWipe (strip. Color (255, 0, 0), 50); // Qırmızı colorWipe (strip. Color (0, 255, 0), 50); // Yaşıl colorWipe (strip. Color (0, 0, 255), 50); // Mavi colorWipe (strip. Color (0, 0, 0, 255), 50); // Ağ ağOverRainbow (20, 75, 5); nəbz Ağ (5); // fullWhite (); // gecikmə (2000); göy qurşağıFade2White (3, 3, 1);

}

sayğac = 1; }} /////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// ///////////////////

/Metodos del Ejemplo de la gravedad

boş AccelerometerInit () {Wire.beginTransmission (0x0A); // akselerometrin ünvanı // Wire.write (0x04) akselerometrini sıfırlayın; // X məlumatları Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // (Wire.available ()) // slave, 2 nömrəli qul cihazından 6 bayt istəyin {Version [0] = Wire.read (); // characte olaraq bir bayt al} x_data = (int8_t) Versiya [0] >> 2; Wire.beginTransmission (0x0A); // akselerometrin ünvanı // Wire.write (0x06) akselerometrini sıfırlayın; // Y data Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // (Wire.available ()) // slave, 2 nömrəli qul cihazından 6 bayt istəyin {Version [1] = Wire.read (); // characte olaraq bir bayt al} y_data = (int8_t) Versiya [1] >> 2; Wire.beginTransmission (0x0A); // akselerometrin ünvanı // Wire.write (0x08) akselerometrini sıfırlayın; // Z məlumatları Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // (Wire.available ()) // slave, 2 nömrəli qul cihazından 6 bayt istəyin {Version [2] = Wire.read (); // characte olaraq bir bayt al} z_data = (int8_t) Versiya [2] >> 2; x = (float) x_data/divi; y = (üzmək) y_data/divi; z = (üzmək) z_data/divi; Serial.print ("X ="); Serial. çap (x); // Serial.print ("") simvolunu çap edin; Serial.print ("Y ="); Serial. çap (y); // Serial.print ("") simvolunu çap edin; Serial.print ("Z ="); // Serial.println (z) simvolunu çap edin; }

int circularize (int pos) {

əgər (pos> = NUMBER_OF_LEDS_ON_RING) qayıdırsa (pos - NUMBER_OF_LEDS_ON_RING); başqa halda (pos <0) qayıdır (pos + NUMBER_OF_LEDS_ON_RING); başqa qayıt (pos); }

int məsafə;

int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {məsafə = nextPos - prevPos; əgər (məsafə <0) məsafə += NUMBER_OF_LEDS_ON_RING; dönüş (məsafə); }

int ledPosition, currentQueueSize;

#define NUMBER_OF_LEDS_TO_SHINE 10 int parlaqlıq Addım = 255/NUMBER_OF_LEDS_TO_SHINE;

etibarsız makeLightShow () {

üçün (int j = 0; j <NUMBER_OF_LEDS_ON_RING; j ++) neoring.setPixelColor (j, 0, 0, 0); cariQueueSize = ledQueue.count (); for (int k = 0; k <currentQueueSize; k ++) {ledPosition = ledQueue.pop (); neoring.setPixelColor (ledPozisiya, 0, (parlaqlıq Addım * k), 0); if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition);} neoring.show ();}

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

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

/Metodlar luces del arcoiris

// Nöqtələri bir -birinin ardınca rəng boş rənglə doldurunWipe (uint32_t c, uint8_t gözləyin) {for (uint16_t i = 0; i

boş göy qurşağı (uint8_t gözləyin) {

uint16_t i, j;

üçün (j = 0; j <256; j ++) {üçün (i = 0; i

// Bir az fərqlidir, bu göy qurşağını hər tərəfə bərabər paylayır

boş göy qurşağı dövrü (uint8_t gözləyin) {uint16_t i, j;

for (j = 0; j <256*5; j ++) {// (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); gecikmə (gözləmək); }}

// Teatr tərzi sürünən işıqlar.

void teatrChase (uint32_t c, uint8_t gözləyin) {for (int j = 0; j <10; j ++) {// (int q = 0; q <3; q ++) {üçün (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // hər üçüncü pikseli yandırın} strip.show ();

gecikmə (gözləmək);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // hər üçüncü pikseli söndürün}}}}

// Göy qurşağı effektli teatr tərzi sürünən işıqlar

void teatrChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// (int q = 0; q <3; q ++) {üçün (int j = 0; j <256; j ++) {// təkərdəki 256 rəngin hamısını döndərin (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Təkər ((i+j) % 255))); // hər üçüncü pikseli yandırın} strip.show ();

gecikmə (gözləmək);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // hər üçüncü pikseli söndürün}}}}

// Rəng dəyəri əldə etmək üçün 0 -dan 255 -ə qədər bir dəyər daxil edin.

// Rənglər r - g - b - r -yə qayıdışdır. uint32_t Təkər (bayt WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {qayıtma zolağı. Color (255 - WheelPos * 3, 0, WheelPos * 3); } əgər (WheelPos <170) {WheelPos -= 85; geri zolaq. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; geri zolaq. Color (WheelPos * 3, 255 - WheelPos * 3, 0); }

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

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

/Metodlar Rueda de colores

// int elegirColor = təsadüfi (0x000000, 0xffffff);

// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = təsadüfi (1, 7); // Podemos 7 rəngdən ibarətdir ki, bu da çox rənglidir // əgər (elegirColor == 1) CylonEyeColor = HtmlColor (0xff0000); // Rojo // əgər (elegirColor) 2) CylonEyeColor = HtmlColor (0x00ff00); // Verde // if (elegirColor == 3) CylonEyeColor = HtmlColor (0x0000ff); // Azul // if (elegirColor == 4) CylonEyeColor = HtmlColor (0) // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020); // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff); // Azul Claro // if (elegirColor == 7) Cylon HtmlColor (0x100010); // Rosa // CylonEyeColor = HtmlColor (0x000000);

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

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

/Metodos müxtəlifliklərə kömək edir

// Nöqtələri bir -birinin ardınca rənglə doldurun

void colorWipe1 (uint32_t c, uint8_t gözləyin) {for (uint16_t i = 0; i

boş pulseWhite (uint8_t gözləyin) {

for (int j = 0; j <256; j ++) {for (uint16_t i = 0; i

üçün (int j = 255; j> = 0; j-) {

üçün (uint16_t i = 0; i

void rainbowFade2White (uint8_t gözləyin, göy qurşağıLoops, int whiteLoops) {

float fadeMax = 100.0; int fadeVal = 0; uint32_t wheelVal; int redVal, greenVal, blueVal;

for (int k = 0; k <rainbowLoops; k ++) {for (int j = 0; j <256; j ++) {// təkərdəki bütün rənglərin 5 dövrü

for (int i = 0; i <strip.numPixels (); i ++) {

wheelVal = Təkər (((i * 256 / strip.numPixels ()) + j) & 255);

redVal = qırmızı (wheelVal) * float (fadeVal/fadeMax);

greenVal = yaşıl (wheelVal) * float (fadeVal/fadeMax); blueVal = mavi (wheelVal) * float (fadeVal/fadeMax);

strip.setPixelColor (i, strip. Color (redVal, greenVal, blueVal));

}

// İlk döngə, sön!

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

// Son döngə, sön!

başqa əgər (k == göy qurşağıLoops - 1 && j> 255 - fadeMax) {fadeVal--; }

strip.show ();

gecikmə (gözləmək); }}

gecikmə (500);

üçün (int k = 0; k <whiteLoops; k ++) {

üçün (int j = 0; j <256; j ++) {

for (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }

gecikmə (2000);

üçün (int j = 255; j> = 0; j-) {

for (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j])); } strip.show (); }}

gecikmə (500);

}

void whiteOverRainbow (uint8_t gözləyin, uint8_t whiteSpeed, uint8_t whiteLength) {

əgər (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1;

int head = whiteLength - 1;

int quyruq = 0;

int döngələri = 3;

int loopNum = 0;

statik işarəsiz uzun lastTime = 0;

while (doğru) {

for (int j = 0; j <256; j ++) {for (uint16_t i = 0; i = quyruq && i başı && i> = quyruq) || (quyruq> baş && i <= baş)) {strip.setPixelColor (i, strip. Color (0, 0, 0, 255)); } başqa {strip.setPixelColor (i, Təkər (((i * 256 / strip.numPixels ()) + j) & 255))); }}

if (millis () - lastTime> whiteSpeed) {

baş ++; quyruq ++; if (head == strip.numPixels ()) {loopNum ++; } lastTime = milis (); }

if (loopNum == loops) qayıt;

baş%= strip.numPixels (); quyruq%= strip.numPixels (); strip.show (); gecikmə (gözləmək); }}} void fullWhite () {for (uint16_t i = 0; i

// Bir az fərqlidir, bu göy qurşağını hər tərəfə bərabər paylayır

boş göy qurşağıCycle1 (uint8_t gözləyin) {uint16_t i, j;

for (j = 0; j <256 * 5; j ++) {// (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); gecikmə (gözləmək); }}

boş göy qurşağı1 (uint8_t gözləyin) {

uint16_t i, j;

üçün (j = 0; j <256; j ++) {üçün (i = 0; i

// Rəng dəyəri əldə etmək üçün 0 -dan 255 -ə qədər bir dəyər daxil edin.

// Rənglər r - g - b - r -yə qayıdışdır. uint32_t Wheel1 (bayt WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {qayıtma zolağı. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0); } əgər (WheelPos <170) {WheelPos -= 85; geri zolaq. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0); } WheelPos -= 170; geri zolaq. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0); }

uint8_t qırmızı (uint32_t c) {

qayıt (c >> 16); } uint8_t yaşıl (uint32_t c) {qayıt (c >> 8); } uint8_t mavi (uint32_t c) {qayıt (c); }

Addım 8: 3D Dizayn

3D dizayn
3D dizayn
3D dizayn
3D dizayn
3D dizayn
3D dizayn

Düzgün olduğundan əmin olmaq üçün əvvəlcə hardware komponentlərinizin ölçüsünü təyin etməlisiniz. Əgər onlar bizimki ilə eynidirsə, sizə verdiyimiz sənədlərdən istifadə edə bilərsiniz.

Hər iki dəstək də 3D printerlə hazırlanmışdır, bunlar da daxildir:

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

Nəhayət, işıq son iki şəkil kimi olacaq.

Addım 9: Boyun montajı

Boyun montajı
Boyun montajı
Boyun montajı
Boyun montajı

Əvvəlcə yəhərin boynunu yerləşdirəcəyik. Vintlərin tutması lazım olan deliklər orada yoxdur, buna görə də hara getməli olduqlarını qeyd edərək, diqqətlə, bir delik açaraq delik açmalıyıq.

Eyni şey, boyunun özünü alətin gövdəsinə tutan vintlərin olduğu deliklərə də aiddir. Bunları etmək lazım deyil, çünki bu bağlama üçün vintlər yoxdur, amma bunu etmək istəyiriksə, heç bir problem olmaz.

ƏHƏMİYYƏTLİ: dirəyin başlanğıcı ilə sazlama çəngəlinin başlaması arasında 5 mm boşluq buraxın, çünki həmin çuxurda qoz yerləşdiriləcək.

Şəkildə göstərilən istiqamətdə qozu yapışqan ilə yapışdıracağıq.

Nəhayət, dirəyin başında olan çuxurlarda, hər bir pimi 2 qısa vida ilə şəkildə göstərildiyi kimi tutaraq 4 sancağı təqdim edəcəyik.

Addım 10: Quşun quraşdırılması

Quşun montajı
Quşun montajı
Quşun montajı
Quşun montajı

Körpü yapışdıraraq və iki uzun vida ilə gövdənin mərkəzi mövqeyində sabitlənir. Bədəndəki düzgün mövqeyi qələmlə qeyd etmək məsləhətdir. Şəkildə qeyd olunan məsafələri götürəcəyik.

İki komponentin birləşməsində yapışqan tətbiq edəcəyik. Derz quruyana qədər bir sıxma vidasının köməyi ilə iki hissəni diqqətlə düzəldirik. Vida üçün iki delik taxta üçün 1,5 mm qazma ucu ilə düzəldəcəyik. Körpü gövdəsindəki iki uzun vida ilə düzəldin. Və nəhayət, vintlərin başlarına qoruyucu qapaqlar qoyduq.

Addım 11: Bədən və Boyun Montajı

Bədən və Boyun Məclisi
Bədən və Boyun Məclisi
Bədən və Boyun Məclisi
Bədən və Boyun Məclisi

İki hissəni bir araya gətirmək üçün bədənin başında boynunun iki çıxıntı ilə uyğunlaşacağı deliklər var. Onları yapışqanla və ya isti əridilmiş silahla yapışdıra bilərik. Daha böyük bir fiksasiya əldə etmək üçün, sazlama çəngəlinin ucundakı delikləri bədənə bağlamaq üçün düzəldə bilərsiniz.

Addım 12: Ukulele Strings qoyun

Image
Image
Ukulele Strings qoyun
Ukulele Strings qoyun
Ukulele Strings qoyun
Ukulele Strings qoyun

Nəhayət, alətlərimizin bitməsi üçün telləri yerləşdirməliyik.

Daha əvvəl, dirəkdən keçənlərin proyeksiyasına sancaqların bərkidici halqalarını daxil edəcəyik. İpləri yerləşdirmək üçün dəstlə birlikdə gələn 4 ipi götürdük. Əvvəlcə hər bir simli fərqləndirməlisiniz, çünki hamısı eyni deyil. Hər bir ipin bir ucunu (iki qalın ucunu normal düyünlə, ikisini isə ikiqat ilə) bağlamalı və ipləri körpünün yivlərinə daxil etməlisiniz.

Sonra simləri belə bir şəkildə yerləşdirəcəyik:

• Birinci mövqe: G simli (ikinci ən qalın sim).

• İkinci mövqe: C simli (daha qalın sim).

• Üçüncü mövqe: E simli (ikinci incə ip).

• Dördüncü mövqe: Bir ip (daha incə ip).

İpləri təchiz olunmuş fişin deliklərinə keçirin. Pimi iki və ya üç dəfə döndərərək hər bir ipi düzəltməyə çalışın. Çox güc tətbiq etmədən ipləri gərin və iplə yəhər arasındakı məsafəni yoxlayın.

Bunun necə ediləcəyinə dair hər hansı bir şübhəniz varsa, iplərin necə düzgün qoyulduğunu izah edən bu dərsdən istifadə edə bilərsiniz.

Addım 13: Test

Test
Test
Test
Test

Nəhayət, ukulele düzgün şəkildə yığılıb -yığılmadığını görməliyik ki, birinci pərdə ideal məsafə 0,1 mm, on ikinci hissədə isə təxminən 1,2 mm -dir.

Ukulele simlərini tənzimləməyinizə ehtiyac var. Bu proqramı sizə tövsiyə edirəm: GuitarTuna

Addım 14: Zövq alın

İndi yalnız ukulelinizdən zövq almalısınız.

Haqqımızda daha çox məlumat əldə etmək istəyirsinizsə bizi buradan tapa bilərsiniz:

Twitter: @Innovart_cc

Facebook: @Innovartcc

İnstagram: @Innovart_cc

Veb: Innovart.cc

Tövsiyə: