Sistem de control al luminilor RGB prin wireless [308972]

Universitatea “Politehnica” [anonimizat]: [anonimizat]. [anonimizat] 2018

Anexa 1

Declarație de onestitate academică

Anexa 5

CUPRINS

Cuprins

Lista figurilor

Lista tabelelor

Lista acronimelor

Introducere

Capitolul 1

Structura sistemului de control al luminilor RGB prin wireless

Capitolul 2

2.1 Culori lumină

2.2 Culori în 8 biți

2.3 Efectul PWM

Capitolul 3

3.1 Microcontrolerul

3.2 Placa de dezvoltare Arduino Pro Mini

3.3 Microcontrolerul ATMEGA328P

3.4 [anonimizat]

3.4.1 Protocolul TCP/IP

3.4.2 Cipul ESP-01

3.5 LED

3.5.1 LED-uri RGB

3.6 Infraroșu

3.6.1 LED-ul IR

3.6.2 Receptor IR

3.7 Convertorul Buck

3.8 Stabilizator de tensiune

3.9 Filtrare si energie de rezerva

3.9.1 Redresor monoalternanță cu filtru capacitiv

Capitolul 4

4.1 Comunicație serială

4.1.1 Transmisie sincronă

4.1.2 Transmisie asincronă

4.1.3 Parametrii transmisiei seriale

4.2 Comunicație infraroșu

Capitolul 5

4.1 Implementare hardware

4.2 Implementare software

4.3 Aplicația Android

4.3.1 Utilizare Aplicație Android

4.3.2 Implementare Aplicație Android

4.4 Telecomanda IR

Concluzii

Bibliografie

Anexa cod sursă

LISTA FIGURILOR

Figura 1.1 Schema bloc a sistemului de control al luminilor RGB prin wireless

Figura 2.1 Culorile Spectrului Vizibil

Figura 2.2 Diagrama RGB

Figura 2.3 Semnalul PWM

Figura 3.1 Arhitectura microcontrolerului

Figura 3.2 Magistrala de adrese și magistrala de date

Figura 3.3 Structura internă a microcontrolerului

Figura 3.4 Placa de dezvoltare Arduino Pro Mini

Figura 3.5 Diagrama pinilor a microcontrolerului

Figura 3.6 [anonimizat] 3.7 [anonimizat]-01

Figura 3.8 [anonimizat] 3.9 Conexiunile unui LED

Figura 3.10 Tipuri de LED

Figura 3.11 [anonimizat] 3.12 Convertorul Buck

Figura 3.13 [anonimizat] „ON” – „OFF”

Figura 3.14 Circuitul unei surse de alimentare capacitive

Figura 3.15 Redresor monoalternață cu filtru capacitiv

Figura 3.16 [anonimizat] 4.1 Comunicare serială

Figura 4.2 Transmisie sincronă cu caractere de sincronizare

Figura 4.3 Transmisie sincronă cu semnal de sincronizare

Figura 4.4 Transmisie asincronă

Figura 4.5 Semnalul IR afișat pe oscilator

Figura 4.6 Semnalul modulat

Figura 5.1 Circuitul sistemului de control al luminilor RGB

Figura 5.2 Cubul – Alimentare controlată LED

Figura 5.3 Setare timp de pauză

Figura 5.4 Inițializare pini + conectare reușită

Figura 5.5 Extragere parametru roșu

Figura 5.6 Extragere parametru verde

Figura 5.7 Extragere parametru albastru

Figura 5.8 Calculare putere

Figura 5.9 Aplicatia Android

Figura 5.10 [anonimizat] 5.11 Implementare butoane

Figura 5.12 [anonimizat] 5.13 Implementare afișare putere

Figura 5.14 Calculare valoare PWM

Figura 5.15 Afișare valori calculate

Figura 5.16 Setare culoare

Figura 5.17 Setare valoare PWM pentru fiecare pin

Figura 5.18 a) Creșterea/Scăderea puterii; b)Modificarea putetii

Figura 5.19 Funcția AnuntError()

LISTA TABELELOR

Tabel 2.1 Lungimile de undă și frecvențele pentru fiecare culoare 18

Tabel 3.1 Caracteristicile plăcii de dezvoltare Arduino Pro Mini 22

Tabel 3.2 Caracteristicile cipului ESP8266 ESP-01 25

Tabel 3.3 Specificații tehnice LED RGB 28

Tabel 3.4 Benzi infraroșu 29

Tabel 3.5 Lungimi de undă corespunzătoare domeniilor 29

Tabel 3.6 Caracteristici tehnice receptor IR 30

Tabel 5.1 Comenzi telecomandă IR 46

LISTA ACRONIMELOR

A/D – Analogic/Digital

ADC – Analog to Digital Converter

ARP – Address Resolutin Protocol

D/A – Digital/Analogic

DMA – Direct Memory Access

EEPROM – Electrically Erasable Programmable Read Only Memory

I/O – Input/Output

ICMP – Internet Control Message Protocol

IP – Internet Protocol

IR – Infraroșu

IRED – Infrared Emitting Diode

LED – Light Emitting Diode

MIT – Institutul de Thenologie din Massachusetts

PWM – Pulse Width Modulation

RAM – Random Access Memory

RARP – Reverse Address Resolution Protocol

RC – Rezistor-Condensator

RGB – Red Green Blue

ROM – Read Only Memory

SOC – System On Chip

TCP – Transmission Control Protocol

UDP – User Datagram Protocol

USB – Universal Serial Bus

UV – Ultraviolet

Introducere

Controlul luminii joacă un rol esențial în crearea unei atmosfere confortabile și a unor efecte estetice dorite. Acesta conferă flexibilitate în a proiecta un plan de iluminat cu multiple efecte decorative. Controlul luminii trebuie să fie o parte integrantă în proiectarea luminii în fiecare cameră. Sistemul de control al luminilor RGB permite obținerea oricărei culori din spectrul vizibil.

Sistemul schimbă culoarea și intensitatea luminii după cum se dorește, modifică lumina albă de la lumină caldă la lumină rece sau la lumină colorată pentru crearea unei atmosfere confortabile.

Scopul proiectului de diplomă este reprezentat de controlul intensității de lumină pentru LED-urile RGB prin utilizarea unui microcontroler ATMEGA328P.

Sistemul prezentat va controla intensitatea de lumină pentru LED-urile RGB(Red, Green, Blue). Prin controlarea voltajului aplicat la fiecare fază (Roșu, Verde, Albastru) se poate obține orice culoare din spectrul vizibil.

Pentru selectarea culorii și a intensității de iluminare, se va folosi o aplicație android dezvoltată cu sistemul AppInventor de la MIT. În cazul în care aplicația nu funcționează sau semnalul Wi-Fi nu este disponibil, sistemul prezintă o altă facilitate prin care se poate controla iluminarea încăperii. Acesta poate fi controlat printr-o telecomandă cu infraroșu. Fiecare buton al telecomenzi are setat o culoare sau posibilitatea de a modifica puterea.

Această lucrare conține cinci capitole:

În primul capitol este prezentată structura sistemului de control al luminilor RGB. În Capitolul 2 sunt prezentate informații despre spectrul vizibil, culori și efectul PWM. Capitolul 3 coține informații despre componentele folosite în implementarea proiectului de licență. În Capitolul 4 sunt prezentate tipurile de comunicații prezente în acest proiect. Iar în capitolul 5 este descrisă realizarea părții practice a proiectului de diplomă. În final sunt prezentate și explicate concluziile referitoare la sistemul prezentat.

Capitolul 1

Structura sistemului de control al luminilor RGB prin wireless

Acest sistem este implementat pentru a controla intensitatea de lumina pentru LED-urile RGB. Prentru controlul culorii și al intensității se pot folosi două metode:

Aplicația Android;

Telecomandă IR.

În urmatoarea imagine este prezentată schema bloc a sistemului de control al luminilor RGB prin wireless:

Figura 1.1 Schema bloc a sistemului de control al luminilor RGB prin wireless

Capitolul 2

2.1 Culori lumină

Lumina reprezintă o radiație electromagnetică ce face parte din spectrul electromagnetic. Cuvantul „lumină” se referă de cele mai multe ori la lumina vizibilă, spectrul vizibil. Acest spectru este vizibil pentru ochiul uman.

Domeniul tuturor radiațiilor electomagnetice reprezintă spectrul electromagnetic, acesta este alcătuit din mai multe domenii: raze gamma, raze X, ultraviolet, sectrul vizibil, infraroșu, microunde și unde radio.

Cel mai important este spectrul vizibil, acesta este cuprins între lungimile de undă de 400-700 nanometri. Spectrul vizibil poate fi interpretat de către ochiul uman. Culorile pe care le vedem sunt un efect al faptului că lungimile de undă se relectă prin ochii noștri. Lungimile de undă ale luminii sunt percepute ca diferite culori de către ochiul uman. De exemplu, lumina cu o lungime de undă aproximativ egală cu 700 nm este percepută ca roșu, iar lumina cu o lungime de undă aproximativ egală cu 700 nm este percepută ca violet. Toate culorile pot fi observate, pentru că există trei seturi de fotoreceptori în ochi: un set care este sensibil la lumina roșie, altul care este sensibil la lumina verde și unul sensibil la lumina albastră.

Figura 2.1 Culorile Spectrului Vizibil[1]

Lungimile de undă mai mici de 400 nm fac parte din spectrul UV și nu sunt vizibile, iar lungimile de undă mai mari de 700 nm fac parte din spectrul IR. Nu este posibil să se dea o limită precisă între lungimile de undă vizibile și invizibile, de exemplu unii oameni pot vedea încă o lumina la 720 nm, iar alții nu pot.

Spectrul vizibil nu conține toate culorile pe care ochiul uman le poate distinge. Culorile nesaturate precum roz și purpuriu, de exemplu, sunt absente, pentru că pot fi redate dintr-un amestec de lungimi de undă multiplă. Aceste culori sunt percepute de ochi atunci când lumina albastră și lumina roșie se suprapun. Culorile care conțin o singură lungime de undă sunt numite culori spectrale sau culori pure. Spectrul este continuu, fără limite clare între o culoare și altă.

Tabel 2.1 Lungimile de undă și frecvențele pentru fiecare culoare

2.2 Culori în 8 biți

Lumina albă, este cunoscută drept lumina zilei și poate fi obținută prin amestecarea unor lumini colorate, cea mai folosită metodă este utilizarea culorilor primare roșii, verzi și albastre. Deoarece acest lucru implică amestecarea și difuzarea culorilor, această metodă este puțin folosită pentru producerea iluminării albe datorită tendinței de a avea o ușoară nuanță. Această metodă este destul de interesantă pentru aplicațiile de efect datorită flexibilității amestecării diferitelor culori.

Lumina albă strălucitoare care trece printr-o prismă optică, determină ca lungimile de undă să se îndoaie la unghiuri ușor diferite datorită fenomenului de refracție. Prin urmare, lumina rezultată este împărțită în spectrul de culoare vizibil.

Majoritatea culorilor vizibile pot fi obținute prin amestecarea a diferite cantități de culori primare: roșu, verde și albastru (RGB). Pentru fiecare scală de culoare se poate selecta 256 de nivele sau nuanțe ale acelei culori. Având trei culori primare, fiecare poate avea 256 de nuanțe diferite, amestecându-le împreună se pot genera matematic aproximativ 16,7 milioane de culori diferite. 256 x 256 x256 = 16,777,216.

În diagrama de mai jos se poate observa combinațiile de culori.

Figura 2.2 Diagrama RGB[2]

Principalul scop al modelului RGB este de a reprezenta imagini pe sisteme electronice, de exemplu calculatoare, televizoare și fotografie. Modelul cromatic RGB este dependent de dispozitive, adică, două dispozitive diferite, pot reprezenta o valoare RGB diferit, pentru că elementrul chimic folosit de producător afișează culoarea diferită.

Afișajele colorilor, de exemplu, televizoarele, monitoarele, nu pot reproduce totalitatea culorilor ce pot fi percepute de ochiul uman. Culorile din afară paletei de culori a dispozitivului, cum ar fi majoritatea culorilor spectrale, pot fi aproximate. Pentru a reproduce corect culorile, un spectru poate fi proiectat pe un câmp gri uniform. Culorile mixte vor avea toate coordonatele R, G, B, cele care nu sunt negative pot fi reproduse fără distorsiuni.

2.3 Efectul PWM

Modularea în durată a impulsurilor este o tehnică de modulație folosită pentru a codifica informația în lățimea semnalului obținut. Cu toate că această tehnică poate fi utilizată pentru a codifica informațiile pentru transmisie, principala sa utilizare este aceea de a permite controlul energiei furnizate dispozitivelor electrice.

Pentru un semnal PWM, factorul de umplere se calculează cu următoarea formulă:

Ti – durata impulsului; T – perioada semnalului;

Factorul de umplere reprezintă porțiunea de timp în care sistemul se află în starea „activă”, sau altfel spus procentul de timp în care un sistem, un dispozitiv sau o componentă funcționează.

PWM este o tehnică pentru controlul circuitelor analogice care au ieșiri digitale. Semnalul PWM este asemănător cu o formă pătrată, porțiunea mare din semnal reprezintă starea „ON” a circuitului, iar porțiunea joasă din semnal este considerată starea „OFF” a circuitului. Toate aceste combinații ale stărilor realizează putere pentru o sarcină.

Figura 2.3 Semnalul PWM [3]

Capitolul 3

3.1 Microcontrolerul

Microcontrolerul reprezintă un microsistem de calcul conceput într-un circuit integrat. Acesta este alcătuit din: unitate centrală de prelucrare a datelor, generatorul de tact, bus-ul, memoria ROM, memoria RAM, dizpozitive I/O și periferice. Așadar, în următoarea schemă este prezentată componența detaliată a microcontrolerului:

Figura 3.1 Arhitectura microcontrolerului [4]

Unitatea centrala de prelucrare a datelor este alcatuită dintr-un set de registre interne, acestea sunt asemenea unor locații de memorie, cu care se pot face diferite operații de adunare, scădere, înmulțire, împărțire.

Generatorul de tact utilizează un oscilator extern cu cristal de cuarț.

Bus-ul reprezintă magistrala de adrese și de date. Prin magistrala de adrese, unitatea centrală de prelucrare alege locația de memorie sau dispozitivul I/O, iar pe magistrala de date este transmisă informația între memorie și unitatea centrală de prelucrare sau dispozitive I/O.

Figura 3.2 Magistrala de adrese și magistrala de date [5]

Memoria RAM este o memorie volatilă ce poate fi citită sau scrisă de unitatea centrală de prelucrare a datelor.

Memoria ROM poate realiza doar citirea informațiilor, nu și modificarea acestora.

Dispozitive I/O sunt împărțite în 3 categorii: dispozitive pentru interfața umană, dispozitive pentru interfața cu amunite echipamente și dispozitive ultizate pentru comunicație. Dispozitivele utilizate pentru comunicație realizează transferul serial sau paralel de date.

Periferice pot fi: convertorul D/A, convertorul A/D, interfața USB, interfața PWM.

Prin urmare, structura interna a unui microcontroler este urmatoarea:

Figura 3.3 Structura internă a microcontrolerului [6]

În figura 2.3 sunt prezentate blocurile din care este compus un microcontroler. Unitatea centrală de prelucrre a datelor execută instrucțiunile primite prin magistala de date de la memoria de program. Controlerul de întreruperi poate fi folosit la intrările de la modulele interne sau la intrările de la modulele externe pentru realizarea funcțiilor specifice blocurilor. Contolerul DMA este folosit doar de unele microcontrolere pentru a coordona timpul de transfer de date între o unitate centrală de prelucrare a datelor și un dispozitiv de intrare-ieșire.

Porturile de intrare-ieșire pot fi: seriale sau parelele. Ultimul bloc are în componența sa regiștrii de stare, de date și de comenzi cu rolurile următoare: Registrul de stare (RS) citește starea modulului și poate genera întreruperi.

Registrul de date (RD) pentru fiecare modul transferă date cu exteriorul.

Registrul de comenzi (RC) prin intermediul unității centrale comandă registrul de date.

3.2 Placa de dezvoltare Arduino Pro Mini

Pentru sistemul de control al luminilor RGB prin wireless am ales placa de dezvoltare Arduino Pro Mini. Aceasta plăcuță a fost creată la dimensiuni reduse. Aceasta placă oferă:

Dimensiune și cost reduse;

Software open-source;

14 pini digitali și 6 pini analogici;

Pini PWM;

Tabel 3.1 Caracteristicile plăcii de dezvoltare Arduino Pro Mini

Această placă folosește la bază microcontrolerul Atmega328P. Tensiunea de alimentare este de 5V iar tensiunea de alimentare suportată de limitator este cuprinsă între 7-12V. Microcontrolerul funcționează la o frecvență de 16MHz.

Figura 3.4 Placa de dezvoltare Arduino Pro Mini [7]

3.3 Microcontrolerul ATMEGA328P

Microcontrolerul ATMEGA328P este un circuit integrat pe 8 biți, ce are la bază o arhitectură de tip RISC ce are in alcătuirea sa o memorie de 32KB de tip flash. Acest microcontrolermai are in alcătuirea sa o memorie EEPROM de 1KB, o memorie SRAM de 2KB, 32 de registre generale, 23 de intrări și ieșiri de interes general, din acesti 23 de pini 6 sunt pentru canalele de PWM.

Microcontrolerul Atmega328P funcționează la o tensiune de alimentare de 1.8V – 5V, la o frecventa de functionare de pana la 20MHZ.

Figura 3.5 Diagrama pinilor a microcontrolerului[8]

Am ales sa folosesc acest microcontroler pentru că imi permite să folosesc modulul PWM pentru a stabili intensitatea de culoare a LED-urilor RGB.

Pentru LED-urile RGB s-au utilizat următorii pini:

Pinul 9 pentru culoare roșie;

Pinul 6 pentru culoarea verde;

Pinul 11 pentru culoarea albastră.

Pinul 12 este folosit pentru recepția de date (Rx), iar pentru transmiterea de date (Tx) este folosit pinul 10.

Figura 3.6 Implementare soft – Conectare pini

Pe parcursul folosirii acestuia am întampinat o ploblemă deoarece nu are suficienti pini pentru a realiza și conexiunea prin bleutooth.

3.4 Comunicare WI-FI

Wi-Fi este o tehnologie pentru comunicațiile radio fără fir, prin care se poate face schimb de informație între două sau mai multe dispozitive. Dispozitivele care utilizează această tohnologie sunt: telefoanele, televizoarele, consolele video, tablete, camere digitale, etc.

Rețeaua wireless folosește trei componente esențiale, cum ar fi: semnale radio, antenă și router. Undele radio fac posibilă rețeaua Wi-Fi. De fapt, comunicarea printr-o rețea fără fir este o comunicație dublă, care funcționează în felul următor:

Adaptorul wireless al calculatorului traduce datele într-un semnal radio și îl transmite prin intermediul unei antene. Router-ul wireless recepționează semnalul și îl decodifică. Routerul transmite informațiile către internet utilizând o conexiune fizică ethernet.

Acest proces funcționează și în sens invers, routerul primind informațiile de pe internet, traduce într-un semnal radio și îl transfera mai departe la adaptorul wireless al calculatorului.

3.4.1 Protocolul TCP/IP

Pentru conexiunea Wi-Fi s-a folosit protocolul TCP/IP. Acesta este cel mai des utilizat protocol atât în rețelele locale cât și in cele globale. Este foarte utilizat deoarece este flexibil și are un grad made de cerecție a erorilor.

Protocolul TCP/IP este alcatuit din patru niveluri:

Nivelul aplicație se ocupă cu protocoalele de nivel înalt, codificarea și controlul dialogului, împerecherea datelor și trimiterea lor la următoarele niveluri.

Nivelul transport se ocupă cu conexiunea logică dintre sursă și destinație, fluxul de date si corecția erorilor. Acest nivel conșine două protocoale TCP și UDP.

Nivelul rețea are ca scop găsirea celui mai optim transport prin care se pot trimite pachetele. Acest nivel lucrează cu patru protocoale: IP, ICMP, ARP, RARP.

Nivelul acces la rețea se ocupă de problemele întâlnite în transmiterea efectivă a unui pachet IP pe o legatură fizică, incluzând si aspecte legate de tehnologii și medii de transmisie.

3.4.2 Cipul ESP-01

Cipul ESP8266 ESP-01 reprezintă un modul wifi care acceptă accesul microcontrolerului la o rețea wifi. Acest cip este un SOC autonom, ce nu are nevoie neapărat de un microcontroler pentru a dirija intrările și ieșirile. ESP-01 lucrează ca un mic computer.

Figura 3.7 Modulul Wi-Fi ESP-01[9]

Tabel 3.2 Caracteristicile cipului ESP8266 ESP-01

În implementarea parții hardware a sistemului de control al luminilor RGB am întâlnit o problema legată de modulul Wi-Fi. Acesta se încălzea foarte tare dacă tensiunea de alimentare era mai mare de 3.3V. Pentru aceasta problemă s-au găsit două soluții:

Adăugarea unui radiator foarte mare care trebuia să facă dispersie de căldură pe cip.

Modificarea softului cipului astfel încât sa permită un bun management al puterii.

Pentru această problemă întâmpinată s-a ales cea de-a doua solutie, deoarece noul soft permite folosirea puterii doar in evenimentele de comunicare.

În această lucrare am flolosit pinii 12(Rx) si 10(Tx) utilizând comanda ” SoftwareSerial mySerial(12, 10); // RX, TX”.

Viteza de transfer este setată cu comanda ” Serial.begin(9600);” si este de 9600bps.

Pinul Tx de pe placa arduino va fi conectat la pinul Rx de pe modulul Wi-Fi, iar pinul Rx de pe placa arduino va fi conectat la pinul Tx de pe cipul ESP-01. Această conexiune se poate observa un figura de mai jos.

Figura 3.8 Mod de conectare Rx-Tx

În implementarea părții software pentru a putea utiliza modulul ESP-01 s-a adăugat la inceputul programului librăria ESP8266.h prin linia de comandă: #include "ESP8266.h".

3.5 LED

LED-ul reprezintă o sursă de lumina mică. Este un dispozitiv semiconductor ce emite lumină vizibilă în momentul când prin el trece un curent electric. Majoritatea Led-urilor sunt monocromatice, apărând doar la o singură lungime de undă.

Ieșirea unui LED poate varia de la o lungime de undă de aproximativ 700nm (roșu) până la o lungime de undă de aproximativ 400nm (violet).

Un LED este alcătuit din două elemente denumite semiconductori de tip P și semiconductori de tip N. Cele două sunt situate în contact direct, formând astfel o regiune numită joncțiune P-N. LED-ul are un pachet transparent, permite ca energia vizibilă să treacă.

Avantajele tehnologiei LED:

Eficiență mare: luminozitate și intensitate mare, caldura emisă puțină;

Durată îndelungată de viață;

Consum redus de energie;

Impact redus asupra mediului;

Nu atrage insecte;

Iluminare care nu produce poluare luminoasă.

Figura 3.9 Conexiunile unui LED [10]

3.5.1 LED-uri RGB

LED-urile RGB lucrează pe un principiu foarte simplu: modifică puterea pentru fiecare dintre cele trei culori (roșu, verde, albastru) pentru a obține o combinație specifică de culori.

Există două tipuri de LED-uri: cu anod comun și cu catod comun, acestea sunt reprezentate în figura de mai jos.

Figura 3.10 Tipuri de LED [11]

După cum se poate observa în figura de mai sus, cele 3 LED-uri împart anodul sau catodul. Lucrul acesta are drept rezultat un LED RGB cu 4 pini, un pin pentru fiecare culoare și unul pentru catod sau anod. Cel mai des folosit este anodul RGB.

Pentru obținerea culorilor se combină cele trei culori cu diferite intensități. Pentru reglarea luminozității fiecărui LED se va utiliza PWM. Cele 3 LED-uri sunt foarte apropiate unul de celălalt, se va observa rezultatul culorii finale, nu cele 3 culori individuale.

Cei 4 pini ai LED-urilor RGB se pot distinge în funcție de lungimea lor. Cel mai lung pin este masă (-) sau tensiunea (+) în funcție de tipul LED-ului, catod sau anod comun. Ceilalți 3 pini corespund roșu, verde, albastru după cum se poate observa în figură de mai jos:

Figura 3.11 Pini LED-uri [12]

LED-urile RGB pot produce o gamă mare de culori, dar pentru a obține o culoare individuală este destul de dificil din cauza trecerii cu ușurință de la o culoare la alta.

LED-urile RGB funcționează la o tensiune de alimentare de 12V și o putere de 5W.

Tabel 3.3 Specificații tehnice LED RGB

3.6 Infraroșu

Infraroșu este o radiație electromagnetică a cărei lungime de undă este cuprinsă între spectrul vizibil și radiația terahertz. Radiațiile în infraroșu sunt utilizate în aplicații industriale, științifice, militare și medicale. Lumina infraroșie este invizibilă pentru ochiul uman. Tot ce produce căldură emite infraroșu precum corpul uman. Infraroșu are aceleași proprietăți la fel ca lumina vizibilă.

Spectrul infraroșu este divizat în următoarele trei benzi:

Tabel 3.4 Benzi infraroșu

3.6.1 LED-ul IR

Există LED-uri care emit energie în infraroșu, acestora le corespunde o lungime de undă aflată în intervalul 700nm – 1mm. Astfel de diode sunt cunoscute ca diode cu emisie în infraroșu.

Emițătoarele în infraroșu reprezintă o sursă de energie luminoasă în spectrul infraroșu. Un emițător IR generează lumina infraroșie ce transmite comenzi și informații de la un dispozitiv la altul.

Pe lângă faptul că LED-ul IR emite lumină infraroșie invizibilă acesta arată și funcționează la fel că un LED normal.

LED-ul IR este o dioda care emite lumină ce este folosită pentru a transmite semnale infraroșii de la o telecomandă. În general, cu cât emițătoarele sunt mai multe și mai putenice, cu atât semnalul rezultat este mai larg și puternic. O telecomandă care are emițătoare puternice poate fi utilizată fără a indica dispozitivul dorit.

IRED au diverse lungimi de undă, în funcție de domeniul de utilizare. În tabelul următor sunt prezentate câteva domenii în care se folosește IRED:

Tabel 2.5 Lungimi de undă corespunzătoare domeniilor

3.6.2 Receptor IR

Receptorul IR este un dispozitiv care primește informațiile de la o telecomandă infraroșie, acesta recepționează și decodifică semnalele primite. În general, pentru a identifica semnalul infraroșu pe care îl primește, receptorul emite un cod unic. Codul acesta este apoi utilizat pentru a converti semnalele primite de la telecomandă într-un format ce poate fi înțeles de către celălalt dispozitiv.

Tabel 3.6 Caracteristici tehnice receptor IR

3.7 Convertorul Buck

Convertorul Buck este un circuit electronic care oferă la ieșire o tensiune constantă, a cărei valoare medie este mai mică decât tensiunea de alimentare. Acesta conține 5 componente de bază: comutarorul semiconductor de putere, o dioda, o bobina, un condensator și un controler PWM.

Figura 3.12 Convertorul Buck [13]

Relația dintre curent și tensiune dată de inductor, influențează modul de funcționare al convertorului. Comutatorul în poziția inițială este deschis, curentul prin circuit este 0. Atunci când comutatorul este închis (stare ”ON”), curentul prin rezistența de sarcinăeste constant, iar tensiunea tinde să scadă.

Căderea de tensiune de pe bobină este înseriată cu căderea de tensiune de pe sarcină, realizând astfel o limitare a tensiunii pe sarcină. Când comutatorul este deschis (stare „OFF”), cantitatea de energie acumulată în bobină va fi eliberată în curcuit prin intermediul diodei.

Figura 3.13 Convertorul Buck, stare „ON” – „OFF” [13]

3.8 Filtrare și energie de rezervă

O posibilitate de a oferi sarcini mici de la sursă de curent alternativ, care este simplă și eficientă, este de a conecta un condensator și sarcină în serie. Acest lucru face uz de efectul nedorit al schimbării de fază: tensiunea ajunge la condensator cu fază schimbată de 90 de grade de curent. Condensatorul acționează la fel ca o putere reactivă, la care nu există pierderi reale. Soluția ideală este utilizarea unui condensator folosit ca rezistor. În figura 2.11 este prezentată diagrama circuitului unei surse de alimentare capacitive. În conparație cu modelele convenționale, sursele de alimentare capacitive sunt rezistente la scurtcircuit la ieșire.

Figura 3.14 Circuitul unei surse de alimentare capacitive

Pentru că condensatorul este conectat direct la sursă de alimentare, se recomandă utilizarea numai a condensatoarelor pentru alimentare cu energie capacitivă. Auto-vindecarea reprezintă un avantaj pentru acest tip de condensatoare. Auto-vindecarea înseamnă că descărcările mai mici perturbatoare comandă la o vaporizare limitată, fără a crea un scrutcircuit, prin urmare, reține funcția condensatorului.

Un filtru capacitiv este un circuit de filtrare în care primul element este un condensator conectat în paralel cu ieșirea unui redresor. Capacitorul mărește tensiunea continuă și scade tensiunea de ieșire. Condensatorul este denumit și condensator de umplere sau rezervor. Condensatorul este urmat de serii alternante și elemente paralele de filtrare pentru a reduce tensiunea de torsiune sau pentru a regla tensiunea continuă de la ieșire.

De cele mai multe ori, formă de undă dobândită la ieșirea unui redresor fără filtru nu este adecvată pentru a alimenta aparatura electronică, pentru că componenta variabilă pe sarcină a tensiunii are valoarea mare. Este nevoie ca între redresor și sarcină să se adauge un filtru ce are ca scop de atenuare a ondulației tensiunii redresate. Cel mai des filtru folosit este filtrul capacitiv.

3.8.1 Redresor monoalternanță cu filtru capacitiv

Redresorul din figura de mai jos livrează o tensiune de o singură polaritate la ieșire, aceasta are ondulația semnalului egală cu amplitudinea de intrare a semnalului. La acest redresor se adaugă un condensator pentru a obține o tensiune continuă.

Figura 3.15 Redresor monoalternață cu filtru capacitiv[14]

Redresorul monoalternanță este necomandat deoarece este realizat doar cu o singura diodă. Acest redresor are trei mărimi caracteristice:

Tensiunea redresată ud, mărimile calculate formează regimul de tensiuneș

Curentul redresat id, mărimile calculate formează regimul de curentș

Puterea instantanee redresată, mărimile calculate formează regimul de putere.

Pd=udid

În implementarea proiectului de diplomă s-a utilizat redresorul monoalternanță cu filtru capacitiv.

În figura de mai jos sunt reprezentate formele de undă specifice tensiunii redresate ud la bornele sarcinii rezistive R și formele de undă ale curentului redresat id ce traversează prin sarcină.

Figura 3.16 Forme de undă ale tensiunii de alimentare, curentului si tensiunii redresate[15]

Capitolul 4

4.1 Comunicație serială

Transmisia de date în ultimul timp a evoluat de la conexiunea dintre un calculator cu periferice, la calculatoare ce comunică în rețele. Există două tipuri de comunicație: serială și paralelă. Chiar dacă transferul de date paralel este mai rapid, o mare parte din transmisiile de date între calculatoare sunt făcute prin comunicația serială.

Comunicarea serială reprezintă procesul de transmitere de date în care biții se transmit pe o singură linie de comunicație, pe rând. Acest lucru este în antiteză cu comunicarea paralelă, în care mai mulți biți sunt trimiși, pe o legătură cu mai multe canale paralele.

Comunicarea serială este folosită atunci când transferul de date se face pe distanțe cât mai lungi sau când ratele de transfer pot să nu fie ridicate.

Figura 4.1 Comunicare serială [16]

4.1.1 Transmisie sincronă

Pentru descrierea unei transmisii continue de blocuri de date se folosește termenul de sincron. Utilizăm acest tip de conexiune atunci când sunt folosite cantități mari de date trebuie transferate de la o locație la altă foarte rapid. Transmisia sincronă are o viteză crescută pentru că transferă blocuri mari de date, în loc să transfere aceste date caracter cu caracter.

Există două moduri prin care se face transmisia serială sincronă:

Cu caracter de sincronizare, de exemplu în cazul caracterelor ASCII, înainte de transferul unui bloc de date este transmis de doua ori syn.

Figura 4.2 Transmisie sincronă cu caractere de sincronizare[16]

Cu semnal de sincronizare, avem nevoie de un plus pentru semnalul de sincronizare. Se transmit coduri speciale la început pentru a putea determină sincronizarea, urmând ca datele să fie transmise într-un flux continuu.

Figura 4.3 Transmisie sincronă cu semnal de sincronizare[16]

4.1.2 Transmisie asincronă

În transmisia asincronă, pe o singură linie sunt transmiși unul după altul biții individuali ce compun octetul. Asincron reprezintă faptul că informația de sincronizare nu este cuprinsă în transmitere, trebuie făcute resincronizari frecvente folosind un bit de start și unul de stop.

Figura 4.4 Transmisie asincronă[16]

4.1.3 Parametrii transmisiei seriale

Pe durate unei conumicații seriale sunt folosiți următorii parametrii:

Biții pe secunda reprezinta numarul de biti transmiși intr-o secunda;

Viteza maximă de transmisie se poate calcula dacă știm structura unui cadru si lărgimea de bandă a semnalului, aceasta se masoară în caractere pe secundă;

Bițul de start ne arată unde începe fiecare cadru al unui caracter. Acesta are mereu valoarea 0, face trecerea de la semnalul negativ la semnalul pozitiv.

Biții per caracter reprezintă numărul de biți de care avem nevoie pentru a reprezenta un caracter. Numărul acesta nu cuprinde și informația de sincronizare și paritate.

Bițul de paritate este opțional, dacă este prezent, urmează logica inversă: 1 pentru negativ si 0 pentru pozitiv. Acest biț a fost introdus ca o metodă de a detecta erorile.

4.2 Comunicație infraroșu

Infraroșul este o tehnologie de comunicații wireless ușor de utilizat. Transmiterea de date prin infraroșu este utilizată în comunicarea cu rază scurtă de acțiune între două componente.

Comunicațiile prin infraroșu sunt foarte folositoate pentru utilizări caznice. Infraroșul nu poate pătrunde prin pereți și astfel nu poate interfera cu dispozitive aflate în încăperi alăturate. Telecomandă IR trebuie să fie indreptată direct către dispozitivul pe care dorim să îl controlăm. Dacă între dispozitiv și telecomandă există obstacole, telecomanda nu va funcționa corect. Această comunicație este cea mai folosită metodă pentru telecomenzile ce controlează aparate simple.

Telecomenzile care folosesc transmiterea de date în infraroșu utilizează LED-uri pentru a emite radiație infraroșie ce este direcționată de o lentilă plasticată intr-un fascicul îngust. Acest fascicul este modulat, se deschide și închide pentru a cripta date. Receptorul folosește o fotodiodă din silicon care convertește radiația infraroșie în curent electric.

Atunci când se apasă un buton de pe telecomandă, LED-ul infraroșu de transmisie va clipi pentru o fracțiune de secundă, iar datele vor fi transmise codificat către apărat.

Dacă cuplăm un osciloscop la LED-ul IR al telecomenzii se va vedea un semnal asemănător cu cel din figura următoare:

Figura 4.5 Semnalul IR afișat pe oscilator[17]

Semnalul modulat este exact ceea ce va vedea sistemul de recepție. Cu toate acestea dispozitivul de recepție demodulează semnalul și il scoate sub formă de undă binară care poate fi citită de microcontroler. Semnalul modulat va arăta ca în figura de mai jos:

Figura 4.6 Semnalul modulat[18]

Capitolul 5

5.1 Implementare hardware

În figura 5.1 se poate observa implementată partea hardware al sistemului de control al luminilor RGB. Acest modul este alimentat de către o sursă de curent continuu la o tensiune de 12V. Pentru buna funcționare a sistemului de control trebuie ținut cont că Arduino necesită 5V, iar modulul Wi-Fi necesită 3.3V.

Pentru a reduce voltajul s-au folosit urmatoarele:

Convertorul Buck;

Stabilizator de tensiune de 3.3V.

Pentru alimentarea microcontrolerului tensiunea de 12V este redusă la 5V prin convertorul Buck. Iar pentru modulul Wi-Fi ESP8266 ESP-01 se utilizează stabilizatorul de tensiune de 3.3V.

Figura 5.1 Circuitul sistemului de control al luminilor RGB

Figura 5.2 Cubul – Alimentare controlată LED

5.2 Implementare software

Primul lucru care s-a facut în implementarea software a acestui sistem este de a inițializa pinul de recepție IR și inițializăm pinul respectiv, deoarece vrem sa ne asigurăm că sistemul poate fi controlat din telecomanda IR dacă aplicația android nu funcționează. Acest lucru s-a făcut cu liniile de comandă:

” int RECV_PIN = A3;

IRrecv irrecv(RECV_PIN);”

Se definesc numele si parola rețelei la care să se conecteze. Acest lucru reprezintă un dezavantaj pentru că este destul de greu să se schimbe rețeaua Wi-Fi. Pentru schimbarea rețelei trebuie să se modifice numele si parola in codul sursă, iar dupa aceea codul trebuie incarcat din nou pe microcontroler.

” #define SSID "Crystal" // Numele retelei wifi

#define PASSWORD "1234567890" // parola wifi”

Se realizează conectarea la rețea, dacă aceasta a fost realizată cu scces in serial va apărea meajul ” Join AP success”,, iar dacă aceasta nu a fost realizată cu succes se va afișa mesajul ” Join AP failure”. În mod normal ar fi trebuit să se afișeze și adresa IP în urma conectării la rețea, dar nu o afișează. Nu am reușit sa găsesc o soluție pentru această problemă.

Pentru a permite conexiunea a mai multor dispozitive la cub trebuie activat MUX-ul. Iar portul TCP este setat pe 8090.

Pentru ca modulul Wi-Fi să nu se incalzească s-a setat un timp în care dacă aplicația nu este folosită aceasta se va deconecta. Setarea acestui timpului poate fi opțională. În următoarele linii de cod se poate observa că timpul setat este de 10s.

Figura 5.3 Setare timp de pauză

După ce cubul se conectează la rețeaua Wi-Fi se definesc cele trei porturi de ieșire (roșu, verde, albastru). Anunțarea finalizării a inițializărilor se va face prin aprinderea în culoarea albă a cubului. Acesta este modul prin care cubul ”spune” că conexiunea la rețeaua Wi-Fi a fost realizată cu succes.

Figura 5.4 Inițializare pini + conectare reușită

Transimisia de date ajunge la arduino prin două moduri:

Transmisia de culoare sosește ca un string, de forma (R G B nr), din acest string trebuie extrase si convertite fiecare variabila in parte pentru a putea obșine factorul PWM. Se vor extrage doar primii trei parametrii (R G B).

Transmisia de putere se realizează într-o singură variabilă ce va fi convertită în int.

Se verifică dacă se transmite informație și se stochează datele in variabila str. Dacă stringul are mai mult de 4 caractere transmise inseamna ca am transmisie de culoare, ceea ce înseamnă că trebuie să se extragă cei trei parametrii.

Pentru extragerea parametrului specific culorii roșii se elimină parantezele stringului, după se caută primul spatiu aflat in substring și se extrage parametrul pentru culoarea roșu.

Figura 5.5 Extragere parametru roșu

După extragerea parametrului pentru colarea roșu din substring se va elimina parametrul respectiv. Se trece la extragerea parametrului specific culorii verde, se procedează la fel ca in cazul de mai sus.

Figura 5.6 Extragere parametru verde

Mai ramane de extras parametrul specific culorii albastru. Acesta se extrage la fel ca în cazul celorlalși doi parametrii.

Figura 5.7 Extragere parametru albastru

Dacă stringul are mai putin de 4 caractere înseamnă ca avem doar transmisie de putere. Puterea este cuprinsă în intervalul 0-100.

Figura 5.8 Calculare putere

5.3 Aplicația Android

5.3.1 Utilizare Aplicație Android

Pentru a folosi aplicația, utilizatorul trecuie să fie conectat la aceași rețea Wi-Fi ca și cubul. Se apasă butonul de ”Connect” din aplicație. După ce modulul s-a conectat se poate atinge cercul colorat pentru a preseta culoarea dorită, această fiind afișată pe butonul ”Set Color”. Prin apăsarea acestui buton se poate observa cum cubul își schimbă culoarea. Puterea se poate preseta din cursor, dat trebuie trimisă prin butonul ”Set Power”, puterea poate fi preobservată în colțul din dreaptă sus al aplicației, în procente.

În partea de jos a aplicației se pot observă așa numitele culori standard: albastru, verde, roșu, dar și alb. Aceste culori au fost implementate pentru a oferi o utilizare mult mai ușoară a culorilor standard.

Figura 5.9 Aplicatia Android

5.3.2 Implementare Aplicație Android

Aplicația Android este dezvoltată cu sistemul AppInventor de la MIT. Este o aplicație pentru Android, inițial a fost frunizată de Google și actualizată de catptre Institutul de Thenologie din Massachusetts. Această aplicașie permite creearea de aplicații software pentru sistemul de operare Android. Utilizează o interfață grafică, care permite utilizatorilor sa tragă și să prindă obiecte vizuale pentru a creea o aplicație Android.

Când se apasă butonul ”Connect” aplicația se va conecta cu IP-ul 192.168.43.218 la rețeaua wireless. Cât timp aplicația este conectată în partea de sus va apărea mesajul ”Connected”.

Figura 5.10 Aplicație Android – Conectare

În figura 5.11 sunt create butoanele pentru culorile standard (roșu, verde, albastru), alb, butonul pentru a a deselecta culoarea si butoanele de setare a culorii și puterii.

Figura 5.11 Implementare butoane

Dacă conexiunea la reteaua wireless dintr-un motiv anume s-a oprit atunci în aplicație va apărea un mesaj ”Not Connected”. Iar dacă aplicația nu se poate conecta la rețeaua Wi-Fi se va afișa mesajul ”Conection Error”.

Figura 5.12 Verificare conexiune Wi-Fi

În această figură se poate observa că aplicația mai întâi verifică dacă există conexiune la rețeaua wireless. Aici este creat cursorul pentru a seta puterea, aceasta o sa apară in colțul din dreapta sus, în procente. Dacă puterea setată este mai mare de 60 atunci puterea va fi scrisa in aplicație cu culoarea roșie, dacă este mai mică va fi scrisa cu culoarea neagră. Am ales sa afișez puterea mai mare ca 60 cu roșu pentru a ne atrage atenția ca am setat o putere destul de mare.

Figura 5.13 Implementare afișare putere

Dupa modificarea puterii din cursor se va calcula valoarea PWM pentru cele trei culori din urmatoarele linii de comandă:

Figura 5.14 Calculare valoare PWM

Pentru o depanare mai ușoară s-a ales afișarea serială, se vor afișa valorile calculate pentru fiecare culoare in parte, acest lucru se face din liniile de comandă:

Figura 5.15 Afișare valori calculate

Din următorul bloc se setează culoarea în funcție de poziția pe care o setăm pe cercul multicolor. Culoarea este setată in funcție de coordonatele aflate pe axele x și y.

Figura 5.16 Setare culoare

Pentru a scrie valoarea analogică pe pini se folosește functia analogWrite(), după ce se apelează această funcție, pinul va genera o valoare constantă pană la următorul apel al funcției. Funcția analogWrite() o folosim deoarece vrem să setăm valoarea PWM.

Figura 5.17 Setare valoare PWM pentru fiecare pin

5.4 Telecomandă IR

Atunci când apăsam una din tastele telecomenzii, LED-ul IR transmite mai multe impulsuri, aceste impulsuri sunt modulate digital. Ceea ce v-a transmite de fapt telecomanda către conectorul IR este o secvența de 0 și 1. Receptorul IR va decodifica semnalul și astfel cubul se va aprinde în funcție de comandă dată din telecomandă sau se va stinge.

Tabel 5.1 Comenzi telecomandă IR

Pentru nu a primi coduri de eroare s-a ales ca la fiecare 200ms sa de execute funcția de decodificare a semnalului IR, ReceptieIR().

Pentru a seta puterea din telecomandă, mai întai se crește sau scade puterea după care sa apasă pe butonul ce transmite codul ” 16720605”.

Figura 5.18 a) Creșterea/Scăderea puterii; b)Modificarea putetii

Am creat funcția AnuntaError() pentru a ne anunța dacă puterea setată este negativă sau mai mare ca 0. Dacă puterea nu este în intervalul 0-100 atunci cubul se va aprinde în culoarea roșie și se va stinge. Pentru această funcție setăm pinul cu functia digitalWrite() deoarece vrem să îl aprindem la intensitate maximă.

Figura 5.19 Funcția AnuntError()

Concluzii

Așa cum se poate observa in capitolele de mai sus, obiectivul acestui proiect de diplomă l-a făcut conceperea unui sistem de control al luminilor RGB prin wireless. Pentru acest sistem de control al luminii pentru LED-urile RGB s-a folosit microcontrolerul ATMEGA328P.

În urma implementării sistemului control al luminilor RGB s-au obținut următoarele rezultate:

Sistemul este controlat dintr-o aplicație aplicație Android sau o telecomandă IR.

Pentru o estetică cât mai bună s-a ales să se printeze 3D un cub.

Aplicația Android și cubul trebuie sa fie conectate ambele la aceeași rețea Wi-Fi. Cubul s-a conectat la rețeaua Wi-Fi cu ajutorul cipului ESP8266 ESP-01. După ce se realizeză conexiunea dintre cele două componente, se poate modifica culoare si intensitatea culorii cubului. Astfel cubul va lumina orice culoare din spectrul vizibil. Aplicatia Android este dezvoltată în AppInvertor de la MIT. S-a ales acest mediu de dezvoltare deoarece este mult mai ușor de folosit și mai ”prietenos”.

Dacă aplicația și cubul nu pot fi conectate la o rețea wireless, sistemul poate fi controlat din telecomanda IR, aceasta comunică cu cubul prin comunicație infraroșu. Pentru fiecare buton al telecomenzii s-a setat o culoare, scăderea sau creșterea puterii. În comparație cu aplicatia Android unde se pot obține toate culorile din spectrul vizibil, din telecomanda IR se pot seta doar culorile setate pe butoanele telecomenzii.

Probleme întâlnite in urma implementării proiectului de diplomă:

Pe parcursul implementării sistemului de control al luminilor RGB prin wireless s-a intâmpinat o problemă la modulul Wi-Fi, acesta se încălzea foarte tare. Pentru această problemă s-au găsit două soluții. Adăugarea unui radiator care trebuie să facă dispersie de căldură pe cip. Iar a doua soluție este si cea aleasă modificarea softului de pe cip astfel încât să permită un bun management al puterii.

După cum s-a scris in Anexa 1 la descrierea proiectului de diplomă că microcontrolerul va comunica printr-o conexiune serială cu un modul receptor Wi-Fi si un modul bluetooth. Din păcate nu s-a putut implementa comunicația de tip bluetooth deoarece nu am mai avut suficienti pini pe placa Arduino.

Inițial pinul pentru culoarea albatru a fost setat pe pinul 3, dar in librăria pentru telecomanda IR era folosit deja acest pin. Astfel pinul 3 devenea indisponibil atunci când foloseam telecomanda IR. Soluția la această problemă a fost schimbarea pinului pentru culoarea albastru.

Avantajele sistemului de control al luminilor RGB prin wireless:

Două metode de folosință;

Aplicație simplă;

Conectare foarte ușoară.

Dezavantaje ale sistemului de control al luminilor RGBprin wireless:

Telecomandă de buget redus;

Dificultatea setării Wi-Fi;

Insuficienți pini pentru implementarea conexiunii Bluetooth.

Direcții de dezvoltare in viitor care rezultă ca urmare a dezvoltării teoretice și practice:

Controlul sistemului de lumini prin comunicație de tip bluetooth. Modificarea aplicației Android astfel încât să se poată conecta la cub și prin bluethoot.

Sistemul să poată fi controlat prin comandă vocală.

Bibliografie

[1] – https://www.sciencelearn.org.nz/images/37-the-visible-spectrum accesat la data de: 20.04.2018

[2] – http://clipground.com/image-post/53456-rgb-color-model-clipart-2.jpg.html accesat la data de: 20.04.2018

[3] – https://www.mikroe.com/blog/pwm-digital-signal-analog-soul accesat la data de: 22.04.2018

[4] – http://vega.unitbv.ro/~ogrutan/ti/cap10.pdf accesat la data de: 25.05.2018

[5] – Constantinescu Rodica – Suport curs Arhitectura microprocesorului

[6] – http://vega.unitbv.ro/~ogrutan/ti/cap10.pdf accesat la data de: 25.05.2018

[7] – https://www.optimusdigital.ro/ro/compatibile-cu-arduino-pro-mini/72-placa-de-dezvoltare-compatibila-cu-arduino-pro-mini.html?search_query=arduino&results=492 accesat la data de: 25.05.2018

[8] – http://pdf1.alldatasheet.com/datasheet-pdf/view/241077/ATMEL/ATMEGA328P.html accesat la data de: 26.05.2018

[9] – https://www.optimusdigital.ro/ro/wireless-wifi/222-modul-wi-fi-esp-01-negru.html accesat la data de: 25.05.2018

[10] – http://www.tehnium-azi.ro/page/articole_articles/_/articles/notiuni-teoretice-din-electronica/Rezistenta_electrica_rezistorii accesat la data de: 20.06.2018

[11] – https://randomnerdtutorials.com/electronics-basics-how-do-rgb-leds-work/ accesat la data de: 20.06.2018

[12] – https://randomnerdtutorials.com/electronics-basics-how-do-rgb-leds-work/ accesat la data de: 20.06.2018

[13] – Rădoi Constantin – Suport curs Procesoare electronice de putere

[14] –

[15] –Florescu Adriana – Suport curs Electronica si Informatica Industriala

[16] – Radescu Radu – Suport curs Arhitectura sistemelor de calcul

[17] – https://cdn.sparkfun.com/assets/9/3/2/b/a/5159e97ece395f9643000000.jpg accesat la data de: 17.06.2018

[18] – https://cdn.sparkfun.com/assets/4/1/6/1/c/5159e980ce395f8840000000.jpg accesat la data de:17.06.2018

Anexa cod sursă

Fișier Licen.ino

#include "ESP8266.h"

#include <SoftwareSerial.h>

#include <string.h>

#include <math.h>;

#include <IRremote.h>

int RECV_PIN = A3;

IRrecv irrecv(RECV_PIN);

decode_results results;

#define SSID "Crystal"

#define PASSWORD "1234567890"

int pinRed = 9;

int pinGreen = 6;

int pinBlue = 5;

SoftwareSerial mySerial(12, 10); // RX, TX

ESP8266 wifi(mySerial);

void setup(void)

{

Serial.begin(9600);

Serial.print("setup begin\r\n");

irrecv.enableIRIn();

if (wifi.setOprToStationSoftAP()) {

Serial.print("to station + softap ok\r\n");

} else {

Serial.print("to station + softap err\r\n");

}

if (wifi.joinAP(SSID, PASSWORD)) {

Serial.print("Join AP success\r\n");

Serial.print("IP: ");

Serial.println(wifi.getLocalIP().c_str());

} else {

Serial.print("Join AP failure\r\n");

}

if (wifi.enableMUX()) {

Serial.print("multiple ok\r\n");

} else {

Serial.print("multiple err\r\n");

}

if (wifi.startTCPServer(8090)) {

Serial.print("start tcp server ok\r\n");

} else {

Serial.print("start tcp server err\r\n");

}

if (wifi.setTCPServerTimeout(10)) {

Serial.print("set tcp server timout 10 seconds\r\n");

} else {

Serial.print("set tcp server timout err\r\n");

}

pinMode(pinRed, OUTPUT);

pinMode(pinGreen, OUTPUT);

pinMode(pinBlue, OUTPUT);

Serial.print("setup end\r\n");

digitalWrite(pinRed, 1);

digitalWrite(pinGreen, 1);

digitalWrite(pinBlue, 1);

delay(500);

digitalWrite(pinRed, 0);

digitalWrite(pinGreen, 0);

digitalWrite(pinBlue, 0);

}

int lor = 0;

String realstr = "";

double power = 100;

int R = 0, G = 0, B = 0, CalcR, CalcG, CalcB;

String str, temp1, temp2;;

void loop()

{

ReceptieIR();

uint8_t buffer[128] = {0};

uint8_t mux_id;

uint32_t len = wifi.recv(&mux_id, buffer, sizeof(buffer), 100);

if (len > 0) {

str = (char*)buffer;

if (str.length() > 4) {

lor = str.length();

realstr = str.substring(1, lor – 1);

for (int i = 0; i < realstr.length(); i++) {

if (realstr.substring(i, i + 1) == " ") {

R = realstr.substring(0, i).toInt();

temp2 = realstr.substring(i + 1);

break;

}

}

for (int i = 0; i < temp2.length(); i++) {

if (temp2.substring(i, i + 1) == " ") {

G = temp2.substring(0, i).toInt();

temp1 = temp2.substring(i + 1);

break;

}

}

for (int i = 0; i < temp1.length(); i++) {

if (temp1.substring(i, i + 1) == " ") {

B = temp1.substring(0, i).toInt();

break;

}

}

} else if (str.length() < 4)

{

power = str.toInt();

power = power / 100;

Serial.println(power);

}

CalcR = round(R * power);

CalcB = round(B * power);

CalcG = round(G * power);

Serial.print("Red Value: ");

Serial.println(CalcR);

Serial.print("Green Value: ");

Serial.println(CalcG);

Serial.print("Blue Value: ");

Serial.println(CalcB);

Serial.println(power);

str = "";

analogWrite(pinRed,CalcR );

analogWrite(pinGreen,CalcG );

analogWrite(pinBlue, CalcB);

}

}

Fișier ColorSet.ino

int ledState = LOW;

unsigned long previousMillis = 0;

const long interval = 200;

void ReceptieIR() {

unsigned long currentMillis = millis();

if (currentMillis – previousMillis >= interval) {

previousMillis = currentMillis;

if (irrecv.decode(&results)) {

Serial.println(results.value);

if(results.value == 4294967295){

Serial.println("Error code detectat!");

}else{

Remote(results.value);

}

irrecv.resume();

}

}

}

void Remote(long int Data)

{

switch (Data) {

case 16769055:

SetColor(255, 255, 255);

break;

case 16738455:

SetColor(255, 0, 0);

break;

case 16750695:

SetColor(0, 255, 0);

break;

case 16756815:

SetColor(0, 0, 255);

break;

case 16724175:

SetColor(255, 0, 200);

break;

case 16718055:

SetColor(255, 255, 0);

break;

case 16743045:

SetColor(255, 150, 0);

break;

case 16716015:

SetColor(0, 255, 255);

break;

case 16726215:

SetColor(50, 10, 50);

break;

case 16734885:

SetColor(10, 50, 10);

break;

case 16736925:

SetColor(100, 10, 100);

break;

case 16769565:

SetColor(230, 180, 180);

break;

case 16754775:

SetColor(185, 230, 180);

break;

case 16748655:

SetColor(255, 2, 124);

break;

case 16728765:

SetColor(255, 190, 90);

break;

case 16712445:

power = power – 10;

if (power < 0) {

power = 0;

AnuntaError();

}

break;

case 16761405:

power = power + 10;

if (power > 100) {

power = 100;

AnuntaError();

}

break;

case 16720605:

ModificaPower(power);

break;

case 16732845:

RedYellowBlue();

break;

case 16753245:

// onoff = !onoff;

break;

}

}

void SetOnSetOff(int OnOff) {

if (OnOff > 0)

{

SetColor(0, 0, 0);

} else {

SetColor(50, 50, 50);

}

}

void SetColor(int CalcR, int CalcG, int CalcB)

{

analogWrite(pinRed, CalcR );

analogWrite(pinGreen, CalcG );

analogWrite(pinBlue, CalcB);

}

void AnuntaError() {

for (int i = 0 ; i < 3 ; i++) {

digitalWrite(pinRed, 1);

delay(500);

digitalWrite(pinRed, 0);

delay(500);

}

}

void ModificaPower(int power) {

power = power / 100;

CalcR = round(R * power);

CalcG = round(G * power);

CalcB = round(B * power);

SetColor(CalcR, CalcG, CalcB);

}

void RedYellowBlue() {

digitalWrite(pinRed, 1);

digitalWrite(pinGreen, 0);

digitalWrite(pinBlue, 0);

delay(500);

digitalWrite(pinRed, 1);

digitalWrite(pinGreen, 1);

digitalWrite(pinBlue, 0);

delay(500);

digitalWrite(pinRed, 0);

digitalWrite(pinGreen, 0);

digitalWrite(pinBlue, 1);

delay(500);

}

Similar Posts