SMARTMETER CU TRANSMISIE RADIO A DATELOR BAZAT PE MICROCONTROLER CONDUCĂTOR ȘTIINȚIFIC: Conf. dr. ing. Florin ENACHE ABSOLVENT: Stud. Plt. Maj…. [308701]
ROMÂNIA
MINISTERUL APĂRĂRII NAȚIONALE
ACADEMIA TEHNICĂ MILITARĂ
“FERDINAND I”
FACULTATEA DE SISTEME ELECTRONICE ȘI INFORMATICE MILITARE
Specializarea: Transmisiuni
SMARTMETER CU TRANSMISIE RADIO A DATELOR BAZAT PE MICROCONTROLER
CONDUCĂTOR ȘTIINȚIFIC:
Conf. dr. ing. Florin ENACHE
ABSOLVENT: [anonimizat]. Mihăiță RĂDOI
Listă figuri
Figura 2.1 – Relația fazei de tensiune și de curent într-o sarcină rezistivă 13
Figura 2.2 – Relația fazei de tensiune și curent într-o sarcină parțial reactivă 13
Figura 2.3 – Relația fazei de tensiune și curent când se generează energie 15
Figura 2.4 – Triunghiul puterii 16
Figura 2.5 – Absorția de curent într-o sarcină neliniară 21
Figura 3.1– Arduino MEGA 2560 24
Figura 3.2 – Reprezentare semnal TTL 5V 25
Figura 3.3 – a) [anonimizat]-013-000; b) Transformatr de curent cu miez inelar 27
Figura 3.4 – Senzorul de curent non invaziv de 30 A, SCT-013-030 27
Figura 3.5 – [anonimizat] 28
Figura 3.6 – Schema de circuit a senzorului de curent 30
Figura 3.7 – Schema de circuit a transformatorului de tensiune 31
Figura 3.8 – Modul LCD SPI de 3.5'' cu Touchscreen 32
Figura 3.9 – Comunicație SPI 33
Figura 3.10 – Schema de conectare a modulului LCD la Arduino MEGA 33
Figura 3.11 – Modulul Bluetooth HC-05 34
Figura 3.12 – Shield Bluetooth HC-05 35
Figura 3.13 – Conectarea și afișarea datelor transmise prin Bluetooth 36
Figura 3.14 – Formatul pachetelor de date transmise asincron prin Bluetooth 37
Figura 3.14 – Toolbox Bluetooth MATLAB R2015a 38
Figura 4.1 – Schema bloc generală a algoritmului Arduino 39
Figura 4.2 – Schema de montare a [anonimizat] 41
Figura 4.3 – Schema de circuit detaliată a senzorului de curent 43
Figura 4.4 – Valorile medii ale eșantioanelor formei de undă 45
Figura 4.5 – Citirea senzorilor în cazul neconectării niciunui consumator 46
Figura 4.6 – Schema bloc a [anonimizat] 47
Figura 4.7 – Schema de circuit și formele de undă de tensiune 51
Figura 4.8 – Inversarea sensului transformatorului de curent 52
Figura 4.9 – Distorsionarea formelor de undă cauzate de zgomot 53
Figura 4.10 – Forma de undă de curent în lipsa condensatorului electrolitic 53
Figura 4.11– Forma de undă în prezența condensatorului electrolitic 54
Figura 4.12 – Forma de undă de curent a) în prezența condensatorului electrolitic; b) în lipsa condensatorului electrolitic 54
Figura 4.13 – Smartmeter cu transmisie Bluetooth 55
Figura 4.14 – Meniuri Bluetooth HC-05 ale interfețelor grafice 56
Figura 4.15 – Interfața grafică în Matlab R2015 a sistemului Smartmeter 56
Figura 4.16 – Atenționarea prin email a stării consumului de energie 57
Figura 4.17 – Încapsularea sistemului Smartmeter 57
Figura 4.18 – Prezentarea sistemului Smartmeter 58
Figura 4.19 – Aplicația smartphone de monitorizare energie consumate 59
Figura 4.20 – Aplicația a II-a a sistemului Smartmeter pe Android 60
Figura 4.21 – Aplicația a III-a a sistemului Smartmeter pentru Android 60
Figura 5.1 – Parametrii electrici ai laptopului înainte de filtrarea armonicilor 62
Figura 5.2 – Filtre FIR pentru optimizarea factorului de putere 62
Figura 5.3 – Spectrele de tensiune și de curent filtrate 63
Figura 5.4 – Curba Lissajous după compensarea factorului de putere 63
Figura 5.5 – Grafic mesh I(U,t) 64
Figura 5.6 – Puterea instantanee a unui laptop 65
Figura 5.7 – Puterea activă și reactivă a unui bec cu incandescență 65
Figura 5.8 – Puterea reactivă a laptopului 67
Figura 5.9 – Armonica a treia de curent la frecvența de 150 Hz 67
Figura 5.10 – Caracteristici circuit combinat de consumator rezistiv-reactiv 69
Figura 6.1 – Schema demonstrativă a rezoluției mici a armonicii a treia 70
CAPITOLUL 1 – INTRODUCERE
Această lucrare de diplomă tratează în detaliu analiza, modelarea și construirea unui dispozitiv inteligent de măsurare a parametrilor electrici specifici fiecărui tip de consumator electric, precum și optimizarea performanțelor energetice prin reducerea consumului de energie electrică.
Subiectul lucrării este unul extrem de important în condițiile actuale când, la nivel global se pune foarte mult accentul pe economisirea resurselor și pe dezvoltarea rețelelelor electrice inteligente, smart grids, care trebuie să asigure flexibilitate, eficiență economică, pierderi reduse, un nivel ridicat al calității energiei electrice, securitate și siguranța alimentării cu energie electrică.
Dispozitivele Smartmeter, o formă comună de tehnologie a rețelei inteligente, sunt contoare digitale inteligente care înlocuiesc vechile contoare analogice utilizate în locuințe pentru a înregistra consumul electric. [9] Măsurarea inteligentă a parametrilor electrici implică, în esență, un contor electronic, suplimentat cu un control complet de la distanță , analiza puterii și a consumului energetic, a valorilor variabile în timp ale diverșilor parametri electrici, precum și mecanisme anti-manipulare, alertă în caz de avarie și multe alte posibilități. Utilizarea comunicațiilor prin linie de alimentare (PLC) sau a altor tehnologii prin cablu sau wireless pentru a conecta contorul la furnizorul de servicii permite ca toate caracteristicile de mai sus să fie fezabile și compatibile cu viitoarele protocoale de rețea inteligentă.
Un monitor de energie la domiciliu furnizează feedback despre utilizarea energiei electrice, precum și afișarea și înregistrarea diverșilor parametri ai curentului electric. Diferite studii au arătat o reducere a consumului de energie electrică între 4÷15% prin utilizarea afișării inteligente a energiei la domiciliu.[9]
Utilizarea energiei electrice poate fi măsurată cu un senzor de curent neinvaziv de tip clește, plasat în jurul centrului electric, comunicând cu un contor inteligent care este conectat direct la sistemul electric. Partea de afișare poate fi realizată la distanță față de cea de măsurare, comunicația cu senzorul se face utilizând un cablu, o rețea, o comunicație cu linia de alimentare sau folosind comunicația radio. Sunt disponibile și afișaje online care permit utilizatorului, conectat la internet, să utilizeze un afișaj online al consumului în timp real.
Pentru atingerea obiectivelor propuse și pentru prezentarea într-un mod cât mai clar și ușor de înțeles, dar care să păstreze caracterul științific, lucrarea va fi structurată pe șapte capitole.
În cadrul primului capitol sunt prezentate noțiuni introductive generale referitoare la monitoarele inteligente de energie, precum și punctarea obiectivelor urmărite în cadrul fiecărui capitol.
Cel de-al doilea capitol evidențiază aspectele teoretice legate de parametrii și mărimile caracteristice ale sistemului electric. Noțiunile prezentate în cadrul acestui capitol au rolul de a oferi o perspectivă amplă asupra funcționalității și analizei regimurilor de funcționare specifice unui anumit tip de consumator.
În acest capitol se face referire în special la regimurile de funcționare nesimetrice ale circuitelor electrice, punându-se accentul pe factorii care influențează aceste regimuri.
Capitolul trei caracterizează din punct de vedere tehnic elementele componente ale sistemului inteligent de masură, analiza componentelor electronice, precum și configurarea modulelor LCD și Bluetooth.
În cadrul capitolului patru este cuprinsă implementarea părții practice a sistemului Smartmeter. Se detaliază modul cum a fost gândită proiectare dispozitivului de măsură, analiza și interfațarea componentelor în sistem, precum și precizia efectuării măsurătoriilor. Sunt prezentate interfețele grafice configurate în Matlab și pe LCD, precum și crearea a trei aplicații smartphone, cu rolul de a asigura flexibilitatea și simplitatea utilizării sistemului Smartmeter . Capitolul se încheie cu descrierea sistemului și simularea aplicațiilor implementate.
În cel de-al cincelea capitol se analizează metodele de optimizare ale consumurilor energetice pentru diferite tipuri de consumator. Se va analiza sistemul de măsurare, achiziția și prelucrarea parametrilor electrici specifici fiecărui tip de consumator. Sunt detaliate din punct de vedere teoretic principalele medode de îmbunătățire al consumului energetic și anume compensarea factorului de putere prin reducerea consumului de putere reactivă și metodele de filtrare ale armonicilor de curent. Se va monitoriza puterea reactivă și factorul de distorsiune și se va urmări o analiză riguroasă a acestor parametri.
Capitolul șase trece în revistă principalele neajunsuri cauzate de constrângerile tehnice și dificultățile întampinate in realizarea proiectului.
Concluziile și direcțiile de dezvoltare sunt prezentate în cadrul capitolului șapte, care are rolul de a rezuma toate cele prezentate anterior în scopul accentuării utilității conceptului de dispozitiv Smartmeter.
La finalul lucrării se găsește bibliografia care a fost studiată pentru elaborarea proiectului de diplomă, precum și anexele aferente sistemului Smartmeter implementat.
CAPITOLUL 2 – PARAMETRI ELECTRICI CARACTERISTICI SARCINILOR ÎN REȚELELE ELECTRICE
Puterea electrică a unui consumator reprezintă mărimea fizică scalară numeric egală cu produsul dintre intensitatea curentului ce străbate consumatorul și tensiunea electrică aplicată la bornele acestuia. Cu alte cuvinte puterea electrică este definită ca energia consumată de sarcina electrică în unitatea de timp. În circuitele de curent alternativ, elementele de absorție a energiei electrice, cum ar fi bobinele și condensatoarele, pot determina inversări periodice ale direcției fluxului de energie. [1]
Partea de putere care, în medie pe un ciclu complet al formei de undă de curent alternativ duce la transferul net al energiei într-o direcție, este cunoscută sub numele de putere activă (uneori numită și putere reală). Porțiunea de putere datorată energiei absorbite, care revine la sursă în fiecare ciclu, este cunoscută drept putere reactivă.
2.1 Tipuri de sarcini electrice
Un monitor de energie al întregii case măsoară energia utilizată de aparatele conectate la rețeaua locuinței. Pentru a se înțelege cum funcționează acest lucru, este util să se cunoască modul în care aparatele interacționează cu sistemul electric.
Nu toate aparatele interacționează cu sistemul de electricitate în același mod. În continuare voi discuta despre sarcinile rezistive și modul în care se calculează puterea pe care o folosesc, apoi despre sarcinile reactive și despre cele neliniare. În cele din urmă, voi arăta modul în care se măsoară direcția fluxului de putere, care este importantă dacă se generează și se consumă energie.
2.1.1 Sarcini rezistive
Becurile cu incandescență, fierul de călcat, caloriferul electric, fierbătoarele electrice de apă, aragazul electric sunt consumatori destul de simpli. Acestea folosesc toată energia care le este dată. Ele sunt sarcini rezistive ceea ce înseamnă că absorția de curent a lor este egală cu tensiunea împărțită la rezistența acestora (Legea lui Ohm). O sarcină pur rezistivă oferă o ieșire de undă de tensiune și curent similară cu cea din figura 2.1.
Puterea electrică reprezintă o mărime care indică rata de transfer a energiei electrice într-un circuit electric. Aceasta este definită ca produsul dintre tensiune electrică [V] și intensitatea curentului electric [A]:
În SI puterea electrică se măsoară în wați [W] sau în joule/secundă [J/s]. Se exprimă în wați pentru putere activă, voltamperi [VA] pentru putere aparentă sau vari [VAR] ,volt-amper reactiv, în cazul puterii reactive. [2]
Figura 2.1 – Relația fazei de tensiune și de curent într-o sarcină rezistivă
Linia galbenă reprezintă puterea la un moment dat (în orice moment) și se numește putere instantanee, care este egală cu produsul dintre tensiune și intensitatea curentului la un moment dat. Se observă că puterea este întotdeauna pozitivă, în acest caz, direcția pozitivă fiind fluxul de energie spre sarcină.
2.1.2 Sarcini parțial reactive
Cu toate acestea, în cazul consumatorilor cum ar fi frigidere, mașini de spălat, burghie cu coloane sau sudori cu arc nu este la fel de simplu, aceste aparate absorb o anumită cantitate de energie, apoi eliberează o parte din energie înapoi înspre rețeaua de alimentare. Acestea au, pe lângă componenta rezistivă, componente inductive (de exemplu la motoare) sau capacitive (de exemplu la sudori cu arc). O sarcină parțial inductivă oferă o ieșire a formei de undă a tensiunii și a curentului similară cu cea din figura 2.2.
Figura 2.2 – Relația fazei de tensiune și curent într-o sarcină parțial reactivă
Se poate observa că linia galbenă devine negativă pentru o perioadă de timp, partea pozitivă este energia care circulă spre sarcină, iar partea negativă este energia care curge înapoi dinspre sarcină.
În circuitele de curent alternativ, reactanța inductivă sau capacitivă provoacă un schimb bilateral de energie între sursă si circuit. Puterea reactivă, definită ca viteză de scurgere a energiei, este absorbita de bobinele si condensatoarele din circuit intr-un sfert de perioada si apoi cedata inapoi sursei in urmatorul sfert de perioada. Un alt lucru ce trebuie luat în considerare este că formele de undă de tensiune și curent au fost defazate.
Dacă se ia ca exemplu încărcarea unui condensator destul de mare, care este pus în serie cu un rezistor, astfel încât acesta să nu se poată încărca instantaneu, se trag următoarele observații [8]:
Pentru început, condensatorul este descărcat. Tensiunea de alimentare crește și este mai mare decât tensiunea pe condensator, astfel încât curentul trece în condensator (direcția pozitivă a graficului), ceea ce determină creșterea tensiunii condensatorului.
Tensiunea de alimentare începe să scadă. Acum, tensiunea pe condensatorul încărcat este mai mare decât tensiunea de alimentare. Curentul începe să curgă înapoi în direcția alimentării (direcția negativă a graficului). Acest lucru face ca forma de undă a curentului să apară ca și cum ar fi deplasată, fiind realizează schimbarea de fază, așa cum este reprezentat în figura 2.2.
În România frecvența standardizată a curentul electric alternativ este de 50Hz, ceea ce înseamnă că într-o secundă polaritatea tensiunii trece de la plus la minus și înapoi de 50 de ori.
Până acum am presupus că sarcina este consumatoare de putere. Dar dacă totuși noi generăm putere, atunci direcția în care curentul electric circulă este inversată. Dar, deoarece curentul este alternant, direcția oricum se inversează de 50 de ori în fiecare secundă. Este nevoie de o referință față de care să se compare direcția curentului, aceasta fiind forma de undă a tensiunii. În cadrul figurii 2.1 undele de tensiune și curent oscilează în fază. Când tensiunea este pozitivă (deasupra axei x) intensitatea curentului este și ea pozitivă, dar atunci când tensiunea este negativă (sub axa x) intensitatea curentului, urmărind tensiunea, devine negativă. Puterea fiind egală cu produsul tensiunii și intensitații curentului a fost întotdeauna pozitivă, observând din figura 2.1 că toată curba de putere este deasupra axei x.
În cazul în care dispozitivul propriu generează putere, direcția curentului este inversată în comparație cu exemplul precedent. Acum, când tensiunea este pozitivă (deasupra axei x), curentul este negativ (sub axa x), iar atunci când tensiunea este negativă, curentul este pozitiv. Rezultă astfel o putere permanent negativă – toată curba de putere este sub axa x. Prin urmare, semnul puterii indică dacă puterea este consumată sau generată.
Figura 2.3 – Relația fazei de tensiune și curent când se generează energie
2.2 Putere activă, reactivă și aparentă
Într-un circuit simplu de curent alternativ (AC), constituit dintr-o sursă și o sarcină liniară, atât curentul cât și tensiunea au formă sinusoidală. Dacă sarcina este pur rezistentă, cele două mărimi electrice își inversează polaritatea în același timp, deci putem spune că sunt în fază.
În fiecare moment produsul de tensiune și curent este pozitiv sau zero, rezultând că direcția fluxului de energie nu se inversează. În acest caz, numai puterea activă , puterea reală, este transferată.
Dacă sarcina este pur reactivă, atunci tensiunea și curentul sunt defazate cu 90. Pentru două pătrimi ale fiecărui ciclu, produsul între tensiune și curent este pozitiv, iar pentru celelalte două sferturi produsul celor două marimi este negativ, ceea ce indică faptul că, în medie, cât de multă energie circulă în sarcină atât va curge și înapoi. Nu există flux net de energie pe fiecare jumătate de ciclu. În acest caz, numai pentru fluxurile de putere reactivă, nu există transfer net de energie la sarcină, cu toate acestea, energia electrică circulă de-a lungul firelor și se întoarce, în sens invers, de-a lungul acelorași fire. În timpul transferului său atât de la sursa de alimentare la sarcina reactivă cât și înapoi la sursa de alimentare, acest flux pur reactiv pierde energie la rezistența conductoarelor datorită efectului termic, denumit și efect Joule-Lenz.
(2.2)
În practică sarcinile au rezistență, precum și inductanță și / sau capacitate, astfel încât atât puterea activă cât și cea reactivă vor curge spre sarcini.
Inginerii de putere analizează puterea aparentă ca fiind magnitudinea sumelor vectoriale ale puterii active și reactive. Puterea aparentă este rezultatul valorilor efective ale tensiunii și curentului. Electricienii țin seama de puterea aparentă în proiectarea și funcționarea sistemelor de alimentare, deoarece, deși curentul asociat cu puterea reactivă nu lucrează in sarcină (încălzește conductorii și irosește energie), acesta trebuie încă alimentat de sursa de alimentare.
Conductorii, transformatoarele și generatoarele trebuie dimensionate pentru a transporta curentul total, nu doar curentul care lucrează util. Nerespectarea furnizării unei puteri reactive suficiente în rețelele electrice poate duce la scăderea nivelurilor de tensiune și, în anumite condiții de funcționare, la colapsul complet al rețelei sau la întreruperea rețelei. O altă consecință este aceea că adăugarea puterii aparente pentru două sarcini nu va da cu precizie puterea totală decât dacă acestea au aceeași diferență de fază între curent și tensiune și în consecință același factor de putere.[2]
În mod convențional, condensatoarele sunt tratate ca și cum ar genera putere reactivă și bobinele ca și cum ar consuma-o. Dacă un condensator și o bobină sunt plasate în paralel, atunci curenții care curg prin condensator și bobină tind să se reducă mai degrabă decât să se însumeze. Acesta este mecanismul fundamental pentru controlul factorului de putere în transmisia de energie electrică, condensatoarele (sau bobinele) fiind introduse într-un circuit pentru a compensa parțial puterea reactivă "consumată" de sarcină.
Circuitele pur capacitive furnizează o putere reactivă cu forma de undă de curent, determinând forma de undă de tensiune defazată cu 90 de grade, în timp ce circuitele pur inductive absorb puterea reactivă cu forma de undă de curent rămasă în întârziere cu 90 de grade. Rezultatul este că elementele de circuit capacitive și inductive tind să se anuleze reciproc.
2.3 Triunghiul puterii
Se folosesc următorii termeni pentru a descrie fluxul de energie într-un sistem și se atribuie fiecăruia o unitate diferită pentru a se diferenția între ele:
Figura 2.4 – Triunghiul puterii
Putere activă, P, sau putere reală are ca unitate de măsură in S.I. watt-ul[W];
Putere complexă, S, are ca unitate de măsură în S.I. volt-amper-ul [VA];
Puterea reactivă, Q, are ca unitate de măsură in S.I. volt-amper reactiv [VAR];
Faza tensiunii relative la curent, φ, reprezintă unghiul de diferență [] între forma de undă de curent și forma de undă de tensiune;
Factorul de putere este reprezentat ca și cos φ;
Puterea aparentă, | S |,este dată de modulul puterii complexe S [VA].
Este important de observat faptul că, puterile activă, reactivă și complexă nu sunt vectori rotitori, deoarece evoluțiile lor în timp nu sunt sinusoidale; chiar dacă tensiunea și curentul sunt sinusoidale , pot fi reprezentate prin vectori rotitori, puterile activă, reactivă și complexă au valori constante, prin urmare nu pot fi reprezentate prin fazori rotitori.
Puterea reactivă nu lucrează, deci este reprezentată pe direcția si in sensul axei imaginare a diagramei vectoriale. Puterea activă lucrează, deci ea este reprezentată pe direcția si in sensul axei reale.
Unitatea de măsură pentru toate formele de putere este watt-ul (simbol: W), dar această unitate este în general rezervată pentru putere activă. Puterea aparentă este exprimată în mod convențional în volt-amperi [VA], deoarece este produsul tensiunii RMS și a curentului RMS.
RMS reprezintă abrevierea de la Root Mean Square și se referă la modalitatea matematică de măsurare a valorii efective a mărimilor prin ridicarea la pătrat a tuturor valorilor de pe graficul formei de undă, atât pozitive cât și negative, calcularea valori medii a acestora și introducerea lor sub radical pentru obtinerea valorii efective finale.
Unitatea de măsură pentru puterea reactivă este exprimată ca VAR, ceea ce înseamnă volt-amper reactiv. Deoarece puterea reactivă nu transferă energie netă la sarcină, uneori se numește putere "wattless". Cu toate acestea, servește o funcție importantă în rețelele electrice.
Înțelegerea relației dintre aceste trei cantități de putere se află în centrul înțelegerii energiei electrice. Relația matematică dintre cele trei forme de puteri poate fi reprezentată ca vectori sau exprimată folosind numere complexe:
(2.3)
unde j reprezintă unitatea imaginară.
În continuare voi încerca să acopăr matematica din spatele calculului puterii reale, puterii aparente, factorului de putere, valorilor efective ale tensiunii și curentului realizate la măsurătorile instantanee. Ecuațiile în timp discret sunt detaliate, calculele fiind efectuate în domeniul digital al lui Arduino.
Din punct de vedere matematic, putere activă este definită ca integrală a produsului dintre tensiunea u(t) si curentul i(t) în funcție de timp, după cum urmează:
În ecuația 2.4, U reprezintă valoarea efectivă de tensiune, I reprezintă valoarea efectivă de curent iar cos (φ) este factorul de putere.
Echivalentul ecuației puterii reale în timp discret este:
Astfel, u(n) reprezintă valoarea eșantionată a tensiunii instantanee, u(t), i(n) este valoarea eșantionată a curentului instantaneu, i(t), N reprezintând numărul de eșantioane.
Puterea reală este calculată pur și simplu ca medie a puterii instantanee. Această metodă este valabilă atât pentru formele de undă sinusoidale, cât și pentru cele distorsionate. Mai întâi se calculează puterea instantanee prin înmulțirea valorii instantanee a tensiunii cu valoarea instantanee a curentului. Se însumează valoarea instantanee a puterii pe numărul de eșantioane specific unei perioade complete a formelor de undă și se împarte la numărul de eșantioane.
2.4. Calcularea parametrilor electrici
Valoarea efectivă a tensiunii este definită ca rădăcina pătrată a valorii medii a pătratelor valorilor instantanee ale tensiunilor, în medie pe o perioadă. Ecuația în timp discret pentru calculul tensiunii efective este următoarea:
(2.7)
Valoarea efectivă a curentului este definită ca rădăcina pătrată a valorii medii a pătratelor valorilor instantanee ale curentului, în medie pe o perioadă. Ecuația în timp discret pentru calculul curentului efectiv este următoarea:
(2.8)
Formula pentru puterea complexă sub formă de fazor este:
, (2.9)
De asemenea, prin convenție, conjugatul complex al valorii efective a curentului I este reprezentat ca . Acest lucru se realizează astfel încât un curent de vârf (sarcină capacitivă, reactanță negativă) duce la o putere reactivă negativă.
Alte forme de putere complexă (masurată în Volt-Amperi, VA) sunt derivate din impedanța de sarcină, Z, măsurată în ohmi [Ω].
(2.10)
În consecință, referindu-se la triunghiul puterii, puterea activă măsurată în wați [W] este definită ca:
Pentru o sarcină pur rezistivă, puterea reală poate fi simplificată la:
unde R reprezintă rezistența sarcinii măsurată în ohmi [Ω].
Puterea reactivă, măsurată în Volt-Amper-Reactiv [VAR], este definită ca:
unde X reprezintă reactanța sarcinii măsurată în ohmi [Ω].
Combinând, puterea complexă, măsurată în volt-amperi [VA], este derivată din nou ca:
(2.14)
Și puterea aparentă, măsurată în volt-amperi [VA], ca modulul puterii complexe:
(2.15)
Acestea sunt simplificate schematic sub forma triunghiului puterii, în figura 2.4.
2.5 Factor de putere
Raportul dintre puterea activă și puterea aparentă într-un circuit electric este numit factor de putere. Pentru două sisteme care transmit aceeași cantitate de putere activă, sistemul cu factor de putere inferior va avea curenți mai mari de circulație datorită energiei care revine sursei din absorția energiei din sarcină. Acești curenți mai mari generează pierderi mai mari și reduc eficiența totală a transmisiei energiei. Un circuit cu factor de putere mai mic va avea o putere aparentă mai mare și pierderi mai mari pentru aceeași cantitate de putere activă.
Factorul de putere are valoarea 1.0 atunci când tensiunea și curentul sunt în fază. El este zero când curentul conduce sau defazează tensiunea cu 90 de grade. Factorul de putere este definit ca un parametru de măsură a capacității unui circuit electric alternativ de a furniza sau absorbi putere activă, el fiind de obicei declarat drept "conducător" sau "încetinitor" pentru a arăta semnul unghiului de fază al curentului în raport cu tensiunea. Tensiunea este desemnată ca baza la care este comparat unghiul curentului, ceea ce înseamnă că ne gândim la forma de curent ca formă de tensiune "de conducere" sau de "întârziere". [8]
În cazul în care formele de undă sunt pur sinusoidale, factorul de putere este cosinusul unghiului de fază,φ , dintre forma de undă sinusoidală de curent și cea de tensiune. Din acest motiv în fișele de date ale echipamentelor și pe plăcuțele de identificare adesea se abrevieză factorul de putere ca și "cos φ".
Din schema triunghiului puterilor, reprezentată în figura 2.4, puterea activă este dată de produsul dintre puterea aparentă si cosinusul unghiului de fază,φ, iar puterea reactivă se calculează ca produsul dintre puterea aparentă si sinusul unghiului de fază, φ.
(2.16)
(2.17)
Dacă în relația de mai sus Q > 0 (φ > 0), circuitul este inductiv iar dacă Q<0 (φ < 0) circuitul este capacitiv. In aceste cazuri puterea reactivă se numeste inductivă și respectiv, capacitivă.
Cu toate acestea, trebuie reținut că relația factorului de putere este valabilă numai pentru sarcini sinusoidale liniare. Majoritatea surselor de alimentare pentru dispozitivele de curent continuu, cum ar fi laptopurile, prezintă o sarcină neliniară la rețeaua de alimentare.
Deoarece laptopul constituie o sarcină neliniară, formele de undă ale tensiunii si curentului nu mai sunt sinusoide pure astfel ca nu mai este valabilă relația puterii aparente, deci implicit nici a factorului de putere, , deoarece trebuie luate în considerare efectele armonicilor de ordin superior atât în forma de undă de tensiune cât și în cea de curent.
Valoarea factorului de putere măsoară cât de mult este afectată eficiența rețelei atât de defazajul φ, cât și la conținutul armonic al curentului de intrare.
În acest caz este necesară punerea în fază a formei de undă de tensiune cu cea de curent, filtrarea numai a armonicilor I si III din spectrul de tensiune, întrucât aceste sunt singurele semnificative în tot spectrul, precum si filtrarea armonicilor semnificative (peste 20% din fundamentală) din spectrul de curent. Puterea reactivă se calculează prin suma mediilor produselor dintre valorile instantanee de tensiune si cele ale curentului specifice fiecărei armonici filtrate.
În cele din urmă se poate calcula factorul de putere din următoarea ecuație:
De cele mai multe ori absorția de curent arată precum ce din figura 2.5, reprezentând absorția de curent într-o sarcină neliniară. Din forma de undă a tensiunii și curentului în timp, reprezentate în cadrul figurii 2.5, se observă că sarcina consumatoare de putere este aceea a unei surse tipice de alimentare pentru laptop la care se adaugă un bec cu incandescență.
Figura 2.5 – Absorția de curent într-o sarcină neliniară
Formele de undă au fost realizate prin eșantionarea tensiunii și curentului la frecvența de eșantionare, realizându-se între 55 și 65 de măsurătri la fiecare 20 de milisecunde, limita constituind-o comanda de citire a convertorului analogic-digital al plăcuței Arduino MEGA, precum și de viteza de calcul. Fiecare eșantion în parte reprezintă o citire instantanee a tensiunii sau curentului.
2.6. Factorul total de distorsiune
Descompunerea curbelor de tensiune și curent pe componentele armonice și fundamentala se realizează folosind analiza Fourier. Armonicele sunt forme de undă cu frecvența multiplu întreg al frecvenței fundamentale fiind generate îndeosebi de sarcini neliniare în rețea.[8]
În prezent, ca și indicatori de calitate pentru regimului periodic nesinusoidal sunt determinați următorii parametri:
Factorul total de distorsiune a tensiunii reprezintă raportul dintre valoarea efectivă a armonicilor de tensiune și valoarea efectivă a fundamentalei situată pe frecvența de 50Hz.
(2.19)
Factorul total de distorsiune a curentului electric reprezintă raportul dintre valoarea efectivă a armonicilor de current și valoarea efectivă a fundamentalei situată pe frecvența de 50Hz.
(2.20)
Nivelul armonicii, și în cadrul spectrului de tensiune și în cadrul spectrului de curent reprezintă raportul dintre valoarea efectivă a armonicii respective și valoarea efectivă a fundamentalei:
În analiza curbelor deformate de curent electric se consideră că intervalele în care curentul absorbit este redus, să nu fie luate în considerare în analiza statistică a factorului de distorsiune și a nivelului armonicii. În general, pentru analiza statică a factorului total de distorsiune, în cadrul curbelor deformate de curent electric sunt eliminate curbele în care curentul absorbit este sub 20% din valoarea sa normală.
CAPITOLUL 3 – ELEMENTELE COMPONENTE ALE SISTEMULUI SMARTMETER
Pentru realizarea sistemului Smartmeter a fost necesară achiziționarea urmatoarelor componente principale, care vor fi caracterizate în decursul acestui capitol:
Placa de dezvoltare Arduino Mega2560;
Senzorul de curent non invaziv de 30 A, SCT-013-030;
Adaptorul de alimentare AC-AC;
Modul LCD SPI de 3.5'' cu Touchscreen;
Modulul Bluetooth HC-05.
3.1 Placa de dezvoltare Arduino Mega2560
3.1.1 Introducere în Arduino
Proiectul se bazează pe prelucrarea datelor achiziționate de la senzori de către placa de dezvoltare MEGA 2560 R3 compatibilă cu Arduino, aceasta utilizând microcontrolerele ATmega2560 si ATmega16u2, cel din urmă pentru conectivitate USB. Astfel este nevoie de o înțelegere profundă a prelucrării și procesării datelor în Arduino, a funcționării și modului de lucru al acestuia.
Arduino este o platformă electronică open source bazată pe un hardware și un software ușor de utilizat. Plăcuțele Arduino sunt capabile să citească intrări analogice sau digitale cum ar fi: datele preluate de la un senzor, o apasare pe un buton, și să le transforme într-o acțiune de ieșire corespunzătoare – să activeze un motor, să pornească un obiect etc.
Pentru a spune plăcuței ce sarcini trebuie să îndeplinească, se trimit un set de instrucțiuni la microcontrolerul de pe breadboard, utilizând limbajul de programare Arduino (bazat pe platforma Wiring) și software-ul Arduino (IDE). Platforma Wiring este un cadru de programare open source pentru microcontrolere, ce permite scrierea de software aplicabil tuturor, pentru a controla dispozitivele atașate la o gamă largă de plăci de microcontroler cu scopul de a crea o multitudine de programe de cod creative, obiecte interactive, spații sau experiențe fizice.
De-a lungul anilor, Arduino a fost creierul a mii de proiecte, de la obiecte de zi cu zi până la instrumente științifice complexe. O comunitate mondială de producători cum ar fi: studenți, pasionați de electronică, artiști și programatori profesioniști s-au adunat în jurul acestei platforme open source, contribuțiile lor adăugându-se la o cantitate incredibilă de cunoștințe accesibile, care pot fi de mare ajutor atât pentru începători, cât și pentru experți.
În funcție de nevoi și provocări, Arduino a diferențiat oferta sa de la plăcile simple pe 8 biți până la produsele pentru aplicații IoT (Internetul Obiectelor), dispozitive portabile, imprimante 3D și medii încorporate. Software-ul, de asemenea, este open-source, și este în creștere prin contribuțiile utilizatorilor din întreaga lume.
3.1.2 De ce Arduino?
Datorită experienței sale simple și accesibile de utilizare, Arduino a fost utilizat în mii de proiecte și aplicații diferite. Software-ul Arduino este ușor de utilizat pentru începători, dar suficient de flexibil pentru utilizatorii avansați. Software-ul Arduino IDE rulează pe sitemele de operare: Mac, Windows și Linux. Profesorii și studenții îl folosesc pentru a construi instrumente științifice cu un cost scăzut, pentru a dovedi principiile fizicii și chimiei sau a păși în programare și robotică.
Figura 3.1– Arduino MEGA 2560
Există multe alte microcontrolere și platforme de microcontroler disponibile pentru calcul fizic care oferă funcții similare, dar acestea nu iau detaliile dezordonate ale programării microcontrolerului și le redau într-un pachet software ușor de utilizat. Arduino simplifică, de asemenea, procesul de lucru cu microcontrolerele, oferind avantajul următoarelor aspecte:
Prețul scăzut – plăcile Arduino sunt relativ ieftine în comparație cu alte platforme de microcontroler;
Accesibilitate – Software-ul Arduino (IDE) rulează pe majoritatea sistemelor de operare Windows, Macintosh OSX și Linux față de cele mai multe sisteme de microcontroler, care sunt limitate doar la Windows.
Mediu de programare simplu și clar – Software-ul Arduino (IDE) este ușor de utilizat pentru începători, dar suficient de flexibil pentru ca utilizatorii avansați să profite de asemenea;
Software-ul open source și extensibil – Software-ul Arduino este publicat ca un instrument open source, disponibil pentru a fi extins de către programatorii experimentați. Limbajul de programare poate fi extins prin biblioteci C++, se poate face saltul de la limpajul Arduino la limbajul de programare AVR C pe care se bazează;
Hardware-ul open source și extensibil – Planurile plăcilor Arduino sunt publicate sub licență Creative Commons, astfel încât designerii de circuit experimentați pot să-și creeze propria versiune a modulului, să o extindă și să o îmbunătățească. Chiar și utilizatorii relativ lipsiți de experiență pot construi versiunea de breadboard a modulului pentru a înțelege cum funcționează și pentru a economisi bani.
3.1.3. Caracteristici tehnice și funcționare Arduino MEGA
Caracteristicicile tehnice ale plăcuței de dezvoltare Arduino Mega 2560:
Tensiune de funcționare: 5V;
Tensiune de alimentare prin mufa jack: 7V – 12V;
Microcontrolere încorporate: ATmega2560 si ATmega16u2;
Pini digitali I/O: 54, dintre care 15 pini PWM ;
Pini analogici: 16;
4 porturi seriale hardware UART;
suportă de asemenea și comunicațiile SPI si TWI;
Memorie flash: 256KB, din care 8KB ocupati de bootloader;
Frecvența de funcționare: 16MHz.
Dimensiuni: 5.3cm x 10cm.
Comunicația serială dintre microcontrolere sau cu circuitele integrate se realizează prin intermediul TTL (Tranzistor-Tranzistor Logic). Semnalele TTL sunt cuprinse între 0 V, ce reprezintă un bit de START sau un bit de date de valoare logica “0”, și 3,3 V sau 5 V, reprezentând un bit de STOP sau un bit de date de valoare logică “1”.
Figura 3.2 – Reprezentare semnal TTL 5V
UART (Universal Asynchronous Receiver/ Transmitter) este un dispozitiv hardware pentru comunicații seriale asincrone, funcționând ca un intermediar între interfețele paralele și interfețele seriale.
Microcontrolerul Atmega2560 permite comunicația serială UART TTL (5V) prin intermediul pinilor digitali Rx și Tx.
În cazul comunicației asincrone, sincronizarea la nivel de bit este asigurată numai pe durata transmisiei efective a fiecărui caracter. O asemenea comunicație este orientată pe caractere individuale și are dezavantajul că necesită informații suplimentare pentru identificarea fiecărui caracter.
Arduino MEGA suportă de asemenea și comunicațiile I2C (Inter-Integrated Circuit), TWI (Two Wire Interface ) și SPI (Serial Peripheral Interface) prin utilizarea unor biblioteci specifice.
Magistrala I2C este compusă din doua linii:
SCL – Serial Clock Line (linie de ceas serială) pe pinul 20;
SDA – Serial Data Line (linie de date serială) pe pinul 21.
SPI (Serial Peripheral Interface) este o interfață de comunicație serială sincronă, utilizată în comunicațiile dintre microcontroler și echipamente aflate la distanțe mici, în special în sistemele încorporate. Se folosește de obicei în aplicații cu carduri SD (Secure Digital) și ecrane cu cristale lichide (LCD).
Sincronizarea la nivel de bit se realizează cu ajutorul semnalelor de ceas locale cu aceeași frecvență. Atunci când receptorul detectează începutul unui caracter indicat prin bitul de START, pornește un oscilator de ceas local, care permite eșantionarea corectă a biților individuali ai caracterului. Eșantionarea biților se realizează aproximativ la mijlocul intervalului corespunzător fiecărui bit.
3.2. Transformatorul de curent electric (CT)
Există multe tipuri de transformatoare de curent pe piață: CT cu miez divizat, CT cu miez solid (ex: cu miez inelar).
Transformatoarele de curent sunt senzori utilizați pentru măsurarea curentului alternativ, având la bază fenomenul de inducție electromanetică, fenomenul lui Faraday. CT-urile sunt utile în special pentru măsurarea consumului de energie electrică a unei întregii locuințe.
Ca orice alt transformator, un transformator de curent are o înfășurare primară, un miez magnetic și o înfășurare secundară.
Figura 3.3 – a) Transformator de current cu miez divizat, YHDC SCT-013-000; b) Transformatr de curent cu miez inelar
Operația de măsurare se realizează determinând intensitatea curentului din primarul transformatorului prin efectuarea masurării intensitații curentului din secundarul acestuia. Impedanța circuitului secundar al transformatorului de curent fiind foarte mică, acesta functionează in condiții asemanatoare cu cele de scurtcircuit. Curentul alternativ care curge prin primarul CT-ului produce un câmp magnetic în miez, care apoi induce un curent electric în circuitul din înfășurara secundară.
Tipul senzorului de curent de tip clește, cum ar fi CT-ul din figura 3.3 a), este deosebit de potrivit pentru utilizarea în montajele proprii, putând fi fixat direct pe firul de fază sau pe firul de nul care intră în montajul electric, fără a fi nevoie să se lucreze cu rețeaua de înaltă tensiune.
3.2.1. Senzorul curent non invaziv 30 A
SCT-013-030 este un senzor de curent non invaziv, care poate masura curenti de maxim 30 A. Iesirea este o tensiune direct proporțională cu valoarea intensiății curentului detectat de senzor .
Figura 3.4 – Senzorul de curent non invaziv de 30 A, SCT-013-030
Transformatoarele de curent SCT-013-030 au două părți principale: un miez feromagnetic, care reprezină calea de inchidere a fluxului magnetic produs de solenația de magnetizare a înfășuraii primare prin care circulă un curent alternativ, și o înfășurare secundară, pe unde circulă curentul electric indus de către câmpul magnetic din jurul miezului, condiția fiind ca fluxul magnetic să se schimbe în mod continuu. Curentul electric indus în circuitul secundar curge în rezistorul de sarcină, care generează o tensiune pe care Smartmeter-ul o citește pe intrarea sa analogică, iar în urma algoritmului de calcul se obține intensitatea curentului electric pe rezistența de sarcină. Un transformator de curent nu va măsura niciodată intensitatea curentului electric direct. [13]
Numărul de spire al unei bobine înmulțit cu intensitatea curentului electric, care le strabate, se numește solenație de magnetizare.
Miezul transformatorului de curent fiind un material feromagnetic, fluxul magnetic depinde liniar de forța de magnetizare a curentului la valori relativ scăzute, la valori ridicate fluxul atingând o limită cunoscută sub denumirea de "saturație". În mod normal, CT-ul este liniar în limitele acceptabile în raport cu domeniul său normal de funcționare, transformatorul SCT-013-030 fiind liniar în limita a 3% față de domeniul său nominal de curent. Peste o gamă limitată de curent poate exista o eroare de raport, care poate fi însă compensată prin calibrare.
În cazul monitorizării parametrilor de curent electric ai unei instalații, înfășurarea primară este firul de fază sau firul de nul (niciodată ambele!), care transportă curentul electric ce trebuie măsurat, acesta trecând prin deschiderea transformatoarului de curent. Înfășurarea secundară este realizată din mai multe înfășurări de sârmă fină situate în carcasa transformatorului, în cazul senzorului de curent non invaziv fiind vorba de 2000 de spire. În circuitului primar sarcina este neglijabilă.
Dacă se fixează CT-ul în jurul unui cablu cu două sau mai multe conductoare, atunci acesta va măsura suma curenților din fiecare dintre conductori. În cazul unui cablu dublu cu fază si nul, același curent va curge în direcții opuse, câmpurile magnetice create de fire se vor anula unul pe celălalt, iar transformatorul de curent nu va avea o valoare de ieșire, suma curenților fiind zero.
Figura 3.5 – Fixarea CT-ului pe firul de fază
Transformatorul SCT-013-030, având un miez de ferită, nu trebuie niciodată prins la cablu prin utilizarea vreunui material de împachetare, deoarece natura fragilă a miezului de ferită îl transformă intr-un material casant, ceea ce îl face ușor de spart, distrugând astfel CT-ul.
Senzorii de curent cu clapă pentru prindere sunt neinvazivi și nu au contact direct, metalic, cu rețeaua de curent alternativ, astfel circuitul secundar este izolat galvanic de circuitul primar.
În general, un transformator de curent nu trebuie să fie niciodată deschis după ce este atașat la un conductor care poartă curent electric. Dacă circuitul este deschis în timp ce curentul circulă în primar, transformatorul secundar va încerca să continue să conducă curentul electric în ceea ce este efectiv o impedanță infinită, producând astfel o tensiune ridicată și periculoasă pe secundar. Astfel, unele transformatoare de curent au o protecție integrată, cum ar fi două diode Zener protectoare care au ca scop limitarea tensiunii, ce poate apărea pe întreaga înfășurare secundară, la o valoare sigură.
3.2.2 Rezistența de sarcină
Transformatorul de curent SCT-013-030, recomandat pentru utilizare în acest proiect, returnând la ieșire o tensiune proporțională cu valoarea intensiății curentului din secundar, prezintă un rezistor de sarcină construit astfel încât să închidă circuitul secundar al său.
Ca la orice alt transformator, intensitatea curentului în înfășurarea secundară este proporțională cu valoarea intensiății curentului care curge prin înfășurarea primară. Astfel avem relația solenației de magnetizare:
(3.1)
Numărul de înfășurări din secundarul transformatorului prezentat este de 2000, deci intensitatea curentului din secundar este 1/2000 din intensitatea curentului din primar. Raportul în amperi poate fi scris în mod normal ca 30: 0,015 (pentru 0.015A masurati, scalat în gama 0-30A).
Senzorul de curent non-invaziv reprezintă o modalitate excelenta de a măsura consumul energetic al unui aparat alimentat la rețeaua de 230V. Bobina senzorului se trece in jurul unuia dintre firele de alimentare (nul sau faza), astfel curentul electric din rețeaua de 230V induce în bobina senzorului un curent alternativ, care va fi măsurat pe un rezistor de sarcină cu ajutorul plăcii de dezvoltare Arduino Mega.
Tensiunea indusă în bobină este o tensiune alternativă, iar nivelele de tensiune sunt centrate pe zero, existând atat tensiuni pozitive, cât si negative. Deoarece Arduino nu este capabil să lucreze cu tensiuni negative trebuie adăugat un divizor de tensiune, alcătuit din două rezistoare cu rezistențe egale, astfel tensiunea citită să fie centrată pe nivelul de 2.5V, obținut în urma divizorului de tensiune.
Figura 3.6 – Schema de circuit a senzorului de curent
Atunci când senzorul de curent funcționează fără o rezistență de sarcină, miezul feromagnetic va ajunge la saturație foarte repede. Valoarea curentului din primar de câțiva amperi va conduce saturație miezul în mod clar, iar erorile vor fi mari. Aceast curent poate deteriora sau distruge microcontrolerul ATMega2560.
"Curentul de ieșire" al transformatorului trebuie măsurat pe un rezistor de sarcină,care completează sau închide circuitul secundar al CT-ului. Valoarea rezistenței de sarcină este aleasă astfel încât să se poată furniza o tensiune direct proporțională cu valoarea intensiății curentului prin secundar. În cazul unor consumatori de puteri mai mari rezistența de sarcină trebuie să fie suficient de mică pentru a preveni saturația miezului transformatorului de curent.
3.3. Transformatorul de tensiune
Pentru a calcula puterea activă, puterea aparentă, puterea reactivă și celelalte mărimi electrice, este necesară măsurarea tensiunii curentului alternativ provenit din rețeaua de curent electric. Aceasta se poate realiza în siguranță, fără a necesita lucrul cu rețeaua de înaltă tensiune, prin utilizarea unui adaptor de alimentare AC-AC. Transformatorul de tensiune din adaptor asigură izolarea față de la rețeaua de înaltă tensiune.
Semnalul de ieșire al adaptorului de curent alternativ are o forma de undă a tensiunii aproape sinusoidală. Pentru transformatorul de tensiune de 6 V valoare efectivă, vârful de tensiune pozitiv este de 8.5V, iar vârful negativ de -8.5 V.
Cu toate acestea, datorită slabei reglări a tensiunii cu acest tip de adaptor, atunci când adaptorul este cu ieșirea în gol , tensiunea de ieșire este deseori de 7.5÷8V valoare efectivă, oferind o tensiune de vârf de 10.6÷11.4V.
Primul lucru care trebuie cunoscut la un adaptor de alimentare este gradul de tensiune al său, astfel transformatorul de tensiune utilizat în realizarea proiectului are o valoare efectivă a tensiunii de ieșire în gol de 8.1V.
Pentru măsurarea tensiunii curentului alternativ folosind intrarea analogică a plăcuței de dezvoltare Arduino Mega trebuie să se îndeplinească cerințele acesteia, adică să se introducă o tensiune pozitivă cuprinsă între 0V și tensiunea de referință a convertorului analogic-digital al microcontrolerului ATmega2560. Astfel trebuie să se reducă forma de undă a tensiunii și să se adăuge un offset (compensare) astfel încât să nu existe nici o componentă negativă.
Forma de undă poate fi redusă cu ajutorul unui divizor de tensiune conectat la bornele transformatorului de tensiune, iar offsetul poate fi adăugat utilizând sursa de alimentare de 5V curent continuu a placuței Arduino conectată la un alt divizor de tensiune.
Figura 3.7 – Schema de circuit a transformatorului de tensiune
Rezistoarele R1 și R2 formează un divizor de tensiune care coboară tensiunea de ieșire a adaptorului de alimentare la o valoare potrivită gamei de citire Arduino. Ca și în cazul transformatorului de curent rezistoarele R3 și R4 furnizează tensiunea de polarizare pentru offset-ul de curent continuu, asigură tensiunea de bias, centrând astfel tensiunea citită pe nivelul de 2.5V în loc de 0V. Tensiunea de ieșire a transformatorului va trece acum peste și sub nivelul de 2.5V, rămânând pozitivă și putând fi astfel interpretată de convertorul analogic-digital al microcontrolerului ATmega2560.
3.4. Modul LCD SPI de 3.5'' cu Touchscreen
Specificațiile tehnice ale modulului LCD :
Tensiunea de alimentare: 3.3 V;
Diagonală: 3.5 Inch ( ~ 8.9cm );
Rezoluție: 320 * 480;
Controller LCD: ILI9486;
Controller touch: XPT2046;
Protocol de comunicare: SPI (Serial Peripheral Interface) ;
Curent consum: ~50 mA.
Modulul include circuitul de conversie a tensiunii 5V-3.3V si circuitul de conversie a nivelului, modulul putând fi direct introdus în placa de dezvoltare Arduino Mega2560.
Figura 3.8 – Modul LCD SPI de 3.5'' cu Touchscreen
Interfața serială SPI este o interfața sincronă standard de mare viteză, ce are linii separate pentru transmitere și recepție. Operând în mod full duplex , se pot transmite și recepționa date în același moment. Se poate opera doar cu un dispozitiv master și unul sau mai multe dispozitive slave.
În SPI , doar o singură parte generează semnal de ceas ( CLK sau SLK ) și este denumită „master”, iar cealaltă parte se numește „slave”. „Master” este întotdeauna unul singur, de regulă microcontrolerul, în timp ce „slave” pot exista mai mulți. În momentul în care master-ul trimite date către slave, acestea sunt transmise pe o linie numită MOSI (Master Out / Slave In), iar atunci când dispozitivul slave trimite un răspuns către master, acesta este trimis pe linia denumită MISO ( Master In / Slave Out ).
Linia SS (Slave Select) este utilizată pentru a-i spune slave-ului să recepționeze sau să transmită date și de asemenea este folosită atunci când există mai mulți slave pentru a-l selecta pe cel căruia vrea să îi transmită.
Figura 3.9 – Comunicație SPI
Unul dintre avantajele SPI este hardware-ul utilizat la recepție, care poate fi un registru de deplasare, mai simplu și mai ieftin decât UART-urile folosite la comunicația asincronă.
Modulul LCD utilizează 5 pini pentru funcționarea touchscreen-ului (T_CLK,T_CS, MOSI, MISO, PEN) și 4 pini pentru afișarea datelor ( RS, WR, CS, RST).
Figura 3.10 – Schema de conectare a modulului LCD la Arduino MEGA
Pentru funcționarea afișorului LCD este necesară apelarea bibliotecii <UTFT.h> iar pentru activarea touchscreen-ului trebuie apelată biblioteca <URTouch.h> și apoi calibrat modulul prin rularea sketch-ului “Calibrate.ino” și înlocuirea parametrilor returnați în cadrul bibliotecii <URTouch.h> pentru a avea o precizie ridicată.
Se crează instanțele SMARTMETER și Touch, ce au ca parametri de intrare pinii corespunzători plăcuței Arduino MEGA, pentru a apela diversele funcții predefinite în cadrul bibliotecilor.
UTFT SMARTMETER (ILI9486,38,39,40,41);
URTouch Touch( 6, 5, 4, 3, 2).
3.5 Modulul Bluetooth HC-05
Dispozitivele HC serial Bluetooth constau într-un modul de interfață serială și un adaptor Bluetooth, și au două moduri de funcționare: master și slave.[14]
Modulul Bluetooth HC-05 este unul de înaltă performanță și are un consum foarte mic de energie, fiind utilizat pentru a stabili o comunicație serială prin Bluetooth. Prin setul de comenzi AT specifice acestuia se poate seta modul de lucru ,master sau slave, al dispozitivului, viteza de transmisie a datelor, precum și setarea adreselor dispozitivelor la care se dorește conectarea.
Figura 3.11 – Modulul Bluetooth HC-05
Caracteristicile tehnice ale modulului:
Suportă o tensiune de alimentare cuprinsă în intervalul 3.6 – 6V;
Este conceput pentru nivelul de 3,3V dar poate lucra într-o gama mai mare, acceptând si nivelul TTL de 5V.
În timpul conexiunii, curentul consumat este fluctuant în domeniul de 20-30mA. Curentul mediu este de aproximativ 25 mA. După conectare, cu sau fără comunicarea de procesare, curentul scade la 8mA, neavând obțiune de sleep mode.
Comunicare serială fără fir se realizează prin protocolul UART ( Universal Asynchronous Receiver/Transmitter ) la frecvența de lucru de 2.4 GHz banda ISM ( industrial, scientific and medical).
Formatul de comunicație implicit este de 8 biți de date și 1 bit de stop.
Modularea: GFSK (modulație cu deplasarea gaussiană de frecvență)
Rată de comunicație implicită este de 9600 bps, dar suportă viteze de transmisie binară până la 460800 bps.
Modurile master și slave pot fi comutate
Putere de transmisie: +4dBm.
Senzitivitate recepție: -80dBm la 0.1% BER
Modulul Bluetooth HC-05 este compatibil cu Arduino
Parola implicită pentru asocierea cu alte dispozitive Bluetooth este 1234.
Dimensiuni mici: 35.7 mm x 15.2 mm x 2.35 mm.
În cazul interfețelor seriale asincrone, datele sunt transmise bit cu bit, fără suport de la un semnal de ceas extern, această metodă de transmisie fiind eficientă în ceea ce privește numărul firelor necesare și al pinilor de I/O. Interfețele asincrone sunt utilizate la scară largă în electronică, pentru conectarea unor module ca Bluetooth, GPS, Xbee, GSM sau alte dispozitive externe .
Pentru asigurarea unor transferuri de date fără erori, protocolul serial asincron urmează un număr de reguli care vizează biții de date, biții de sincronizare, bitul de paritate și rata de transfer.
Pentru a nu apărea erori este necesar ca cele două dispozitive de comunicație să funcșioneze la aceeași rată de transfer. Viteze de transfer standard sunt : 1200, 2400, 4800, 9600 ( este cea mai des folosită ), 19200, 38400, 57600, 115200. Există o limitare a vitezei de transfer la 115200 bps, deoarece această viteză este destul de rapidă pentru majoritatea microcontrolerelor. La viteze mai mari vor apărea erori la primirea datelor.
Spre deosebire de comunicația serială sincronă, unde se folosește un semnal de ceas extern, la comunicația serială asincronă, fiecare caracter trimis este încadrat de către biții de sincronizare, este precedat de un bit de START, cu valoarea logică „0” și urmat de un bit de STOP, cu valoarea logică “1”, pentru a se realiza sincronizarea între cele două echipamente de comunicație.
Bitul de paritate are scopul de a face o verificare a erorilor la nivel scăzut și poate fi par sau impar. Pentru a calcula paritatea, se însumează toți cei 8 biți din cadrul de date. Bitul de paritate este opțional și în cele mai multe cazuri nu este folosit, deoarece încetinește transferul de date. Este util însă în mediile zgomotoase.
Pentru comunicația serială asincronă, magistrala este alcatuită din două fire, pentru transmiterea, respectiv recepționarea datelor, deci, dispozitivele de comunicație trebuie să aibă câte 2 pini seriali, receptorul ( Rx ) și transmițătorul (Tx). Spre deosebire de comunicația serială sincronă, la care firele se leagă între aceeași pini ai celor două echipamente ( MOSI-MOSI, MISO-MISO, SCK-SCK etc. ), în cazul comunicației asincrone receptorul unui dispozitiv se leagă la transmițătorul celuilalt dispozitiv și invers.
Figura 3.12 – Shield Bluetooth HC-05
Cei șase pini de conectare: VCC, GND, TXD, RXD, EN și STATE. În principiu, modulul HC-05 poate funcționa atunci când sunt conectați doar patru dintre aceștia: UART_TXD, UART_RXD, VCC și GND.
Pinul EN este utilizat în cadrul dispozitivul master pentru stergerea din memorie a informațiilor referitoare la adresele dispozitivelor asociate. După stergere, dispozitivul master va căuta noul dispozitiv slave la întâmplare, apoi va memora adresa acestuia. La următoarea pornire, dispozitivul master va căuta numai această adresă memorată.
Ledul de stare indică starea modulului :
iluminare cu intermitență – nu există nici o conexiune Bluetooth;
lent – se află în modul de comandă AT;
iluminare constantă – modulul Bluetooth este conectat și portul este deschis.
Pentru a realiza conexiunea modulului Bluetooth cu laptopul am utilizat programele pentru comunicații seriale Putty, Tera Term sau RealTerm, iar pentru conexiunea cu un smartphone Android se folosește aplicația S2 Terminal for Bluetooth.
Figura 3.13 – Conectarea și afișarea datelor transmise prin Bluetooth
Pentru a se realiza comunicația între modulul Bluetooth HC-05 și laptopul sau smartphone-ul personal, primul trebuie sa fie configurat în modul slave. Am folosit laptopul ca dispozitiv master și am trimis parola 1234 la adresa MAC a modulului Bluetooth.
3.5.1 Conectarea și configurarea modulului
Dispozitivul master HC-05 nu are memorie înainte de prima utilizare. Dacă parola este corectă, dispozitivul master se va conecta cu dispozitivul slave automat la prima utilizare. În următoarea utilizare, dispozitivul master va reține adresa Bluetooth a ultimului dispozitiv asociat și îl va căuta. Căutarea nu se va opri până când dispozitivul nu este găsit.
Procedura modulului HC-05 pentru a intra in modul de comandă AT:
se alimenteaza modulul de la placa Arduino MEGA 2560;
se apasă butonul mic de pe modul, ledul începând să clipească cu intermitență;
modulul intră în modul AT cu un baud rate implicit de 9600 bps, această valoare poate fi modificată ulterior.
din monitorul serial al lui Arduino se seteaza "Both NL & CR".
Configurarea modulului Bluetooth este urmatoarea:
AT – verifica conexiunea – returnează OK;
AT+RESET – se resetează dispozitivul ;
AT+ROLE=0 – modulul e în modul de funcționare slave;
AT+PSWD – parola predefinită este 1234;
AT+ADDR – returnează adresa MAC a modulului, 98:D3:31:FB:6D:EF;
AT+UART=115200,1,0 – setează rata de transmisie la 115200 bps, 1 bit de stop și 0 de paritate;
AT+CMODE=1 – astfel dispozitivul Bluetooth se poate conecta la orice dispozitiv master.
Figura 3.14 – Formatul pachetelor de date transmise asincron prin Bluetooth
Nu am folosit bitul de paritate deoarece acesta încetinește transferul de date, iar o rată de transfer ridicată este un factor important în achiziția datelor provenite de la Smartmeter.
Conectarea modulului Bluetooth HC-05 prin intermediul instrumentului de control Toolbox Bluetooth al software-ului MATLAB R2015a va permite comunicația de date ASCII și binare. Interfața Bluetooth acceptă profilul portului serial (SPP) al modulului și stabilește o conexiune bidirecțională cu acesta.
Figura 3.14 – Toolbox Bluetooth MATLAB R2015a
Profilul portului serial definește cerințele pentru dispozitivele Bluetooth, necesare în configurarea conexiunii seriale prin cablu RS-232 peste legătura radio Bluetooth, acestea fiind emulate utilizând protocolul RFCOMM ( radio frequency communication ) între două dispozitive de tip peer. Protocolul RFCOMM suportă aplicații derivate din aplicațiile care utilizau portul COM pentru a realiza comunicații peer-to-peer.
CAPITOLUL 4 – REALIZAREA PRACTICĂ A UNUI SISTEM SMARTMETER
4.1 Proiectarea sistemului Smartmeter
Construirea Smartmeter se realizează utilizând componentele electronice prezentate în capitolul anterior.
Pentru determinarea tuturor parametrilor electrici ai fiecărei intrări sau ieșiri analogice a microcontrolerului, este necesară măsurarea doar a tensiunii, intensității curentului precum si momentul de timp la care se realizează măsurarea.
Următoarea diagramă arată pe scurt conceptul de programare al algoritmului ce sta la baza proiectării smartmeter-ului.
Figura 4.1 – Schema bloc generală a algoritmului Arduino
Un Smartmeter este construit pentru cercetare și pentru nevoia mai mare de analiză a parametrilor curentului electric consumat față de nevoia obișnuită a unui monitor de energie de a afișa consumul de energie electrică.
În continuare sunt prezentate câteva dintre caracteristicile sistemului Smartmeter:
Intrări multiple:
Se pot măsura toți parametrii electrici pentru intrarea utilitară și se poate face același lucru pentru mai multe sarcini electrice. Măsoară toți parametrii de încărcare: valoarea efectivă de tensiune, valoarea efectivă de curent, timpul de măsurare, puterea instantanee, puterea activă, puterea reactivă, puterea aparentă , factorul de putere, energia electrică consumată, frecvența, factorul de distorsiune, nivelul armonicilor ș.a.m.d.
Comunicații USB si wireless accesibile:
Este atât de ușor de interfațat și de asigurat o comunicație stabilă și sigură prin USB între smartmeter-ul bazat pe placa de dezvoltare Arduino Mega si computer. Am realizat o interfață grafică in MATLAB R2015a pentru a prelucra datele provenite de la Smartmeter prin intermediul comunicației Bluetooth. Comunicația se realizează între dispozitiv și laptop sau smartphone, fiind posibilă prin utilizarea modulului Bluetooth HC-05.
Comenzi terminale de asistență:
După ce se conecteaza smartmeter-ul la computer, se poate cere să se trimită orice măsurătoare de intrare sau ieșire prin intermediul monitorului serial. De exemplu se pot configura o serie de algoritmi în urma cărora prin tastarea unor comenzi se vor transmite toate măsurătorile din intrarea utilitară pe un afișor LCD cu touchscreen.
Monitor de energie:
Contorizează cantitatea de energie electrică [Wh] consumată de fiecare sarcină și pentru fiecare sursă. Se pot salva toate citirile, rezultate în urma măsurărilor, împreuna cu momentul la care s-a facut masuratoarea din momentul în care smartmeter-ul este pornit și până când se închide, precum și monitorizarea energiei consumate și alertarea prin email.
Plotarea datelor folosind MATLAB:
Se pot compila și analiza toate măsurătorile utilizând softw-ul MATLAB, Simulink, LabVIEW, tool-ul Serial Lab cu o modificare simplă și silențioasă, pur și simplu instalând pachetul de suport Arduino în MATLAB. În plus plotarea datelor este realizată și pe modulul LCD, dar și pe smartphone, interfațarea fiind fezabilă datorită conexiunii dispozitivului cu modulul Bluetooth HC-05.
Schema de principiu a realizării sistemului Smartmeter a fost proiectată în mediul de simulare software Fritzing și dispune de aceleași componente electronice ca și in realitate.
Figura 4.2 – Schema de montare a componentelor Smartmeter-ului
4.2 Analiza și interfațarea componentelor în sistemul de măsurare
4.2.1 Transformatorul de curent – Interfațarea în sistem
Senzorul de curent SCT-013-030 este prevăzut din fabrică cu o mufă jack audio, cu trei pini de ieșire: central, mijloc si cămașă. Din cele trei fire, doar doua sunt utile, conectate la bobina senzorului, al treilea nu este folosit. Pentru a-mi da seama care sunt cele doua fire folositoare am măsurat rezistența între acestea folosit un ohmetru. Perechea de fire folosită în circuit este cea între care se măsoră o rezistență de cateva sute de ohm , rezistența bobinei. Între oricare alte doua fire se măsoră o rezistență extrem de mare.
Pentru a conecta un senzor de curent la un Arduino, semnalul de ieșire de la CT trebuie să fie condiționat, astfel încât să îndeplinească cerințele de intrare ale intrărilor analogice Arduino, adică o tensiune pozitivă între 0V și tensiunea de referință a convertorului analogic-digital, ADC.
4.2.1.1 Analiza și calcularea parametrilor circuitului de curent
Calcularea unei mărimi adecvate a rezistorului de sarcină se realizează după urmatorii pași:
a) Alegerea gamei de măsurare a curentului
SCT-013-030 are un domeniu curent de 0 până la 30 A, astfel pentru a calcula rezistența de sarcină se alege valoarea maximă a gamei de măsură, 30 A.
b) Convertirea valorii efective a curentului maxim la valoarea de vârf prin înmulțirea cu .
(4.1)
c) Prin aplicarea relației pentru solenația de magnetizare (3.2.2), se împarte curentul de vârf la numărul de înfășurari din transformatorul de curent pentru a obține curentul de vârf în bobina secundară.
SCT-013-030 are 2000 de înfășurari, deci curentul secundar de vârf va fi:
(4.2)
d) Pentru a maximiza rezoluția de măsurare, tensiunea pe rezistența de sarcină la curentul de vârf ar trebui să fie egală cu jumătate din tensiunea de referință analogică Arduino, AREF / 2.
Placa de dezvoltare MEGA 2560 R3 funcționează la 5V, astfel AREF =5V. Rezultă că rezistența ideală la sarcină va fi:
Valoarea de 118 Ω nu este o valoare comună a rezistenței așa că am ales o rezistență100.
Pentru a mari rezoluția de măsurare a intensității curentului electric și pentru a evita saturarea convertorului analogic-digital al lui Arduino, în cazul unor fluctuații de tensiune, am ales o rezistență de sarcină de 1 kΩ.
Astfel, în acest caz valorea efectivă a curentului maxim este:
Figura 4.3 – Schema de circuit detaliată a senzorului de curent
Dacă nivelul de curent electric se situează deasupra valorii maxime a transformatorului, tensiunea de la intrarea analogică va depăși 5V, iar ADC-ul Atmega2560 va fi saturat. Un rezistor din seria 1kΩ este utilizat pentru a limita curentul de intrare în dispozitiv. Diodele interne ale Atmega2560 vor limita în mod sigur tensiunea, prevenind deteriorarea.
Prin marirea rezistenței de sarcină am caștigat o rezoluție mai mare a intensității curentului, dar a scăzut de 10 ori limita maximă a curentului pe care îl pot măsura.
Astfel, puterea maximă pe care o putem măsura este de:
Saturația și distorsiunile vor apărea dacă se depășește această putere limită.
Întrucât se dorește acoperirea majoritații consumatorilor electrocasnici, am decis să folosesc urmatoarea gamă de rezistențe de sarcină:100 Ω, 1kΩ, 2.2kΩ, 4.7kΩ și 10 kΩ rezultând urmatoarele limite de puteri măsurabile: 8550 W, 850 W, 390W, 185 W, 85 W.
Pentru a ajuta la protecția internă a circuitului, pe lângă rezistorul de sarcină am conectat un condensator de decuplare pentru a elimina componenta continuă a semnalului de intrare, asigurând astfel doar amplificarea componentei alternative, componentă utiă a semnalului de intrare.
Condensatorul de decuplare este folosit pentru a servi ca sursă de energie electrică în momentele în care circuitul comută între cele două stări logice, situații în care, pe timpul tranzițiilor, apare un consum ridicat de curent, respectiv o scădere a tensiunii la pinii de alimentare. Astfel, prezența condensatorului de decuplare face ca la nivelul circuitului să existe o mică sarcină stocată, care poate fi livrată la momentele de timp corespunzătoare. Lipsa condensatoarului de decuplare poate duce la o scădere semnificativă a tensiunii de alimentare pe timpul tranzițiilor.
Valoarea condensatorului ar trebui să fie suficient de mică pentru a nu interfera cu semnalul, dar cu cât capacitatea este mai mare , cu atât protecția tranzitorie va fi mai mare. Un semnal de frecvență mai mare va necesita un condensator mai mic pentru a evita interferența semnalului. Valoarea capacității de 10uF este potrivită în a reduce zgomotul și a stabiliza tensiunea de bias pentru măsurarea curentului electric la 50Hz.
Tensiunea dată de transformatorul de curent pe rezistorul de sarcină variază de la pozitiv la negativ în raport cu masa. Intrările analogice Arduino necesitând o tensiune pozitivă, am recurs la înjumătațirea tensiunii cu un divizor de tensiune alcătuit din două rezistoare de 160kΩ, centrând astfel tensiunea citită pe nivelul de 2.5V în loc de 0V. Tensiunea de ieșire a CT-ului va trece acum peste și sub nivelul de 2.5 V, rămânând pozitivă și putând fi astfel interpretată de convertorul analogic-digital al lui Arduino.
Calcularea coeficientului de calibrare a curentului electric se realizează prin raportul dintre numărul de înfașurări ale transformatorului și rezistența la sarcină.
Dacă se dorește creșterea sensibilității, implicit creșterea rezoluției de măsurare a intensității curentului electric, rezistența de sarcină poate fi modificată la o valoare mai mare de câțiva kiloohmi. Alternativ, rezistența de sarcină poate fi redusă la o valoare de cateva sute de ohmi pentru a crește domeniul de măsură către consumatori cu puteri mai mari, kilowați, dar scădea sensibilitatea măsurătorilor.
Din simulările efectuate am observat că odată cu creșterea valorii rezistenței de sarcină în scopul creșterii sensibilității și al rezoluției, eroarea de fază crește, în special pentru curenții mai mici.
4.2.1.2 Precizia efectuării măsurărilor
Din foaia de catalog a senzorului de curent reiese că un factor major care poate afecta în mod semnificativ precizia unui CT cu miez divizat este neliniarizarea miezului, ceea ce poate introduce un gol de aer. Chiar și un decalaj foarte mic ar putea duce la scăderea preciziei cu aproximativ 10% sau chiar mai mult și este însoțită de o schimbare de fază mare, deci este important să se asigure că fețele miezului magnetic sunt curățate și aliniate corespunzător la instalarea transformatorului. Pe lângă acest aspect mai trebuie luată în calcul și toleranța rezistenței de sarcină a transformatorului de curent, ce are o valoare standard de 1%. Toleranța t (%) reprezintă abaterea maxim admisă a valorii reale, măsurate, față de valoarea nominală marcată .
În tot circuitul, rezistorul de sarcină reprezintă singura componentă de scalare și este necesar pentru a transforma ieșirea CT-ului într-o tensiune ce se aplică intrării analogice a microcontrolerului Arduino. Valoarea rezistenței de sarcină este dependentă de temperatură, coeficientul de temperatură al rezistorului fiind de ± 100 ppm / ° C, ceea ce înseamnă că rezistența se poate modifica cu până la 0.25% pentru o schimbare a temperaturii ambiante cu 25 ° C.[11]
Întrucat convertorul analogic-digital al plăcuței de dezvoltare Arduino MEGA nu este perfect, acesta poate afișa eronat valori foarte mici ale intensității curentului atunci cand în circuit nu există nici un consumator .
Întrebările care pot să apară în acest caz sunt:
"De ce senzorul meu de curent citește x A atunci când în circuit nu există curent electric?";
"De ce Smartmeter-ul afișează y W când nimic nu este conectat la rețea?"
Trebuie precizat faptul că fiecare valoare din convertorul analogic-digital nu reprezintă o tensiune, ci o bandă de tensiuni. ADC-ul va măsura forma de undă în aproximativ 60 de eșantioane și dacă amplitudinea undei este suficient de mică, fiecare eșantion al formei de undă va avea valoarea 511, cum se arată în prima figură a valorilor medii ale eșantioanelor formei de undă.
Figura 4.4 – Valorile medii ale eșantioanelor formei de undă
În cazul în care totuși tensiunea de polarizare se scurge puțin în circuit, valoarea medie a eșantioanelor formei de undă se situează chiar deasupra tranziției de la 511 la 512, cum se arată în cadrul figurii 4.4 b). De această dată, când convertorul analogic-digital măsoară forma de undă, eșantioanele din prima jumătate a ciclului vor lua valoarea 512 și restul vor avea valoarea de 511. Procesul de eșantionare a transformat undă sinusoidală într-o formă dreptunghiulară, dupa cum putem observa și în figura 4.5.
Figura 4.5 – Citirea senzorilor în cazul neconectării niciunui consumator
Pe lângă precizia redusă a convertirii datelor provine de la senzorul de curent de către convertorului analogic-digital al microcontrolerului Atmega2560, pot apărea și alte erori de precizie provenite de la zgomotul digital generat de plăcuța de dezvoltare Arduino MEGA sau cauzate de zgomotul exterior ce apare în placa de circuit imprimat sau în cablaj.
Cu toate acestea, transformatorul de curent non invaziv SCT-013-030 este potrivit pentru utilizarea în cadrul proiectului întrucât poate dezvolta o tensiune suficientă pentru a utiliza în întregime rezoluția intrării analogice a microcontrolerului Arduino, iar distorsiunea formei de undă datorată saturației la această tensiune secundară este neglijabilă în scopul efectuării măsurătorilor normale ale aparatelor electrocasnice. Eroarea maximă de fază poate fi cu puțin peste 5 ° la rezistența de sarcină de 1kΩ și este nesemnificativă, reprezentând o eroare a factorului de putere mai mică de 0.0038.
4.2.1.3 Funcționarea convertorului analogic-digital
Atmega2560 dispune de o conversie analogică-digitală de aproximare succesivă pe 10 biți. ADC-ul este conectat la un multicadtru analogic cu 16 canale. Astfel tensiunea de intrare între 0 și 5V va fi mapată în valori întregi cuprinse între 0 și 1023. Această mapare oferă o rezoluție în citirea valorilor de:
5V/1024 unități, adică 0.0049V (4.9 mV) pe unitate.
Citirea intrărilor analogice se face cu funcția analogRead(), ce are ca parametru intrarea analogică corespunzatoare și returnează tensiunea citită pe aceasta. Este nevoie de aproximativ 100 de microsecunde (0.0001 s) pentru a citi o intrare analogică, deci rata maximă de citire este de aproximativ 10000 de ori pe secundă.[15]
Figura 4.6 – Schema bloc a convertorului analogic-digital
Conversia analogică-digitală presupune într-o primă fază selectarea unei intrări analogice a microcontroler-ului, putând fi activ oricare din cele 16 canale analogice de intrare, de la A0 la A15.
Canalul de intrare este conectat la un condensator, care se deschide odată cu începerea conversiei analogice. Comutatorul se deschide după 1,5 cicluri ADC (12 μs cu prescaler implicit de 128) astfel încât condensatorul să își păstreze citirea curentă, tensiunea de intrare putându-se schimba fără să afecteze rezultatul. Acest lucru este util pentru semnalele în tranziție rapidă, deoarece întreaga conversie poate dura 104 μs, în funcție de prescaler.
Pentru a determina tensiunea de ieșire, blocul logic aplică tensiunea de referință analogică, Aref, divizată de convertor digital-analogic, DAC, sub controlul logicii ADC. Ieșirea DAC este trimisă către comparator care determină dacă tensiunea de intrare este mai mare sau mai mică în comparație cu tensiunea de referință, în starea sa divizată. De exemplu, bitul de înaltă ordine (MSB) ar fi setat sau șters prin setarea DAC pentru a diviza tensiunea de referință cu 2 (adică 2.5V dacă ARef este 5V). Dacă intrarea este mai mare decât 2.5V, atunci bitul de înaltă ordine din rezultat este setat. Acest lucru necesită un ciclu ADC, 8 μs la prescaler standard de 128 cu o frecveță de funcționare de 16 MHz.
Pentru a obține următorul bit de rezultat, DAC va fi setat la pasul următor, adică 0,25 ARef sau 0,75 ARef în funcție de setarea sau nu a lui MSB, și urmează o altă comparație făcută. Acest proces este repetat pentru toți cei 10 biți.
4.2.2 Transformatorul de tensiune – Interfațarea în sistem
Rezistoarele R1 și R2 trebuie să fie alese astfel încât să se obțină o valoare de vârf a tensiunii de ieșire de aproximativ 1÷2 V în cazul adaptorului de alimentare AC-AC, ce are valoarea tensiunii nominale de 6V.
Întrucât doresc o valoare de vârf a tensiunii de ieșire de 1.5V, iar valoarea de vârf a tensiunii de intrare este de 8.5V, atunci prin alegerea valoarii rezistenței R1 de 10 kΩ rezultă o retistență R2 de 47 kΩ.
O combinație a valorii rezistențelor, luând in calcul si toleranța acestora, de 9.8kΩ pentru R1 și 46.4 kΩ pentru R2 dă o ieșire adecvată :
Tensiune de bias furnizată de reziszențele R3 și R4 ar trebui să fie jumătate din tensiunea de 5V furnizată de plăcuța Arduino, în concluzie R3 și R4 trebuie să fie egale. O valoare mai mare a rezistențelor reduce consumul de energie, dar crește zgomotul termic. Pentru smartmeter consumul redus de energie este important, deci am folosit reziszențele de 160 kΩ pentru rezistoarele R3 și R4.
În cazul în care placuța Arduino funcționează la 5V, forma de undă rezultată a circuitului are un vârf pozitiv de 2.5V + 1.5V = 4V și vârful negativ de 2.5V – 1.5V = 1V, satisfăcând necesitățile de tensiune la intrărea analogiceă a lui Arduino MEGA și lăsând un interval suficient, astfel încât să nu existe nici un risc de supratensiune sau sub tensiune.
Combinația rezisențelor 10kΩ și 47kΩ pentru R1 și R2 funcționează bine și pentru furnizarea tensiunii de 3.3V a placuței Arduino, cu un vârf pozitiv de 3.15V și un vârf negativ de 0.15V, satisfăcând de asemenea necesitățile de tensiune a intrării analogice a microcontrolerului.
Condensatorul C1 oferă o cale de impedanță redusă pentru semnalul de curent alternativ către masă. El reduce zgomotul indus de frecvența înaltă de funcționare a microcontrolerului.Valoarea capacității nu trebuie să fie critică, 10 μF fiind suficient de bună.
La proiectarea oricărui circuit este necesar să se ia în considerare variațiile inevitabile care apar ca parte a procesului de fabricație și care conduc la valoarea unei anumite caracteristici a componentei – rezistența rezistoarelor sau a tensiunii transformatoarelor – ce diferă de valoarea nominală marcată pe componente.
Pentru a permite cea mai bună utilizare a domeniului de măsurare a intrărilor analogice Arduino, tensiunea de intrare ar trebui să se rotească între 0V și tensiunea de alimentare, nominal +5V. Pentru a face acest lucru cu succes, trebuie să se ia în considerare cele mai grave condiții atunci când se efectuează calculele.
Tensiunea provenită de la rețeaua de alimentare nu este întotdeauna de 230V. În mod normal, tensiunea variază cu până la 10% pe fiecare parte a valorii nominale. Pentru siguranță, ar trebui să se utilizeze în calule cea mai mare tensiune posibilă, adică 253 V.
Adaptorul de tensiune nu funcționează la sarcină maximă, astfel că pentru tipul de adaptor utilizat în mod normal se adaugă 20-25% la tensiunea nominală.În cazul adaptorului de alimentare AC-AC de 6 V tensiunea nominală, se măsoară o valoare efectivă a tensiunii de ișire în gol de 8.1 V.
Sursa de tensiune a plăcuței Arduino, care este alimentată de la un acumulator extern, nu poate fi exact de 5 V. Ieșirea regulatorului de tensiune poate fi cuprinsă între 4.8 V și 5.2 V. Cel mai rău caz este atunci când tensiunea este mai mică de 5V, în urma masurătorii cu voltmetrul obținându-se 4.9V, valoare ce va fi folosită în calcule.
Din cauza toleranței fiecărui rezistor, rezistențele lanțului de polarizare ar putea să nu fie egale. Valoarea rezistenței fiecărui rezistor poate fi eronată cu 1%, cel mai rău caz fiind dacă acestea sunt modificate în direcții opuse, adică pentru R3 +1% iar pentru R4 -1% . În acest caz raportul de divizare va fi modificat cu 1%.
În cazul rezistențelor lanțului de separare cea mai defavorabilă situație este atunci când R2 este scăzut cu 1% și R1 este mai mare cu 1%. Rezistențele R1 și R2 fiind valori semnificativ diferite, tensiunea divizată va fi cu 2% mare. Presupunând că ambele rezistențe au aceleași proporții datorate variațiilor de temperatură, rezultă că raportul lor de divizare nu se schimbă din cauza temperaturii.
Toleranța frecvenței este de ± 0,02 Hz. Transformatoarele, atât de curent, cât și de tensiunea, vor avea pierderi ușor diferite și erori de fază, iar întârzierea măsurării tensiunii și curentului va fi, de asemenea, diferită, toate acestea implicând operații de filtrare pentru calibrarea fazelor.
Ce se întâmplă în practică?
Cel mai mare nivel de tensiune provenit de la rețeaua de alimentare este 230V + 6%, aproximativ 244 V. Adaptorul de tensiune purtând eticheta "Intrare: 230 V, ieșire 6 V", tensiunea de ieșire poate fi de 6 x 244 / 230 = 6.4V la care trebuie să adăugăm 20% deoarece transformatorul are ieșirea în gol, deci tensiunea de ieșire are valoarea efectivă de 8.1 V. Aceasta este, valoarea de vârf este
Tensiunea pe care o dorim la intrarea Arduino este de 4.9 V vârf-la-vârf, dar întreaga gamă este disponibilă numai dacă bias-ul este exact la punctul de mijloc de 2.45 V. Punctul de mijloc poate fi la fel de scăzut ca 2.426V sau la fel de mare ca 2.474V , deci tensiunea de vârf a curentului alternativ este limitată la 2.426V.
Alegând valoarile rezistențelor R1 și R2 de 10 kΩ respectiv de 47 kΩ, am observat că la măsurarea rezistoarelor cu un ohmetru se obțin rezistențele R1=9.8kΩ și R2=46.5 kΩ întrucât trebuie să se țină seama și de toleranța componentelor.
În cazul în care placuța Arduino funcționează la 5V, forma de undă rezultată a circuitului are un vârf pozitiv de 2.5V + 1.95V = 4.45V și vârful negativ de 2.5V – 1.95V = 0.55V, satisfăcând necesitățile de tensiune la intrărea analogiceă a lui Arduino MEGA și lăsând un interval suficient, astfel încât să nu existe nici un risc de supratensiune sau sub-tensiune.
Pentru a măsura tensiunea rețelei aceasta trebuie mai întâi “transformată” până la o tensiune sigură, apoi divizată înainte de a fi aplicată la una din intrările analogice ale microcontrolerului.
Pentru adaptorul de tensiune 240V AC in – 8.1V AC out:
-Raportul de transformare: Kt = 235 ÷ 8.1 = 28.74
-Raportul de divizare:
Constanta de calibrare a tensiunii este dată de produsul a celor două rapoarte:
CalibAC= Rt × Rd = 5.74 x 28.74= 164.96 (4.13)
Astfel putem calcula valoarea tensiunii furnizate de rețeaua de alimentare:
Figura 4.7 – Schema de circuit și formele de undă de tensiune
În sketch-ul Arduino calcularea valorii tensiunii furnizate de rețeaua de alimentare și a intensității curentului electric măsurat în circuit se implementează astfel:
U[Ne] = (5.0*analogRead(A0)/1024.0-2.5)*CalibAC; (4.16)
I[Ne]=(5.0*analogRead(A1)/1024.0-2.5)*CalibCT; (4.17)
Unde U[Ne] și I[Ne] reprezintă tensiunea instantanee a rețelei de alimentare respectiv valoarea instantanee a intensității curentului electric, Ne constituind eșantionul curent al celor două forme de undă.
Sursa relativ simplă a bias-ului de tensiune, utilizată în măsurarea tensiunii de curent alternativ cu adaptor de alimentare AC-AC, are unele limitări în cazul în care este necesară o precizie ridicată a valorilor citite pe intrarea analogică a microcontrolerului. Sursa de bias poate fi îmbunătățită prin adăugarea unui amplificator operațional care separă divizorul rezistiv ce înjumătățește tensiunea de referință a plăcuței Arduino și divizorul coborâtor de tensiune al adaptorului AC-AC. Acest lucru reduce semnificativ impedanța sursei de tensiune, rezultând o performanță îmbunătățită. Este necesar un singur amplificator operațional, senzorul de curent poate împărți bias-ul de alimentare și se poate conecta la ieșirea amplificatorului.Însă în simulările efectuate această metodă nu a adus nici o schimbare pozitivă întrucât sursa de alimentare este o baterie de 5V DC.
Dacă se dorește citirea puterii active și direcția de curgere a puterii – dacă se importă sau se exportă – atunci transformatorului de curent trebuie pus în direcția de curgere a curentului.Inversarea sensului transformatorului de curent va schimba semnul acelei intrări. Inversarea sensului transformatorului de tensiune va schimba semnul tuturor intrărilor.
Figura 4.8 – Inversarea sensului transformatorului de curent
Din figura 4.8 reiese că inversarea sensului transformatorului de curent va defaza forma de undă a semnalului de curent electric cu 180 față de forma de undă a semnalului de tensiune.
Utilizarea condensatorului de decuplare ajută la protecția internă a circuitului, eliminând componenta continuă a semnalului de intrare și asigurând astfel doar amplificarea componentei alternative a semnalului de intrare, componenta utiă.
Principala caracteristică a celor două condensatoare electrolitice de capacitate 10uF este de a stabiliza tensiunea de bias a celor două circuite ale senzorilor de tensiune și de curent, oferind semnalului de curent alternativ o cale de impedanță redusă la masă și reducând astfel zgomotul indus de frecvența înaltă de funcționare a microcontrolerului.
Distorsionarea formelor de undă ,cauzată de prezența zgomotului intern în lipsa celor două condensatoare din circuitele senzorilor, se evidențiază în cadrul figurii 4.9, în care se arată că parametrii electrici ai unui consumator de tip laptop sunt afectați de zgomot.
Figura 4.9 – Distorsionarea formelor de undă cauzate de zgomot
Fără a conecta condensatorul în circuitul senzorului de curent electric, forma de undă a intensității curentului electric în cazul unui bec cu incandescență de 60W arată astfel:
Figura 4.10 – Forma de undă de curent în lipsa condensatorului electrolitic
Pentru a reduce zgomotul se conectează condensatorul de 10uF între divizorul rezistiv și masă, observându-se ulterior că fluctuațiile de zgomot au dispărut, așa cum se arata în figura 4.11. Forma de undă de curent în prezența condensatorului electrolitic.
Figura 4.11– Forma de undă în prezența condensatorului electrolitic
Diferența este și mai mare în cazul unui bec economic de 11W în cazul căruia fluctuațiile de zgomot distorsionează în totalitate forma de undă a semnalului de curent.
Figura 4.12 – Forma de undă de curent a) în prezența condensatorului electrolitic; b) în lipsa condensatorului electrolitic
4.3 Interfațarea aplicațiilor și descrierea sistemului
4.3.1 Interfețele grafice
În primă instanță am realizat o interfață grafică în mediul grafic de dezvoltare al interfeței utilizatorilor MATLAB R2015a pentru a prelucra datele provenite de la Smartmeter prin intermediul comunicației Bluetooth. Comunicația se realizează între dispozitiv și laptop sau smartphone, fiind fezabilă datorită conexiunii dispozitivului cu modulul Bluetooth HC-05.
Codul de implementare Matlab al interfeței grafice “Smartmeter” se găsește în cadrul anexei 1.1 din capitolul Anexe.
Sketch-ul de implementare Arduino pentru achiziționarea și prelucrarea datelor provenite de la senzori, precum și configurării modulelor LCD cu touchscreen și Bluetooth se regăsește în cadrul anexei 1.2 a lucrării prezente. În sketch este realizată și interfața grafică a afișorului LCD, precum și configurarea microcontrolerului XPT2046 pentru funcționarea ecranului tactil.
Scenariul de funcționare este următorul: dispozitivul Smartmeter este alimentat de la un acumulator extern de 5V curent continuu. Senzorul de curent și transformatorul de tensiune sunt conectați la instalația de curent alternativ ce trebuie monitorizată.
Interfața Smartmeter-ului cuprinde ecranul de start și meniul principal, plus alte 3 pagini: Forme de undă, Monitor energie, Parametri electrici. Pentru alegerea oricărei opțiuni se apasă pe butonul corespunzător acesteia și se pote vizualiza pagina cu parametrii specifici opțiunii.
Figura 4.13 – Smartmeter cu transmisie Bluetooth
Pentru a transmite datele de la Smartmeter la laptop sau smartphone prin intermediul conexiunii Bluetooth, se apasă pe butonul “ON” din cadrul submeniului HC-05 Bluetooth. Din din submeniul HC-05 al interfeței grafice dezvoltate în Matlab R2015a se selectează butonul “Conectare”, iar dacă parola de audentificare a modulului Bluetooth a fost introdusă corect, se inițiază transmisia serială asincronă a datelor. În acest moment se pot analiza și monitoriza parametrii electrici specifici consumatorilor aflați în funcțiune.
Figura 4.14 – Meniuri Bluetooth HC-05 ale interfețelor grafice
Pe lângă afișarea valoarilor efective de tensiune și de curent, timpului de măsurare, puterea instantanee, puterea activă, puterea reactivă, puterea aparentă, factorul de putere, energia electrică consumată, prețul consumului de energie, frecvența semnalului, factorul de distorsiune al celor două forme de undă, nivelul armonicilor de curent, rata de transfer a datelor ș.a.m.d, sunt afișate formele de undă ale acestor parametri dar și filtrele FIR ce îmbunătațesc factorul de putere, curbele Lissajous de tensiune în funcție de curent, graficul mesh al formei de undă a curentului în funcție de tensiune și de timp.
Figura 4.15 – Interfața grafică în Matlab R2015 a sistemului Smartmeter
Monitorizarea consumului de energie electrică constă în atenționarea prin email/gmail a faptului că s-a depășit limita acceptată a energiei consumate, precum și trimiterea unui fișier Excel ce conține forma de undă a intensității curentului alternativ, energia electrică consumată, dar și momentele de timp la care s-au înregistrat parametrii respectivi.
Figura 4.16 – Atenționarea prin email a stării consumului de energie
Încapsularea sistemului Smartmeter într-un produs practic și complex din punct de vedere al măsurării parametrilor electrici și al monitorizării energiei electrice consummate, precum și interfațarea cu software-ul Matlab și sistemul de operare Android fac din acest sistem un dispozitiv esențial și de mare perspectivă în viitoarea casă inteligentă (smart home).
Figura 4.17 – Încapsularea sistemului Smartmeter
4.3.2 Realizarea aplicațiilor pentru smartphone
Figura 4.18 – Prezentarea sistemului Smartmeter
În cadrul anexei 1.3 se află codul QPython3, implementat pentru a interfața Smartmeter-ul cu smartphone-ul personal. Am creat trei aplicații smartphone pentru a optimiza și a face utilizarea Smartmeter-ului cat mai simplă ș accesibilă de pe orice dispozitiv.
Prima Aplicație pentru smartphone-ul Android a fost realizată utilizând software-ul de compilare QPython3. Codul îndeplinește funcția de stabilire a comunicării cu modulul Bluetooth, și citirea datelor transmise de Arduino. Pentru a realiza conexiunea Bluetooth este necesară adresa MAC a modulului Bluetooth HC-05 (98:D3:31:FB:6D:EF) și parola de conectare (1234).
Interfața grafică a fost dezvoltată în HTML fiind afișată într-un WebView ce se găsește în scriptul precizat în argumentul funcției droid.webViewShow(). Instrucțiunea eventWhite(1000) are ca rezultat așteptarea timp de o secundă a unui eveniment, de a ieși din terminal sau de a primi valoarile parametrilor energetici transmiși de dispozitivul Smartmeter, pe care îi va adăuga ca eveniment în coada pentru afișare în interfața grafică.
Citirea valorii energiei electrice consumate și ai celorlalți parametri electroenergetici ai consumatorilor monitorizați se realizează prin apelarea funcției droid.bluetoothReadLine().result
Dacă valoarea citită a energiei depașește 2Wh atunci se va trimite automat un mail de înștiințare a atingerii energiei de prag.
Folosind HTML ca mecanism de afișare, acesta poate fi generat sau creat folosind orice editor de text și apoi lansat utilizând funcția de apel API webViewShow. Codul HTML include interfața de afișare și javascript-ul care interacționează cu scriptul QPython3. Am ales să folosesc HTML deoarece prezintă funcții mai detaliate pentru interfața grafică cum ar fi selectarea culorii, fontului și afișării interactive. Funcția document.getElementById() returnează un element (Element), reprezentând elementul al cărui id corespunde șirului specificat. Deoarece ID-urile elementelor trebuie să fie unice dacă sunt specificate, ele sunt o modalitate utilă de a obține rapid accesul la un anumit element.
Codul pentru trimiterea email-ului de monitorizare a energiei este unul foarte simplu. Se apelează funcția API sendEmail ce are 3 parametri: adresa/lista cu destinatari, titlul și mesajul separate prin virgulă. Serviciul SMTP Gmail trimite mesajele noastre, iar biblioteca smtplib conține un număr mare de funcții ce ne pot ajuta.
Figura 4.19 – Aplicația smartphone de monitorizare energie consumate
O altă aplicație pentru smartphone a fost realizată în mediul de dezvoltare online a aplicațiilor mobile pentru sistemul de operare Android, MIT App Inventor 2. Crearea aplicațiiei a fost posibilă prin interconectarea blocurilor de funcții logice în cadrul interfețelor predefinite, algoritmul fiind prezentat în cadrul anexei 1.4.
Principiul de funcționare este următorul: mai întâi se conectează smartphone-ul la modulul Bluetooth HC-05 al dispozitivului Smartmeter, fiind necesară adresa MAC a modulului Bluetooth HC-05 (98:D3:31:FB:6D:EF), precum și parola de conectare (1234). Se afișează în timp real forma de undă a intensității curentului alternativ împreună cu parametrii electroenergetici ai consumatorului monitorizat, așa cum se prezintă în cadrul figurii 4.19.
Figura 4.20 – Aplicația a II-a a sistemului Smartmeter pe Android
A treia aplicație smartphone este una destul de simplă dar utilă, întrucât afișează în timp real formele de undă de tensiune și curent, precum și puterea activă, reactivă și energia consumată de sarcină.
Figura 4.21 – Aplicația a III-a a sistemului Smartmeter pentru Android
Aplicațiile prezentate au rolul de a asigura flexibilitatea și simplitatea utilizării sistemului Smartmeter, astfel încât să poată fi folosit de către orice persoană indiferent de vârstă, prin furnizarea unui feedback legat de utilizarea consumului energetic, precum și afișarea și înregistrarea diverșilor parametri electrici.
CAPITOLUL 5 – METODE DE OPTIMIZARE A CONSUMULUI ENERGETIC
5.1 Optimizarea consumului energetic
Pentru a se evita supratensiunile sau subtensiunile sistemului trebuie să se țină cont, în mod special, pe lânga puterea maximă admisă și de raportul dintre puterea activă și puterea reactivă a consumatorilor.
Metodele de optimizare ale consumului energetic studiate sunt:
– Compensarea factorului de putere;
– Filtrarea armonicilor de curent.
Compensarea factorului de putere
Un factor de putere mic respectiv o putere reactivă mare se traduc în valori nejustificate ale consumului de energie electrică. Pentru a nu consuma inutil energie, trebuie ca unghiul de fază, φ, sa fie cât mai apropiat de valoarea 0.
Îmbunătățirea factorului de putere contribuie la creșterea randamentului sistemului, asigurând o utilizare mai eficientă a energiei electrice prin diminuarea puterii aparente a consumatorului respectiv. Practic odată cu îmbunătățirea factorului de putere, curentul care circulă prin sistem scade, pentru aceeași încărcare a rețelei.
Filtrarea armonicilor de curent
Este important de amintit faptul că, în special atunci când este conectată o sarcină monofazată, neliniară, pentru rețelele de 50 Hz, apar armonici începând cu frecvența de 100 Hz și depășind frecvența de 1 kHz, încât rezultă un câmp larg de rezonanțe care pot fi excitate.Rezonanța unui circuit este acea stare a sistemului, în care între sursă și rețea nu are loc schimb de putere reactivă.[6]
Prin eliminarea pe cât posibil a armonicilor caracteristice unui regim deformant, se eficientizează într-o mare măsură consumul energetic și în aceleași timp se elimină și efectele care au un impact negativ asupra calității energiei electrice. Filtrarea armonicilor se referă practic la eliminarea pe cât posibil a tuturor formelor de undă, altele decât fundamentala și armonica a treia, prezente în sistemul de distribuție al energiei electrice. Filtrarea va atenua spectrul armonic și va îmbunătăți factorul de putere.
Metoda prin care se încearcă optimizarea consumului energetic se bazează pe compensarea puterii reactive și pe filtrarea armonicilor din sistemul de distribuție al consumatorului.
Pentru factorul de putere, puterea reactivă și ceilalți parametri electrici s-au efectuat seturi de măsurători în care, pentru acești parametri s-a monitorizat evoluția la filtrarea armonicilor de ordin superior.
În figura 5.1 sunt reprezentate caracteristicile unui consumator de tip laptop înainte de filtrarea armonicilor celor două forme de undă de tensiue și curent.
Figura 5.1 – Parametrii electrici ai laptopului înainte de filtrarea armonicilor
Se observă că puterea reactivă este comparabilă cu cea activă, factorul de putere fiind 0.86. După implementarea filtrelor FIR pentru optimizarea factorului de putere, prezentate în figura 5.2, spectrele de tensiune și de curent cu armonicile de ordin superior filtrate sunt reprezentate în figura 5.3.
Figura 5.2 – Filtre FIR pentru optimizarea factorului de putere
După cum era de așteptat, în urma compensării factorului de putere prin luarea în considerare doar a amonicilor de curent semnificative, forma de undă de curent reduce defazajul față de tensiune, astfel factorul de putere a fost îmbunătățit de la 0,86 la 0,94, figura 5.4. Puterea activă a crescut de la 24 W la 31.6 W în pofida puterii reactive, care a scăzut de la 14 VAR la 11 VAR.
Figura 5.3 – Spectrele de tensiune și de curent filtrate
Figurile Lissajous sau curbele Lissajous de tensiune în funcție de curent sunt curbele în planul x-y obținute prin luarea formei tensiunii și curentului pentru a varia sinusoidal în raport cu timpul. Ele sunt numite după matematicianul francez al secolului al XIX-lea, Jules Antoine Lissajous.
După analizarea parametrilor din cadrul figurii 5.4 se observă că factorul de putere este unul ridicat, fapt datorat liniarității și simetriei curbei Lissajous , dar se constată existența unui mic defazaj între forma de undă a tensiunii și cea a curentului, întrucât cele două drepte orizontale ale figurii Lissajous nu se suprapun.
Figura 5.4 – Curba Lissajous după compensarea factorului de putere
După compararea parametrilor electroenergetici rezultă o clară îmbunătățire a acestora, ceea ce conduce în mod direct la eficientizarea consumului energetic al consumatorului analizat. Prin compararea valorilor acestor parametri, se poate concluziona că metoda de compensare a factorului de putere prin filtrarea armonicilor de curent este cea corectă iar modul de implementare a fost bine ales.
În figura 5.5 este reprezentat mesh-ul formei de undă a curentului în funcție de tensiunea aplicată la bornele circuitului și de timp.
Figura 5.5 – Grafic mesh I(U,t)
5.2. Monitorizarea puterii reactive și a factorului de distorsiune
Apariția puterii reactive, în mod obișnuit putere reactivă inductivă (Q>0), determină o parte a energiei pe linie care nu este transmisă de la sursă la sarcină. În unele intervale de timp, tensiunea și curentul electric au polarități diferite, cele două forme de undă fiind defazate cu 90. Întrucât forma de undă a intensității curentului alternativ urmărește mereu forma de undă a tensiunii, intensitatea curentului va fi defazată cu 90 față de tensiunea aplicată la borne. Singurul lucru rămas pentru a disipa puterea într-o sarcină reactivă este partea rezistivă a impedanței de sarcină.
Puterea instantanee transferată se obține ca produsul dintre suma armonicilor de curent și suma armonicilor de tensiune de pe linie. În cadrul armonicilor de tensiune se ia în considerare, pe langă fundamentală, doar armonica a treia, restul armonicilor fiind nesemnificative, întrucât forma de undă de tensiune este aproape pur sinusoidală. Se poate observa că ariile suprafețelor de deasupra axei absciselor sunt mult mai mari decât cele de sub axă, ceea ce semnifică faptul că energia transferată este pozitivă, în acest fel armonicele de curent transferă putere utilă.
Din figura 5.6 reiese faptul că există mai multă putere absorbită de sarcină decât este returnată sursei de alimentare, care apare datorită reactanței inductive. Dezechilibrul dintre puterea pozitivă și cea negativă se datorează energiei disipată de rezistență în afara circuitului, de obicei sub formă de căldură
Figura 5.6 – Puterea instantanee a unui laptop
Comparând forma de undă a puterii instantanee a unui laptop cu cea a unui bec cu incandescență se observă că există diferențe mari între cei doi consumatori cum ar fi că forma de undă a puterii instantanee a becului nu coboară niciodată sub nivelul de 0 iar aceasta se apropie de cea sinusoidală, aspecte ce se regăsesc în valoarea mică a puterii reactive în comparație cu cea activă. Toate acestea duc spre un factor de putere ideal și un consum optim de energie, așa cu se poate observa și în figura 5.7.
Figura 5.7 – Puterea activă și reactivă a unui bec cu incandescență
În acest caz, forma de undă a puterii active este întotdeauna pozitivă, niciodată nu coboară sub valoarea de 0 pentru un circuit rezistiv. Aceasta înseamnă că puterea activă este întotdeauna disipată de sarcina rezistivă și nu este returnată niciodată la sursă, așa cum este cazul în sarcinile reactive.
5.2.1. Reglementările standardului IEC
Reglementările standardului IEC ( International Electrotechnical Commission) privind caracteristicile parametrilor electrici ai unui consumator liniar sunt prezentate și comparate cu rezultatele obținute în cadrul tabelului 5.1.
Tabel 5.1 – Evaluarea parametrilor unui consumator liniar conform standardului IEC
În cadrul formei de undă a puterii reactive a becului cu incandescență, așa cum reiese din cadrul figurii 5.7, ariile suprafețelor de deasupra și de sub nivelul de 0 sunt aproximativ egale, rezultând o valoare a puterii reactive ce tinde spre zero și un factor de putere aproape de 1.
Acest lucru se schimbă în cadrul formei de undă a puterii reactive a laptopului, aceasta având ariile suprafețelor de sub nivelul de 0 aproape nesemnificative, deci rezultă o putere reactivă mult mai mare, inductivă, comparativ cu cea a becului cu incandescență.
Caracteristicile parametrilor electrici ai unui consumator neliniar sunt prezentate și comparate cu reglementările standardului IEC în cadrul tabelului 5.2.
Figura 5.8 – Puterea reactivă a laptopului
Deoarece armonicile determină pierderi suplimentare, tensiunea de la rețeaua de alimentare nu poate fi perfect sinusoidală. Acest lucru ar fi imposibil, deoarece atunci când circulă un curent cu frecvența de 150 Hz, el determină o oarecare cădere de tensiune, activă și chiar reactivă de aceeași frecvență, 150 Hz. Atâta timp cât curentul electric include frecvențe suplimentare, tensiunea va cuprinde componente de o anumită amplitudine, cu aceleași frecvențe, ceea ce se poate observa în figura 5.9.
Figura 5.9 – Armonica a treia de curent la frecvența de 150 Hz
Numai dacă atât tensiunea cât și curentul cuprind aceeași frecvență poate să rezulte putere activă, pe această frecvență. Rezistența existentă în circuit determină căderi ale tensiunii în fază cu forma de undă a curentului și de aceea apare o putere activă pentru orice fel de de curent care o parcurge: activ, reactiv sau armonic.
Tabel 5.2 – Evaluarea parametrilor unui consumator neliniar conform standardului IEC
În urma analizei evaluării parametrilor unui consumator neliniar conform standardului IEC se observă că regimul deformant al acestui tip de consumator neliniar este foarte puțin influențat de amplitudinea armonicilor de tensiune, acestea reprezentând un procent nesemnificativ din amplitudinea fundamentalei.
În schimb situația se schimbă în cazul distorsiunii date de amplitudinea armonicilor de curent care depășesc limitele impuse în cadrul standardului IEC.
Există mulți parametri care pot fi măsurați în ceea ce privește utilizarea energiei electrice în sistemele de curent curent alternativ, fiecare dintre aceștia având meritele sale. Dar pentru măsurarea energiei consumate în propria locuiță, puterea activă poate fi considerată cea mai utilă mărime, deoarece ea arată cât de multă putere consumă toate aparatele electrice aflate în funcțiune, taxare realizându-se pe consumul de energie electrică al utilizării acestora.
În urma analizării figurii 5.10 se ajunge la concluzia că un circuit combinat rezistiv-reactiv disipă mult mai multă putere decât returnează la sursă, cu alte cuvinte puterea activă este mult mai mare decât puterea reactivă, astfel se asigură transferul de putere utilă.
Sarcina mixtă, ai cărei parametri sunt prezentați în figura de mai sus, este compusă dintr-o rezistență și o reactanță capacitivă, forma de undă de putere continuând să alterneze între pozitiv și negativ, dar cantitatea de putere pozitivă va depăși cantitatea de putere negativă. Tensiunea și curentul într-un astfel de circuit mixt vor fi defazate cu un unghi cuprins în intervalul 0 ÷ 90.
Figura 5.10 – Caracteristici circuit combinat de consumator rezistiv-reactiv
Forma de undă a curentului este distorsionată datorită armonicilor de rang superior, care au valori destul de mari. Factorul de distorsiune al tensiunii, THDU, este în medie de 2.1%, iar THD curent este în medie de 14.3%
După efectuarea analizei măsurătorilor și a comparării parametrilor monitorizați cu valorile impuse de standardele și reglementările de specialitate, se poate concluziona faptul ca regimul deformant al consumatorilor încă mai permite destul de multe îmbunatățiri dispozitivelor de măsurare și monitorizare.
PAGINĂ ALBĂ
CAPITOLUL 6 – DIFICULTĂȚI ÎNTÂMPINATE ÎN REALIZAREA PROIECTULUI
Din cauza constrângerilor tehnice, a echipamentelor și componentelor de cost redus, dispozitivul Smartmeter construit nu poate să aibă aceeași precizie ca cea a unui dispozitiv inteligent de măsură profesional, certificat și standardizat de către comisii speciale, pentru ca apoi să poată fi pus la vânzare de către proiectant.
În aceste condiții tehnice nu se poate menține același regim de funcționare pentru o perioadă mai lungă de timp, puterea reactivă variind cu ±1VAR. Rezultatele simulărilor au fost influențate și de fluctuația rețelei de alimentare, care a furnizat tensiuni de alimentare diferite de la 230V la 240 V.
Fiecare unitate de procesare are pe lângă merite și limitările sale, placa de dezvoltare MEGA 2560 R3 nefiind tocmai suficient de rapidă și fiabilă pentru achiziționarea și procesarea complexă a datelor provenite de la senzori.
Un alt minus îl constituie faptul că placa de dezvoltare Arduino MEGA2560 dispune de o conversie analogică-digitală pe 10 biți, rezoluția scăzută în citirea valorilor se datorează faptului că ADC-ul mapează o valoare relativ mică de eșantioane, 58, intr-o perioadă a semnalului. Astfel pentru reprezentarea formelor de undă filtrate cum ar fi forma de undă a tensiunii nu se observă riplurile datorate armonicii a treia, situată pe frecvența de 150 Hz, întrucât aceasta are amplitudinea foarte mică comparativ cu cea a fundamentalei.
Figura 6.1 – Schema demonstrativă a rezoluției mici a armonicii a treia
Frecvența semnalului nu este exact 50 Hz dar se înregistrează o valoare destul de apropiată, 49.9 Hz, la fel și în cazul valorilor efective ale tensiunii sau ale intensității curentului alternativ. În medie, semnalele lungi, ideal infinite in timp, generează aproximări mai bune ale parametrilor. Dar, întrucât dispozitivul Smartmeter achiziționează în cadrul fiecărui ciclu doar trei perioade ale semnalului, acestea sunt suficiente pentru aproximări cu o precizie ridicată ale parametrilor, însă nu exacte.
Ținând cont de diversitatea si multitudinea diverșilor consumatori electrici, gamele acestora de putere se dispun într-o marjă extinsă de valori, ceea ce constituie un alt dezavantaj pentru precizia și calitatea rezoluției de achiziționare a datelor. Pentru a obține rezultate precise și a avea o rezoluție și sensibilitate bună, rezistența de sarcină a transformatorului de curent ar trebui să varieze între 100 Ω și 10 kΩ. Astfel programarea unui potențiometru digital reprezenta o soluție optimă, însă în practică nu am reușit să acopăr gama de rezistețe dorită, neputând seta toate nivelele potențiometrului digital. Un alt neajuns a reprezentat-o lipsa pinilor necesari configurării potențiometrului digital, întrucât modulul LCD cu touchscreen și modulul Bluetooth au ocupt majoritatea pinilor de date ai plăcuței de dezvoltare Arduino Mega 2560.
CAPITOLUL 7 – CONCLUZII ȘI PERSPECTIVE DE DEZVOLTARE
7.1 Concluzii
În urma celor prezentate anterior se poate trage concluzia că obiectivele propuse prin tema de proiect, și anume proiectarea unui sistem inteligent de monitorizare în timp util al parametrilor electrici și consumului energetic al diferiților consumatori electrici, precum și realizarea și încapsularea fizică a sistemului Smartmeter, au fost îndeplinite cu succes.
Dispozitivul realizat permite achiziționarea și prelucrarea datelor provenite de la senzori, calcularea tuturor parametrilor electrici specifici fiecărui tip de consumator, afișarea datelor pe ecranul LCD al sistemului Smartmeter, asemenea unui contor inteligent, precum și transmiterea datelor prin intermediul comunicației Bluetooth către interfața grafică din software-ul Matlab pentru o analiză riguroasă a parametrilor electrici și a regimurilor de funcționare specifice consumatorilor respectivi. Se monitorizează consumul de energie electrică și se informează prin email starea actuală a sistemului, precum și statistica consumului energetic. Pentru a asigura flexibilitatea și simplitatea utilizării sistemului Smartmeter, astfel încât să poată fi folosit de către orice persoană indiferent de vârstă, am realizat trei aplicații smartphone ce au rolul de a furniza feedback legat de utilizarea consumului energetic, dar și de afișarea și înregistrarea diverșilor parametri electrici.
Pornind de la ideea că pentru a îmbunătăți substanțial un proces, trebuie să se facă cercetări și studii în detaliu, consider că este un mare avantaj pentru optimizarea consumului energetic dacă s-ar cunoaște de la bun început ce caracteristică, ce tip de consum și cum este clasificat un anumit consumator în funcție de standardele energetice. Astfel în cadrul capitolului doi am încercat să ofer o perspectivă asupra funcționalității și analizei regimurilor de funcționare specifice unui anumit tip de consumator, punând accentul în special pe regimurile de funcționare nesimetrice.
Prin implementarea metodelor de optimizarea a consumului energetic, s-a urmărit compensarea factorului de putere prin reducerea consumului puterii reactive, precum și filtrarea armonicilor de ordin superior ale formei de undă a curentului.
Pe baza referințelor de specialitate au fost analizate metodele de optimizarea a consumului energetic, s-a monitorizat puterea reactivă și factorul de distorsiune și a urmat o analiză detaliată a rezultatelor obținute. S-a concluzionat că amplitudinile curenților armonici determină mai multe probleme în rețeaua electrică decât puterea reactivă, încât este de prevăzut să se ia în considerare pierderile datorită armonicilor în aceeași proporție ca cele datorate puterii reactive fundamentale.
În urma documentării științifice, a realizării sistemului Smartmeter și a studiului măsurătorilor efectuate cu acesta, au rezultat următoarele contribuții personale:
– S-au analizat regimurile electroenergetice specifice caracteristicii de funcționare a consumatorilor electrici, pe baza studiului unui număr semnificativ de referințe din literatura de specialitate;
– S-a creat un sistem Smartmeter complex care măsoară, monitorizează și analizează parametrii electroenergetici ai consumatorilor electrici aflați în funcțiune, urmărindu-se explicarea utilizării și punctarea utilității acestui sistem.
– Pe baza analizelor și măsurătorilor efectuate s-a analizat eficiența metodei de optimizare a consumului energetic, care s-a dovedit benefică, observându-se o îmbunătățire a factorului de putere și o scădere a puterii reactive, diminuând astfel consumul energetic suplimentar.
După efectuarea acestor analize și a comparării parametrilor monitorizați cu valorile impuse de standardele și reglementările de specialitate, se poate concluziona faptul ca regimul deformant al consumatorilor încă mai permite destul de multe îmbunatățiri dispozitivului Smartmeter, de măsurare și monitorizare a parametrilor electrici.
7.2 Perspective de dezvoltare
Prezentul proiect poate fi îmbunătățit și extins în continuare, planurile de viitor în ceea ce privește dezvoltarea sistemului Smartmeter fiind multiple, atât din punct de vedere harware, cât și software.
Întrucât componentele electronice utilizate în cadrul proiectului de diplomă sunt în scop de cercetare, în funcție de bugetul alocat, sistemul poate fi îmbunătățit prin utilizarea unor componente electronice mult mai performante, care să permită achiziția datelor furnizate de senzori mult mai preciși, într-un timp mai scurt și cu o mai mare exactitate.
O altă idee de dezvoltare a proiectului ar fi încărcarea datelor furnizate de Smartmeter direct pe o pagină web și nu transmise prin Bluetooth, care este limitat de distanță conexiunii. Astfel se poate crea un site pe care datele să fie încărcate și care poate fi accesat de oriunde există conexiune la Internet prin intermediul unui nume de utilizator și a unei parole, oferind posibilitatea ca la o simplă accesare a acestei pagini web, fiecare utilizator poate urmări statistica consumului de energie, parametrii electrici etc. Dar poate fi implementat și un set de funcții care să furnizeze mai multe informații despre sistem, cum ar fi: înștiințarea dacă alimentarea este slabă, eficiența economică, reducerea pierderi de putere, securitata și siguranța alimentării cu energie electrică.
Monitorizarea parametrilor electrici poate fi afișată grafic și pe televizor, pentru aceasta fiind necesară instalarea bibliotecii TV pe placa de dezvoltare Arduino. Afișarea grafică a consumului de energie pe televizor este facilă pentru a observa statistica utilizării energiei cu o rată de actualizare relativ rapidă, ajutând astfel utilizatorul să optimizeze și să reducă costul excesiv al consumului energetic.
În viitor, rețeaua electrică va fi dublată de o rețea informatică, ceea ce va permite controlul tuturor dispozitivele conectate prin intermediul unei unice centrale de supervizare, echipată cu un pachet software de monitorizare a sistemului.
PAGINĂ ALBĂ
BIBLIOGRAFIE
Mihai Antoniu, Măsurări electronice, Vol.1,2,3, Editura SATYA, Iași, 2001,2002.
Iacobescu, GH., Iordănescu, I., Tudose, M. – Rețele și sisteme electrice, Ed. Didactică și Pedagogică, București, 1979
Jack Purdum, Beginning C for Arduino, Second Edition, 2015.
Agus Kurniawan, Arduino Programming using MATLAB, 1st Edition, 2015.
Emil, C., Iosif, V.N., Sergiu, C. – Low Voltage Power Quality at the Level of Harmonics -An Educational Perspective, EEA, 2011.
Popescu, S., Stan, C., Sotri, S., Cîrstea, D., – Optimizări în rețelele electrice. Ed. Macarie,Târgoviște, 2003.
Toader, C., Postolache, P., Porumb, R., – Influența factorilor de nesimetrie asupra pierderilor de putere și energie electrică regim armonic nesimetric. SNCEE Târgoviște, 2011.
Oprea, G. – Regimuri electroenergetice și mărimi caracteristice, Raport de cercetare doctorală, Universitatea Valahia Târgoviște, 2014.
https://create.arduino.cc/projecthub/Mr-Joe/smart-energy-monitor-based-on-arduino
C.Shanthi2- An Automated Energy Metering System – Home Based Approach Aswathy.
https://en.wikipedia.org/wiki/AC_power – Power in Resistive and Reactive AC circuits.
"Reactive Power". Continental Control Systems, LLC. Retrieved 4 April 2017.
Robert Wall B.Sc – A Report on the properties of the Yhdc Current Transformer , MIEE.
Arduino connected to an Android phone via Bluetooth (JY-MCU module) Ref.
https://www.arduino.cc/en/Main/Software
http://www.instructables.com/id/Simple-Arduino-Home-Energy-Meter/
http://crackeconcept.blogspot.com/2014/03/arduino-and-matlab-interfacing-via.html
Definition of Active Power – International Electrotechnical Vocabulary Archived April 23, 2015, at the Wayback Machine.
Arne Ellerbrock- Design and Building of a Cheap Smart Meter, Student Member.
PAGINĂ ALBĂ
ANEXE
Anexa 1.1
Codul de implementare Matlab al interfeței grafice “Smartmeter”:
Smartmeter.m
function Smartmeter_OpeningFcn(hObject, eventdata, handles, varargin)
d=[];
d=cellstr(datetime,'dd-MMM-yyyy HH:mm');
set(handles.datatime,'String', d);
handles.output = hObject;
guidata(hObject, handles);
function varargout = Smartmeter_OutputFcn(hObject, eventdata, handles)
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
varargout{1} = handles.output;
function Conectare_Callback(hObject, eventdata, handles)
port_bluetooth = instrfind('Type', 'bluetooth', 'Name', 'Bluetooth-HC-05:1', 'Tag', '');
%port_bluetooth = instrfind('Type', 'serial', 'Port', 'COM3', 'Tag', '');
if isempty(port_bluetooth) % verific daca port_bluetooth este o matrice goala
port_bluetooth = Bluetooth('HC-05', 1);
%port_bluetooth = serial('COM3');
else
fclose(port_bluetooth);
port_bluetooth = port_bluetooth(1);
end
a=[];c=[];m=[];mn=[];
i=1;indx=1;l=1;
I=[];d_m=[];
U=[];U3=[];
E=0;
Fp=0;
P_i=[];
timp=[];
Q=[];t=[];
stare=1;BaudRate=115200;
while stare
fopen(port_bluetooth);
%port_bluetooth.BaudRate=BaudRate;
if (port_bluetooth.Status=='open')
disp('Conectat')
stare=0;
set(handles.connected,'String', 'Conectat');
elseif (port_bluetooth.Status=='closed')
disp('Deconectat')
stare=1;
end
end
while (port_bluetooth.Status=='open')
d=cellstr(datetime,'dd-MMM-yyyy HH:mm');
set(handles.datatime,'String', d);
Su=0; Si=0;
Sp=0; Sp1=0;Sr=0;
S1=0; THDu=0; THDi=0;
a=str2num(fgets(port_bluetooth));
N=a(1);
for i=1:N
c=str2num(fgets(port_bluetooth));
U(i)=c(1);
I(i)=c(2);
t(i)=c(3);
mn=str2num(fgets(port_bluetooth)); mn=str2num(fgets(port_bluetooth));
end
E=str2num(fgets(port_bluetooth));
mn=str2num(fgets(port_bluetooth));mn=str2num(fgets(port_bluetooth));
mn=str2num(fgets(port_bluetooth));
T=t(end);
Ne=length(U);
dte=T/(Ne-1);
Fe=(1/dte).*1000;
set(handles.F_esantionare, 'String', Fe);
set(handles.BaudRate, 'String', BaudRate);
F=(1/T).*1000;
set(handles.frecventa, 'String', F);
set(handles.Ne, 'String', Ne);
TFU = abs(fft(U)/Ne);
TF_U=TFU(1:fix(Ne/2)+1);
TF_U(2:end-1)=2*TF_U(2:end-1);
TFI=abs(fft(I)/Ne);
TF_I=TFI(1:fix(Ne/2)+1);
TF_I(2:end-1)=2*TF_I(2:end-1);
f=F*(0:fix(Ne/2));
Ure=U;
for i=1:Ne
if (U(i)/max(U)==1)
jindex=i;
end
end
Ure=-[U(jindex:Ne), U(1:jindex-1)];
for i=1:Ne
if (I(i)/max(I)==1)
di=abs(jindex-i);
end
end
It=I;
It=[I(Ne-di+1:Ne), I(1:Ne-di)];
for i=1:Ne
if (It(i)/max(It)==1)
index=i;
end
end
Ir=-[It(index:Ne), It(1:index-1)];
%Filtrare armonici
fc1=5/(Fe/2);
fc2=95/(Fe/2);
yU1=fir1(300,[fc1 fc2],'bandpass');
Uh1=conv(U,yU1,'same');
TFUh1 = abs(fft(Uh1)/Ne);
TF_Uh1=TFUh1(1:fix(Ne/2)+1);
TF_Uh1(2:end-1)=2*TF_Uh1(2:end-1);
fc1=5/(Fe/2);
fc2=95/(Fe/2);
yI1=fir1(200,[fc1 fc2],'bandpass');
Ih1=conv(I,yI1,'same');
TFIh1 = abs(fft(Ih1)/Ne);
TF_Ih1=TFIh1(1:fix(Ne/2)+1);
TF_Ih1(2:end-1)=2*TF_Ih1(2:end-1);
for k=1:Ne
Su=Su+U(k).^2;
Si=Si+I(k).^2;
P_i(k)=U(k).*It(k);
Sp=Sp+P_i(k);
Sp1=Sp1+(Uh1(k).*Ih1(k));
end
Uef=sqrt(Su/Ne);
Ief=sqrt(Si/Ne);
P=Sp/Ne;
P1=Sp1/Ne;
set(handles.Irms, 'String',Ief );
set(handles.Vrms, 'String',Uef);
set(handles.P_a, 'String', P);
set(handles.E, 'String', E);
Pret=E*0.49/1000.; %1kWh=0.49 RON
set(handles.Price, 'String',Pret);
fc1=120/(Fe/2);
fc2=165/(Fe/2);
yU3=fir1(200,[fc1 fc2],'bandpass');
Uh3=conv(U,yU3,'same');
TFUh3 = abs(fft(Uh3)/Ne);
TF_Uh3=TFUh3(1:fix(Ne/2)+1);
TF_Uh3(2:end-1)=2*TF_Uh3(2:end-1);
TFUh = abs(fft(Uh1+Uh3)/Ne);
TF_Uh=TFUh(1:fix(Ne/2)+1);
TF_Uh(2:end-1)=2*TF_Uh(2:end-1);
THDu=(sqrt((Uh3/Uh1)^2))*1000;
set(handles.THDu, 'String', THDu);
fc1=105/(Fe/2);
fc2=195/(Fe/2);
yI3=fir1(300,[fc1 fc2],'bandpass');
Ih3=conv(I,yI3,'same');
TFIh3 = abs(fft(Ih3)/Ne);
TF_Ih3=TFIh3(1:fix(Ne/2)+1);
TF_Ih3(2:end-1)=2*TF_Ih3(2:end-1);
TFIh = abs(fft(Ih1+Ih3)/Ne);
TF_Ih=TFIh(1:fix(Ne/2)+1);
TF_Ih(2:end-1)=2*TF_Ih(2:end-1);
[~,i_max] = findpeaks(Uh1);
Ur1=[Uh1(i_max(1):Ne) , Uh1(1:(i_max(1)-1))];
Ur=U;
Ur(1:fix(Ne/4))=U(Ne-fix(Ne/4)+1:Ne);
Ur(fix(Ne/4)+1:Ne)=U(1:Ne-fix(Ne/4));
U3=[U, U, U];Urx=U3;
Urx(1:fix(length(U3)/12))=U3(length(U3)-fix(length(U3)/12)+1:length(U3));
Urx(fix(length(U3)/12)+1:length(U3))=U3(1:length(U3)-fix(length(U3)/12));
fc1=205/(Fe/2);
fc2=290/(Fe/2);
yI5=fir1(200,[fc1 fc2],'bandpass');
Ih5=conv(I,yI5,'same');
TFIh5 = abs(fft(Ih5)/Ne);
TF_Ih5=TFIh5(1:fix(Ne/2)+1);
TF_Ih5(2:end-1)=2*TF_Ih5(2:end-1);
fc1=305/(Fe/2);
fc2=390/(Fe/2);
yI7=fir1(200,[fc1 fc2],'bandpass');
Ih7=conv(I,yI7,'same');
TFIh7 = abs(fft(Ih7)/Ne);
TF_Ih7=TFIh7(1:fix(Ne/2)+1);
TF_Ih7(2:end-1)=2*TF_Ih7(2:end-1);
fc1=405/(Fe/2);
fc2=495/(Fe/2);
yI9=fir1(200,[fc1 fc2],'bandpass');
Ih9=conv(I,yI9,'same');
TFIh9 = abs(fft(Ih9)/Ne);
TF_Ih9=TFIh9(1:fix(Ne/2)+1);
TF_Ih9(2:end-1)=2*TF_Ih9(2:end-1);
fc1=510/(Fe/2);
fc2=590/(Fe/2);
yI11=fir1(200,[fc1 fc2],'bandpass');
Ih11=conv(I,yI11,'same');
TFIh11 = abs(fft(Ih11)/Ne);
TF_Ih11=TFIh11(1:fix(Ne/2)+1);
TF_Ih11(2:end-1)=2*TF_Ih11(2:end-1);
fc1=610/(Fe/2);
fc2=695/(Fe/2);
yI13=fir1(200,[fc1 fc2],'bandpass');
Ih13=conv(I,yI13,'same');
TFIh13 = abs(fft(Ih13)/Ne);
TF_Ih13=TFIh13(1:fix(Ne/2)+1);
TF_Ih13(2:end-1)=2*TF_Ih13(2:end-1);
fc1=715/(Fe/2);
fc2=790/(Fe/2);
yI15=fir1(200,[fc1 fc2],'bandpass');
Ih15=conv(I,yI15,'same');
TFIh15 = abs(fft(Ih15)/Ne);
TF_Ih15=TFIh15(1:fix(Ne/2)+1);
TF_Ih15(2:end-1)=2*TF_Ih15(2:end-1);
fc1=825/(Fe/2);
fc2=902/(Fe/2);
yI17=fir1(200,[fc1 fc2],'bandpass');
Ih17=conv(I,yI17,'same');
TFIh17 = abs(fft(Ih17)/Ne);
TF_Ih17=TFIh17(1:fix(Ne/2)+1);
TF_Ih17(2:end-1)=2*TF_Ih17(2:end-1);
fc1=935/(Fe/2);
fc2=1025/(Fe/2);
yI19=fir1(200,[fc1 fc2],'bandpass');
Ih19=conv(I,yI19,'same');
TFIh19 = abs(fft(Ih19)/Ne);
TF_Ih19=TFIh19(1:fix(Ne/2)+1);
TF_Ih19(2:end-1)=2*TF_Ih19(2:end-1);
THDi=sqrt(((Ih3+Ih5+Ih7+Ih9+Ih11+Ih13+Ih15+Ih17+Ih19)/Ih1)^2)*1000;
set(handles.THDi, 'String', THDi);
for i=1:Ne
Sr=Sr+(U(i).*Ir(i));
S1=(Ur1(i).*Ih1(i))+S1;
end
Q1=S1/Ne;
Q=Sr/Ne; %Q=sqrt(S^2-P^2);
set(handles.P_r, 'String', Q);
P_aprt=sqrt(P.^2+Q.^2);
set(handles.P_aparenta, 'String', P_aprt);
Fp=P/P_aprt;
set(handles.F_p, 'String', Fp);
P_aprt1=sqrt(P1^2+Q1^2);
DF=P1/P_aprt1;
defazaj=acos(Fp)*180/pi;
set(handles.defazaj, 'String', defazaj);
[Uah,~] = findpeaks(TF_U);
nhU=(Uah(2)/Uah(1))*100;
set(handles.niv_armcU, 'String', nhU);
[Iah,~] = findpeaks(TF_I);
nhI3=(Iah(2)/Iah(1))*100;
nhI5=(Iah(3)/Iah(1))*100;
nhI7=(Iah(4)/Iah(1))*100;
nhI9=(Iah(5)/Iah(1))*100;
nhI11=(Iah(6)/Iah(1))*100;
set(handles.niv_armcI, 'String', nhI3);
% d_m(indx)=E; indx=indx+1;
m=get(handles.monitorizare, 'value'); % Monitorizare energie
if(m==1) %xlswrite('SmartmeterBlt.xlsx', d, 'A2:A2'); xlswrite('SmartmeterBlt.xlsx',[I, d_m]','A2:C200');
if E>2 %E>2Wh
%Nu functioneaza pe WifiStudenti; protectie Web mail-Antivirusul trebuie dezactivat
set(handles.monitorizare,'value', 0);
email_user ='smartmeter.energy111@gmail.com';
email_send='smartmeter_energy@yahoo.com';
setpref('Internet','E_mail',email_user);
setpref('Internet','SMTP_Server','smtp.gmail.com');
setpref('Internet','SMTP_Username',email_user);
setpref('Internet','SMTP_Password','ipoteza111');
props = java.lang.System.getProperties;
props.setProperty('mail.smtp.auth','true');
props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl.SSLSocketFactory');
props.setProperty('mail.smtp.socketFactory.port','465');
text2=' Consum ridicat de energie!!! Valoarea energiei electrice înregistratã de Smartmeter a atins limita de: ';
text3=num2str(E);
text4=sprintf(' Wh! \n\n\n\n\n sent by Smartmeter_Matlab2015a R2');
mesaj=strcat(text2, text3, text4);
sendmail(email_send,…
'SMARTMETER R2',mesaj); % {'SmartmeterBlt.xlsx'});
end
end
subplot(2,2,1), plot(t,U,'b','linewidth',2);
title('Forma de undã de tensiune');
ylabel('Amplitudine');
xlabel('Timp [ms]');
grid on
axis on
xlim auto
ylim([-400 400]);
legend('U');
subplot(2,2,2), plot(t,I,'r','linewidth',2);
title('Forma de undã de curent');
ylabel('Amplitudine');
xlabel('Timp [ms]');
grid on
axis on
xlim auto
legend('I');
subplot(2,2,3), stem(f,TF_U,'b','linewidth',2);
title('Spectrul de tensiune');
xlabel('Frecventa');
ylabel('Magnitudine');
%xlim ([0 750]);
xlim auto
grid on
axis on
legend('FFT(U)');
subplot(2,2,4), stem(f,TF_I,'r','linewidth',1);
title('Spectrul de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
xlim auto;
grid on
axis on
legend('FFT(I)');
if(get(handles.button_P_a, 'value')==1)
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.buton_P_i,'value', 0);
Pactiva=[P_i/Ne,P_i/Ne,P_i/Ne];
subplot(1,1,1), plot(Pactiva,'y','linewidth',1);
set(gca,'color',[0 0 0],'GridColor','w');
title('Puterea activa');
ylabel('Amplitudine');
xlabel('Nr. esantioane');
lgd = legend('P activa'); lgd.TextColor='white';
grid on
axis on
end
if(get(handles.button_P_r, 'value')==1)
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_a,'value', 0);
set(handles.buton_P_i,'value', 0);
Qrp=(U.*Ir)/Ne; Qr=[Qrp, Qrp, Qrp];
subplot(2,2,1), plot(Qr,'y','linewidth',1);
set(gca,'color',[0 0 0],'GridColor','w');
title('Puterea reactiva');
ylabel('Amplitudine');
xlabel('Nr. esantioane');
lgd = legend('P reactiva'); lgd.TextColor='white';
grid on
axis on
subplot(2,2,3), plot(t,U,'b','linewidth',2);
title('Forma de undã de tensiune');
ylabel('Amplitudine');
xlabel('Timp [ms]');
grid on
axis on
xlim auto
ylim([-400 400]);
legend('U');
subplot(2,2,4), plot(Ir,'r','linewidth',2);
title('Forma de undã de curent defazata cu pi/2 ');
ylabel('Amplitudine');
xlabel('Nr. esantioane');
grid on
axis on
xlim auto
legend('Ir');
end
if(get(handles.Lissajous, 'value')==1)
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
set(handles.buton_P_i,'value', 0);
subplot(1,1,1), plot(U3,[It,It,It],'y','linewidth',3)
set(gca,'color',[0 0 0],'GridColor','w');
title('Curbe Lissajous');
ylabel('Curent');
xlabel('Tensiune');
lgd = legend('I(U)'); lgd.TextColor='white';
grid on
axis on
end
if(get(handles.mesh, 'value')==1)
subplot(1,1,1), plot3(t,meshgrid(U),I);
title('Grafic mesh');
ylabel('Tensiune');
xlabel('Timp');
zlabel('Curent');
grid on
axis on
end
if(get(handles.buton_P_i, 'value')==1)
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
subplot(1,1,1), plot(P_i,'y','linewidth',2);
set(gca,'color',[0 0 0],'GridColor','w');
title('Puterea instantanee');
ylabel('Amplitudine');
xlabel('Nr. esantioane');
lgd = legend('P instant'); lgd.TextColor='white';
grid on
axis on
elseif(get(handles.buton_Filtru, 'value')==1)
set(handles.buton_P_i,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
subplot(2,2,1), plot(yU1,'b','linewidth',1);
title('Filtru pentru armonica I de tensiune');
ylabel('Amplitudine');
grid on
legend('yU1');
subplot(2,2,2), plot(yU3,'m','linewidth',1);
title('Filtru pentru armonica a III-a de tensiune');
ylabel('Amplitudine');
grid on
legend('yU3');
subplot(2,2,3), plot(yI1,'r','linewidth',1);
title('Filtru pentru armonica I de curent');
ylabel('Amplitudine');
grid on
legend('yI1');
subplot(2,2,4), plot(yI3,'g','linewidth',1);
title('Filtru pentru armonica a III-a de curent');
ylabel('Amplitudine');
grid on
legend('yI3');
elseif(get(handles.buton_Armonici, 'value')==1)
set(handles.buton_P_i,'value', 0);
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
subplot(2,2,1), plot(f,TF_Uh,'b','linewidth',1);
title('Spectrul de tensiune filtrat');
xlabel('Frecventa');
ylabel('Magnitudine');
xlim auto;
grid on
axis on
legend('FFT(Uh1+Uh3)');
subplot(2,2,2), plot(f,TF_Ih,'r','linewidth',1);
title('Spectrul de curent filtrat');
ylabel('Magnitudine');
xlabel('Frecventa');
xlim auto;
grid on
axis on
legend('FFT(Ih1+Ih3)');
subplot(2,2,3), plot(f,TF_U,'b','linewidth',1);
title('Spectrul de tensiune');
xlabel('Frecventa');
ylabel('Magnitudine');
xlim auto;
grid on
axis on
legend('FFT(U)');
subplot(2,2,4), plot(f,TF_I,'r','linewidth',1);
title('Spectrul de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
xlim auto;
grid on
axis on
legend('FFT(I)');
elseif(get(handles.buton_Dfj_U, 'value')==1)
set(handles.buton_P_i,'value', 0);
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
subplot(2,2,3), plot([t, 20+t, 40+t],Urx ,'m','linewidth',2);
title('Forma de unda de tensiune defazata cu pi/2');
ylabel('Amplitudine');
xlabel('Timp [ms]');
grid on
axis on
ylim auto;
legend('Ur');
subplot(2,2,4), plot(t,Ir,'Color',[1 0.5 0],'linewidth',2);
title('Forma de unda de curent defazata cu pi/2');
ylabel('Amplitudine');
xlabel('Timp [ms]');
grid on
axis on
% xlim ([0 59]);
ylim auto;
legend('Ir');
elseif(get(handles.selectare_armonici, 'value')~=1)
set(handles.buton_P_i,'value', 0);
set(handles.buton_Filtru,'value', 0);
set(handles.buton_Armonici,'value', 0);
set(handles.buton_Dfj_U,'value', 0);
set(handles.button_P_r,'value', 0);
set(handles.button_P_a,'value', 0);
subplot(2,2,3), plot(f,TF_U,'b','linewidth',1);
title('Spectrul de tensiune');
xlabel('Frecventa');
ylabel('Magnitudine');
grid on
axis on
legend('FFT(U)');
subplot(2,2,4), plot(f,TF_I,'r','linewidth',1);
title('Spectrul de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(I)');
if(get(handles.selectare_armonici, 'value')==2)
subplot(2,2,1), plot(f,TF_Uh1,'b','linewidth',1);
title('Arminica I de tensiune');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Uh1)');
elseif(get(handles.selectare_armonici, 'value')==3)
subplot(2,2,1), plot(f,TF_Uh3,'b','linewidth',1);
title('Arminica a III-a de tensiune');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Uh3)');
elseif(get(handles.selectare_armonici, 'value')==4)
subplot(2,2,2), plot(f,TF_Ih1,'m','linewidth',1);
title('Arminica I de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih1)');
elseif(get(handles.selectare_armonici, 'value')==5)
subplot(2,2,2), plot(f,TF_Ih3,'m','linewidth',1);
title('Arminica a III-a de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih3)');
set(handles.niv_armcI, 'String', nhI3);
elseif(get(handles.selectare_armonici, 'value')==6)
subplot(2,2,2), plot(f,TF_Ih5,'m','linewidth',1);
title('Arminica a V-a de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih5)');
set(handles.niv_armcI, 'String', nhI5);
elseif(get(handles.selectare_armonici, 'value')==7)
subplot(2,2,2), plot(f,TF_Ih7,'m','linewidth',1);
title('Arminica a VII-a de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih7)');
set(handles.niv_armcI, 'String', nhI7);
elseif(get(handles.selectare_armonici, 'value')==8)
subplot(2,2,2), plot(f,TF_Ih9,'m','linewidth',1);
title('Arminica a IX-a de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih9)');
set(handles.niv_armcI, 'String', nhI9);
elseif(get(handles.selectare_armonici, 'value')==9)
subplot(2,2,2), plot(f,TF_Ih11,'m','linewidth',1);
title('Arminica a XI-a de curent');
ylabel('Magnitudine');
xlabel('Frecventa');
grid on
axis on
legend('FFT(Ih11)');
set(handles.niv_armcI, 'String', nhI11);
end
end
drawnow;
dec=get(handles.Deconectare, 'value');
if(dec==1)
disp('Deconectat')
set(handles.connected,'String', 'Deconectat');
fclose(port_bluetooth);
delete(instrfind('Type', 'bluetooth', 'Name', 'Bluetooth-HC-05:1', 'Tag', ''));
set(handles.Deconectare,'value', 0);
end
end
fclose(port_bluetooth);
function grafic_CreateFcn(hObject, eventdata, handles)
set(gca,'color',[0 0 0],'GridColor','w')
title('Smartmeter');
grid on
axis on
datacursormode on
Anexa 1.2
Sketch-ul de implementare Arduino pentru configurarea dispozitivului Smartmeter:
Smartmeter.ino
#include <UTFT.h>
#include <URTouch.h>
UTFT SMARTMETER (ILI9486,38,39,40,41);
URTouch Touch( 6, 5, 4, 3, 2);
#define N 140
int Ne,ne, i, j, k, l, index, jndex, flag, stare;
int treceri_0;
float Rs=4610.0; //997.0; //99.4; //2170.0; // 4600.0; //9870.0;
float U[N], I[N];
float Up[70], Ur[70];
float Ip[70], Ir[70], Ire[70];
float tc[N],te[70], tc_p[70];
float P_i[70];
float F,Uef, Ief, P, E, Ei,Pret,P_aprt, F_p, Q, dte, Fe;
unsigned long t, ti, tf, Dt;
int x,y,Input=0;
byte Sample[320], SampleI[320], OldSample[320],OldSampleI[320];
float StartSample = 0, EndSample = 0;
int Max = 0, Min = 500, mode = 0;
int dgvh, back=1;
int hpos = 105; //pune 0V pe orizontală
int vsens = 3; // mișcarea pe verticală
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
char currentPage;
void setup() {
Serial.begin(115200);
SMARTMETER.InitLCD();
SMARTMETER.InitLCD(LANDSCAPE);
SMARTMETER.clrScr();
Touch.InitTouch();
Touch.setPrecision(PREC_MEDIUM);
drawHomeScreen(); // Ecran de start
currentPage = '0'; // Pagina curentă-ecranul de start
}
void loop() {
// Home Screen
if (currentPage == '0') {
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX(); // returnează coordonata pe x unde a fost apăsat ecranul
y=Touch.getY(); // returnează coordonata pe y unde a fost apăsat ecranul
if ((x>=2) && (x<=315) && (y>=120) && (y<=160)) {
drawFrame(2, 120, 315, 160); // Evidențiere buton când este apăsat
currentPage = '1';
SMARTMETER.clrScr(); // Ștergere ecran
grafic();
}
if ((x>=2) && (x<=315) && (y>=170) && (y<=210)) {
drawFrame(2, 170, 315, 210);
currentPage = '2';
SMARTMETER.clrScr();
drawEnergie();
}
if ((x>=2) && (x<=315) && (y>=220) && (y<=260)) {
drawFrame(2, 220, 315, 260);
currentPage = '3';
SMARTMETER.clrScr();
drawParametri();
} } }
if (currentPage == '1') {
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX();
y=Touch.getY();
//Butonul de back
if ((x>=300) && (x<=330) &&(y>=1) && (y<=15)) {
drawFrame(300, 1, 330, 15);
currentPage = '0';
SMARTMETER.clrScr();
drawHomeScreen();
} } }
if (currentPage == '2') {
SMARTMETER.setFont(BigFont);
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.printNumF(E,5,130,145,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Wh ", 245, 145);
SMARTMETER.setFont(BigFont);
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.printNumF(Pret,5,130,220,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("RON ", 245, 220);
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX();
y=Touch.getY();
// Apăsare buton de back
if ((x>=10) && (x<=60) &&(y>=10) && (y<=36)) {
drawFrame(10, 10, 60, 36);
currentPage = '0';
SMARTMETER.clrScr();
drawHomeScreen(); // Ecran de start
} } }
if (currentPage == '3') {
SMARTMETER.setFont(BigFont);
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.printNumF(P,3,260,110,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("W ", 380, 110);
SMARTMETER.printNumF(Q,3,290,160,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("VAR ", 390, 160);
SMARTMETER.printNumF(P_aprt,3,290,210,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("VA ", 390, 210);
SMARTMETER.printNumF(F_p,3,290,260,46,3,48);
SMARTMETER.setFont(BigFont);
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX();
y=Touch.getY();
if ((x>=10) && (x<=60) &&(y>=10) && (y<=36)) {
drawFrame(10, 10, 60, 36);
currentPage = '0';
SMARTMETER.clrScr();
drawHomeScreen();
} } }
if (currentPage == '0') {
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX();
y=Touch.getY();
//ON HC-05
if ((x>=330) && (x<=400) && (y>=220) && (y<=260)) {
drawFrame(330, 220, 400, 260);
stare=1;
while(stare){
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.print("CONECTAT", 330, 270);
Calcul_arduino();
Serial.println(ne);
delay(1000);
for (j = 0; j < ne; j++){
Serial.print(Up[j] );
Serial.print(" ");
Serial.print(Ip[j]);
Serial.print(" ");
Serial.println((tc_p[j]-tc_p[0])/1000.,3);
Serial.println((String)" U " + Up[j] );
Serial.println((String)" I " + Ip[j] );
te[j]=(tc_p[j]-tc_p[0])/1000.;
}
delay (2500);
tf=micros();
Dt=tf-ti;
ti=tf;
//Serial.println(Dt/1000000.,5);
F=(1/te[ne-1])*1000.;
dte=te[ne-1]/(ne-1);
Fe=(1/dte)*1000;
float a=0,c=0, Sr=0; int b=0,d=0;;
for (j = 0; j < ne; j++){
a=max(Ip[j], a);
c=max(Up[j], c);
}
for (j = 0; j < ne; j++){
if(Ip[j]==a){
index=j;
}
if(Up[j]==c){
jndex=j;
} }
for (j = 0; j < ne-index; j++){
Ir[j]=Ip[index+j];
}
for (j = 0; j < ne-jndex; j++){
Ur[j]=Up[jndex+j];
}
for (j = ne-index; j < ne; j++){
Ir[j]=Ip[b];
b=b+1;
}
for (j = ne-jndex; j < ne; j++){
Ur[j]=Up[d];
d=d+1;
}
for (j = 0; j < ne; j++){
Ire[j]=-Ir[j];
Sr=Sr+(Up[j]*Ire[j]);
}
Q=Sr/ne;
float Su=0, Si=0, Sp=0;
for (j = 0; j < ne; j++){
Su=Su+pow(Up[j],2);
Si=Si+pow(Ip[j],2);
P_i[j]=Ur[j]*Ir[j];
Sp=Sp+P_i[j];
}
Uef=sqrt(Su/ne);
Ief=sqrt(Si/ne);
P=Sp/ne;
//E= E + P*(Dt/1000000.); //W*s
Ei=P*((Dt/1000000.)/3600.);
if(isnan(Ei)){
Ei=0.00;
}
if(isnan(P)){
P=0.00;
}
E= E +Ei; //Wh
Pret=E*0.49/1000.; //1kWh=0.49 RON
P_aprt=sqrt(pow(P,2)+pow(Q,2));
F_p = P/P_aprt;
if(isnan(Q)){
Q=0.00;
}
if(isnan(P_aprt)){
P_aprt=0.00;
}
if(isnan(F_p)){
F_p=0.00;
}
Serial.println(E,5);
Serial.println((String)" P " + "Puterea activa: " + P +" W" );
Serial.println((String)" Q " + "Puterea reactiva: "+ Q +" VAR" );
Serial.println((String)" E " + "Energie consumata: "+ E +" Wh" );
delay(100);
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX(); // X coordinate where the screen has been pressed
y=Touch.getY(); // Y coordinates where the screen has been pressed
if ((x>=405) && (x<=475) && (y>=220) && (y<=260)) {
drawFrame(405, 220, 475, 260);
stare=0;
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.print("DECONECTAT", 320, 270);
delay(100);
SMARTMETER.clrScr();
drawHomeScreen();
}}}}}}
Calcul_parametri();
delay(2000);
}
void Calcul_arduino(){
ti=micros();
Ne=0;
t=micros();
do {
Ne=Ne+1;
U[Ne] = (5.0*analogRead(0)/1024.0-2.5)*28.74*5.74;
I[Ne]=(5.0*analogRead(1)/1024.0-2.5)*2000.0/Rs; //997.0; //99.4; //2170.0; // 4600.0; //9870.0;
tc[Ne]=(micros()-t);
}while (tc[Ne]<=40000);
flag=0;
treceri_0=0;
ne=0;
for (i=0;i<Ne;i++){
if (U[i]<0 and U[i+1]>=0){
flag=1;
treceri_0=treceri_0+1;
}
if ((flag==1)and(treceri_0<2)){
Up[ne]=U[i+1];
Ip[ne]=I[i+1];
tc_p[ne]=tc[i+1];
ne=ne+1;
}
if ((flag==1)and(treceri_0>=2)){
flag=0;
Up[ne]=U[i+1];
Ip[ne]=I[i+1];
tc_p[ne]=tc[i+1];
ne=ne+1;
}
}
}
void Calcul_parametri(){
Calcul_arduino();
tf=micros();
Dt=tf-ti;
ti=tf;
dte=te[ne-1]/(ne-1);
Fe=(1/dte)*1000;
F=(1/te[ne-1])*1000.;
for (j = 0; j < ne; j++){
te[j]=(tc_p[j]-tc_p[0])/1000.;
}
float a=0,c=0, Sr=0; int b=0,d=0;;
for (j = 0; j < ne; j++){
a=max(Ip[j], a);
c=max(Up[j], c);
}
for (j = 0; j < ne; j++){
if(Ip[j]==a){
index=j;
}
if(Up[j]==c){
jndex=j;
}
}// Defazare forme de undă cu 90 grade
for (j = 0; j < ne-index; j++){
Ir[j]=Ip[index+j];
}
for (j = 0; j < ne-jndex; j++){
Ur[j]=Up[jndex+j];
}
for (j = ne-index; j < ne; j++){
Ir[j]=Ip[b];
b=b+1;
}
for (j = ne-jndex; j < ne; j++){
Ur[j]=Up[d];
d=d+1;
}
for (j = 0; j < ne; j++){
Ire[j]=-Ir[j];
Sr=Sr+(Up[j]*Ire[j]);
}
Q=Sr/ne;
float Su=0, Si=0, Sp=0;
for (j = 0; j < ne; j++){
Su=Su+pow(Up[j],2);
Si=Si+pow(Ip[j],2);
P_i[j]=Ur[j]*Ir[j];
Sp=Sp+P_i[j];
}
Uef=sqrt(Su/ne);
Ief=sqrt(Si/ne);
P=Sp/ne;
if(isnan(P)){
P=0;
}
//E= E + P*(Dt/1000000.); //W*s
Ei=P*((Dt/1000000.)/3600.);
if(isnan(Ei)){
Ei=0;
}
E= E +Ei; //Wh
Pret=E*0.49/1000.; //1kWh=0.49 RON
P_aprt=sqrt(pow(P,2)+pow(Q,2));
delay(100);
}
void drawHomeScreen() {
// Titluri
SMARTMETER.setBackColor(0,0,0); // background negru
SMARTMETER.setColor(255, 255, 255); // setează culoarea alb
SMARTMETER.setFont(BigFont); // Sets font to big
SMARTMETER.print("* SMARTMETER R2 *", CENTER, 10);
SMARTMETER.setColor(255, 0, 0); // roșu
SMARTMETER.drawLine(0,32,480,32); // linie roșie
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(SmallFont);
SMARTMETER.print("Author:stud.plt.maj. RADOI Mihai", LEFT, 41);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Selectare optiune", CENTER, 80);
// Buton – Afisare forme de unda
SMARTMETER.setColor(16, 167, 103);
SMARTMETER.fillRoundRect (2, 120, 315, 160); // perimetru buton
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (2, 120, 315, 160);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(16, 167, 103);
SMARTMETER.print("Forme de unda", 23, 130);
// Buton – Monitor energie
SMARTMETER.setColor(16, 167, 103);
SMARTMETER.fillRoundRect (2, 170, 315, 210);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (2, 170, 315, 210);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(16, 167, 103);
SMARTMETER.print("Monitor energie", 23, 180);
// Buton – Parametri electrici
SMARTMETER.setColor(16, 167, 103);
SMARTMETER.fillRoundRect (2, 220, 315, 260);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (2, 220, 315, 260);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(16, 167, 103);
SMARTMETER.print("Parametri electrici", 5, 230);
// Buton – HC-05
SMARTMETER.setColor(50, 100, 255);
SMARTMETER.fillRoundRect (330, 165, 475, 215);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (330, 165, 475, 215);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(50, 100, 255);
SMARTMETER.print("HC-05", 363, 175);
SMARTMETER.setFont(SmallFont);
SMARTMETER.print("BLUETOOTH", 366, 198);
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.fillRoundRect (330, 220, 400, 260);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (330, 220, 400, 260);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(0, 255, 0);
SMARTMETER.print("ON", 350, 230);
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.fillRoundRect (405, 220, 475, 260);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.drawRoundRect (405, 220, 475, 260);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(255, 0, 0);
SMARTMETER.print("OFF", 415, 230); //
}
void drawFrame(int x1, int y1, int x2, int y2) {
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.drawRoundRect (x1, y1, x2, y2);
while (Touch.dataAvailable()){
Touch.read();
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.drawRoundRect (x1, y1, x2, y2);
}
}
void drawgrafic() {
SMARTMETER.setColor( 0, 200, 0);
for( dgvh = 0; dgvh < 4; dgvh ++){
SMARTMETER.drawLine( dgvh * 50, 0, dgvh * 50, 150);
SMARTMETER.drawLine( 0, dgvh * 50, 241 ,dgvh * 50);
}
SMARTMETER.drawLine( 200, 0, 200, 150);
SMARTMETER.drawLine( 241, 0, 241, 150);
SMARTMETER.setColor(100, 155, 203);
SMARTMETER.fillRoundRect (300, 1, 330, 15);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.drawRoundRect (300, 1, 330, 15);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(100, 155, 203);
SMARTMETER.setColor( 0, 0, 0);
SMARTMETER.setBackColor(255,255,255);
SMARTMETER.print("<-", 300, 1);
SMARTMETER.setFont(SmallFont);
SMARTMETER.print("Back to Main Menu", 340, 1);
SMARTMETER.setColor(0, 0, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Frecventa:", 280, 70);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Tensiune efectiva:", 10,185);
SMARTMETER.print("Curent efectiv:", 10, 225);
SMARTMETER.print("F esantionare:", 20, 265);
}
void drawEnergie(){
SMARTMETER.clrScr();
SMARTMETER.setColor(100, 155, 203);
SMARTMETER.fillRoundRect (10, 10, 60, 36);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.drawRoundRect (10, 10, 60, 36);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(100, 155, 203);
SMARTMETER.print("<-", 18, 15);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setFont(SmallFont);
SMARTMETER.print("Back to Main Menu", 70, 18);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("* Smartmeter R2 *", CENTER, 50);
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.drawLine(0,80,480,80);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Energie consumata:", 10, 110);
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.drawLine(0,80,480,80);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Pret consum:", 10, 190);
}
void drawParametri() {
SMARTMETER.clrScr();
SMARTMETER.setColor(100, 155, 203);
SMARTMETER.fillRoundRect (10, 10, 60, 36);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.drawRoundRect (10, 10, 60, 36);
SMARTMETER.setFont(BigFont);
SMARTMETER.setBackColor(100, 155, 203);
SMARTMETER.print("<-", 18, 15);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setFont(SmallFont);
SMARTMETER.print("Back to Main Menu", 70, 18);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("* Smartmeter R2 *", CENTER, 50);
SMARTMETER.setColor(255, 0, 0);
SMARTMETER.drawLine(0,80,480,80);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.setColor(255, 255, 255);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Puterea activa:", 10, 110);
SMARTMETER.print("Puterea reactiva:", 10, 160);
SMARTMETER.print("Puterea aparenta:", 10, 210);
SMARTMETER.print("Factor de putere:", 10, 260);
}
void grafic(){
SMARTMETER.clrScr();
while (currentPage == '1'){
drawgrafic();
StartSample = micros();
for( int xpos = 0; xpos < 240; xpos ++) {
Sample[ xpos] = analogRead(0)*5/102;
SampleI[ xpos] = analogRead(1)*5/102;
delayMicroseconds(1);
}
EndSample = micros();
// Afișarea formelor de undă
for( int xpos = 0; xpos < 239; xpos ++){
SMARTMETER.setColor( 0, 0, 0);
SMARTMETER.drawLine (xpos + 1, 255-OldSample[ xpos + 1]* vsens-hpos, xpos + 2, 255-OldSample[ xpos + 2]* vsens-hpos);
SMARTMETER.drawLine (xpos + 1, 255-OldSampleI[ xpos + 1]* vsens-hpos, xpos + 2, 255-OldSampleI[ xpos + 2]* vsens-hpos);
if (xpos == 0){
SMARTMETER.drawLine (xpos + 1, 1, xpos + 1, 239);
}
SMARTMETER.setColor( 255, 255, 255);
SMARTMETER.drawLine (xpos, 255-Sample[ xpos]* vsens-hpos, xpos + 1, 255-Sample[ xpos + 1]* vsens-hpos);
SMARTMETER.setColor( 255, 0, 0);
SMARTMETER.drawLine (xpos, 255-SampleI[ xpos]* vsens-hpos, xpos + 1, 255-SampleI[ xpos + 1]* vsens-hpos);
}
// Determinarea maximelor formelor de undă
Max = Sample[ 100];
Min = Sample[ 100];
Max = SampleI[ 100];
Min = SampleI[ 100];
for( int xpos = 0; xpos < 240; xpos ++){
OldSample[ xpos] = Sample[ xpos];
if (Sample[ xpos] > Max){
Max = Sample[ xpos];
}
if (Sample[ xpos] < Min){
Min = Sample[ xpos];
}
OldSampleI[ xpos] = SampleI[ xpos];
if (SampleI[ xpos] > Max){
Max = SampleI[ xpos];
}
if (SampleI[ xpos] < Min){
Min = SampleI[ xpos];
}
}
Calcul_parametri();
SMARTMETER.setColor(0, 255, 0);
SMARTMETER.setBackColor(0, 0, 0);
SMARTMETER.printNumF(F,3,295,100,46,3,48);
SMARTMETER.setFont(BigFont);
SMARTMETER.print("Hz ", 410, 100);
SMARTMETER.setColor(150, 150, 0);
SMARTMETER.printNumF(Uef,2,310,185,46,3,48);
SMARTMETER.print("V ", 420, 185);
SMARTMETER.printNumF(Ief,3,275,225,46,3,48);
SMARTMETER.print("A ", 370, 225);
SMARTMETER.setColor(50, 50, 250);
SMARTMETER.printNumF(Fe,3,280,265,46,3,48);
SMARTMETER.print("Hz ", 390, 265);
delay(1000);
if (Touch.dataAvailable()) {
Touch.read();
x=Touch.getX();
y=Touch.getY();
//Back button
if ((x>=300) && (x<=330) &&(y>=1) && (y<=15)) {
drawFrame(300, 1, 330, 15);
currentPage = '0';
SMARTMETER.clrScr();
drawHomeScreen(); } } } }
Anexa 1.3
Codul QPython3 implementat pentru a interfața dispozitivul Smartmeter cu smartphone-ul personal.
smartmeter_energy.py
import android
import time
import sys, string, os
droid = android.Android()
droid.toggleBluetoothState(True)
droid.bluetoothConnect('00001101-0000-1000-8000-00805F9B34FB', '98:D3:31:FB:6D:EF')
print ("Conectare…")
time.sleep(1)
droid.webViewShow('file:///storage/emulated/0/qpython/proiect/smartmeter_energy.html')
while True:
event = droid.eventWait(1000).result
if(event!=None):
if event['data'] == 'exit':
sys.exit()
time.sleep(0.1)
Uef= droid.bluetoothReadLine().result
droid.eventPost('Tensiune_efectivă', Uef)
Ief= droid.bluetoothReadLine().result
droid.eventPost('Curent_efectiv', Ief)
P= droid.bluetoothReadLine().result
droid.eventPost('Putere_activă', P)
Q= droid.bluetoothReadLine().result
droid.eventPost('Putere_reactivă', P)
F_p= droid.bluetoothReadLine().result
droid.eventPost('Factor_putere', F_p)
E= droid.bluetoothReadLine().result
droid.eventPost('Energie_consumata', E)
if (E>2):
os.system( '/storage/emulated/0/qpython/proiect/ Trimitere_monitorizare.py');
print (E)
Trimitere_monitorizare.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
Subiect = 'SMARTMETER'
email_user ="smartmeter.energy111@gmail.com"
email_send="smartmeter_energy@yahoo.com"
msg =MIMEMultipart()
msg['from'] = email_user
msg['to'] = email_send
msg['subject'] = Subiect
mesaj=" Consum de energie ridicat!!! Peste 2Wh!!" sent by Python 2.7.14"
msg.attach(MIMEText(mesaj,'plain'))
text=msg.as_string()
server= smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(email_user,'ipoteza111')
server.sendmail(email_user,email_send,text)
server.quit()
smartmeter_energy.html
<html>
<body style = "background-color: black">
<p style="text-align: center; color:#ffffff; font-size:70px" >Energie consumata [Wh]: </p>
<p style="text-align: center; color:#ffffff; font-size:70px" id="id_exit">xxxxxxx</p>
<button onclick="Energie_consumata_ exit ()">Exit </button>
<script type="text/javascript">
var i ="xxx";
var droid = new Android();
document.getElementById("id_ exit ").innerHTML = "12345678";
droid.registerCallback(' Energie_consumata ', function(e) {
var citire = e.data;
var Energy= citire.toPrecision(3);
document.getElementById('id_exit').innerHTML =Energy; });
function Energie_consumata ()
{
droid.eventPost(' mesaj ', document.getElementById("textul_meu").value)
}
function Energie_consumata_ exit ()
{
droid.eventPost(' mesaj ', "exit")
}
</script>
</body>
</html>
Anexa 1.4
Crearea aplicațiiei a doua pentru smartphone a fost realizată în mediul de dezvoltare online al aplicațiilor mobile pentru sistemul de operare Android, MIT App Inventor 2.
Figura A1.4 – Implementarea aplicației Smartmeter pentru Android
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: SMARTMETER CU TRANSMISIE RADIO A DATELOR BAZAT PE MICROCONTROLER CONDUCĂTOR ȘTIINȚIFIC: Conf. dr. ing. Florin ENACHE ABSOLVENT: Stud. Plt. Maj…. [308701] (ID: 308701)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
