Mundarija:
- 1 -qadam: materiallar
- 2 -qadam: Ukulelni sozlash
- 3 -qadam: Inkscape yordamida tasvirni vektorlashtirish
- 4 -qadam: logotip o'yma
- 5 -qadam: silliqlash va bo'yash
- 6 -qadam: Uskuna
- 7 -qadam: dasturiy ta'minot
- 8 -qadam: 3D dizayni
- 9 -qadam: Bo'yinni o'rnatish
- 10 -qadam: qushni o'rnatish
- 11 -qadam: Tana va bo'yin yig'ilishi
- 12 -qadam: Ukulele simlarini joylashtiring
- 13 -qadam: sinov
- 14 -qadam: Xursand bo'ling
Video: Arduino bilan DIY aqlli elektron ukulele: 14 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
Biz asta -sekin o'z ukulelingizni qanday loyihalashingiz va ukulele yuzasiga xohlagan narsani chizish yoki yorug'lik effektlarini qo'shish kabi o'ziga xos effektlarni qo'shishingiz mumkinligini tushuntiramiz.
Buning uchun ukulele to'plamini sotib olish kerak.
Biz asbobni qanday yig'ishni va yuzaga kelishi mumkin bo'lgan turli muammolarni hal qilishni tushuntiramiz.
1 -qadam: materiallar
Strukturaviy materiallar:
DIY ukelele o'rnatish to'plami (bu boshqa to'plam bo'lishi mumkin):
1- Tana.
2-bo'yin.
3-egar
4-arqonni qo'llab-quvvatlash
5-ko'prik
6-torli yong'oq.
7-Mashina boshi uchun mahkamlash halqasi (x4).
8-Mashina boshlari (x4).
9-Mashina boshlari uchun o'rnatish vintlari (x8).
10-Mashina ko'prigi uchun o'rnatish vintlari (x2).
11-ko'prikni o'rnatish vintlari uchun qopqoq qopqoqlari (x2).
12-qatorlar (x4).
Elektron materiallar:
- NANO Arduino.
- Led g'ildiragi WS2812.
- BMA220 akselerometri (ixtiyoriy).
- Batareya ulagichi.
- Batareya 9V.
- O'tish.
Boshqalar
- Yog'och lak.
- Velcro.
- Lehimlaydigan kalay.
- Vernik uchun himoya plastmassa.
- Issiq eritilgan silikon.
Asboblar:
- Lazerli o'yma.
- Zımpara
- Yulduzli tornavida.
- Bo'yoq cho'tkasi.
- Issiq eritilgan qurol.
- Kalay lehimli temir.
2 -qadam: Ukulelni sozlash
Ukulelimizni kostyumlash uchun biz tanaga lazerli kesuvchi bilan chizilgan o'yma yasashimiz mumkin edi. Agar bunday vosita bo'lmasa, biz uni bo'yashimiz mumkin.
Biz tanlagan rasm birinchi bo'lib paydo bo'ladi.
Birinchidan, biz o'yma qilish uchun chizilgan shablonni loyihalashimiz kerak.
Buni amalga oshirish uchun biz "Inkscape" nomli dasturdan foydalanamiz, uni biz bu havoladan olishimiz mumkin:
Uni ishlatish uchun biz ikkinchi rasmda ko'rsatilgandek kerakli rasmni sozlashimiz kerak. Biz qo'l tasvirini asbob doirasi bilan moslashtirish uchun dastlabki tasvirni aylantirganmiz. Yuqorida aytib o'tganimizdek, siz har qanday tasvirni qo'yishingiz mumkin.
3 -qadam: Inkscape yordamida tasvirni vektorlashtirish
Biz pixmap -dan vektorli faylni qanday yaratishni ko'rib chiqamiz (jpg, png, Inkscape ochadigan har qanday rastrli format).
Inkscape Inkscape-bu ochiq manbali vektorli grafik muharriri va uning nomidan ko'rinib turibdiki, bu men logotiplarni vektorlashtirish uchun foydalanadigan vosita. Vektorlashtirish bosqichlari Biz xohlagan har qanday vektorlashtirish uchun qadamlar keng tarqalgan.
- Rasmni Inkscape -da oching
- Bitmap izlari asboblari yo'lini-Bitmap izini oching
- Trace Bitmap variantlari atrofida o'ynang
- Kuzatuvni ishga tushiring
- Natijalarni tozalang (agar kerak bo'lsa)
"O'ynash" qismiga e'tibor bering. Men kuzatuv bo'yicha mutaxassis emasman, shuning uchun men bu asbobni tugmachalari va chiroqlari bo'lgan qora quti sifatida ko'rib chiqaman, eng yaxshi natijaga erishgunga qadar aylantiraman va o'zgartiraman.
4 -qadam: logotip o'yma
Buning uchun chizilgan o'yma ishlab chiqariladigan yuzaning silueti bo'lishi muhim.
Gravür qilish uchun biz "T2Laser" dasturidan foydalanamiz. Biz bu dasturiy ta'minotni https://descargar.cnet.com/windows/t2-laser/3260-2… saytidan olishimiz mumkin edi.
Dasturiy ta'minotni ochganimizdan so'ng, oxirgi bosqichda biz yaratgan tasvirni yuklashimiz kerak. Keyin "lazerni boshqarish" tugmachasini bosing va cnc boshqaruv elementlari paydo bo'ladi. Ikkita rasmda lazerni kesuvchi yordamida o'yma jarayoni va natijasi ko'rsatilgan.
5 -qadam: silliqlash va bo'yash
Ukulelimizni yorug 'va pürüzsüz qatlam bilan qoldirish uchun biz asbobni tashkil etuvchi ikkita qismni ehtiyotkorlik bilan silliq silliqlashimiz mumkin, chunki biz chizilgan rasmga zarar etkazishimiz mumkin (agar siz ukulelni bo'yashni tanlagan bo'lsangiz, sizga kerak bo'ladi). oldin qumlang). Keyin biz ikki qismini laklaymiz, shunda ular quyuqroq rangga ega bo'ladi va yog'och ko'proq qarshilik ko'rsatadi. Oddiy yog'och lakdan foydalanishimiz mumkin, bu maxsus bo'lishi shart emas.
Lakka ega bo'lgach, uni ozgina erituvchi bilan aralashtiramiz, shunda u oz eriydi. Keyinchalik, biz aralashmani bo'yniga va asbob tanasiga cho'tka bilan surtamiz va quritamiz.
Agar mahsulot ikkinchi qatlamga muhtojligini ko'rsak, biz ikki qismini ozgina zımparalab, yana suyultirilgan lak qatlamini surtishimiz mumkin.
** OGOHLANTIRISH: Lak - bu kimyoviy mahsulot, shuning uchun bu jarayonni ventilyatsiya qilinadigan joyda bajarish, hid va himoya ko'zoynaklarini yutib yubormaslik uchun niqob taqish kerak.
To'g'ri ishlashimiz kerak bo'lgan materiallar bu fotosuratlarda ko'rsatilgan materiallar. Asosan biz cho'tka, lak qutisi (bizning holatimizda qizil rang), ozgina erituvchi va vizual himoya bilan ishlaymiz. Va eng muhimi, yaxshi havalandırılan joylarda ishlash.
6 -qadam: Uskuna
Arduino, akelerometr va chiroqli g'ildirakli plastinka asbobning barcha komponentlari harakatlanishiga yo'l qo'ymaslik uchun kichik qavs ichida joylashtiriladi.
Bundan tashqari, biz qulayroq bo'lishi uchun batareya ushlagichi va kalitni qo'shdik va asbobdan foydalanmayotganimizda batareyani eskirmaymiz. Biz bu tayanchni ukulele korpusining ichki yuzasiga Velcro (u ham silikon va issiq eritilgan qurol bilan ishlaydi) bilan biriktiramiz.. Qo'llab -quvvatlash moslamasi yaxshi ushlab turilishi va o'z vazifasini bajarishi uchun yaratilgan.
7 -qadam: dasturiy ta'minot
Ukulelimizga maxsus bezak berish uchun, biz LEDlar g'ildiragi yordamida yorug'lik effektlarini qo'shishimiz mumkin edi. Biz WS2812 -dan foydalanmoqchimiz, lekin siz ma'lumotlar jadvalidagi ko'rsatmalarga amal qilib, boshqasidan foydalanishingiz mumkin. Biz tortishish ta'sirini ko'rsatishga imkon beradigan akselerometrdan (BMA220) ham foydalanamiz.
Darhaqiqat, bizda Arduino "Adafruit" kompyuter kutubxonasiga kiritilgan 4 yorug'lik o'yini bo'ladi. Buning uchun biz uchta komponent o'rtasida to'g'ri aloqa o'rnatishimiz kerak: Arduino NANO, WS2812 va BMA220, xuddi birinchi rasmda bo'lgani kabi.
Qizil simlar quvvat uchun, GND qora tanlilar va qolganlari to'g'ri ishlashi uchun zarur bo'lgan ulanishdir. Yorug'lik to'plami uchun ishlatilgan kod "play_of_light_v0.ino" nomli faylga biriktirilgan. Dasturning to'g'ri ishlashi uchun kerakli kutubxonalarni kiritganingizga ishonch hosil qiling. Biz kontaktlarning zanglashiga olib keladigan batareya kamida 9V kuchlanishga ega bo'lishi kerak va biz butun zanjirni quvvatlantirish uchun zarur bo'lgan minimal tokni bera olishini ta'minlashimiz kerak.
// o'zgaruvchilar contador e interrupciónint counter; // Variables Ejemplo gravedad #include #include #include #deffine NUMBER_OF_LEDS_ON_RING 16 #NEOPIXEL_RING_DATA_PIN 9 ni aniqlang
bayt versiyasi [3];
int8_t x_data; int8_t y_data; int8_t z_data; bayt diapazoni = 0x00; float divi = 16; suzuvchi x, y, z; float pi = 3.14159265359; suzuvchi nx, ny, burchak; int led, previousLed; QueueList ledQueue; Adafruit_NeoPixel neoring = Adafruit_NeoPixel (NUMBER_OF_LEDS_ON_RING, NEOPIXEL_RING_DATA_PIN, NEO_GRB + NEO_KHZ800);
// O'zgaruvchilar Luces arcoiris
#include #ifdef _AVR_ #include #endif #define PIN 9 // Parametr 1 = chiziqdagi piksellar soni // Parametr 2 = Arduino pin raqami (ko'plari to'g'ri) // Parametr 3 = pikselli turdagi bayroqlar, kerak bo'lganda qo'shing: // NEO_KHZ800 800 KHz bit oqimi (ko'pchilik NeoPixel mahsuloti WS2812 LED) // NEO_KHZ400 400 KHz (klassik 'v1' (v2 emas) FLORA piksellari, WS2811 drayverlari) // NEO_GRB piksellari GRB bitstream (ko'pchilik NeoPixel mahsulotlari) uchun simli/ / NEO_RGB piksellari RGB bit oqimi uchun ulangan (v1 emas FLORA piksel, v2) // MUHIM: NeoPixelning yonib ketish xavfini kamaytirish uchun // pikselli elektr simlariga 1000 uF kondansatör qo'shing, birinchi piksel ma'lumotlariga 300-500 Ohm qarshilik qo'shing // Arduino va birinchi piksel orasidagi masofani kamaytiring. // ulanishdan saqlaning.. agar kerak bo'lsa, avval GND ni ulang.
// Rueda de colores o'zgaruvchilari
// NeoPixel Ring oddiy eskiz (c) 2013 Shae Erisson // AdaFruit NeoPixel kutubxonasining qolgan qismiga mos kelish uchun GPLv3 litsenziyasi ostida chiqarilgan.
#qo'shing
#ifdef _AVR_ ##endifni qo'shing
// Arduino -dagi qaysi pin NeoPixel -ga ulangan?
// Trinket yoki Gemma -da biz buni 1 ta aniq kodli PIN 9 ga o'zgartirishni taklif qilamiz
// Arduino -ga nechta NeoPixel biriktirilgan?
#NUMPIXELS 16 ni aniqlang
// NeoPixel kutubxonasini o'rnatganimizda, biz unga qancha piksel va signal yuborish uchun qaysi pinni ishlatish kerakligini aytamiz.
// E'tibor bering, eski NeoPixel chiziqlar uchun uchinchi parametrni o'zgartirish kerak bo'lishi mumkin-mumkin bo'lgan qiymatlar haqida qo'shimcha ma'lumot olish uchun strandtest // misolini ko'ring. Adafruit_NeoPixel piksellari = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int kechikish vaqti = 50; // 50ms kechikish
// Aleatorios ranglari o'zgaruvchilari
#include #ifdef _AVR_ #include #endif
#PIN 9ni aniqlang
#ta'rif NUM_LEDS 16
200. Yorqinlikni aniqlang
// Adafruit_NeoPixel tasmasi = 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 SETUP
void setup () {// Codigo: Dirección de la gravedad neoring.begin (); neoring.setBrightness (200); Serial.begin (9600); Wire.begin (); Wire.beginTransmission (0x0A); // akselerometrning manzili // diapazon sozlamalari Wire.write (0x22); // ro'yxatdan o'tish manzili Wire.write (diapazon); // "0x00" "0x01" "0x02" "0x03" ga o'rnatilishi mumkin, wiki Datashhetga qarang // Wire.write past o'tish filtri (0x20); // ro'yxatdan o'tish manzili Wire.write (0x05); // "0x05" "0x04" …… "0x01" "0x00" ga o'rnatilishi mumkin, Wire.endTransmission wiki -dagi Datashhetga qarang;
// Kodigo; Luces Arcoiris
// Bu Trinket 5V 16MHz uchun, agar siz Trinket #if (_AVR_ATtiny85_) ishlatmasangiz, bu uchta qatorni olib tashlashingiz mumkin, agar (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinketning oxiri maxsus kod strip.begin (); strip.show (); // Barcha piksellarni o'chirib qo'ying
// Codigo Rueda de colores
// Bu Trinket 5V 16MHz uchun, agar siz Trinket #if (_AVR_ATtiny85_) ishlatmasangiz, bu uchta qatorni olib tashlashingiz mumkin, agar (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinketning maxsus kodining oxiri
piksel.begin (); // Bu NeoPixel kutubxonasini ishga tushiradi.
// Codigo uzilishi
hisoblagich = 1;
// Codigo Colores variantlari
// Bu Trinket 5V 16MHz uchun, agar siz Trinket #if (_AVR_ATtiny85_) ishlatmasangiz, bu uchta qatorni olib tashlashingiz mumkin, agar (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Trinketning oxiri maxsus kod strip.setBrightness (BRIGHTNESS); strip.begin (); strip.show (); // Barcha piksellarni "o'chirish" holatiga o'tkazing}
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/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) burchak+= 180; boshqa burchak += 360; } // end else if (burchak == 360.0) burchak = 0.0; led = circularize (burchak / (360 / NUMBER_OF_LEDS_ON_RING)); // oldingi harakatni silliq qilish if (previousLed == led) {// hech narsa qilish} boshqa if if (counterClockwiseDistanceBetweenLeds (previousLed, led) <= 8) led = circularize (previousLed + 1); else led = circularize (oldingiLed - 1); ledQueue.push (led); makeLightShow (); previousLed = led; kechikish (25); } hisoblagich = 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 ++) {// Ko'rsatilgan ba'zi misol protseduralari piksellarga qanday ko'rsatish mumkin: colorWipe1 (strip. Color (255, 0, 0), 50); // Qizil rangWipe1 (strip. Color (0, 255, 0), 50); // Yashil rangWipe1 (strip. Color (0, 0, 255), 50); // Moviy rangWipe1 (strip. Color (0, 0, 0, 255), 50); // Oq RGBW // Teatrning pikselli ta'qibini yuboring… teatrChase (strip. Color (127, 127, 127), 50); // Oq teatrChase (tasma. Rang (127, 0, 0), 50); // Qizil teatrChase (strip. Color (0, 0, 127), 50); // Moviy
kamalak (5);
kamalak aylanishi (5); teatrChaseRainbow (5); } hisoblagich = 3; } // End agar hisoblagich == 2 // Caso 3: Luces Aleatorias else if (counter == 3) {for (int k = 0; k <50; k ++) {// NeoPiksellar to'plami uchun birinchi NeoPixel 0, ikkinchisi - 1, piksellar soniga qadar minus bitta. int a = tasodifiy (255); int b = tasodifiy (255); int c = tasodifiy (255); uchun (int i = 0; i
// piksel. Rang 0, 0, 0 dan 255, 255, 255 gacha RGB qiymatlarini oladi
piksel.setPixelColor (i, piksellar. Color (a, b, c)); // O'rtacha och yashil rang.
piksel.show (); // Bu yangilangan piksel rangini uskunaga yuboradi.
kechikish (kechikish); // Bir muddat kechikish (millisekundlarda).
} a = tasodifiy (255); b = tasodifiy (255); c = tasodifiy (255); uchun (int i = NUMPIXELS; i> 0; i-) {
// piksel. Rang 0, 0, 0 dan 255, 255, 255 gacha RGB qiymatlarini oladi
piksel.setPixelColor (i, piksellar. Color (a, b, c)); // O'rtacha och yashil rang.
piksel.show (); // Bu yangilangan piksel rangini uskunaga yuboradi.
kechikish (kechikish); // Bir muddat kechikish (millisekundlarda).
}} hisoblagich = 4; } if if (counter == 4) {for (int g = 0; g <= 6; g ++) {// Pikselda ko'rsatishni ko'rsatadigan ba'zi misol protseduralari: colorWipe (strip. Color (255, 0, 0), 50); // Red colorWipe (strip. Color (0, 255, 0), 50); // Yashil colorWipe (strip. Color (0, 0, 255), 50); // Moviy rangWipe (strip. Color (0, 0, 0, 255), 50); // Oq oqOverRainbow (20, 75, 5); puls oq (5); // fullWhite (); // kechikish (2000); RainbowFade2White (3, 3, 1);
}
hisoblagich = 1; }} /////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// // / ///////////////////
/Metodos del Ejemplo de la gravedad
bo'sh AccelerometerInit () {Wire.beginTransmission (0x0A); // akselerometrning manzili // akselerometrni qayta o'rnatish Wire.write (0x04); // X ma'lumotlari Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // 2 -sonli qul qurilmadan 6 bayt talab qiling (Wire.available ()) // qul talab qilinganidan kamroq yuborishi mumkin {Version [0] = Wire.read (); // baytni characte sifatida qabul qilish} x_data = (int8_t) Versiya [0] >> 2; Wire.beginTransmission (0x0A); // akselerometr manzili // akselerometrni qayta o'rnatish Wire.write (0x06); // Y ma'lumoti Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // 2 -sonli qul qurilmadan 6 bayt talab qiling (Wire.available ()) // qul talab qilinganidan kamroq yuborishi mumkin {Version [1] = Wire.read (); // baytni characte sifatida qabul qilish} y_data = (int8_t) Versiya [1] >> 2; Wire.beginTransmission (0x0A); // akselerometr manzili // akselerometrni qayta o'rnatish Wire.write (0x08); // Z ma'lumotlari Wire.endTransmission (); Wire.requestFrom (0x0A, 1); // 2 -sonli qul qurilmadan 6 bayt talab qiling (Wire.available ()) // qul talab qilinganidan kamroq yuborishi mumkin {Version [2] = Wire.read (); // baytni characte sifatida qabul qilish} z_data = (int8_t) Versiya [2] >> 2; x = (suzuvchi) x_data/divi; y = (suzuvchi) y_data/divi; z = (suzuvchi) z_data/divi; Serial.print ("X ="); Ketma -ket chop etish (x); // Serial.print ("") belgisini chop eting; Serial.print ("Y ="); Ketma -ket chop etish (y); // Serial.print ("") belgisini chop eting; Serial.print ("Z ="); // Serial.println (z) belgisini chop eting; }
int circularize (int pos) {
agar (pos> = NUMBER_OF_LEDS_ON_RING) qaytsa (pos - NUMBER_OF_LEDS_ON_RING); aks holda (pos <0) qaytsa (pos + NUMBER_OF_LEDS_ON_RING); aks holda qaytish (pos); }
int masofa;
int counterClockwiseDistanceBetweenLeds (int prevPos, int nextPos) {masofa = nextPos - prevPos; agar (masofa <0) masofa += NUMBER_OF_LEDS_ON_RING; qaytish (masofa); }
int ledPosition, currentQueueSize;
#aniqlang NUMBER_OF_LEDS_TO_SHINE 10 int yorqinligiStep = 255/NUMBER_OF_LEDS_TO_SHINE;
yaroqsiz makeLightShow () {
uchun (int j = 0; j <NUMBER_OF_LEDS_ON_RING; j ++) neoring.setPixelColor (j, 0, 0, 0); currentQueueSize = ledQueue.count (); uchun (int k = 0; k <currentQueueSize; k ++) {ledPosition = ledQueue.pop (); neoring.setPixelColor (ledPosition, 0, (nashridaStep * k), 0); if ((k == 0 && currentQueueSize 0) ledQueue.push (ledPosition);} neoring.show ();}
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/Metodos del juego de luces del arcoiris
// Nuqtalarni ketma -ket rangsiz rang bilan to'ldiringWipe (uint32_t c, uint8_t kuting) {for (uint16_t i = 0; i
bo'sh kamalak (uint8_t kutmang) {
uint16_t i, j;
uchun (j = 0; j <256; j ++) {uchun (i = 0; i
// Biroz boshqacha, bu kamalakni butun dunyo bo'ylab teng taqsimlaydi
void rainbowCycle (uint8_t kutish) {uint16_t i, j;
for (j = 0; j <256*5; j ++) {// g'ildirakdagi barcha ranglarning 5 tsikli uchun (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); kechiktirish (kutish); }}
// Teatr uslubidagi sudraluvchi chiroqlar.
void teatrChase (uint32_t c, uint8_t kutish) {for (int j = 0; j <10; j ++) {// (int q = 0; q <3; q ++) {uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // har uchinchi pikselni} strip.show () ga aylantiring;
kechiktirish (kutish);
uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // har uchinchi pikselni o'chiring}}}}
// Kamalak effektli teatr uslubidagi sudraluvchi chiroqlar
void teatrChaseRainbow (uint8_t kutish) {uchun (int j = 0; j <256; j ++) {// g'ildirakdagi barcha 256 rangni aylantirib (int q = 0; q <3; q ++) {uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255))); // har uchinchi pikselni} strip.show () ga aylantiring;
kechiktirish (kutish);
uchun (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // har uchinchi pikselni o'chiring}}}}
// Rang qiymatini olish uchun 0 dan 255 gacha qiymat kiriting.
// Ranglar - r - g - b - r ga qaytish. uint32_t g'ildirak (bayt WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {qaytish chizig'i. Color (255 - WheelPos * 3, 0, WheelPos * 3); } agar (WheelPos <170) {WheelPos -= 85; Qaytish chizig'i Rang (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; Qaytish chizig'i Rang (WheelPos * 3, 255 - WheelPos * 3, 0); }
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/Metodlar Rueda de colores
// int elegirColor = tasodifiy (0x000000, 0xffffff);
// CylonEyeColor = HtmlColor (elegirColor); // int elegirColor = tasodifiy (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); // Rosa // CylonEyeColor = HtmlColor (0x000000);
///////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/Metodos xilma -xillikka olib keladi
// Nuqtalarni birin -ketin rang bilan to'ldiring
void colorWipe1 (uint32_t c, uint8_t kutish) {uchun (uint16_t i = 0; i
bo'sh pulsWhite (uint8_t kutmang) {
uchun (int j = 0; j <256; j ++) {uchun (uint16_t i = 0; i
uchun (int j = 255; j> = 0; j-) {
uchun (uint16_t i = 0; i
void rainbowFade2White (uint8_t kuting, 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 ++) {// g'ildirakdagi barcha ranglarning 5 tsikli
uchun (int i = 0; i <strip.numPixels (); i ++) {
wheelVal = G'ildirak (((i * 256 / strip.numPixels ()) + j) & 255);
redVal = qizil (wheelVal) * suzuvchi (fadeVal/fadeMax);
greenVal = yashil (wheelVal) * suzuvchi (fadeVal/fadeMax); blueVal = ko'k (wheelVal) * suzuvchi (fadeVal/fadeMax);
strip.setPixelColor (i, strip. Color (redVal, greenVal, blueVal));
}
// Birinchi tsikl, yo'qoladi!
agar (k == 0 && fadeVal <fadeMax-1) {fadeVal ++; }
// Oxirgi pastadir, o'chib ketadi!
aks holda (k == rainbowLoops - 1 && j> 255 - fadeMax) {fadeVal--; }
strip.show ();
kechiktirish (kutish); }}
kechikish (500);
uchun (int k = 0; k <whiteLoops; k ++) {
uchun (int j = 0; j <256; j ++) {
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j]))); } strip.show (); }
kechikish (2000);
uchun (int j = 255; j> = 0; j-) {
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0, neopix_gamma [j]))); } strip.show (); }}
kechikish (500);
}
void whiteOverRainbow (uint8_t kuting, uint8_t whiteSpeed, uint8_t whiteLength) {
if (whiteLength> = strip.numPixels ()) whiteLength = strip.numPixels () - 1;
int bosh = oq Uzunlik - 1;
int quyruq = 0;
int looplari = 3;
int loopNum = 0;
statik belgisiz long lastTime = 0;
while (rost) {
uchun (int j = 0; j <256; j ++) {uchun (uint16_t i = 0; i = dum && i boshi && i> = quyruq) || (quyruq> bosh && i <= bosh)) {strip.setPixelColor (i, strip. Color (0, 0, 0, 255)); } boshqa {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)))); }}
if (millis () - lastTime> whiteSpeed) {
bosh ++; quyruq ++; if (bosh == strip.numPixels ()) {loopNum ++; } lastTime = millis (); }
agar (loopNum == loop) qaytsa;
bosh%= strip.numPixels (); quyruq%= strip.numPixels (); strip.show (); kechiktirish (kutish); }}} void fullWhite () {uchun (uint16_t i = 0; i
// Biroz boshqacha, bu kamalakni butun dunyo bo'ylab teng taqsimlaydi
bo'sh kamalakCycle1 (uint8_t kutish) {uint16_t i, j;
for (j = 0; j <256 * 5; j ++) {// g'ildirakdagi barcha ranglarning 5 tsikli uchun (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); kechiktirish (kutish); }}
bo'sh kamalak1 (uint8_t kutmang) {
uint16_t i, j;
uchun (j = 0; j <256; j ++) {uchun (i = 0; i
// Rang qiymatini olish uchun 0 dan 255 gacha qiymat kiriting.
// Ranglar r - g - b - r ga qaytish. uint32_t Wheel1 (bayt WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {qaytish chizig'i. Color (255 - WheelPos * 3, 0, WheelPos * 3, 0); } agar (WheelPos <170) {WheelPos -= 85; Qaytish chizig'i Rang (0, WheelPos * 3, 255 - WheelPos * 3, 0); } WheelPos -= 170; Qaytish chizig'i Rang (WheelPos * 3, 255 - WheelPos * 3, 0, 0); }
uint8_t qizil (uint32_t c) {
qaytish (c >> 16); } uint8_t yashil (uint32_t c) {qaytish (c >> 8); } uint8_t ko'k (uint32_t c) {qaytish (c); }
8 -qadam: 3D dizayni
Birinchidan, to'g'ri ekanligiga ishonch hosil qilish uchun siz apparat tarkibiy qismlarining o'lchamlarini o'lchashingiz kerak. Agar ular biznikiga o'xshash bo'lsa, biz sizga qarz bergan fayllardan foydalanishingiz mumkin.
Ikkala qo'llab -quvvatlash 3D printer bilan ishlab chiqilgan, ular ham quyidagilarga kiritilgan.
ukelele_support_arduino_v0.stl: https://www.tinkercad.com/things/1aAGZ1xFptA-ukel… ukelele_support_WS2812_v0.stl:
Nihoyat, yorug'lik oxirgi ikkita rasmga o'xshaydi.
9 -qadam: Bo'yinni o'rnatish
Avval egarni bo'yniga qo'yamiz. Vintlar ushlab turishi kerak bo'lgan teshiklar u erda yo'q, shuning uchun biz ularni qayerga borishni belgilab, burg'ulash bilan teshik qilishimiz kerak.
Xuddi shu narsa bo'ynini asbob korpusiga mahkamlaydigan vintlardek teshiklarga ham tegishli. Ularni bajarish shart emas, chunki bu mahkamlash uchun vintlar yo'q, lekin agar biz buni qilmoqchi bo'lsak, hech qanday muammo bo'lmaydi.
MUHIM: ustunning boshlanishi bilan sozlagichning boshlanishi o'rtasida 5 mm bo'sh joy qoldiring, chunki bu teshikka gayka joylashtiriladi.
Biz yong'oqni rasmda ko'rsatilgan yo'nalishda elim bilan yopishtiramiz.
Nihoyat, biz tirgak boshida joylashgan teshiklarga 4 pinni kiritamiz, har bir pinni rasmda ko'rsatilgandek 2 ta qisqa vint bilan ushlab turamiz.
10 -qadam: qushni o'rnatish
Ko'prik yopishtirish orqali va ikkita uzun vint bilan korpusning markaziy holatida o'rnatiladi. Qalam bilan tanadagi to'g'ri holatni belgilash tavsiya etiladi. Biz rasmda ko'rsatilgan masofalarni olamiz.
Biz ikkita komponentning birlashmasida elim surtamiz. Biz ikki qismni bo'g'in quriguncha mahkamlovchi vint yordamida ehtiyotkorlik bilan tuzatamiz. Biz vintlar uchun ikkita teshikni yog'och uchun 1,5 mm matkap bilan qilamiz. Ko'prikni tanadagi ikkita uzun vint bilan mahkamlang. Va nihoyat, biz vintlar boshlariga himoya qopqoqlarini qo'yamiz.
11 -qadam: Tana va bo'yin yig'ilishi
Ikki qismni yig'ish uchun bizda tananing boshida teshiklar bor, bu erda bo'yniga ikkita proyeksiyaga to'g'ri keladi. Biz ularni elim bilan yoki issiq eritilgan qurol bilan yopishtirishimiz mumkin. Kattaroq fiksatsiyaga ega bo'lish uchun, sozlagichning oxirida joylashgan teshiklarni tanaga ulashingiz mumkin.
12 -qadam: Ukulele simlarini joylashtiring
Nihoyat, asboblarimiz tugashi uchun simlarni joylashtirishimiz kerak.
Ilgari biz pimlarning mahkamlagich halqalarini tirgak orqali o'tadigan proyeksiyalarga kiritamiz. Iplarni joylashtirish uchun biz to'plam bilan birga kelgan 4 ta ipni oldik. Avval siz har bir satrni ajratishingiz kerak, chunki ular bir xil emas. Siz har bir ipning bir uchini bog'lashingiz kerak (ikkita qalin oddiy tugun bilan, ikkita ingichka juftlik bilan) va iplarni ko'prik uyalariga joylashtiring.
Keyin biz iplarni shunday joylashtiramizki:
• Birinchi pozitsiya: G simli (ikkinchi eng qalin ip).
• Ikkinchi pozitsiya: C simli (qalinroq ip).
• Uchinchi pozitsiya: E simli (ikkinchi ingichka ip).
• To'rtinchi pozitsiya: tor (ingichka ip).
Iplarni berilgan vilkaning teshiklariga joylashtiring. Pimni ikki yoki uch marta burab, har bir ipni tuzatishga harakat qiling. Iplarni ortiqcha kuch ishlatmasdan torting va iplar bilan egar orasidagi masofani tekshiring.
Agar siz buni qanday qilish haqida shubhangiz bo'lsa, iplarni qanday qilib to'g'ri qo'yishni tushuntirib beradigan o'quv qo'llanmasini chop etishingiz mumkin.
13 -qadam: sinov
Nihoyat, biz ukulele shunday to'g'ri yig'ilganmi yoki yo'qmi, ko'rishimiz kerakki, birinchi paneldagi ideal masofa 0,1 mm, o'n ikkinchi - taxminan 1,2 mm.
Ukulele simlarini sozlash zarur. Men sizga ushbu ilovani tavsiya qilaman: GuitarTuna
14 -qadam: Xursand bo'ling
Endi siz faqat ukulelingizdan zavqlanishingiz kerak.
Agar biz haqimizda ko'proq ma'lumotga ega bo'lishni istasangiz, bizni quyidagi manzilda topishingiz mumkin.
Twitter: @Innovart_cc
Facebook: @Innovartcc
Instagram: @Innovart_cc
Veb -sayt: Innovart.cc
Tavsiya:
Oksimetr va yurak urish tezligi bilan DIY Fitness Tracker aqlli soati - TinyCircuits -dan modulli elektron modullar - Eng kichik arkada: 6 qadam
Oksimetr va yurak urish tezligi bilan DIY Fitness Tracker aqlli soati | TinyCircuits -dan modulli elektron modullar | Eng kichik arja: Hey, nima bo'ldi, bolalar! Akarsh bu erda CETech -dan. Bugungi kunda bizda kundalik hayotda juda foydali bo'lgan sensor modullari bor, lekin ularning kichik versiyasida. Bugungi kunda bizda mavjud bo'lgan datchiklar o'lchamiga qaraganda juda kichik
Qo'l bilan lehimlash Elektron komponentlarning chiqindilari, elektron komponentlar: 7 qadam
Qo'lda lehim bilan ishlaydigan elektron elektron platalar: elektron elektron platalar (eski kompyuterlar yoki maishiy texnika) lehimlantiruvchi temir, lehim cımbız, penseler, qaychi
Aqlli budilnik: Raspberry Pi -dan tayyorlangan aqlli budilnik: 10 qadam (rasmlar bilan)
Aqlli budilnik: Raspberry Pi bilan yasalgan aqlli budilnik: Siz hech qachon aqlli soatni xohlaganmisiz? Agar shunday bo'lsa, bu siz uchun yechim! Men Smart Budilnikni yaratdim, bu soat, siz budilnik vaqtini veb -saytga ko'ra o'zgartirishingiz mumkin. Signal o'chganda, ovoz eshitiladi va ikkita chiroq yonadi
Budilnik bilan DIY aqlli o'lchov (Wi-Fi, ESP8266, Arduino IDE va Adafruit.io bilan): 10 qadam (rasmlar bilan)
Budilnik bilan DIY aqlli o'lchov (Wi-Fi, ESP8266, Arduino IDE va Adafruit.io bilan): Oldingi loyihamda men Wi-Fi bilan aqlli hammom o'lchovini ishlab chiqdim. U foydalanuvchi vaznini o'lchashi, uni mahalliy ko'rsatishi va bulutga yuborishi mumkin. Bu haqda batafsil ma'lumotni quyidagi havola orqali olishingiz mumkin: https: //www.instructables.com/id/Wi-Fi-Smart-Scale-wi
IoT hamyoni (Firebeetle ESP32, Arduino IDE va Google elektron jadvalli aqlli hamyon): 13 qadam (rasmlar bilan)
IoT hamyoni (Firebeetle ESP32, Arduino IDE va Google elektron jadvalli aqlli hamyon): "Instructables" cho'ntak o'lchamli tanlovining birinchi sovrini!: Agar siz kriptovalyutalarga ozgina pul sarmoya kiritgan bo'lsangiz, ehtimol siz ularning o'zgaruvchanligini bilasiz. Ular bir kecha -kunduzda o'zgarib turadi va siz hali ham sizning to'ringizda qancha "haqiqiy" pul borligini bilmaysiz