VIDI Project X #61:
LIGHT SHOW

Za izradu Light Showa koristili smo WS2812 pametnu RGB LED traku kojom upravlja VIDI X mikroračunalo

Glazba je potrebna svakome od nas. Neki ju koriste kao sredstvo smirenja, moguće u obliku klasične glazbe. Drugi kako sredstvo za pokretanje. Nije rijetkost vidjeti nekoga kako đogira sa slušalicama na glavi. Razna istraživanja pokazala su kako klasična glazba poput Beethovena podiže prosjek testova studenata. Ipak, neki studenti pobijaju tu tvrdnju pa kažu kako im više paše tišina.

Kako ljudi reagiraju na glazbu, tako reagiraju i na svjetlosne efekte. Upravo iz tog su razloga disko dvorane prepune reznih svjetlosnih efekata, ne nužno sinkroniziranih s glazbom. U ovome primjeru pokazat ćemo vam kako pametnu RGB LED traku iskoristiti za stvaranje light show efekata sinkroniziranih s glazbom koju slušate.

 

 

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. 255 * 255 * 255 boja)
69 knhttps://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 prema 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 knhttps://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 spremni 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 knhttps://e-radionica.com/hr/usb-lemilica.html

 

Microusb breakout – omogućava spajanje USB napajanja s RGB LED trakom
5 knhttps://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 knhttps://e-radionica.com/hr/lem-16g-sn99-3cu0-7-1mm.html

SHEMA spajanja

Shema spajanja vrlo je jednostavna. 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.

 

VOH – Minimalna IZLAZNA razina napona koji TTL uređaju daje HIGH signal.
V IH – Minimalna ulazna razina napona koja se smatra VISOKOM.
V OL – Maksimalna IZLAZNA razina napona koji će uređaju pružiti LOW signal.
V IL – Maksimalna ulazna razina napona i dalje se smatra NISKOM

 

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

 

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 prepoloviti 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 prelazi ž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 prelaziti 255 iskoristili smo funkciju map za preslikavanje 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 preslikati u vrijednost 255. Ako varijabla val ima vrijednost 512, bit će preslikana u 123. 5 će biti preslikan 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_LEDS 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 spretniji 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 preuzmite 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.

 

 

PRIJTELJI PROJEKTA

bez kojih sve ovo ne bi bilo moguće.

SVA PRAVA PRIDRŽANA - VIDI TO 2020.

Niti jedan dio ovog web site-a ne smije se u bilo kojem obliku ili radi bilo koje namjene reproducirati bez prethodne pismene suglasnosti izdavača, Svi tekstovi objavljeni na www.vidi-x.com pripremljeni su s osobitom pažnjom i kontrolirani na više razina. Redakcija www.vidi-x.com međutim, ni u kojem slučaju ne može odgovarati za moguće štete bilo kakve vrste nastale na osnovu savjeta, tekstova, slika ili drugog redakcijskog ili oglašivačkog materijala objavljenog na www.vidi-x.com ili na drugi način datog od strane zaposlenika ili suradnika izdavača.