Lumini de Crăciun Computerizate (v.2)

Lumini de Crăciun Computerizate (v.2) - HobbytronicaBine te-am găsit !

Trăim într-o lume aglomerată în care este din ce în ce mai greu să te simţi unic. Acest lucru se poate observa foarte bine în preajma sărbătorilor de iarnă atunci când fiecare vecin încearcă să-şi împopoţoneze casa cu măcar câteva ghirlande luminoase în plus faţă de ceilalţi. Din păcate, fiecare din aceste ghirlande luminoase licăreşte în legea ei, fără nici un fel de sincronizare cu celelalte, astfel că rezultatul este un decor care luminează puternic şi colorat, dar haotic. Este ca şi cum în încercarea de a fi deosebit, te îmbraci cu toate culorile posibile fără a ţine cont de asortarea lor. Aşa că eu, prin proiectul din 2014 şi prin cel pe care ţi-l prezint astăzi, mi-am propus ca toate ghirlandele dintr-un decor de Crăciun să fie dirijate de un controller central care astfel să permită ca totul să arate ca şi cum te-ai afla în faţa unei orcheste şi nu ca în faţa unui simplu bâlci.

Multe din noţiunile din acest proiect sunt comune cu proiectul din 2014, aşa pe acestea nu le voi prezenta decât sumar urmând ca accentul fie pus doar pe noutăţile pe care leimplică proiectul de faţă.

  • Principiul general de funcţionare;
  • Elementele luminoase;
  • Controller-ul;
  • Soft-ul Control Lumini;
  • Exemplu de utilizare practică.
Principiul general de funcţionare

Ideea de bază constă în combinarea următoarelor elemente:

Elemente luminoase. Aici mă refer la instalații de lumini de Crăciun (cu becuri sau cu LED-uri) care pot fi cumpărate în preajma sărbătorilor de iarnă de la orice centru comercial.

Controller. Este un modul electronic la care sunt conectate toate elementele luminoase. În acest mod, controller-ul poate comanda individual aprinderea elementelor luminoase. Pentru a putea face acest lucru, controller-ul fie rulează un program dinainte stabilit, fie primește comenzi din exterior de la un laptop/PC pe care rulează un soft special numit:

Soft Control Lumini (pe care îl vom prescurta in continuare cu SCL). Este un soft specializat (disponibil gratuit sau contracost) prin care utilizatorul poate controla dupa bunu-i plac modul de aprindere al elementelor luminoase. În plus, SCL permite sincronizarea aprinderii elementelor luminoase cu piese musicale. Pentru toate aceste lucruri, SCL trebuie să ruleze pe un PC/laptop/placă de dezvoltare. Și bineînțeles, pentru a putea asculta piesele muzicale de care vorbeam mai sus, mai avem nevoie și de un:

Sistem audio sau emițător (modulator) FM. Pe primul îl folosești când nu ai probleme cu vecinii, iar pe al doilea atunci când nu vrei să ai :).

Elementele luminoase

Cele mai importante lucruri de știut despre elementele luminoase sunt următoarele:

  • dacă vrei sa instalezi sistemul în exterior, trebuie să ai grija ca elementele luminoase folosite să fie construite pentru utilizare în exterior;
  • trebuie să dezactivezi/șuntezi controller-ul de pe fiecare element luminos. Motivul și modul de lucru le poți afla de aici;
  • trebuie să fie destinate să lucreze la 220Vca și maxim 20-30mA. Pentru utilizarea unor elemente luminoase care funcționează la tensiuni mai mici și care consumă curenți mai mari, unele componente ale controller-ului trebuie înlocuite cu altele corespunzătoare.

Controller-ul de lumini (partea hardware)

În cazul proiectului de anul trecut am folosit o placă Arduino Uno combinată cu un modul driver. Am optat pentru această variantă pentru ca după sarbători voiam să pot demonta ușor placa Arduino Uno din proiect pentru a o putea folosi și la altceva. Anul acesta însă, am dorit un proiect mult mai performant dar și mai ieftin. Cea mai bună soluție găsită de mine a fost să iau esențialul de pe modulul Arduino Uno și de pe modulul driver și să-l concentrez într-un singur modul, pe care l-am botezat controller SLCC_v.2 (Sistem de Lumini de Crăciun Computerizate versiunea 2). Înainte de a intra în descrierea controller-ului SLCC_v.2 vreau să-ți arăt principalele deosebiri dintre acesta și ansamblul modul Arduino Uno + modul driver.

Caracteristică Ansamblul Arduino Uno + modul driver Controller SLCC_v.2
Număr de canale 18 32
Mod de control al elementelor luminoase On/Off On/Off, reglaj de intensitate a luminozității (prin PWM)
Tensiunea de ieșire 220Vca 0 – 220Vcc
Curentul maxim suportat pe fiecare canal de ieșire  1A  0,3A
Funcționare independentă de PC/Laptop NU DA
Prețul estimativ al componentelor  200 RON  180 RON

Principalul lucru pe care l-am urmărit a fost posibilitatea ca fiecare canal de ieșire să poată controla nu doar aprinderea/stingerea elementelor luminoase ci și gradul de aprindere a acestora. Acest lucru se poate obtine simplu prin control PWM, adică aplicarea energiei electrice sub formă de impulsuri de durată mai mică (grad de aprindere mai mic) sau mai mare (grad de aprindere mai mare). Nativ, placa Arduino Uno are doar 6 pini de ieșire capabili de control PWM, insă eu voiam să pot controla cel puțin câteva zeci de canale. O soluție stupid de scumpă ar fi fost să cumpăr o sacoșă de module Arduino pe care să le leg astfel încât să obțin numărul de canale PWM necesar. Însă am găsit o soluție mult mai deșteaptă: o librărie Arduino (o colecție specială de linii de program) care permite creșterea numărului de canale PWM pe care le poate controla un modul Arduino. Libraria respectiva se numeste ShiftPWM.

Pentru a putea mări numărul de ieșiri PWM, această librărie impune utilizarea unor circuite integrate speciale, numite registre de deplasare.Fără a încerca intru prea mult în detalii, registrele de deplasare sunt nişte circuite care au o singură intrare (pin intrare date) şi mai multe ieşiri (ieşiri PWM). La intrare seintroduc pachete de date care apoi sunt distribuite la ieşire în ordinea în care au venit la intrare. Mai precis, dacă luăm ca exemplu un registru de deplasare cu 8 ieşiri:

  • primul pachet de date primit la intrare este trimis la prima ieşire;
  • al doilea pachet de date primit la intrare este trimis la a doua ieşire;
  • etc.;
  • al optulea pachet de date primit la intrare este trimis la a opta ieşire;
  • al nouălea pachet de date, în mod normal nu ar trebui livrat nicăieri. Însă pe lângă intrarea de date, registrele de deplasare au şi un pin de RESET. După ce al optulea pachet este trimis, registrul de deplasar primeşte pe pinul de RESET un semnal corespunzător, revine la starea iniţială şi livrează al nouălea pachet la prima ieşire. Evident, al 10-lea pachet va fi livrat la la ieşirea 2, al 16-lea pachet la ieşirea 8, al 17 pachet la ieşire 1 şi tot aşa.

Bun până aici. Dar dacă vrem să avem mai mult de 8 ieșiri PWM ? Ei bine, tocmai pentru acest lucru, registrele de deplasare au încă un pin special numit pin repetor date de intrare prin care registrul nostru poate comunica cu alte registre, rezultând astfel un lanț de registre cu care teoretic putem obține oricât de multe canale PWM dorim.

Acestea fiind zise, acum ar trebui să-ți fie mai ușor să înțelegi cum funcționează schema controller-ului din acest proiect, schemă care este prezentată în figura 1.

Schema controller pentru sistemul de Lumini de Craciun Computerizate (versiunea 2) - Hobbytronica

Figura 1. Schema controller-ului pentru sistemul de Lumini de Crăciun Computerizate – versiunea 2. Clic pe imagine pentru mărire.

În primul rând se observă în partea stângă conectorul USB X1, prin care schema primeşte semnale privind controlul luminilor de la laptop/PC. Apoi se observă microcontroller-ul ATMEGA32U4 (notat cu U$1), adică exact acelaşi microcontroller de pe placa Arduino Leonardo. Am folosit acest microcontroller în locul celui de pe Arduino Uno pentru acesta includedin start interfaţă USB. Mai departe vedem 4 circuite integrate de tip registru de deplasare, fiecare având 8 ieşiri, şi deci 4 registre x 8 ieşiri fiecare = 32 de ieşiri PWM întotal. Microcontroller-ul trimite pachete de date în primul pin de intrare date (pin 14) al primului registru (notat cu IC6), acesta le trimite pe primele 8 la ieşirile sale, iar pe următoarele (de la pachetul 9 în sus) le retrimite mai departe prin pinul 9 (pinul repetor date de intrare). Pinul 9 al primului registru este conectat la pinul 14 al următorului registru (IC2), ceea ce înseamnă pachetele de date de la 9 la 16 vor fi livrare la ieşirile acestuia. În acelaşi mod, pachetele de la 17 la 24 vor fi livrare la ieșirile registrului 3 (IC3) iar pachetele de la 25 la 32 vor fi livrate la ieşirile registrului 4 (IC4). După ce microcontroller-ul trimite pachetul 32, trimite simultan şi un semnal de RESET pe pinii de reset ai regiştrilor (pinul 12) ceea ce va readuce regiştrii la starea iniţială, pachetul 33 va fi livrat la ieşirea 1 a primului registru, pachetul 34 la ieşirea 2 a acestuia şi tot aşa.

Cu alte cuvinte, pe baza librăriei SoftPWM, microcontroller-ul nu mai creează el însuși semnale PWM, ci trimite pachete de date prin care spune fiecărui registru de deplasare ce fel de semnal PWM aibă la un moment dat la fiecare din ieşirile acestora.

Cam asta ar fi în mare modul de funcţionare al părţii digitale din schemă. Hai vedem în continuare cum ajunge semnalul de la ieşirea regiştrilor la elementele luminoase.

Semnalele PWM obţinute de la ieşirea registrelor de deplasare sunt aplicate prin intermediul unor optocuploare pe porţile unor tranzistoare MOS-FET care conectează/deconectează alimentarea elementelor luminoase. Evident, optocuploarele sunt folosite pentru a izola partea digitală şi conexiunea USB de partea conectată la 220V.

Pentru cazul în care se doreşte rularea unui joc de lumini direct din memoria microcontroller-ului, schema include şi un circuit de alimentare pentru acesta.

Controller-ul de lumini (software)

Indiferent de cum ai vrea să folosești această schemă (joc de lumini rulat din laptop/PC sau din memoria microcontroller-ului), microcontroller-ul trebuie programat. Pentru acest lucru eu am folosit un programator Arduino ISP (îl poti cumpăra de aici) și mediul de programare Arduino IDE (pe care îl poti descărca gratuit de aici). Acest programator se conectează la placa controller-ului prin conectorul X3. Urmând tutorialul de aici, am programat microcontroller-ul ca să fie văzut de Windows (și implicit de Arduino IDE) ca o placă Arduino Leonardo.

Libraria ShiftPWM nu este inclusă în pachetul standard de librșrii cu care vine Arduino IDE. Așa că în următoarea etapă am descarcat librăria ShiftPWM (pe care o poți descărca și tu de aici). Apoi am inclus-o în Arduino IDE accesând meniul Sketch/Include Library/Add Zipp. library și selectand-o din locația unde am salvat-o anterior.

În acest punct, atât controller-ul cât și laptopul/PC-ul sunt gata de etapa de programare a microcontroller-ului cu programul specific acestui proiect. Programul pe care l-am încărcat în memoria microcontroller-ului este unul care permite comunicația dintre un laptop/PC dar care (deocamdată) nu include și jocuri de lumini pe care microcontroller-ul le poate rula de unul singur. Programul respectiv poate fi descărcat de aici: FirmwareSLLCv2.

Controller-ul de lumini (PCB)

Având în vedere numărul destul de mare de componete am ales ca PCB-ul să fie făcut de o firmă specializată. Pentru a reduce reduce la minim costurile de fabricație ale PCB-ului a trebuit să proiectez PCB-ul alegând dimensiuni destul de mici pentru acesta (10/10cm) ceea ce a condus la un PCB cu trasee fine ți multe care practic nu prea pot fi realizate decât la o firmă specializată. Asta bineînțeles nu înseamnă că nu poți proiecta un alt PCB pe care schema controller-ului să functioneze la fel de bine.

În cazul meu a rezultat un PCB cu o densitate mare de componente. Dacă te interesează versiunea mea de PCB, poți descărca fișierele Gerber necesare de aici și lista de componente de aici. Prototipul rezultat este prezentat în figura 2.

Prototip Modul Sistem de Lumini de Craciun Computerizare (versiunea 2) - Hobbytronica

Figura 2. Prototip Modul Sistem de Lumini de Crăciun Computerizare v.2

Soft Control Lumini

Am descris în introducere care este scopul principal al Soft-ului Control Lumini. Ce n-am spus acolo este că unele dintre acestea îți permit să previzualizezi rezultatul final. Adica au un modul unde:

  • poti încărca o fotografie a locației unde vrei să montezi elementele luminoase;
  • adaugi elemente luminoase virtuale pe care le poți conecta la controller-e virtuale;
  • poți crea, modifica, ajusta jocuri de lumini fără a avea nevoie de controller ci doar de laptop/PC.

Soft-ul de acest tip cu care am lucrat în acest proiect a fost Vixen 3 (care se poate descșrca gratuit de aici). Instalarea si configurarea este foarte similară cu cea prezentată pentru Vixen 2 în proiectul din 2014. În proiectul de anul trecut am încercat să prezint prin text și imagini modul de instalare, configurare și lucru cu Vixen 2. Mi-a luat foarte mult timp însă chiar și asa unii cititori nu au înțeles suficient de bine pasii de urmat. Asa că de această dată, pentru a explica modul de lucru cu Vixen 3 voi realiza un clip video, clip pe care îl voi publica pe facebook și aici în cel mai scurt timp cu putință.

Exemplu de utilizare practică

Pentru 2015 nu am făcut decât să îmbogățesc scena din 2014 și prin urmare mi-a ieșit ceea ce se vede în fotografia de mai jos.

DSC_0657

Am folosit toate cele 32 de canale ale controller-ului ceea ce a făcut și mai dificilă crearea secvențelor de lumini. Din acest motiv nu am avut timp sa creez decât 3 secvențe de jocuri de lumini sincronizate cu muzică, suficiente totuși pentru a ne face o părere despre performanțele sistemului. Rezultatul concret îl poți vedea în playlist-ul de mai jos.

Proiectul s-a dovedit funcțional și robust. Următorul lucru pe care vreau să-l obțin este posibilitatea înlănțuirii a mai multor astfel de controller-e pentru mărirea suplimentară a numărului de canale disponibile. Asta evident, pentru că mereu ne dorim din ce în ce mai multe lumini 😉 !

Dacă ţi-a plăcut acest articol, spune-le şi prietenilor tăi despre el !

Ciprian

8 thoughts on “Lumini de Crăciun Computerizate (v.2)

  1. Salutare domnilor, desi activitatea la acest proiect am vazut ca sa diminuat as avea si eu o micuta intrebare. Cam cat au fost costurile pentru controlerul tau din proiect. Mi-se pare foarte interesanta ideea aplicata nu doar de craciun ci si in anumite locatii!

  2. Salutare Ciprian,

    Ma numesc Gabi si nu sunt nici electronist nici programator… doar pasionat in timpul liber 🙂
    De cand am dat de tutorialele tale (cca. 3 zile), m-am dedicat total acestui proiect :)… am achizitionat toate componentele (varianta cu Vixen 2) si la ora asta montez modulul driver… 🙂 Vreau sa termin toata instalatia in cateva zile si revin cu filmulet.

    Am nevoie de cateva sfaturii:
    Cu varianta 1 / Arduino UNO – Vixen 2 se pot crea doar secvente ON/OFF fara reglaj de intensitate… este minunat, insa merg putin mai departe:
    M-am jucat putin si am vazut ca Vixen 3 este mult mai generos din punct de vedere al realizari secventelor si de acea vreau sa te intreb:
    1. codul de comunicare Arduino uno – Vixen 3 (18channnel) este acelasi cu cel pus de tine in proiectul 1 pentru Vixen 2? poate fi folosit la ambele programe? intreb pentru ca le-am instalat pe amandoua si doar cu vixen 2 am rezultate… (softul comunica cu Arduino) la Vixen 3 ledul de la Rx se aprinde cand porneste programul si asa ramane…practic nu comunica secventele.
    2. cu Vixen 3 se pot crea secvente digitale pentru LED NEOPIXEL (Pixel Lighting) iar optinuea asta iti ofera o plaja enorma de efecte, Din cate am inteles, cautand sfaturi, pe Arduino se pot scrie coduri pe anumite canale pentru control Ledurilor Pixel . Intrebare: din 18 canale active, poti aloca de ex. 12 canale pentru modulul driver (secvente ON/OFF) si 6 canale digitale catre Ledurile Pixel controlate simultan de VIxen 3? Ma insel ? sunt pe un drum gresit?

    Multumesc anticipat,
    Gabi

    • Salut.

      1. In varianta actuala, nu. Dar in principiu s-ar putea face sa mearga pe ambele.
      2. Se poate. Banui ca cele 6 canale sunt cele 6 PWM-uri pe care le are Arduino. Daca vrei sa aloci separat cele 6 canale doar pentru ca sunt in stare de PWM, atunci cred ca va trebui modificat sof-ul din Arduino. Din cate tin minte, parca soft-ul era facut sa transforme orice primeste de la Vixen doar in ON sau in OFF.

      • Multumesc,
        ..ma apuc de invatat! mai caut si poate gasesc un soft de comunicare cu Arduino apropiat de ce vreau eu, sau cel putin intre Vixen 3 si Arduino.

        O zi buna

  3. Salut Cristi !

    1. Merci :).
    2. Proiectul din 2014 nu merge decat ON/OFF. L-am dorit a fi ceva cat se poate de simplu si asa a si iesit :).
    3. Este o solutie si functioneaza de minune ;).
    4. Nu am lucrat cu comunicatii wireless si pentru proiectele viitoare de lumini nici nu am de gand s-o fac. Comunicatia pe cablu e de incredere: ai bagat cablurile si stii ca merge oriunde si oricand. Cu o comunicatie wireless nimic nu e sigur pentru ca e foarte sensibila la conditiile mediul in care o folosesti la un moment dat.

    Sfatul meu desci este: uita de wireless si foloseste doar cablu.

    • Salut Ciprian,

      Eu sunt Silviu. Foarte interesant proiectul tau. Ma bate gandul sa fac eu PCB-ul dar nu mai am timp pana de sarbatori sa il termin. Imi poti spune unde ai facut tu PCB-ul sau sa ma indrumi undeva?
      Multumesc anticipat si abia astept urmatoarele proiecte 🙂

  4. Buna, numele meu e Cristi si sunt pasionat de electronica.
    1. Super tare proiectul tau
    2. La proiectul din 2014, ai folosit analogWrite pe porturi non PWM si cu triace cu stingere prin 0. Cu aceiasi configuratie eu nu reusesc decat ON/OFF si oricat mi-as bate capul nu inteleg cum ai reusit dimarea. Frecventa PWM-ului e de cateva sute de Hz si nu se sicronizeaza in veci cu reteaua.
    3.Nu am auzit pana acum de libraria ShiftPWM, dar pare o solutie atunci cand vrei mai mult 🙂
    4.Eu vreau mai mult dar si mai departe, asa ca ma chinui de ceva vreme cu un UnoWifi pentru a nu mai fi legat de cabluri de date. Pana acum am reusit sa ma conectez cu Vixen-ul la UnoWifi dar toate datele se duc “amestecate” pe ultimul canal. Sunt blocat aici de ceva vreme, iar Craciunul se apropie rapid .
    Orice idee e de apreciat 🙂

Leave a Comment