Мазмуну:

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: NOOBS PLAY CLASH ROYALE FROM START LIVE 2024, Июль
Anonim
DIY Smart Electronic Ukulele Arduino менен
DIY Smart Electronic Ukulele Arduino менен

Биз этап -этабы менен түшүндүрөбүз, сиз кантип өзүңүздүн укулелеңизди жасап, уникалдуу кыла турган эффекттерди кошо аласыз, мисалы, укулеленин бетине каалаган нерсени тартуу же жарык эффекттерин кошуу.

Бул үчүн, укулеле комплектин сатып алуу зарыл.

Биз инструментти кантип чогултуу керектигин жана ар кандай көйгөйлөрдү чечүүнү түшүндүрөбүз.

1 -кадам: материалдар

Материалдар
Материалдар
Материалдар
Материалдар

Структуралык материалдар:

DIY укелеле монтаждоочу комплект (ал башкача болушу мүмкүн):

1- Дене.

2-Neck.

3-ээр

4-Rope колдоо

5-көпүрө

6-кыл жаңгак.

7-Машинанын башы үчүн бекитүүчү шакек (x4).

8-Машина баштары (x4).

9-Машинанын башы үчүн бурамалар (x8).

10-Машина көпүрөсү үчүн бурамалар (x2).

11-Көпүрөгө бекитүүчү бурамалар үчүн капкактар (x2).

12-саптар (x4).

Электрондук материалдар:

  • NANO Arduino.
  • Leds дөңгөлөгү WS2812.
  • BMA220 акселерометр (милдеттүү эмес).
  • Батарея туташтыргычы.
  • Батарея 9В.
  • Которуу.

Башкалар

  • Жыгач лак.
  • Velcro.
  • Калай калай.
  • Лак үчүн коргоочу пластик.
  • Ысык эритилген силикон.

Куралдар:

  • Лазердик гравировка.
  • Sandpaper
  • Жылдыздуу отвертка.
  • Paintbrush.
  • Ысык мылтык.
  • Калай ширетүүчү темир.

2 -кадам: Укулелени ыңгайлаштырыңыз

Уккулеланы ыңгайлаштырыңыз
Уккулеланы ыңгайлаштырыңыз
Уккулеланы ыңгайлаштырыңыз
Уккулеланы ыңгайлаштырыңыз
Уккулеланы ыңгайлаштырыңыз
Уккулеланы ыңгайлаштырыңыз

Укулелемизди костюмдоо үчүн денеге лазердик кескич менен чийме түшүрө алабыз. Ал курал жок болгон учурда, биз аны боёп алмакпыз.

Биз тандаган сүрөт биринчи пайда болот.

Биринчиден, оюп жасоо үчүн чийме шаблонун иштеп чыгышыбыз керек.

Муну аткаруу үчүн, биз бул шилтемеден ала турган 'Inkscape' аттуу программаны колдонобуз:

Аны колдонуу үчүн, биз колдонгубуз келген сүрөттү экинчи сүрөттө көрсөтүлгөндөй тууралашыбыз керек. Сиз инструменттин тегерекчеси менен колуңуздун клеткасын тууралоо үчүн баштапкы сүрөттү бурган окшойсуз. Биз мурда айткандай, сиз каалаган сүрөттү койсоңуз болот.

3 -кадам: Inkscapeтин жардамы менен сүрөттү векторлоштуруу

Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу
Inkscapeтин жардамы менен сүрөттү векторлоштуруу

Пиксмаптан вектордук файлды кантип түзүүнү көрөбүз (jpg, png, Inkscape ача турган растр форматы).

Inkscape Inkscape-булагы ачык булактуу вектордук графикалык редактор жана аталышынан көрүнүп тургандай, бул мен логотиптерди векторлоштуруу үчүн колдоно турган курал. Векторлоштуруу кадамдары Кадамдар биз каалагандай векторлоштуруу үчүн жалпы болуп саналат.

  1. Сүрөттү Inkscapeте ачыңыз
  2. Trace Bitmap Tool Path-> Trace Bitmap ачыңыз
  3. Trace Bitmap параметрлеринин айланасында ойноңуз
  4. Көз салууну иштетүү
  5. Жыйынтыгын тазалаңыз (керек болсо)

"Тегеректе ойноо" бөлүгүнө көңүл буруңуз. Мен байкоо боюнча адис эмесмин, ошондуктан мен бул куралды эң жакшы натыйжага жеткенге чейин бурап жана өзгөртүп турган кара куту катары карайм

4 -кадам: Logo Оюп

Image
Image
Logo Engraving
Logo Engraving
Logo Engraving
Logo Engraving

Бул үчүн чийменин гравюрасы чыгарыла турган бетинин силуэтине ээ болуу маанилүү.

Оюп жасоо үчүн биз 'T2Laser' программасын колдонобуз. Биз бул программаны төмөнкү жерден алсак болот:

Программаны ачкандан кийин, биз акыркы кадамда өзүбүз жараткан сүрөттү жүктөшүбүз керек. Андан кийин, баскычты басыңыз "башкаруу лазер", жана cnc башкаруу пайда болот. Эки сүрөт процессти жана биздин лазердик кескич менен оюунун натыйжасын көрсөтөт.

5 -кадам: Тегиздөө жана лактоо

Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо
Тегиздөө жана лактоо

Укулелебизди жаркырата калтыруу үчүн жана катуулугу жок катмарыбыз менен инструментти түзгөн эки бөлүктү этияттык менен тегиздеп койсок болот, анткени биз тартылган чиймени бузуп алабыз (эгер сиз укулелени боёону тандаган болсоңуз, анда сиз биринчи кум). Андан кийин биз эки бөлүктү лактап коёбуз, алар караңгы түскө ээ болот жана жыгач көбүрөөк каршылык көрсөтөт. Кадимки жыгач лакты колдонсок болот, анын өзгөчө болушунун кажети жок.

Бизде лак болгондон кийин, аны бир аз ээритүүчү зат менен аралаштырабыз, ал бир аз ээрип кетет. Андан кийин, аралашманы щетка менен мойнуна жана аспаптын денесине сүйкөп, кургатабыз.

Эгерде биз продуктка экинчи пальто керек экенин көрсөк, анда эки бөлүгүн бир аз сүртүп, кайра суюлтулган лак катмарын колдонсок болот.

** САКТАНУУЧУЛАР: Лак - бул химиялык продукт, ошондуктан бул процессти желдетилүүчү жерде жүргүзүү, жыттарды жана коргоочу көз айнектерди жутуп албоо үчүн маска кийүү зарыл.

Туура иштей алышыбыз үчүн керектүү материалдар - бул сүрөттөрдө көрүнгөн материалдар. Негизинен биз щетка, лак кутусу (биздин учурда кызыл түс), бир аз ээритүүчү жана визуалдык коргоо менен иштейбиз. Баарынан маанилүүсү, жакшы желдетилген жайларда иштеңиз.

6 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык
Аппараттык

Ардуино менен жазылган тактабыз, акселерометр жана лед менен дөңгөлөк бардык компоненттер инструментте жылып кетпеши үчүн кичине кашаанын ичинде киргизилет.

Биз дагы ыңгайлуураак болушу үчүн батарейка кармагычты жана коммутаторду коштук жана биз инструментти колдонбогондо батареяны эскиртпейбиз. Биз бул колдоону Velcro (ал силикон жана ысык эритүүчү мылтык менен да иштейт) укулеле денесинин ички бетине жабыштырабыз. Башка жагынан алганда, LED дөңгөлөгү тешиктен кичине, ошондуктан ал кулап кетет. Колдоо жакшы кармалып, өз функциясын аткара алгыдай кылып иштелип чыккан.

7 -кадам: Программалык камсыздоо

Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо
Программалык камсыздоо

Укулелеге өзгөчө кооздук берүү үчүн, леддердин дөңгөлөгү аркылуу жарык эффекттерин кошо алмакпыз. Биз WS2812ди колдонмокчубуз, бирок сиз маалымат барагынын көрсөтмөлөрүнө ылайык башка нерсени колдоно аласыз. Биз оордук күчүн таасир этүүгө мүмкүндүк берген акелерометрди (BMA220) да колдонобуз.

Чынында, бизде Ардуинонун 'Adafruit' деп аталган компьютердик китепканасына кирген 4 жарык пьесасы болот. Бул үчүн биз үч компоненттин ортосунда туура байланыш түзүшүбүз керек: Arduino NANO, WS2812 жана BMA220, биринчи сүрөттө көрүнүп тургандай.

Кызыл зымдар бийлик үчүн, GND каралары жана калгандары туура иштеши үчүн керектүү байланыштар. Биз жарык топтому үчүн колдонгон код "play_of_light_v0.ino" деп аталган файлга тиркелет. Программанын туура иштеши үчүн керектүү китепканаларды киргизгениңизди текшериңиз. Биз схемага тышкы кошкон батарея 9В минималдуу чыңалууга ээ болушу керек жана биз анын бүт схеманы иштетүү үчүн керектүү минималдуу токту бере аларын камсыздашыбыз керек.

// Variables contador e interrupciónint counter; // Variables 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; сүзүү 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);

// Variables Luces arcoiris

#include #ifdef _AVR_ #include #endif #define PIN 9 // Параметр 1 = тилкедеги пикселдердин саны // Параметр 2 = Arduino пиндин номери (көбү жарактуу) // Параметр 3 = пикселдин түрүндөгү желектер, керек болгондо кошуңуз: // NEO_KHZ800 800 КГц бит агымы (WS2812 светодиоддору менен NeoPixelдин көпчүлүк продуктулары) // NEO_KHZ400 400 КГц (классикалык 'v1' (v2 эмес) FLORA пикселдери, WS2811 драйверлери) // NEO_GRB Пикселдери GRB бит агымы үчүн (көпчүлүк NeoPixel продуктулары)/ / NEO_RGB пикселдери RGB бит агымы үчүн зымдуу (v1 FLORA пиксел, v2 эмес) // МААНИЛҮҮ: NeoPixelдин күйүп кетүү коркунучун азайтуу үчүн, 1000 уФ конденсаторду // пикселдик кубаттуулукка кошуңуз, биринчи пикселдин маалыматын киргизүүдө 300 - 500 Ом каршылыгын кошуңуз // жана Arduino менен биринчи пикселдин ортосундагы аралыкты азайтыңыз. Жандуу чынжырга // туташуудан алыс болуңуз … эгер керек болсо, биринчи GND туташыңыз.

// Rueda de colores өзгөрмөлөрү

// NeoPixel Ring жөнөкөй эскизи (c) 2013 Shae Erisson // GPLv3 лицензиясынын алдында AdaFruit NeoPixel китепканасынын калган бөлүгүнө дал келүү үчүн чыгарылган.

#кошуу

#ifdef _AVR_ #кошуу #endif

// Arduinoдогу кайсы пин NeoPixelsке туташкан?

// Trinket же Gemma боюнча биз муну 1 #аныктоочу PIN 9га өзгөртүүнү сунуштайбыз

// Ардуиного канча NeoPixels тиркелет?

#аныктоо NUMPIXELS 16

// NeoPixel китепканасын орноткондо, биз ага канча пикселди жана сигналдарды жөнөтүү үчүн кайсы пинди колдонуу керектигин айтабыз.

// Эске алыңыз, эски NeoPixel тилкелери үчүнчү параметрди өзгөртүү керек болушу мүмкүн-мүмкүн болгон баалуулуктар жөнүндө көбүрөөк маалымат алуу үчүн strandtest // мисалын караңыз. Adafruit_NeoPixel пикселдери = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 50; // 50 м кечигүү

// Variables colores aleatorios

#кошуу #ifdef _AVR_ #кошуу #endif

#аныктоо PIN 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 () {// Codigo: 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" деп койсо болот, wikiдеги Datashhetке кайрылыңыз // Wire.write төмөн өтүү чыпкасы (0x20); // Wire.write дарегин каттоо (0x05); // "0x05" "0x04" …… "0x01" "0x00" деп коюуга болот, Wire.endTransmission wiki'деги Даташетке кайрылыңыз;

// Codigo; Luces Arcoiris

// Бул Trinket 5V 16MHz үчүн, эгер сиз Trinket #if (_AVR_ATtiny85_) эгерде (F_CPU == 16000000) clock_prescale_set (clock_div_1) колдонбосоңуз, анда бул үч сапты алып салсаңыз болот; #endif // Сыйкырдын атайын кодунун аягы.begin (); strip.show (); // Бардык пикселдерди "өчүрүү" үчүн баштоо

// Codigo Rueda de colores

// Бул Trinket 5V 16MHz үчүн, эгер сиз Trinket #if (_AVR_ATtiny85_) эгерде (F_CPU == 16000000) clock_prescale_set (clock_div_1) колдонбосоңуз, анда бул үч сапты алып салсаңыз болот; #endif // Сыйкырдын атайын кодунун аягы

piksel.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 // Сыйкырдын атайын кодунун аягы.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) бурчу+= 180; else бурчу += 360; } // end else if (бурч == 360.0) бурч = 0.0; led = circularize (бурч / (360 / NUMBER_OF_LEDS_ON_RING)); // жетектөөчү кыймылды жылмакай кылуу if (previousLed == led) {// эч нерсе кылбоо} башка if (counterClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = circularize (previousLed + 1); else led = circularize (previousLed - 1); ledQueue.push (алып келген); makeLightShow (); previousLed = led; кечигүү (25); } counter = 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); // Red colorWipe1 (strip. Color (0, 255, 0), 50); // Green colorWipe1 (strip. Color (0, 0, 255), 50); // Blue colorWipe1 (strip. Color (0, 0, 0, 255), 50); // Ак RGBW // Театрдын пикселин кууп жиберүү… театрChase (strip. Color (127, 127, 127), 50); // Ак театрChase (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 = random (255); int b = кокустук (255); int c = кокустук (255); үчүн (int i = 0; i

// pixel. Color RGB баалуулуктарын алат, 0, 0, 0дон 255, 255, 255ке чейин

piksel.setPixelColor (i, piksel. Color (a, b, c)); // Орточо ачык жашыл түс.

piksel.show (); // Бул жаңыртылган пикселдин түсүн жабдыкка жөнөтөт.

кечиктирүү (кечиктирүү); // Белгилүү бир убакытка кечигүү (миллисекунд менен).

} a = туш келди (255); b = туш келди (255); с = туш келди (255); үчүн (int i = NUMPIXELS; i> 0; i-) {

// пиксел. Color RGB маанилерин алат, 0, 0, 0дон 255ке, 255, 255ке чейин

piksel.setPixelColor (i, piksel. Color (a, b, c)); // Орточо ачык жашыл түс.

piksel.show (); // Бул жаңыртылган пикселдин түсүн жабдыкка жөнөтөт.

кечиктирүү (кечиктирүү); // Белгилүү бир убакытка кечигүү (миллисекунд менен).

}} эсептегич = 4; } else if (counter == 4) {for (int g = 0; g <= 6; g ++) {// Пикселдерге көрсөтүүнү көрсөткөн кээ бир мисал процедуралары: colorWipe (strip. Color (255, 0, 0), 50); // Red colorWipe (strip. Color (0, 255, 0), 50); // Green colorWipe (strip. Color (0, 0, 255), 50); // Blue colorWipe (strip. Color (0, 0, 0, 255), 50); // White whiteOverRainbow (20, 75, 5); pulseWhite (5); // fullWhite (); // кечиктирүү (2000); rainbowFade2White (3, 3, 1);

}

эсептегич = 1; }} ////////////////////////////////////////////////// //////////////////////////////////////////////////// /////////////////////////////////////////////////// ///////////////////

/Metodos del Ejemplo de la gravedad

жараксыз AccelerometerInit () {Wire.beginTransmission (0x0A); // акселерометрдин дареги // акселерометрди баштапкы абалга келтирүү Wire.write (0x04); // X маалыматтары Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // #2 кул түзмөгүнөн 6 байт сураңыз (Wire.available ()) // кул сурагандан азыраак жөнөтө алат {Version [0] = Wire.read (); // байтты characte катары алуу} x_data = (int8_t) Версия [0] >> 2; Wire.beginTransmission (0x0A); // акселерометрдин дареги // акселерометрди баштапкы абалга келтирүү Wire.write (0x06); // Y маалыматы Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // #2 кул түзмөгүнөн 6 байт сураңыз (Wire.available ()) // кул сурагандан азыраак жөнөтө алат {Version [1] = Wire.read (); // байтты characte катары алуу} y_data = (int8_t) Версия [1] >> 2; Wire.beginTransmission (0x0A); // акселерометрдин дареги // акселерометрди баштапкы абалга келтирүү Wire.write (0x08); // Z маалыматтары Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // #Wave.available ()) // кулдук түзмөктөн 6 байт сураңыз // кул суралганынан азыраак жөнөтө алат {Version [2] = Wire.read (); // байтты characte катары алуу} 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) {

эгер (pos> = NUMBER_OF_LEDS_ON_RING) кайтса (пос - NUMBER_OF_LEDS_ON_RING); else if (pos <0) return (pos + NUMBER_OF_LEDS_ON_RING); else return (pos); }

int расстояние;

int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {расстояние = nextPos - prevPos; эгер (аралык <0) аралык += NUMBER_OF_LEDS_ON_RING; кайтуу (аралык); }

int ledPosition, currentQueueSize;

#аныктоо NUMBER_OF_LEDS_TO_SHINE 10 int жарыктыгы Step = 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, (жарыктыктагы кадам * k), 0); if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition);} neoring.show ();}

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

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

/Metodos del juego de luces del arcoiris

// Чекиттерди биринин артынан бири бош түс colorWipe менен толтуруңуз (uint32_t c, uint8_t күтүңүз) {for (uint16_t i = 0; i

бош асан -үсөн (uint8_t күтүү) {

uint16_t i, j;

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

// Бир аз башкача, бул асан -үсөндү бирдей бөлүштүрөт

void rainbowCycle (uint8_t wait) {uint16_t i, j;

for (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 (); кечиктирүү (күтүү); }}

// Театр стилиндеги сойлоп жүрүүчү жарыктар.

жараксыз театрChase (uint32_t c, uint8_t күтүү) {үчүн (int j = 0; j <10; j ++) {// (int q = 0; q <3; q ++) {үчүн 10 циклди аткарыңыз (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); // ар бир үчүнчү пикселди өчүрүү}}}}

// Асан-үсөн эффекти менен театр стилиндеги сойлоп жүрүүчү жарыктар

(vint8_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; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; кайра тилке. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; кайтуу тилкеси. Color (WheelPos * 3, 255 - WheelPos * 3, 0); }

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

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

/Metodos Rueda de colores

// int elegirColor = random (0x000000, 0xffffff);

// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = кокустук (1, 7); 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); // Роза // CylonEyeColor = HtmlColor (0x000000);

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

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

/Metodos ар түрдүүлүктү пайда кылат

// Чекиттерди биринин артынан бири түскө толтуруңуз

void colorWipe1 (uint32_t c, uint8_t күтүү) {үчүн (uint16_t i = 0; i

боштук pulseWhite (uint8_t күтүү) {

for (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 = Wheel (((i * 256 / strip.numPixels ()) + j) & 255);

redVal = кызыл (wheelVal) * калкыма (fadeVal/fadeMax);

greenVal = green (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 күтүңүз, uint8_t whiteSpeed, uint8_t whiteLength) {

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

int head = whiteLength - 1;

int tail = 0;

int loops = 3;

int loopNum = 0;

static unsigned long lastTime = 0;

while (true) {

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)); } башка {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255))); }}

if (millis () - lastTime> whiteSpeed) {

head ++; tail ++; if (head == strip.numPixels ()) {loopNum ++; } lastTime = миллис (); }

if (loopNum == loop) кайтуу;

баш%= strip.numPixels (); куйрук%= strip.numPixels (); strip.show (); кечиктирүү (күтүү); }}} жараксыз fullWhite () {for (uint16_t i = 0; i

// Бир аз башкача, бул асан -үсөндү бирдей бөлүштүрөт

void rainbowCycle1 (uint8_t күтүү) {uint16_t i, j;

for (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 (); кечиктирүү (күтүү); }}

жараксыз асан -үсөн1 (uint8_t күтүү) {

uint16_t i, j;

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

// Түс маанисин алуу үчүн 0дон 255ке чейин маанини киргизиңиз.

// Түстөр r - g - b - кайра rга өтүү. uint32_t Wheel1 (байт WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0); } if (WheelPos <170) {WheelPos -= 85; return strip. Color (0, WheelPos * 3, 255 - WheelPos * 3, 0); } WheelPos -= 170; кайра тилке. Color (WheelPos * 3, 255 - WheelPos * 3, 0, 0); }

uint8_t кызыл (uint32_t c) {

кайтуу (c >> 16); } uint8_t green (uint32_t c) {return (c >> 8); } uint8_t blue (uint32_t c) {return (c); }

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 -кадам: Кушту орнотуу

Кушту орнотуу
Кушту орнотуу
Кушту орнотуу
Кушту орнотуу

Көпүрө клей менен бекитилет жана корпустун борбордук абалындагы эки узун бурама менен бекитилет. Карандаш менен дененин туура абалын белгилөө максатка ылайыктуу. Сүрөттө белгиленген аралыктарды алабыз.

Биз эки компоненттин биригишинде клей колдонобуз. Эки бөлүктү муун кургатылганга чейин бураманын жардамы менен кылдаттык менен оңдойбуз. Биз бурамалар үчүн эки тешикти жыгач үчүн 1,5 мм бургу менен жасайбыз. Көпүрөнү корпустагы эки узун бурама менен оңдоңуз. Акыры, биз бурамалардын башына коргоочу капкактарды кийгиздик.

11 -кадам: Дене жана Моюн Ассамблеясы

Дене жана Моюн Ассамблеясы
Дене жана Моюн Ассамблеясы
Дене жана Моюн Ассамблеясы
Дене жана Моюн Ассамблеясы

Эки бөлүктү чогултуу үчүн бизде дененин башында тешиктер бар, мойну эки проекциясы менен дал келет. Биз аларды желим менен же ысык эритилген тапанча менен жабыштыра алабыз. Чоңураак фиксацияга ээ болуу үчүн, тюнингтин аягындагы тешиктерди денеге кошуу үчүн жасай аласыз.

12 -кадам: Укулеле саптарын коюңуз

Image
Image
Ukulele Strings коюңуз
Ukulele Strings коюңуз
Ukulele Strings коюңуз
Ukulele Strings коюңуз

Акырында биз аспаптарды бүтүрүш үчүн кылдарды коюшубуз керек.

Мурда биз төөнөгүчтөрдүн бекитүүчү шакектерин мачтадан өтүүчү проекцияларга киргизебиз. Жиптерди жайгаштыруу үчүн, биз комплект менен келген 4 кылды алдык. Адегенде ар бир сапты айырмалашыңыз керек, анткени алар баары бирдей эмес. Сиз ар бир жиптин бир учун (кадимки түйүн менен эки калыңды, экинчисин жуп менен) байлап, жиптерди көпүрөнүн оюктарына салыңыз.

Андан кийин биз саптарды мындай жайгаштырабыз:

• Биринчи позиция: G сабы (экинчи жоон жип).

• Экинчи позиция: C сабы (жоонураак сап).

• Үчүнчү позиция: E жип (экинчи ичке жип).

• Төртүнчү позиция: сап (ичке жип).

Жиптерди берилген сайгычтын тешиктерине сайыңыз. Пинге эки же үч бурулуш берүү менен ар бир жипти оңдоого аракет кылыңыз. Жиптерди ашыкча күч колдонбостон чыңдап, жип менен ээрдин ортосундагы аралыкты текшериңиз.

Эгер муну кантип жасоо керектигине күмөн санасаңыз, анда саптарды кантип туура коюу керектигин түшүндүргөн ошол окуу куралын колдоно аласыз.

13 -кадам: Тестирлөө

Тестирлөө
Тестирлөө
Тестирлөө
Тестирлөө

Акыр -аягы, биз укулеле туура орнотулганбы же жокпу, көрүшүбүз керек, биринчи баскычта идеалдуу аралык 0.1 мм, ал эми он экинчиде болжол менен 1.2 мм.

Уккулеле саптарын тууралашыңыз керек. Мен сизге бул колдонмону сунуштайм: GuitarTuna

14 -кадам: Андан ырахат алыңыз

Эми сиз укулеле менен ырахаттанууңуз керек.

Биз жөнүндө көбүрөөк маалымат алгыңыз келсе, бизди төмөнкү жерден таба аласыз:

Twitter: @Innovart_cc

Facebook: @Innovartcc

Инстаграм: @Innovart_cc

Желе: Innovart.cc

Сунушталууда: