Za ovu radionicu bit će vam potrebni:
Vidi X mikroračunalo – koristit ćemo ga za prikupljanje zvuka, za njegovo analiziranje te za programiranje adresabilne RGB LED trake.
Pametna RGB LED traka WS2812 5V – sastoji se od adresabilnih i programabilnih LE Dioda. Traka je savitljiva i time vrlo korisna u kreiranju raznovrsnih svjetlosnih efekata. Ova LED traka ima 5050 RGB LED s čipom za upravljanje WS2812 koji je ugrađen u svaku diodu. Pojedini LED troši 60 mA struje i može se napajati iz 5 V DC napajanja. Ima jedan podatkovni (data) pin za unos podataka koji se može kontrolirati raznim mikrokontrolerima te VIDI X mikroračunalom. Ovisno o intenzitetu tri pojedinačne boje (crvene, zelene i plave) LED diode, možemo stvoriti bilo koju boju koju želimo iz spektra od 16,8 milijuna boja (tj. 256 * 256 * 256 boja)
69 kn – https://e-radionica.com/hr/pametna-rgb-led-traka-ws2812-30led-m-5v-ip20.html
Napajanje 5 V, 3A – 3 Ampera bit će dostatno za 50 komada 5050 RGD LE Dioda strongma podatku da pojedini LED troši 60 mA struje. Koristite li za vaš projekt LED traku s manjim brojem LE dioda, moguće je i napajanje zamijeniti slabijim napajanjem. Tako za 30 dioda (tj. jedan metar trake ) trebate 1,8 A struje te je napajanje potrebno prilagoditi vašoj količini RGB dioda.
49 kn – https://e-radionica.com/hr/napajanje-5v-3a-s-microusb-konektorom.html
USB lemilica – Vrh ove lemilice se vrlo brzo ugrije te ste za već 15ak sekundi od paljenja sstrongmni za lemljenje. Napajati ju možete kvalitetnijim USB punjačem od 2 A, no ne i ovim ranije spomenutim za napajanje LED trake jer nema USB A ženski port koji koristi ova lemilica. USB laptopa ili računala najčešće nema dovoljno struje za pokretanje ove lemilice.
69 kn – https://e-radionica.com/hr/usb-lemilica.html
Microusb breakout – omogućava spajanje USB napajanja s RGB LED trakom
5 kn – https://e-radionica.com/hr/microusb-breakout.html
Bezolovni lem 1.00mm 16g – lem za rad s ručnom lemilicom najčešće dolazi uz lemilicu, no ako ga nemate, potražite ga na linku
19 kn – https://e-radionica.com/hr/lem-16g-sn99-3cu0-7-1mm.html
SHEMA spajanja
Shema spajanja vrlo je jesnostavna. LED traka ima najčešće zelenu žicu označenu kao data pin koji spajamo sa GPIO15 VIDI X mikroračunala, dok crvenu žicu spajamo sa +5V , a bijelu sa GND napajanja.
USB BREAKOUT: ovdje je zbog jednostavnosti korištenja
RGB LED traka WS2812 ima 3 žice. Crvena je plus napajanja, do nje, u sredini je najčešće zelena data (tj. podatkovna) linija. Ona zahtijeva 5 V logički signal, no mi na VIDI X mikroračunalu imamo 3,3 V logički signal. S obzirom da logika 5 V radi na principu da bilo koji signal iznad 2,7 V prihvaća kao logički HI , 3,3 V je dovoljno za pokretanje WS2812 trake.
Prisjetimo se:
Primijetit ćete da je minimalni izlazni HI napon (V OH) 2,7 V. Dakle, imate li napon od 2,7 V na pinu Vidi X-a, smatrat će se da je to HI napon te će logika LED trake razumjeti signal kao logički 1. Minimalni ulazni napon koji će se smatrati HI naponom, tj. logičkim 1 (V IH), je 2 V. Dakle, bilo koji napon od najmanje 2 V i veći će se očitavati kao logička jedinica (tj. HI) na logičkom uređaju, odnosno LED traci u našem primjeru. Moguće je da raspon od 2 V do 2,7 V ne bude uvijek očitan kao HIGH napon pa, kako biste bili sigurni da će uređaj ispravno raditi, taj raspon struje morate testirati na vašoj LED traci i uvjeriti se kako ona reagira. Kod jeftinijih proizvođača moguće je da nisu poštovali propisani standard. Taj prostor od 0,7 V se ponekad naziva marginom buke i moguće je da ga određeni proizvođači namjerno izbjegavaju kako bi smanjili grešku u određenim rubnim slučajevima.
Maksimalni izlazni LOW napon (V OL) je 0,4 V. To znači da će uređaj koji pokušava poslati logičku 0 uvijek biti ispod 0,4 V. Maksimalni ulazni LOW napon (V IL) je 0,8 V. Dakle, bilo koji ulazni signal ispod 0,8 V i dalje će se smatrati logičkom nulom (tj. LOW). Ovdje možete primijetiti marginu buke od 0,4 V. Što se događa ako imate signalni napon između 0,8 V i 2 V? Ovaj raspon napona nije definiran i rezultira neispravnim stanjem, koje se često naziva plutajućim. Ako izlazni pin na vašem uređaju „pluta“ u ovom opsegu, okarakterizirat ćemo ga kao slučajni, a bit će čas nula, čas jedinica. Potpuno slučajno. Ostalo je još spojiti GND (tj. minus napajanja). GND napajanja te GND LED trake i GND VIDI X mikroračunala moraju biti spojeni kao na priloženoj shemi.
Eventualno bismo mogli i VIDI X mikroračunalo napajati s istim napajanjem 5V 3A s kojim napajamo LED traku, no tada nikako VIDI X mikroračunalo ne bi smjelo biti spojeno USB kabelom na računalo pa takav spoj nismo niti ucrtali na priloženu shemu. Dakle, u našem je slučaju pametnije VIDI X mikroračunalo napajati USB kablom s računala, barem dok se ne uvjerite da imate finalnu verziju koda koju ćete uploadati na VIDI X.
Ukoliko pak želite i znate što radite, možete plus napajanja LED trake spojiti na +VIN pin VIDI X-a i tako napajati kompletan projekt istim napajanjem, no u tom slučaju nipošto nemojte spajati USB kabel u VIDI X za dodatno programiranje ukoliko niste u potpunosti ugasili napajanje LED trake. Kada kažemo „u potpunosti“, znači da morate biti sigurni da nije slučajno u kondenzatorima napajanja ostao koji elektron struje. Napajanje je najlakše u potpunosti isprazniti od tih zaostalih elektrona tako da ga ištekate iz 220 V mreže kada LED traka još svijetli. Tako će ledice potrošiti i te zadnje elektrone te se polako u gasiti.
LED TRAKU zalijepili smo na drvenu lajsnu te smo sve zajedno obostrano ljepljivom trakom zalijepili za stražnju stranu stola
<pstyle="text-align: center;">Potpuna uživancija u glazbi jednostavno nije moguća bez popratnih svjetlosnih efekata
Programski kod
Osnova za uzorak paljenja ledica je analiza spektra zvuka – spektrometar. Gotovi kod spektrometra posudili smo od korisnika koji se potpisao sa Lesept. Dodatna pojašnjenja njegovog koda pronađite na linku https://www.instructables.com/Portable-Sound-Analyzer-on-ESP32/ Lesept je tako analizirao zvuk i dao nam na izbor nekoliko različitih ekrana s barovima koji označavaju najveće amplitude različitih frekvencija zvuka. Tako prvi ekran ima i animaciju koja prikazuje postupno smanjenje amplituda kroz vrijeme. Mi smo u njegovu funkciju displaySpectrum() dodali dio koda koji je zadužen za programiranje RGB LED trake.
Kod:
if (ampmax * 2 > NUM_LEDS) { ampmax = NUM_LEDS / 2; }
for (int l = 0; l < ampmax * 2; l++)
{ leds[l] = CHSV( map(freqmax, 0, BOJA - (l * FAKTOR), MINBOJA, MAXBOJA), 255, MAXSVJETLINA); }
for (int l = ampmax * 2; l < NUM_LEDS; l++) {
//leds[l] = CHSV( 0, 0, 0);
leds[l] = CHSV( map(freqmax, 0, BOJA - (l * FAKTOR), MINBOJA, MAXBOJA), 255, MINSVJETLINA);
} FastLED.show();
Kod kroz for petlju prolazi od prve do zadnje ledice te funkcijom CHSV postavlja Hue vrijednosti na neku vrijednost u ovisnosti od frekvencije zvuka. Dvije for petlje zadužene su kako bi se prvom kretali do nekog mjesta u nizu koja je određena amplitudom. Druga for petlja služi za kretanje od te točke amplitude do kraja niza LED trake.
CHSV postavlja piksel na vrijednosti ( hue , saturation , svjetlina ). Sve tri vrijednosti mogu biti između 0 i 255. Mi smo u kodu za svjetlinu koristili varijablu MAXSVJETLINA i MINSVJETLINA kako bismo mogli lakše upravljati tim vrijednostima.
MAXSVJETLINA će odlično poslužiti za postaviti ju na recimo 120 , čime ćete strongpoloviti svjetlinu ledica, ali i potrošnju struje, pa je tako moguće projekt pokrenuti i sa slabijim napajanjem ukoliko trenutno nemate pristup napajanju koje je dovoljno jako da pokrene svih 30 ledica na traci.
Naravno, pripazite da i MINSVJETLINA slučajno ne stronglazi željenu vrijednost od 120. Ukoliko je MINSVJETLINA postavljena na vrijednost nula, ledice će biti ugašene u tom drugom dijelu trake. Kako CHSV vrijednosti ne smiju stronglaziti 255 iskoristili smo funkciju map za strongslikavanje vrijednosti unutar tog raspona.
Sintaksa: map(value, fromLow, fromHigh, toLow, toHigh)
Parametri
value : broj za mapiranje.
fromLow : donja granica trenutnog raspona vrijednosti.
fromHigh : gornja granica trenutnog raspona vrijednosti.
toLow : donja granica ciljnog raspona vrijednosti.
toHigh : gornja granica ciljnog raspona vrijednosti
Primjer: val = map(val, 0, 1023, 0, 255);
Ovaj primjer će varijablu val vrijednosti 1023 strongslikati u vrijednost 255 . Ako varijabla val ima vrijednost 512 , bit će strongslikana u 123 . 5 će biti strongslikan u 1 i tako redom, vrijednosti će biti skalirane u taj novonavedeni raspon. Moguće je koristiti i negativne vrijednosti ukoliko vam budu trebale u nekom projektu.
U funkciji displayEnvelope() za paljenje ledica koristili smo for petlju:
for (int l = 0; l < amplitude; l++)
{
leds[l] = CRGB::Green; leds[NUM_LEDS - l - 1] = CRGB::Yellow;
}
for (int l = amplitude; l < NUM_LEDS / 2; l++)
{
leds[l] = CRGB::Black; leds[NUM_LEDS - l - 1] = CRGB::Black;
}
FastLED.show();
Možemo vidjeti korištenje CRGB funkcije za bojanje piksela. U ovom slučaju vrijednosti boja navedene su varijablama pa tako žutu boju definiramo kroz liniju koda
leds[NUM_LEDS - l - 1] = CRGB::Yellow;
U funkciji displaySpectrum3() možete vidjeti primjenu iste funkcije u obliku korištenja vrijednosti (Red, Green, Blue).
Tako sada ledice bojimo s leds[l] = CRGB( 255, 0, 0); koja će definirati piksel kao crveni. Tako bi za zeleni piksel koristili
leds[l] = CRGB( 0, 255, 0);
dok bi za plavi koristili
leds[l] = CRGB(0, 0, 255);.
Želite li bijelu boju, sve tri vrijednosti morate postaviti na 255, što ujedno troši i najviše struje pa za takav slučaj korištenja stvarno morate imati dobro napajanje. Suprotno tome, sve tri vrijednosti postavljene na nulu ugasiti će piksel. Tu boju nazvali bismo crnom bojom.
Na kraju postavljanja svakog niza vrijednosti ledica potrebno je izvršiti funkciju
FastLED.show();
koja će postavljene vrijednosti primijeniti na LED traku.
Kako bi sve radilo kako treba zaslužna je biblioteka FastLED.h koja podržava i LED trake s nekim drugim čipom osim WS2812 koji je korišten u našem primjeru.
Naredbom CRGB leds[NUM_LEDS]; potrebno je rezervirati broj LED piksela na travi. Broj NUM_LED S ne smije biti veći od broja piksela koji se stvarno nalaze na traci, no smije biti manji. Željet ćete smanjiti taj broj ukoliko nemate dovoljno jako napajanje trake kako biste osvijetlili kompletan niz ledica.
Na samom početku koda postoje i neke varijable koje smo definirali, a to su:
#define NUM_LEDS 142 // Broj ledica na traci
#define DATA_PIN 15 // Pin na koji spajamo podatkovnu liniju LED trake
#define BOJA 2800 // Količina boje može biti vrijednost između 4095 i 0
#define FAKTOR 10 // Faktor množenja boje za narednu ledicu, može biti vrijednost od -10 do 10, ali i 0.01 te druge vrijednosti
#define MAXSVJETLINA 95 // 255 je najsvjetlije
#define MINSVJETLINA 35 // 0 je ugašeno
#define MINBOJA 0 // Za puni spektar boja MIN i MAX se postavljaju od 0 do 255
#define MAXBOJA 255 // 0-10 - zelena; -30 - narančasta;
Idealno bi bilo u budućnosti nadograditi ovaj Light Show s potenciometrima koji bi mogli mijenjati vrijednosti tih varijabli. Tako biste mogli mijenjati te vrijednosti u realnom vremenu i time dobiti moćnu kontrolu Light Showa. Naravno, oni sstrongtniji s programiranjem istu stvar mogu napraviti uz pomoć alternativnih metoda promjene varijabli. Npr. dostupnim tipkama na Vidi X-u ili čak uz pomoć korištenja touch kontrola ekrana.
Arduino skicu stronguzmite s Vidilabovog GitHuba na linku: https://github.com/VidiLAB-com/Vidi-X/tree/master/Light_Show
Ukoliko nemate instaliran Arduino IDE i konfiguriran za korištenje sa VIDI X mikroračunalom, poslužite se uputama na linku https://vidi-x.org/radionice/vidi-project-x-91-arduino-ide/ kako bi ga instalirali i konfigurirali. Pripadajuću biblioteku instalirajte kroz upravitelj biblioteka upisujući Fastled u tražilicu.