Բովանդակություն:

DIY Smart Electronic Ukulele Arduino- ով. 14 քայլ (նկարներով)
DIY Smart Electronic Ukulele Arduino- ով. 14 քայլ (նկարներով)

Video: DIY Smart Electronic Ukulele Arduino- ով. 14 քայլ (նկարներով)

Video: DIY Smart Electronic Ukulele Arduino- ով. 14 քայլ (նկարներով)
Video: RAMPS 1.4 - LCD (REPRAP DISCOUNT SMART CONTROLLER) 2024, Նոյեմբեր
Anonim
DIY Smart Էլեկտրոնային Ukulele Arduino- ի հետ
DIY Smart Էլեկտրոնային Ukulele Arduino- ի հետ

Մենք քայլ առ քայլ կբացատրենք, թե ինչպես կարող եք նախագծել ձեր սեփական ուկուլելեն և ավելացնել որոշ էֆեկտներ, որոնք այն կդարձնեն յուրահատուկ, օրինակ ՝ նկարել այն, ինչ մենք ցանկանում ենք, և որևէ լուսային էֆեկտներ ավելացնել:

Դա անելու համար անհրաժեշտ է գնել ուկուլելի հավաքածու:

Մենք պատրաստվում ենք բացատրել, թե ինչպես հավաքել գործիքը և լուծել տարբեր խնդիրներ, որոնք կարող են ի հայտ գալ:

Քայլ 1: Նյութեր

Նյութեր
Նյութեր
Նյութեր
Նյութեր

Կառուցվածքային նյութեր

DIY ukelele ամրացման հավաքածու (այն կարող է լինել մեկ այլ տարբերակի հավաքածու), որը կազմված է

1- Մարմին:

2-Պարանոց:

3-թամբ

4-Պարան աջակցություն

5-կամուրջ

6-լարային ընկույզ:

7-ամրացման օղակ մեքենայի գլխի համար (x4):

8-մեքենայի գլուխներ (x4):

9-պտուտակներ մեքենայի գլուխների համար (x8):

10-ամրացման պտուտակներ մեքենայի կամրջի համար (x2):

11-Կափարիչներ `կամրջի ամրացման պտուտակների համար (x2):

12-լարային (x4):

Էլեկտրոնային նյութեր

  • ՆԱՆՈ Արդուինո:
  • Leds of Leds WS2812:
  • BMA220 արագացուցիչ (ըստ ցանկության):
  • Մարտկոցի միակցիչ:
  • Մարտկոց ՝ 9 Վ
  • Անջատիչ

Մյուսները

  • Փայտե լաք:
  • Velcro:
  • Oldոդման անագ:
  • Պաշտպանական պլաստիկ `լաքապատման համար:
  • Տաք հալվող սիլիկոն:

Գործիքներ:

  • Լազերային փորագրություն.
  • Հղկաթուղթ
  • Աստղային պտուտակահան:
  • Ներկի խոզանակ:
  • Տաք հալեցման ատրճանակ:
  • Անագի զոդման երկաթ:

Քայլ 2: Անհատականացրեք Ukulele- ն

Անհատականացրեք Ukulele- ն
Անհատականացրեք Ukulele- ն
Անհատականացրեք Ukulele- ն
Անհատականացրեք Ukulele- ն
Անհատականացրեք Ukulele- ն
Անհատականացրեք Ukulele- ն

Մեր ուկուլելին զգեստավորելու համար մենք կարող ենք գծանկար փորագրել ՝ մարմնի վրա լազերային դանակով: Այդ գործիքը չունենալու դեպքում կարող էինք ներկել այն:

Մեր ընտրած պատկերն առաջինն է, որ հայտնվում է:

Նախևառաջ, մենք պետք է ձևավորենք գծագրության ձևանմուշ ՝ փորագրություն կատարելու համար:

Դա իրականացնելու համար մենք կօգտագործենք «Inkscape» կոչվող ծրագրակազմ, որը կարող ենք ձեռք բերել այս հղումից ՝

Այն օգտագործելու համար մենք պետք է կարգավորենք այն պատկերը, որը ցանկանում ենք օգտագործել, ինչպես ցույց ենք տալիս երկրորդ նկարում: Կարող եք թվալ, որ մենք շրջել ենք սկզբնական պատկերը, որպեսզի կարողանանք ձեռքի թեքությունը հարմարեցնել գործիքի շրջանագծին: Ինչպես նախկինում ասել ենք, կարող եք տեղադրել ցանկացած պատկեր:

Քայլ 3. Պատկերը վեկտորացրեք ՝ օգտագործելով Inkscape

Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape
Վեկտորացրեք պատկերը ՝ օգտագործելով Inkscape

Մենք կտեսնենք, թե ինչպես ստեղծել վեկտորային ֆայլ pixmap- ից (jpg, png, ինչպիսի ռաստերային ձևաչափ, որը Inkscape- ը կարող է բացել):

Inkscape Inkscape- ը բաց կոդով վեկտորային գրաֆիկայի խմբագիր է, և ինչպես ենթադրվում է վերնագրից, սա այն գործիքն է, որը ես կօգտագործեմ լոգոները վեկտորիզացնելու համար: Վեկտորացման քայլեր Քայլերը սովորական են ցանկացած վեկտորացման համար, որը մենք կցանկանայինք անել:

  1. Բացեք պատկերը Inkscape- ում
  2. Բացեք Trace Bitmap Tool Path-> Trace Bitmap
  3. Խաղացեք Trace Bitmap ընտրանքների շուրջ
  4. Գործարկեք հետագծումը
  5. Մաքրել արդյունքները (անհրաժեշտության դեպքում)

Ուշադրություն դարձրեք «խաղալու» հատվածին: Ես հետագծման մասնագետ չեմ, ուստի ես այս գործիքին վերաբերվում եմ որպես սև արկղ ՝ բռնակներով և լույսերով, պտտվելով և փոխելով մինչև լավագույն արդյունքը ստանալը

Քայլ 4: Լոգոյի փորագրություն

Image
Image
Լոգոյի փորագրություն
Լոգոյի փորագրություն
Լոգոյի փորագրություն
Լոգոյի փորագրություն

Դրա համար կարևոր է ունենալ մակերևույթի ուրվագիծ, որի վրա կարտադրվի գծանկարի փորագրությունը:

Փորագրություն կատարելու համար մենք պատրաստվում ենք օգտագործել «T2Laser» ծրագրակազմը: Մենք կարող ենք ձեռք բերել այս ծրագրաշարը ՝

Theրագրակազմը բացելուց հետո մենք պետք է բեռնենք վերջին քայլի ստեղծած պատկերը: Այնուհետև կտտացրեք «կառավարման լազեր» կոճակին և հայտնվում է cnc- ի կառավարման տարրերը: Երկու նկարները ցույց են տալիս մեր լազերային դանակով փորագրման ընթացքն ու արդյունքը:

Քայլ 5: հղկում և լաքապատում

Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում
Հղկում և լաքապատում

Մեր ուկուլելը պայծառ և շերտով առանց կոպիտության թողնելու համար մենք կարող ենք սահուն խնամքով մանրացնել մեր գործիքը կազմող երկու մասերը, քանի որ կարող ենք վնասել պատրաստված նկարը (եթե դուք ընտրել եք նկարել ուկուլելը, ապա ստիպված կլինեք նախ մանրացրեք): Այնուհետև մենք լաքապատելու ենք մեր երկու մասերը, որպեսզի նրանք ստանան ավելի մուգ գույն, և փայտը ավելի մեծ դիմադրություն ցույց տա: Մենք կարող ենք օգտագործել սովորական փայտի լաք, այն հատուկ կարիք չունի:

Երբ ունենք լաքը, այն խառնում ենք մի փոքր լուծիչով, որպեսզի մի փոքր լուծվի: Հաջորդը, մենք խոզանակով խառնուրդը քսում ենք գործիքի պարանոցի և մարմնի վրա և թողնում ենք չորանա:

Եթե տեսնենք, որ ապրանքը երկրորդ շերտ է պահանջում, կարող ենք մի փոքր ավազել երկու մասերը և նորից քսել նոսրացված լաքի շերտը:

** PԳՈՇԱՈԹՅՈՆՆԵՐ. Լաքը քիմիական արտադրանք է, ուստի անհրաժեշտ է այս գործընթացն իրականացնել օդափոխվող վայրում, դիմակ կրել ՝ հոտերի և պաշտպանիչ ակնոցների ներշնչումից խուսափելու համար:

Նյութերը, որոնք մեզ պետք են, որպեսզի կարողանանք ճիշտ աշխատել, այն են, որոնք հայտնվում են լուսանկարներում: Հիմնականում մենք աշխատելու ենք խոզանակով, լաքով (մեր դեպքում կարմիր գույնով), մի փոքր վճարունակ և տեսողական պաշտպանությամբ: Եվ առաջին հերթին աշխատել լավ օդափոխվող տարածքներում:

Քայլ 6: Սարքավորումներ

Սարքավորումներ
Սարքավորումներ
Սարքավորումներ
Սարքավորումներ
Սարքավորումներ
Սարքավորումներ

Arduino- ով մեր տախտակը, արագաչափը և լուսարձակներ ունեցող անիվը կներկայացվեն մի փոքր փակագծում, որպեսզի խուսափեն գործիքի մեջ բոլոր բաղադրիչների տեղաշարժից:

Մենք նաև ավելացրել ենք մարտկոցի բռնակ և անջատիչ `այն ավելի հարմարավետ դարձնելու համար և մարտկոցը չենք մաշում, երբ գործիքը չենք օգտագործում: Այս աջակցությունը մենք կցենք Velcro- ի կտորով (այն կաշխատի նաև սիլիկոնով և տաք հալվող ատրճանակով) ՝ ukulele մարմնի ներքին երեսին: Մյուս կողմից, LED անիվը փոքր է անցքից, ուստի այն կընկնի. Աջակցությունը նախագծված է այնպես, որ այն լավ պահի և կարողանա կատարել իր գործառույթը:

Քայլ 7:.րագրակազմ

Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում
Ծրագրային ապահովում

Մեր ուկուլելեին հատուկ զարդարանք հաղորդելու համար մենք կարող ենք լուսային էֆեկտներ ավելացնել լուսադիոդների անիվի շնորհիվ: Մենք պատրաստվում ենք օգտագործել WS2812- ը, բայց դուք կարող եք օգտագործել ցանկացած այլ ՝ հետևելով տվյալների թերթի հրահանգներին: Մենք կօգտագործենք նաև ացելերոմետր (BMA220), որը թույլ է տալիս մեզ ազդել ձգողության վրա:

Փաստորեն, մենք կունենանք 4 լույսի պիես, որոնք ներառված են Arduino- ի «Adafruit» կոչվող համակարգչային գրադարանում: Դրա համար մենք պետք է ճիշտ կոնցեսիա կատարենք երեք բաղադրիչների միջև ՝ Arduino NANO, WS2812 և BMA220, ինչպես առաջին նկարում է:

Կարմիր լարերը ուժի համար են, GND սևերը և մնացածը անհրաժեշտ միացումներ են `ճիշտ աշխատանքի համար: Կոդ, որը մենք օգտագործել ենք լուսային հավաքածուի համար, կցված է« play_of_light_v0.ino »կոչվող ֆայլում: Համոզվեք, որ ներառել եք անհրաժեշտ գրադարանները ծրագրի ճիշտ աշխատանքի համար: Մարտկոցը, որը մենք ավելացնում ենք շղթայի արտաքին մասում, պետք է ունենա նվազագույն լարման 9 Վ, և մենք պետք է ապահովենք, որ այն ի վիճակի է ապահովել նվազագույն հոսանքը, որն անհրաժեշտ է ամբողջ միացման համար:

// Variables contador e interrupciónint հաշվիչ; // Փոփոխականներ 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; բոց divi = 16; բոց x, y, z; float pi = 3.14159265359; float nx, ny, անկյուն; 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 = Arduino փին համարը (շատերը վավեր են) // Պարամետր 3 = պիքսելային տիպի դրոշներ, ըստ անհրաժեշտության ավելացնել միասին. // NEO_KHZ800 800 ԿՀց բիթսթրիմ (NeoPixel- ի մեծամասնությունը w/WS2812 LED- ներով) // NEO_KHZ400 400 ԿՀց (դասական «v1» (ոչ v2) FLORA պիքսելներ, WS2811 վարորդներ) // NEO_GRB պիքսելները միացված են GRB բիթստրիմի համար (առավել NeoPixel արտադրանք)/ / NEO_RGB պիքսելները միացված են RGB բիթստրիմի համար (v1 FLORA պիքսել, ոչ v2) // NEO_RGBW պիքսելները միացված են RGBW բիթսթրիմի համար (NeoPixel RGBW արտադրանք) Adafruit_NeoPixel շերտ = Adafruit_NeoPixel (16, PIN, NEO_GRB + NEO) // ԿԱՐԵՎՈՐ. NeoPixel- ի այրման ռիսկը նվազեցնելու համար ավելացրեք 1000 uF կոնդենսատոր // պիքսելային հոսանքի հոսանքների վրա, առաջին պիքսելի տվյալների մուտքագրման վրա ավելացրեք 300 - 500 Օմ դիմադրություն // և նվազագույնի հասցրեք Arduino- ի և առաջին պիքսելների միջև հեռավորությունը: Խուսափեք // ուղիղ միացման միացումից … եթե անհրաժեշտ է, նախ միացրեք GND- ը:

// Փոփոխականներ Rueda de colores

// NeoPixel Ring պարզ ուրվագիծ (գ) 2013 Shae Erisson // թողարկված GPLv3 լիցենզիայով ՝ AdaFruit NeoPixel գրադարանի մնացած գրադարանին համապատասխանելու համար

#ներառում

#ifdef _AVR_ #ներառել #endif

// Arduino- ի ո՞ր քորոցը միացված է NeoPixels- ին:

// Կտրուկի կամ Gemma- ի վրա մենք առաջարկում ենք սա փոխել 1 #սահմանել PIN 9

// Քանի՞ NeoPixel է կցված Arduino- ին:

#սահմանել NUMPIXELS 16

// Երբ մենք կարգավորում ենք NeoPixel գրադարանը, մենք նրան ասում ենք, թե քանի պիքսել, և որ քորոցն օգտագործել ազդանշաններ ուղարկելու համար:

// Նկատի ունեցեք, որ ավելի հին NeoPixel շերտերի համար կարող է անհրաժեշտ լինել փոխել երրորդ պարամետրը `տե՛ս strandtest // օրինակը հնարավոր արժեքների մասին լրացուցիչ տեղեկությունների համար: Adafruit_NeoPixel պիքսել = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int հետաձգում = 50; // հետաձգում 50 ms

// Variables colores aleatorios

#ներառել #ifdef _AVR_ #ներառել #endif

#սահմանեք PIN 9

#սահմանել NUM_LEDS 16

#սահմանեք ՊԱՀՔՈ 200ԹՅՈՆԸ 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 (range); // կարելի է սահմանել «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_) եթե (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // մանրահատակի վերջը հատուկ ծածկագիր strip.begin (); strip.show (); // Նախագծել բոլոր պիքսելները «անջատված»

// Código Rueda de colores

// Սա Trinket 5V 16MHz- ի համար է, կարող եք հեռացնել այս երեք տողերը, եթե դուք չեք օգտագործում Trinket #if սահմանված (_AVR_ATtiny85_) եթե (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // մանրուքների վերջի հատուկ ծածկագիր

pixels.begin (); // Սա նախաստորագրում է NeoPixel գրադարանը:

// Codigo Interrupcion

հաշվիչ = 1;

// Codigo Colores varios

// Սա Trinket 5V 16MHz- ի համար է, կարող եք հեռացնել այս երեք տողերը, եթե դուք չեք օգտագործում Trinket #if սահմանված (_AVR_ATtiny85_) եթե (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // մանրուքների վերջը հատուկ ծածկագիր strip.setBrightness (BRIGHTNESS); strip.begin (); strip.show (); // Նախագծել բոլոր պիքսելները դեպի «անջատված»}

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

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

/Միջուկային անվերջություն

դատարկ շրջան () {// Caso 1: Juego de luces de la gravedad; եթե (հաշվիչ == 1) {համար (int i = 0; i 0.0) {եթե (nx 0.0) անկյուն+= 180; այլ անկյուն += 360; } // այլ կերպ ավարտել, եթե (անկյուն == 360.0) անկյուն = 0.0; led = շրջանառություն (անկյուն / (360 / NUMBER_OF_LEDS_ON_RING)); // դարձնել led շարժումը սահուն, եթե (previousLed == led) {// ոչինչ անել անելու} այլ դեպքում, եթե (counterClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = շրջանառություն (previousLed + 1); else led = շրջանառություն (նախորդ ՝ led - 1); ledQueue.push (led); makeLightShow (); previousLed = led; ուշացում (25); } հաշվիչ = 2; } // Ավարտել, եթե հաշվիչ == 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); // Red colorWipe1 (շերտ. Գույն (0, 255, 0), 50); // Կանաչ գույնWipe1 (շերտ. Գույն (0, 0, 255), 50); // Blue colorWipe1 (շերտ. Գույն (0, 0, 0, 255), 50); // Սպիտակ RGBW // Ուղարկեք թատրոնի պիքսելային հետապնդում… theaterChase (strip. Color (127, 127, 127), 50); // White theaterChase (շերտ. Գույն (127, 0, 0), 50); // Red theaterChase (շերտ. Գույն (0, 0, 127), 50); // Կապույտ

ծիածան (5);

rainbowCycle (5); theaterChaseRainbow (5); } հաշվիչ = 3; } // Ավարտ, եթե հաշվիչ == 2 // Caso 3. Luces Aleatorias ուրիշ եթե (հաշվիչ == 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, պիքսելներ. Color (a, b, c)); // Չափավոր վառ կանաչ գույն:

pixels.show (); // Սա ուղարկում է պիքսելների թարմացված գույնը ապարատին:

ուշացում (ուշացում); // Որոշ ժամանակով հետաձգում (միլիվայրկյաններով):

} a = պատահական (255); b = պատահական (255); գ = պատահական (255); համար (int i = NUMPIXELS; i> 0; i-) {

// պիքսելներ. Գույնը վերցնում է RGB արժեքները ՝ 0, 0, 0 -ից մինչև 255, 255, 255

pixels.setPixelColor (i, պիքսելներ. Color (a, b, c)); // Չափավոր վառ կանաչ գույն:

pixels.show (); // Սա ուղարկում է պիքսելների թարմացված գույնը ապարատին:

ուշացում (ուշացում); // Որոշ ժամանակով հետաձգում (միլիվայրկյաններով):

}} հաշվիչ = 4; } else if (հաշվիչ == 4) {for (int g = 0; g <= 6; g ++) {// Որոշ օրինակ ընթացակարգեր, որոնք ցույց են տալիս, թե ինչպես ցուցադրել պիքսելներին. colorWipe (strip. Color (255, 0, 0), 50); // Red colorWipe (շերտ. Գույն (0, 255, 0), 50); // Կանաչ գույնը Սրբել (շերտ. Գույն (0, 0, 255), 50); // Blue colorWipe (շերտ. Գույն (0, 0, 0, 255), 50); // White whiteOverRainbow (20, 75, 5); զարկերակ Սպիտակ (5); // fullWhite (); // ուշացում (2000); rainbowFade2White (3, 3, 1);

}

հաշվիչ = 1; }} /////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////

/Metodos del Ejemplo de la gravedad

անվավեր AccelerometerInit () {Wire.beginTransmission (0x0A); // արագացուցիչի հասցեն // զրոյականացնել արագացուցիչի Wire.write (0x04); // X տվյալների 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 տվյալների 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 շրջանառություն (int pos) {

եթե (pos> = NUMBER_OF_LEDS_ON_RING) վերադառնալ (pos - NUMBER_OF_LEDS_ON_RING); հակառակ դեպքում (pos <0) վերադառնալ (pos + NUMBER_OF_LEDS_ON_RING); այլապես վերադառնալ (pos); }

int հեռավորություն;

int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {distance = nextPos - prevPos; եթե (հեռավորություն <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

// Լրացրեք կետերը մեկը մյուսի հետևից գույնի դատարկ գույնով Սրբել (uint32_t c, uint8_t սպասել) {for (uint16_t i = 0; i

դատարկ ծիածան (uint8_t սպասել) {

uint16_t i, j;

համար (j = 0; j <256; j ++) {համար (i = 0; i

// Մի փոքր այլ, սա ծիածանը դարձնում է հավասարաչափ բաշխված ամբողջ երկայնքով

void rainbowCycle (uint8_t սպասել) {uint16_t i, j;

անիվի վրա (j = 0; j <256*5; j ++) {// բոլոր գույների 5 ցիկլ (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, անիվ (((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 ++) {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 theaterChaseRainbow (uint8_t սպասել) {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, Անիվ ((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 Անիվ (բայթ WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {վերադարձի շերտ. 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 = պատահական (0x000000, 0xffffff); // Անպայման ընտրեք ձեր նախընտրած գույները, որոնք ընդունում են 0x000000 y 0xFFFFFF

// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = պատահական (1, 7); // Podemos elegir aleatoriamente entre los 7 colours 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 (0xffff0000); // if (elegirColor == 5) CylonEyeColor = HtmlColor (0x200020); // Morado // if (elegirColor == 6) CylonEyeColor = HtmlColor (0x00ffff); // Azul Claro // if (elegirColor == 7) CylonEyeC HtmlColor (0x100010); // Rosa // CylonEyeColor = HtmlColor (0x000000);

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

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

/Metodos luces varias

// Կետերը մեկը մյուսի հետևից լրացրու գույնով

դատարկ գույն Սրբել 1 (uint32_t c, uint8_t սպասել) {for (uint16_t i = 0; i

դատարկ զարկերակ Սպիտակ (uint8_t սպասել) {

համար (int j = 0; j <256; j ++) {for (uint16_t i = 0; i

համար (int j = 255; j> = 0; j-) {

համար (uint16_t i = 0; i

void rainbowFade2White (uint8_t սպասել, int rainbowLoops, 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 ++) {// անիվի բոլոր գույների 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));

}

// Առաջին հանգույց, մարիր:

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

// Վերջին հանգույց, մարիր:

այլապես, եթե (k == rainbowLoops - 1 && j> 255 - fadeMax) {fadeVal--; }

strip.show ();

ուշացում (սպասել); }}

ուշացում (500);

համար (int k = 0; k <whiteLoops; k ++) {

համար (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 (); }

ուշացում (2000);

համար (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 (); }}

ուշացում (500);

}

void whiteOverRainbow (uint8_t սպասել, uint8_t whiteSpeed, uint8_t whiteLength) {

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

int գլուխ = սպիտակ Երկարություն - 1;

int պոչ = 0;

int loops = 3;

int loopNum = 0;

ստատիկ անստորագիր երկար lastTime = 0;

մինչդեռ (ճշմարիտ) {

համար (int j = 0; j <256; j ++) {for (uint16_t i = 0; i = tail && i head && i> = tail) || (պոչ> գլուխ && i <= գլուխ)) {strip.setPixelColor (i, strip. Color (0, 0, 0, 255)); } else {strip.setPixelColor (i, անիվ ((((i * 256 / strip.numPixels ()) + j) & 255)); }}

if (millis () - lastTime> whiteSpeed) {

գլուխ ++; պոչ ++; if (գլուխ == strip.numPixels ()) {loopNum ++; } lastTime = millis (); }

եթե (loopNum == loops) վերադառնա;

գլուխ%= strip.numPixels (); պոչ%= strip.numPixels (); strip.show (); ուշացում (սպասել); }}} void fullWhite () {for (uint16_t i = 0; i

// Մի փոքր այլ, սա ծիածանը դարձնում է հավասարաչափ բաշխված ամբողջ երկայնքով

void rainbowCycle1 (uint8_t սպասել) {uint16_t i, j;

անիվի վրա (j = 0; j <256 * 5; j ++) {// բոլոր գույների 5 ցիկլ (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, անիվ (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); ուշացում (սպասել); }}

դատարկ ծիածան 1 (uint8_t սպասել) {

uint16_t i, j;

համար (j = 0; j <256; j ++) {համար (i = 0; i

// Գույնի արժեք ստանալու համար մուտքագրեք 0 -ից 255 արժեքը:

// Գույները անցումային r - g - b - վերադառնալ r են: uint32_t Անիվ 1 (բայթ WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {վերադարձի շերտ. 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 >> 16); } uint8_t կանաչ (uint32_t c) {վերադարձ (c >> 8); } uint8_t կապույտ (uint32_t գ) {վերադարձ (գ); }

Քայլ 8: 3D ձևավորում

3D դիզայն
3D դիզայն
3D դիզայն
3D դիզայն
3D դիզայն
3D դիզայն

Նախ, դուք պետք է չափեք ձեր ապարատային բաղադրիչները `ճիշտ լինելու համար վստահ լինելու համար: Եթե դրանք նույնն են, ինչ մերն են, կարող եք օգտագործել այն նույն ֆայլերը, որոնք մենք ձեզ տրամադրում ենք:

Երկու հենարաններն էլ նախագծված են 3D տպիչով, որոնք նույնպես ներառված են.

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

Վերջապես, լույսը նման կլինի վերջին երկու նկարներին:

Քայլ 9: Պարանոցի ամրացում

Պարանոցի ամրացում
Պարանոցի ամրացում
Պարանոցի ամրացում
Պարանոցի ամրացում

Նախ մենք թամբը կտեղադրենք պարանոցը: Պտուտակներն այն պահելու համար անհրաժեշտ անցքեր չկան, ուստի մենք ստիպված կլինենք դրանք կատարել ՝ նշելով, թե ուր պետք է գնան, և զգուշորեն, պտուտակով, փոս պատրաստելով:

Նույնը վերաբերում է այն անցքերին, որտեղ պտուտակները, որոնք պարանոցն ինքն են պահում գործիքի մարմնին: Անհրաժեշտ չէ դրանք անել, քանի որ այս ամրացման համար պտուտակներ չկան, բայց եթե մենք ուզում ենք դա անել, խնդիր չի լինի:

ԿԱՐԵՎՈՐ. Թողեք 5 մմ տարածություն կայմնի մեկնարկի և թյունի պատառաքաղի սկզբի միջև, քանի որ այդ փոսում ընկույզը կտեղադրվի:

Մենք կպչում ենք ընկույզը սոսինձով, նկարով նշված ուղղությամբ:

Ի վերջո, մենք կներկայացնենք 4 կապում անցքերի մեջ, որոնք գտնվում են կայմի սկզբնամասում ՝ յուրաքանչյուր քորոցը պահելով 2 կարճ պտուտակով, ինչպես ցույց է տրված նկարում:

Քայլ 10: Թռչնի տեղադրում

Birdge- ի տեղադրում
Birdge- ի տեղադրում
Birdge- ի տեղադրում
Birdge- ի տեղադրում

Կամուրջը ամրացվում է սոսնձման միջոցով և մարմնի վրա կենտրոնական դիրքում գտնվող երկու երկար պտուտակներով: Aանկալի է մատիտով նշել մարմնի ճիշտ դիրքը: Մենք կվերցնենք հեռավորությունները, որոնք նշված են նկարում:

Երկու բաղադրիչների միացման ժամանակ մենք սոսինձ կկիրառենք: Մենք ամրացնում ենք երկու մասերը ամրացնող պտուտակի օգնությամբ, մինչև հոդը չորանա: Պտուտակների համար երկու անցք կկատարենք փայտի համար 1,5 մմ տրամագծով: Ամրացրեք կամուրջը մարմնի երկու երկար պտուտակներով: Եվ, վերջապես, մենք պաշտպանիչ գլխարկներ ենք դնում պտուտակների գլուխներին:

Քայլ 11: Մարմնի և պարանոցի հավաքում

Մարմնի և պարանոցի հավաքում
Մարմնի և պարանոցի հավաքում
Մարմնի և պարանոցի հավաքում
Մարմնի և պարանոցի հավաքում

Երկու մասերը հավաքելու համար մենք մարմնի գլխում ունենք անցքեր, որտեղ պարանոցը կհամապատասխանի իր ունեցած երկու պրոյեկցիայով: Մենք կարող ենք դրանք սոսնձել սոսինձով կամ տաք հալեցնող ատրճանակով: Ավելի մեծ ֆիքսացիա ունենալու համար կարող եք անցքեր կատարել, որոնք գտնվում են թյունինգ պատառաքաղի վերջում `այն մարմնին միացնելու համար:

Քայլ 12: Տեղադրեք Ուկուլելեի լարերը

Image
Image
Տեղադրեք Ուկուլելեի լարերը
Տեղադրեք Ուկուլելեի լարերը
Տեղադրեք Ուկուլելեի լարերը
Տեղադրեք Ուկուլելեի լարերը

Ի վերջո, մենք պետք է լարերը տեղադրենք այնպես, որ մեր գործիքն ավարտվի:

Նախկինում մենք կապերի ամրացնող օղակները կտեղադրենք կայքերի միջով անցնող դրանց կանխատեսումների մեջ: Լարերը տեղադրելու համար մենք վերցրեցինք հավաքածուի հետ եկած 4 տողերը: Նախ պետք է տարբերակել յուրաքանչյուր տող, քանի որ դրանք բոլորը նույնը չեն: Դուք պետք է կապեք յուրաքանչյուր լարի մեկ ծայրը (երկու հաստերը ՝ սովորական հանգույցով, և երկու բարակերը ՝ կրկնակիով) և լարերը տեղադրեք կամրջի անցքերի մեջ:

Այնուհետև մենք տողերը կտեղադրենք այնպես, որ.

• Առաջին դիրքը ՝ G լար (երկրորդ ամենախիտ լար):

• Երկրորդ դիրքը ՝ C լար (ավելի հաստ լար):

• Երրորդ դիրքը ՝ E լար (երկրորդ ավելի բարակ լար):

• Չորրորդ դիրք. Լար (ավելի բարակ լար):

Կցեք տողերը մատուցված խրոցակի անցքերի մեջ: Փորձեք ամրացնել յուրաքանչյուր պարան ՝ երկու կամ երեք պտույտ տալով կապում: Լարեք լարերը ՝ առանց շատ ուժ գործադրելու և ստուգեք լարերի և թամբի միջև հեռավորությունը:

Եթե որևէ կասկած ունեք, թե ինչպես է դա պատրաստվում, կարող եք օգտագործել այն ձեռնարկը, որը ձեզ կբացատրի, թե ինչպես ճիշտ շարել տողերը:

Քայլ 13: Փորձարկում

Փորձարկում
Փորձարկում
Փորձարկում
Փորձարկում

Ի վերջո, մենք պետք է տեսնենք, թե արդյոք ukulele- ն ճիշտ է հավաքվել այնպես, որ առաջին ֆրետի իդեալական հեռավորությունը 0.1 մմ է, իսկ տասներկուերորդում `մոտավորապես 1.2 մմ:

Անհրաժեշտ է կարգավորել ukulele լարերը: Ես ձեզ խորհուրդ եմ տալիս այս ծրագիրը ՝ GuitarTuna

Քայլ 14: Վայելեք այն

Այժմ ձեզ մնում է միայն վայելել ձեր ուկուլելեն:

Եթե ցանկանում եք մեր մասին ավելի շատ տեղեկություններ իմանալ, կարող եք գտնել մեզ ՝

Twitter: @Innovart_cc

Ֆեյսբուք ՝ @Innovartcc

Instagram ՝ @Innovart_cc

Կայք ՝ Innovart.cc

Խորհուրդ ենք տալիս: