Aplicație pentru reducerea consumului de energie electrică și sporirea confortului dintr-o locuință [305795]

UNIVERSITATEA “TRANSILVANIA” DIN BRAȘOV

Departamentul Automatică și Tehnologia Informației

Programul de studiu: Automatică și Informatică Aplicată

Marian GHEORGHIȚĂ

Aplicație pentru reducerea consumului de energie electrică și sporirea confortului dintr-o locuință

Îndrumător:

Șef lucrări.dr.ing. Laurențiu DIACONU

BRAȘOV

2017

Cuprins

Obiectivul lucrării…………………………………………………………………………………3

1. Introducere……………………………………………………………………………………..4

1.1 Sisteme automate……………………………………………………………………..5

1.2 Domotica………………………………………………………………………………6

2. Reducerea consumului de energie electrică……………………………………………………7

2.1 Model de optimizare a energiei electrice la o locuință……………………………….7

3. Componente folosite la proiect………………………………………………………………. 10

3.1 Microcontroler………………………………………………………………………11

3.1.1 Generalitati…………………………………………………………..…….11

3.1.2 Microcontroler vs. Microprocesor………………………………..……….12

3.1.3 Arduino Mega………………………………………………………………13

3.2 Senzori…………………………………………………………………………..……14

3.3 Placa Ethernet W5100…………………………………………………………..……16

3.4 Cititorul de proximitate RFID………………………………………………..………17

3.5 Modulul de relee………………………………………………………………………18

3.5.1 Comanda unui releu…………………………………………………………18

3.6 Driverul de motoare L298N………………………………………………….………19

4. Medii de programare……………………………………………………………………….…20

4.1 Arduino – C/C++……………………………………………………………………..20

4.2 HTML/CSS…………………………………………………………………..………21

4.3 AJAX………………………………………………………………………….…..…22

5. Implementare………………………………………………………………….……….…..…25

5.1 Instalarea mediului integrat de dezvoltare Arduino………………………….…..…25

5.2 Realizarea circuitului electric…………………………………………..…….………26

5.3 Scrierea codului sursa…………………………………………………………..……29

5.4 [anonimizat]-Internet………………………………….….…36

5.5 Functionalitatea aplicației web………………………………………………………37

5.6 Descrierea panoului de prezentare……………………………………………..……38

6. Dezvoltare………………………………………………………………………………….…39

7. Concluzie……………………………………………………………………………………….40

Rezumat………………………………………………………………………………………….41

Bibliografie……………………………………………………………………………………….42

Anexe……………………………………………………………………………………….…….43

Obiectivul lucrării

Obiectivul acestei lucrări este realizarea unui sistem care împreună cu o interfață web ajuta utilizatorul să monitorizeze și să controleze parametrii dintr-o locuință folosind IoT (Internet of Things). Astfel utilizatorul deține controlul locuinței indiferent unde se afla acesta.

Deasemenea se pune accent și pe reducerea consumului de energie electrică din locuința cu ajutorul automatizării unor procese.

[anonimizat], fiecare subsistem descris. Subsistemele prezentate sunt:

Măsurarea și controlul temperaturii

Acționarea luminilor din locuința

Măsurarea nivelului de gaz și sistemul de ventilație

Sistemul de închidere a ușii principale

Verificare status geamuri

Automatizare iluminat în funcție de prezența

Fiecare modul prezintă atât regim de funcționare automat cât și regim de funcționare manual.[anonimizat]. Regimul de funcționare manual permite ca utilizatorul să acționeze și să creeze scenarii cu elementele din locuința.

Automatizarea unor procese (ex: pornirea unor becuri în funcție de prezență în încăpere) reușește să facă o diferență majoră la consumul de energie electrică.

Întregul sistem este monitorizat și controlat de o aplicație web intuitivă care este interfața dintre utilizator și elementele interconectate din locuința.

Confortul este adus de aplicația web cu răspuns real conectată cu ajutorul unui router la internet. Utilizatorul poate accesa aplicația oriunde de pe planetă cu ajutorul IoT (Internet of Things).

1.Introducere

Automatizarea locuințelor și a clădirilor ,în general, este din ce în ce mai des întâlnită.Multe firme sau persoane fizice optează pentru astfel de sisteme deoarece sporesc confortul și reușesc să reducă consumul de energie electrică.

Există pe piața mulți dezvoltatori ce au ales să creeze sisteme de automatizare a locuințelor.Aceștia, de cele mai multe ori, dețin protocoale de comunicație speciale și folosesc fire pentru a comunica cu echipamentele ce compun întregul sistem.Odată cu avansul tehnologic, se dorește eliminarea cablajelor și se optează pentru sisteme ce comunica wireless.Comunicația wireless aduce un plus de de confort și flexibilitate sistemelor de automatizare din locuințe.

Ideea de automatizare a locuinței a devenit viabilă încă din anii 1900 odată cu distribuția de energie electrică și continuat cu introducerea mașinilor de spălat în 1904,frigiderelor,uscătoarelor de haine.

În 1975 a apărut prima tehnologie dedicată domoticii și se numea X10.Un protocol de comunicație între dispozitivele electronice folosite în locuință.În prima fază informația digitală era reprezentată de frecvențe radio.De-a lungul anilor acest tip de protocol s-a dezvoltat atât de mult încât, în 2012, în UȘĂ, potrivit ABI Research, au fost instalate 1.5 milioane de sisteme domotice.

Există trei generații de automatizări locuință:

Prima generație:tehnologie wireless cu server proxy;

A doua generație:controlul dispozitivelor electrice folosind inteligenta artificială;

A treia generație:roboți care interacționează cu oamenii.

Aplicații și tehnologii:

Sistem de control iluminat

Sisteme de securitate clădiri

Încălzire,ventilație și aer condiționat(HVAC)

Detecție scurgeri și fum

1.1 Sisteme automate

Sistemul este un ansamblu de elemente dependente între ele care formează un întreg organizat, care pune ordine într-un domeniu de gândire teoretică.Noțiunea de sistem are o sferă de cuprindere foarte largă și, în consecință, este frecvent întâlnită în știintă și tehnică. Prin sistem vom înțelege un ansamblu de entități ce interacționează între ele și cu exteriorul, în vederea atingerii unei finalități.

Sistemele automate sunt sisteme tehnice de supraveghere, comanda și control al proceselor și instalațiilor tehnologice, fără intervenția directă a omului. Un sistem automat (SA) este alcătuit din două părți principale: procesul de automatizat (P) și dispozitivul de automatizare (DA).

Mărimile (variabilele) asociate unui sistem sunt de trei la număr: mărimi de intrare, mărimi de stare și mărimi de ieșire. Mărimile de intrare[U] sunt independente de sistem (cauză) și influențează din exterior starea și evoluția sistemului. Mărimile de stare[X] sunt dependente de mărimile de intrare (efect) și au rolul de a caracteriza complet starea curentă a sistemului. Mărimile de ieșire[Y] sunt dependente de mărimile de stare, uneori și direct de mărimile de intrare (efect) și au rolul de a transmite în exterior informație referitoare la starea curentă a sistemului.

fig. 1.1 Reprezentarea unui sistem

1.2 Domotica

Cuvântul de domotica vine din latinul "domus" care înseamnă casa și informatică. Domotica este o aplicație a calculatoarelor și roboților pentru aplicații casnice. O casă cu un sistem domotic instalat trebuie să aibă multe calculatoare, probabil aranjate într-un perete, pentru a permite proprietarului să contoleze aplicațiile din toate părțile casei.

fig. 1.2 Exemplu de sistem domotic

O casă cu un astfel de sistem instalat este capabilă să sune la poliție sau la pompieri.În mod frecvent sistemele domotice trebuie să colecteze date de la diverși senzori și să facă diferite lucruri cum ar fi: ajustarea luminii și selectarea melodiilor preferate de fiecare membru al casei, atunci când ei intră sau pleacă din camera personală. Acest sistem presupune că fiecare membru să poarte asupra lui un tag RFID, pe câtă vreme cele mai sofisticate detectează mișcarea, funcțiile vitale și multe alte caracteristici individuale.

Câteva sarcini îndeplinite de domotică :

Controlează draperiile, ferestrele dintr-o locație, toată ziua, fără interacțiunea omului.

Deschide sau blochează și deblochează poarta și intrarea în garaj, cu un control separat sau global.

Controlează clima din interiorul caselor. Prin apăsarea unui buton se poate seta încălzirea pe timp de noapte; lumina când nu ești într-o încăpere; să închidă poarta după plecare…

Controlează sunetul și home cinema din orice cameră, utilizând butoane, tablouri sau telecomenzi.

Asigură lumină potrivită la locul potrivit; sistemele domotice pot asigura și memora intensitatea luminoasă în funcție de preferințele persoanelor.

Pot pregăti inteligent – grădinile prin pornirea stropitoarelor atunci când solul este prea uscat; – și alte lucrări cum ar fi cele canal; peluzele sunt udate doar atunci când este nevoie iar persoanele pot starbate peluzele fără frică că pot fi udate.

Pot aprinde lumina doar atunci când o persoană este prin preajmă(uneori cu rol de alarmă).

2.Reducerea consumului de energie electrică

În prezent lumea se confruntă cu creșterea consumului de energie electrică care s-a dublat în ultimii 20 de ani.O comisie europeană de cercetare a relatat faptul că cel mai mare consum de energie electrică este ocupat de transport cu 31.67% și de sectorul imobiliar cu 26.65% cu o creștere de aproximativ 3.6% între 2009 și 2010. Se crede că cerințele tot mai mari de energie vor conduce la o criză globală în energie.În acest context, cei mai mari producători în domeniul energiei-Siemens,Samsung,Philips,General Electric, etc. țintesc către sisteme de nouă generație capabile să managerieze inteligent consumul de energie electrică.

Cele mai populare și practice soluții la problema consumului ridicat de energie electrică sunt:

Implementarea surselor de energie regenerabile (stații eoliene,panouri fotovoltaice),în principal pentru a reduce emisiile de carbon

Utilizarea sistemelor capabile să înmagazineze energia(ex:bateriile)

Implementarea conceptului de rețea inteligenta.Această tehnologie folosește surse de energie regenerabilă și manageriaza eficient distribuția de energie electrică.

fig. 2.1 Digrama bloc a unui ansamblu de locuințe inteligente

2.1 Model de optimizare a energiei electrice la o locuință

În subcapitolul următor voi prezenta un exemplu de management al consumului de energie electrică, în funcție deconsumatorii principali ai locuinței.

Principalele categorii de consumatori sunt:Sistemele de depozitare a energiei electrice(ex:baterii, UPS-uri,etc.);Echipamente cu funcționare programată – acestea sunt sistemele din locuința ce sunt pornite sau nu, în funcție de un prag setat(ex:centrală termică cu termostat,aer condiționat,etc.);Echipamente cu funcționare întreruptă – sunt electrocasnicele care sunt utilizate ocazional(ex:mașină de spălat, cuptor cu microunde,mașina de spălat vase,etc.);Echipamente cu funcționare continua – sunt electronicele care sunt pornite mereu(ex:frigider,becuri,etc.).

fig. 2.2 Model de locuința cu diferiți consumatori în funcție de tipul acestora

2.1.1 Sisteme de depozitare a energiei electrice

Sistemele de depozitare a energiei electrice(ex:baterie) sunt capabile să absoarbă și să transmită energie electrică.Un exemplu de utilizare eficientă a unui astfel de sistem este integrarea acestui unui ansamblu care produce energie regenerabilă.Un panou fotovoltaic, spre exemplu, are nevoie de o baterie pe care să o încarce și de la care să plece energie electrică către consumatori.Având în vedere că sursele de energie regenerabilă depind, de cele mai multe ori de condițiile exterioare(ex: vânt,soare), prezența unui astfel de sistem de depozitare a energiei electrice este necesară.

2.1.2 Echipamente cu funcționare contiua

Astfel de echipamente (ex:frigider,bec) consumă energie electrică neîntrerupt.O soluție pentru reducerea consumului de energie electrică a electrocasnicelor cu consum continuu este implementarea unui program de funcționare.Aici vă dau un exemplu concret: pentru sistemele de iluminat se pot adăuga senzori care pornesc sau opresc becul în funcție de prezența cuiva în permimetrul operat de aceștia.

2.1.3 Echipamente cu funcționare întreruptă

Sunt reprezentate de electrocasnicele al căror consum este ocazional, în funcție cât de des sunt folosite de utilizator.Astfel de echipamente sunt: mașinile de spălat, cuptoarele cu microunde,etc.

2.1.4 Echipamente termice cu funcționare programată

Sunt sisteme care pornesc sau se opresc în funcție de o valoare de prag setată de utilizator.De exemplu: centrală termică cu termostat, aerul condiționat, etc.Acestea depind de temperatura înmagazinată în încăperea de unde se citește temperatura reală.

3.Componente folosite la proiect

În acest capitol voi prezenta componentele utilizate în proiect.Nucleul principal, cel care colectează și da mai departe date de la senzori și/sau comută anumiți actuatori este microcontrolerul.Putem spune că acesta din urmă reprezintă calea de legătură dintre utilizator și mediul exterior.

fig. 3.1 Privire generala componente utilizate

3.1 Microcontroler

3.1.1 Generalități

Un microcontroller este un circuit pe un singur chip care, în mod normal, conține:

Unitatea Centrală

Memoria volatilă(RAM)

Memoria nevolatilă(ROM/PROM/EPROM/EEPROM)

Generatorul de tact

Dispozitive I/O seriale și paralele

Timere,convertoare A/D și /D/A

Periferice

În figură 1 este prezentată schema bloc a unui microcontroller:

Fig. 3.2. Schema bloc microcontroller

Unitatea centrală de prelucrare (CPU) este hardware-ul într-un sistem informatic care execută instrucțiunile unui program de calculator realizând operațiuni aritmetice și logice, precum și operațiunile de intrare / ieșire ale sistemului. Componentele principale ale UCP sunt urmatoarele:

Unitatea aritmetica ș i logica (UAL): executa prelucrarile asupra datelor.

Registrele: Reprezinta o memorie interna (locala) pentru UCP.

Unitatea de comanda și control (UCC): controleaza functionarea UCP și deci a calculatorului.

Interconexiunile din cadrul UCP: asigura comunicatia dintre UAL, registre și UCC; sunt realizate sub forma unei magistrale, numita magistrala interna a UCP.

Memoria Random Access (RAM) este un tip de memorie care stochează temporar informația și rezultatele intermediare folosite de microcontroler. Conținutul este eliberat odată cu oprirea circuitului.

Memoria ROM(Read Only Memory) este programată în momentul fabricării. Memoria este programată definitiv. Acest tip de memorie se folosește în cazul în care se fabrică produse de serie scăzând costul de fabricație. Oferă o viteză de acces bună și o structură compactă . Microcontrolere cu asfel de memorie se găsesc în ecrane TFT,telecomenzi,etc.

Memoria EEPROM (electricaly erasable programmable read only memory) permite programarea și ștergerea octeților. Programarea folosește o tensiune mai mare decât cea obișnuită (12V – 25V). Ștergerea se face aplicând un curent invers. Acest tip de memorie are număr limitat de scrieri/ștergeri. Există o varietate de microcontrollere ce folosesc memorie EEPROM pentru program.În categoria aceasta intră și ATmega2560, microcontroler folosit de Arduino.

3.1.2 Microcontroller vs. Microprocesor

Microprocesorul este unitatea centrală de prelucrare a informației(CPU) a unui calculator, care coordonează sistemul.Microcontrollerul, așa cum am precizat și mai sus, este un microcircuit care încorporează o unitate centrală(CPU) și o memorie împreună cu resurse care îi permit acestuia să interacționeze cu mediul exterior.

Diferență majoră dintre microcontroler și microprocesor este funcționalitatea acestora.Pentru a putea fi folosit, un microcprocesor are nevoie de alte componente, cum ar fi memorie și periferice pentru primirea și transmiterea datelor.Pe când microcontrollerul este proiectat să conțină toate aceste lucruri într-un singur microchip.

fig. 3.3. Structura generala a unui microcontroler.

3.1.3 Arduino Mega

Pentru acest proiect am folosit o placă de dezvoltare Arduino Mega,construită în jurul microcontrollerului ATmega2560 de 8-biti . Deține 54 de intrări/ieșiri digitale, 15 dintre acestea sunt PWM(Pulse Width Modulation),16 intrări analogice, 4 UART(Universal Asynchronous receiver/transmitter).Oscilația plăcii este dată de quartz-ul de 16 MHz.

fig. 3.4 Structura hardware Arduino Mega

Arduino Mega poate fi alimentată fie prin conexiunea USB fie cu alimentare externă.Alimentarea este selectată automat.Alimentarea externă poate veni fie de la un adaptor AC-DC fie de la o baterie.Adaptorul se conectează la mufa jack de 2.1mm a plăcii.Bateria se conectează la pinii GND și Vin existenți pe placă.Operează cu o tensiune între 6v-20v.

Pinii de alimentare a plăcii Arduino sunt:

VIN – se folosește la conectarea unei baterii externe pentru alimentarea plăcii Arduino

5V – pin folosit la alimentarea microcontrolerului sau a altor componente utilizate de Arduino

3V3 – crează o tensiune de 3.3V

GND – pinii ground ai plăcii

ATmega2560 are 256kb de memorie flash din care 8kb ȘRAM și 4kb EEPROM.

Arduino Mega conține pini cu funcții speciale:

Conexiuni seriale RX,TX:[0,1];[19,18];[17,16];[15,14].

Întreruperi externe:2,3,18,19,20,21.

PWM(Pulse Width Modulation):2-13;44-46.

SPI:50(MIS0),51(MOSI),52(SCK),55(SS).

3.2 Senzori

Putem spune că senzorii au rolul de a simula sau extinde percepția senzorială a omului.Senzorii pot fi mecanici,electronici,optici,acustici sau chimici.În principal, senzorii trimit semnale digitale(0 sau 1) sau semnale analogice, în funcție de ce detectează.În continuare va voi prezenta senzorii pe care i-am folosit în proiect.

3.2.1 Senzorul de temperatura si umiditate DHT11

Am folosit acest sensor pentru a simula funcționarea unei centrale termice pe baza unui termostat.Cu ajutorul acestui senzor am result să monitorizez atât temperatura cât și umiditatea din aer.Range-ul senzorului este între 0-50 *C pentru temperatura și 20-90% RH(umiditatea relativă) pentru umiditate.Acuratețea acestuia este +-2*C respective +-5%RH.

3.2.2 Senzorul de calitate a aerului MQ-135

Acest tip de senzor reușește să detecteze foarte bine nivelul de gaz din proximitatea acestuia. L-am utilizat pentru a simula scenariul în care se acumulează nivel de gaz și/sau alt aer poluant. Pe baza valorile trimise de senzor la microcontroller, acesta din urmă monitorizează nivelul de poluare din încăpere și activează, dacă este cazul, sistemul de ventilație.

3.2.3 Senzorul infrarosu pasiv (PIR-Passive Invrared Sensor)

Senzorul PIR măsoară radiația infraroșie emisă de obiecte aflate în câmpul său vizual.Reacționează la schimbareatemperaturii cauzată de schimbarea fluxului de radiații.Cu alte cuvinte, percepe numai semnale de schimbare, cum ar fi atunci când o persoană intră în raza de sensibilitate infraroșie a senzorului.

Am folosit acest senzor asociat unui sistem de iluminat.Lumina se aprinde numai în momentul în care senzorul detectează prezența în câmpul său vizual.Astfel se reduce și consumul de energie electrică.

3.2.4 Senzorul cu efect Hall

Răspunsul acestui senzor este normal 0 logic când câmpul magnetic perpendicular pe suprafața acestuia este sub o valoare de prag.Când câmpul depășește această valoare ieșirea trece pe 1 logic. Cu alte cuvinte, senzorul își schimbă semnalul în momentul în care un magnet se apropie suficient de acesta.

Am folosit doi asfel de senzori la sistemul de închidere a ușii principale.Unul verifica dacă ușa este închisă, iar cel de-al doilea verifica dacă zăvorul este tras.

3.2.5 Senzorul magnetic

Senzorul magnetic de proximitate este ideal pentru medii dure.Acesta este insensibil la căldură, praf și vibrații.În momentul în care este în apropierea unui magnet își schimbă semnalul logic.

L-am folosit pentru a monitoriza statusul(închis/deschis) al gemurilor din locuința.

3.2.6 Senzorul de lumina

Senzorul de lumină a fost utilizat în proiect cu scopul de a monitoriza nivelul de lucși dintr-o anumită încăpere.Senzorul trimite analogic către microcontroller o valoare între 0 și 1024, în funcție de nivelul de lumină existent.

3.2.7 Senzorul de curent ACS712

Senzorul de curent ACS712 funcționează pe baza efectului Hall. Efectul Hall apare întotdeauna când un conductor sau un semiconductor, traversat de un curent electric, este supus acțiunii unui câmp magnetic perpendicular pe direcția curentului și se manifestă prin apariția unei tensiuni, denumită tensiune Hall.

Am folosit acest senzor pentru a monitoriza consumul de energie electrică făcut de sistem.

3.3 Placa Ethernet W5100

Shield-ul Ethernet W5100 permite conexiunea între Arduino și internet.Chip-ul ethernet pune la dispoziție un IP capabil TCP(Protocol de control al transmisiei) și UDP(Protocolul datagramelor utilizator).

Conține și un slot microSD pe care se poate instala un card cu capacitate maximă de 16 Gb.Cardul poate fi utilizat pentru a stoca fișierele care trebuie accesate de pe internet.

În proiectul realizat de mine, placă ethernet deține un rol foarte important, deoarece cu această reușesc să realizez conexiunea IoT(Internet of Thinghs) între elementele conectate la microcontroller.Cu ajutorul unui cârd microSD, încarc fișierele necesare accesării aplicației web.Fișierele rămân pe card și pot fi accesate oricând prin internet.Pentru a realiza conexiunea la internet cu placa ethernet și implicit cu microcontrollerul, folosim un router.Atribuim o adresă IP din aceeași clasă cu routerul și un port plăcii ethernet.Apoi din meniul routerului putem face un port forwarding adresei IP și portului atribuit plăcii.Accesarea din altă rețea se face folosind adresa IP reală pe portul ales.

3.4 Cititorul de proximitate RFID YK-74EM(26)

Cititorl de proximitate YK-74EM(34) folosește format de tip Wiegand.

Formatul Wiegand este:

interfața specială între cititor și card;

un semanl electronic de date;

interfața binară între cititor și controller(ex:microcontroler);

Cel mă uzitat tip de format Wiegand este Standard 26-bit.Este un format open,disponibil publicului, ceea ce înseamnă că oricine poate cumpăra carduri cu astfel de format.Protocolul standard are un bit de paritate,8 biți cod facilitate, 16 biți cod ID și un bit de paritate de urmărire pentru toți cei 26 de biți.

fig. 3.5 Utilizarea bitilor protocolului Wiegand

codul maxim al facilitații este 255 egal cu valoarea maximă a celor 8 biți asociați.

numărul cardului maxim este 65,535 egal cu valoarea maximă a celor 16 biți asociați.

Bitul de paritate este folosit pentru a verifica acuratețea biților de date trimiși.În exemplu din fig. 1, bitul de paritate par este asociat primilor 12 biți de date.Dacă cei 12 biți de date au ca valoare un număr impar, bitul de paritate este setat 1 să rezulte totalul a 13 biți un număr

păr.Ultimii 13 biți sunt setați similar cu o valoare impară.

Interfața Wiegand folosește 2 pini de date DATA0(D0) și DATA1(D1) sau Data Low și Data High.Când nu se trimit date, D0 și D1 sunt setați la nivelul "high"(+5vdc).Când 0 este trimis, D0 este setat la nivelul "low" în timp ce D1 rămâne la nivelul "high".Când 1 este trimis,D1 este setat la nivelul "low" și D0 la nivelul "high".

3.5 Modulul de relee

Modulul de relee a fost folosit la comanda becurilor din locuinta.Un releu este un dispozitiv de comutare prevazut cu unul sau mai multe contacte, actionat de un semnal electric.Cu alte cuvinte, un releu ajuta la comutarea unei valori mari a tensiunii cu o valoare mai mica de tensiune.

Tipul de relee folosit contine 3 contacte: contactul comun(COM),contactul normal inchis(NC) si contactul normal deschis(NO).

3.5.1 Comanda unui releu

În figura următoare este prezentată comanda unui releu cu ajutorul unui semnal digital trimis de la un microcontroller.

fig. 3.6 Circuitul de comanda a unui releu

3.6 Driverul de motoare L298N

Am folosit driverul pentru a controla 2 motoare de 12V integrate pentru a simula sistemul de ventilație.Modulul are la baza 2 punți H cu care permite controlul vitezei și direcției motorului.

În placă de dezvoltare se conectează 6 pini, 3 pentru fiecare motor.

Pentru motorul 1:

In1 – activează motorul 1

In2 – activează motorul 1

EnA – activează semnalul PWM

Pentru motorul 2:

In3 – activează motorul 2

In4 – activează motorul 2

EnB – activează semnalul PWM

Cu ajutorul semnalului PWM(Pulse Width Modulation) se controlează viteza motorului.

Modulul driver de motoare L298N poate alimenta cele două motoare atât pe 5v cât și folosind tensiuni mai mari(ex:12v).

Un lucru important de precizat este că, dacă folosim driverul conectat la o placă de dezvoltare asemănătoare Arduino, cei doi pini EnA și EnB ce activează semnalul PWM trebuie neapărat conectați la unul din pinii speciali PWM de pe placa de dezvoltare.Deasemenea dacă se folosește o alimentare externă, groundul acesteia trebuie să fie comun cu groundul plăcii de dezvoltare.

4.Medii de programare

4.1 Arduino – C/C++

Arduino IDE reprezintă o aplicație ce a fost dezvoltată pentru a ușura programarea microcontrolerului.Astfel poate fi utilizată atât de utilizatori mai experiomentati cât și de începători, fiind ușor de înțeles. Acesta include un editor de cod având diverse proprietăți ajutătoare, cum ar fi evidențierea sintaxelor, închiderea/deschiderea parantezelor pentru funcții sau alinierea automată a rândurilor. Aplicația este capabilă să compileze și să încarce codul scris pe placă Arduino rapid, doar la un click distanta. Un program sau o bucată de cod scrisă pentru Arduino poartă numele de „sketch”.

Programele Arduino sunt scrise în limbajul de programare C/C++. Pentru a produce un program executabil ciclic, utilizatorul trebuie să definească două funcții, care obligatoriu trebuie să poarte numele de „setup()” și „loop()” pentru a fi recunoscute de compilator.

După cum ne dăm seama și din denumire, funcția "setup()" rulează o singură dată și are rol de inițializare.În acest segment utilizatorul poate declara variabilele cu o anumită valoare de început, poate seta pini plăcii de dezvoltare sau inițializa conexiunea serială.Funcția "loop()" rulează repetitiv și în interiorul acesteia va exista majoritatea codului programat.

Ca orice limbaj de programare asemănător C/C++ utilizatorul își poate crea funcții diverse pe care le va apela în "loop()".

În concluzie platforma sofware dezvoltată de Arduino are rolul de a simplifica modul de programare C/C++ pentru a ușura înțelegerea de cătră utilizatorii începători.

4.2 HTML/CSS

4.2.1 HTML(HyperText Markup Language)

HTML(HyperText Markup Language) este un limbaj de marcare pentru creat pagini și aplicații web.Elementele unui HTML sunt reprezentate de etichete, una de deschidere <eticheta> și alta de închidere </eticheta>.Astfel cu ajutorul etichetelor, un browser web randează conținutul paginii.

Pagina principală a unui domeniu este fișierul „index.html” respectiv „index.htm”. Această pagină este setată a fi afișată automat la vizitarea unui domeniu.

De exemplu la vizitarea domeniului www.domeniu.ro este afișată pagina www.domeniu.ro/index.html.Unele etichete permit utilizarea de atribute care pot avea anumite valori:

<eticheta atribut="valoare"> … </eticheta>

Componența unui document HTML este:

versiunea HTML a documentului

zona head cu etichetele <head> </head>

zona body cu etichetele <body> </body> sau <frameset> </frameset>

<!DOCTYPE html> //se definește documentul ca fiind HTML5
<html>
<head> //conține informațiile meta despre document
<title>Titlul paginii</title>//titlul documentului
</head>
<body> //conține elementele vizibile în pagină web
<h1>Primul heading</h1>
<p>Primul paragraf.</p>
</body>
</html>

Scopul HTML este mai degrabă prezentarea informațiilor – paragrafe, fonturi, tabele etc., decât descrierea semanticii documentului.

4.2.2 CSS(Cascading Style Sheets)

CSS descrie cum arata elementele HTML în browserul web.Este folosit pentru a defini stiluri vizuale pentru paginile web. Stilurile se pot atașa elementelor HTML prin intermediul unor fișiere externe sau în cadrul documentului, prin elementul <style> și/sau atributul style. CSS se poate utiliza și pentru formatarea elementelor XHTML, XML și SVGL.

CSS3 reprezintă un upgrade ce aduce câteva atribute noi și ajută la dezvoltarea noilor concepte în webdesign.Unele dintre cele mai importante segmente (module) noi adăugate acestui standard pentru formatarea elementelor HTML aduc un plus considerabil în dezvoltarea activități webdesign.

4.3 JavaScript

JavaScript este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor.Reprezinta limbajul de programare al HTML-ului si al paginii web.Cu ajutorul acestui limbaj de programare se poate programa comportamentul paginilor web.

A fost dezvoltat inițial de către Brendan Eich de la Netscape Communications Corporation sub numele de Mocha, apoi LiveScript, și denumit în final JavaScript.

Browserele rețin în memorie o reprezentare a unei pagini web sub forma unui arbore de obiecte și pun la dispoziție aceste obiecte script-urilor JavaScript, care le pot citi și manipula. Arborele de obiecte poartă numele de Document Object Model sau DOM. Există un standard W3C pentru DOM-ul pe care trebuie să îl pună la dispoziție un browser, ceea ce oferă premiza scrierii de script-uri portabile, care să funcționeze pe toate browserele. În practică, însă, standardul W3C pentru DOM este incomplet implementat. Deși tendința browserelor este de a se alinia standardului W3C, unele din acestea încă prezintă incompatibilități majore, cum este cazul Internet Explorer.

O tehnică de construire a paginilor web tot mai întâlnită în ultimul timp este AJAX, abreviere de la „Asynchronous JavaScript and XML”. Această tehnică constă în executarea de cereri HTTP în fundal, fără a reîncărca toată pagina web, și actualizarea numai anumitor porțiuni ale paginii prin manipularea DOM-ului paginii. Tehnica AJAX permite construirea unor interfețe web cu timp de răspuns mic, întrucît operația (costisitoare ca timp) de încărcare a unei pagini HTML complete este în mare parte eliminată.

4.4 AJAX(Asynchronous JavaScript And XML)

AJAX este o tehnică de dezvoltare pentru a crea aplicații web mai rapide și interactive.Combina JavaScript,HTML,CSS și XML.Avantajele majore pe care le are această metodă sunt:

-Actualizeaza o pagină web fără ca aceasta să fie reîncărcata

-Trimite date unui server în background

-Cere date de la un server după ce pagină a fost încărcată

-Trimite date la un server după ce pagină a fost încărcată

AJAX poate folosi XML(Extensible Markup Language) să transporte date și JavaScript/HTML să afișeze date.Această metodă permite păgânilor web să se actualizeze asincron prin schimburi de date de la un web server, în background.

1. A apărut un eveniment în pagină web(ex:pagina încărcată,un buton apăsat, etc.)

2. Un XMLHttpRequest object este creat de JavaScript

3. Obiectul XMLHttpRequest trimite o cerere unui web server

4. Serverul procesează cererea primită

5. Serverul trimite un răspuns înapoi paginii web

6. Răspunsul este citit de JavaScript

7. Acțiunea în pagină web este făcută de JavaScript

fig.5.1 Schema bloc functionare metoda AJAX

Câteva aplicații web cunoscute care folosesc AJAX sunt:

>Google Maps https://www.google.ro/

-utilizatorul utilizează mouse-ul pentru a alege locații pe glob

>Google Suggest google.com

-pe măsură ce scrii, Google îți oferă sugestii pe care poți să le alegi cu tastatură

>Gmail gmail.com

-contine email-uri mai intuitive și eficiente

5.Implementare

În următorul capitol voi prezenta pas cu pas etapele necesare pentru a implementa un astfel de sistem.Că mod de prezentare fizic, am ales să conectez întregul sistem pe un panou și să reprezind modular funcționalitatea fiecărui modul.

Accesul aplicației web se va face de la distanță folosind aproape orice device conectat la internet.

5.1 Instalarea Mediului Integrat de Dezvoltare(IDE) Arduino

Pentru crearea codului sursa ce trebuie încărcat în memoria microcontrolerului, am ales să folosesc Mediul Integrat de Dezvoltare oferit gratuit de Arduino.Softul de poate descărca de pe site-ul oficial Arduino: https://www.arduino.cc/en/main/software

fig. 5.1 Structura IDE Arduino

Limbajul de programare utilizat de Arduino IDE este asemănător limbajului C dar ușor mai simplificat.Softul oferă o gamă largă de librarii dedicate microcontrolarelor utilizate de plăcile de dezvoltare Arduino

5.2 Realizarea circuitului electric

Circuitul electric este dispus în module conectate între ele.Există două module esențiale:

modulul de alimentare electrică

modulul de comandă

aceste două module sunt vitale în funcționarea de bază a sistemului. Restul modulelor pot fi detașate fără să afecteze funcționalitatea celorlalte module și sunt:

măsurarea și controlul temperaturii

acționarea luminilor din locuința

măsurarea nivelului de gaz și sistemul de ventilație

sistemul de închidere a ușii principale

verificare status geamuri

automatizare iluminat în funcție de prezența

5.2.1 Modulul de alimentare electrica

Acest modul alimentează cu energie electrică întregul ansamblu.Preia curentul alternativ de la priză de 220v și distribuie mai departe la restul modulelor.Pentru a alimenta placă de dezvoltare Arduino și restul elementelor ce necesită curent continuu de 12v, am folosit o sursă industrială S150-12.Ca măsură de siguranță am folosit o siguranță automată de 10A pe alimentarea generală și încă două disjunctoare.Unul pentru alimentarea sistemului de iluminat și celălalt pentru alimentarea sursei de 12v.Distribuția către elementele din sistem este făcută cu ajutorul unor cleme cu prindere rapidă.

fig. 5.2 Modulul de alimentare electrica

5.2.2 Modulul de comandă

Modulul de comandă este reprezentat de placă de dezvoltare arduino și shieldul ethernet.Folosind diverși conectori și mufe, de la sistemul de comandă pleacă conexiunile necesare celorlalte module.Deasemenea, în modulul de comandă este instalat și routerul care face conexiunea între internet și placa de dezvoltare.

5.2.3 Măsurarea și controlul temperaturii

Acest modul simulează practic automatizarea unei centrale de încălzire în funcție de valoarea citită de la senzorul de temperatură și valoarea de prag definită de utilizator.

Componentele modulului sunt: un senzor de temperatură DHT11 și un led care reprezintă statusul centralei de încălzire(oprit/pornit).

5.2.4 Acționarea luminilor din locuința

Modulul simulează controlul sistemului de iluminat din locuința. Este reprezentat de 3 becuri alimentate din disjunctorul modulului de alimentare electrică și 3 relee cu care se realizează comanda din pinii digitali ai plăcii de dezvoltare Arduino

.

fig. 5.3 Modulul de actionare a luminilor

5.2.5 Măsurarea nivelului de gaz și sistemul de ventilație

Pentru a simula un scenariu apropiat de cel real, am creat un mediu închis reprezentând o încăpere a locuinței în care am montat senzorul de gaz și două ventilatoare care ajută la recirculația rapidă a aerului în cazul în care este necesar.Ventilatoarele sunt alimentate cu o tensiune electrică de 12v cu ajutorul unui driver de motoare.Scenariul este descris astfel: în cazul în care, în încăpere, nivelul de gaz a atins valoarea maximă admisă, pornește automat ventilația până când calitatea aerului revine în parametrii normali.

fig. 5.4 Modulul automatizarii aerisirii in functie de nivelul de gaz

5.2.6 Sistemul de închidere a ușii principale

Ușa principală poate fi accesată atât utilizând un card de proximitate definit în sistem cât și tastând pinul de utilizator.Încuietoarea ușii este reprezentată de un electromagnet comandat de la un releu.Pentru a ști dacă ușa este închisă cât și dacă zăvorul este tras, am folosit 2 senzori cu efect Hall.

Funcționalitate sistem închidere: Presupunem că ușa este închisă și încuiată.Cu ajutorul celor doi senzori Hall, placă de dezvoltare verifica starea acestora și transmite mai departe aplicației web statusul sistemului (ușă:închisă; incauietoare:închisă).În momentul în care se deschide ușa(folosind cardul de proximitate sau pinul definit) zăvorul este tras 3 secunde în care se așteaptă deschiderea ușii de către utilizator.În cazul în care ușa nu este deschisă în acest interval,

zăvorul este tras.În cazul în care se deschide ușa în intervalul a 3 secunde, zăvorul nu este tras până când senzorul Hall detectează că ușa a fost închisă fizic.

Cititorul de proximitate folosit se alimentează la o tensiune de 12v și comunica cu placa de dezvoltare folosind protocolul Wiegand 26.Mai multe detalii legate de acest protocol găsiți la subcapitolul 3.4.Tastatura utilizată este o tastatură matricială cu 8 pini conectați la intrările digitale ale plăcii de dezvoltare Arduino, reprezentând 4 linii și 4 coloane.

5.2.7 Verificare status geamuri

Pentru că utilizatorul să știe dacă un geam este deschis sau închis am folosit senzori magnetici.Acest tip de senzori își schimbă valoarea logică în prezența unui magnet.

fig. 6.5 Senzori magnetici

5.2.8 Automatizare iluminat în funcție de prezența

Am asociat unui bec un senzor de prezența PIR.În momentul în care senzorul detectează prezența, un releu primește comanda de a porni becul.Acesta din urmă rămâne aprins câteva secunde și dacă senzorul PIR nu mai detectează prezența, se oprește.

5.3 Scrierea codului sursa

Codul sursă al întregului sistem se împarte în două limbaje de programare distincte.Primul este reprezentat de codul compilat și încărcat pe placa de dezvoltare Arduino,respectiv în memoria microcontrolerului, iar cel de-al doilea este codul aplicației web.Acesta din urmă este păstrat de placă ethernet pe cardul microSD încorporat și poate fi accesat de pe internet.

5.3.1 Cod sursa Arduino

În mediul de programare Arduino se regăsesc majoritatea funcțiilor și algoritmilor care duc la comportamentul microcontrolerului.

În prima parte a codului, până să intrăm în funcția "setup()",se adăugă librăriile necesare funcționalității elementelor componente din cod

fig. 5.6 Librariile utilizate

În fig. 5.6 se pot observa librăriile pe care le-am folosit.Primele trei librarii ajută la conexiunea plăcii Arduino cu placa ethernet.Librăriile "Password" și "Keypad" conțin sursele necesare inițializării și verificării parolei introduse de la tastatură matricială.Librăria "dht" ajuta la interpretarea semnalului trimis de senzorul de temperatură și umiditate, iar "Wiegand" la protocolul de comunicație de tip Wiegand pe care îl are cititorul de proximitate.

fig. 5.7 Setarile Ethernet

În figură fig. 5.7 se evidențiază codul care setează configurația ethernet. Codul se poate adapta în funcție de mac-ul plăcii ethernet, care este un număr unic, adresa IP, care poate varia în funcție de rețeaua în care este routerul.O altă configurație importantă este portul plăcii ethernet.

fig. 5.8 Setarea parolei si definirea pinilor tastaturii

Se poate observa în fig. 5.8 codul care definește pinii care sunt conectați la tastatură matricială folosită la sistemul de închidere a ușii principale.Deasemenea, tot în partea aceasta a codului se definesc și variabilele globale utilizate în mai multe funcții.

În structura funcției "setup()" se introduc elemente de inițializare.Funcția "setup()" se execută o singură dată, la alimentarea microcontrollerului.

fig. 5.9 Initializare conexiune fisier index.htm

În figură de mai sus este reprezentat codul care verifica existența unui anumit fișier .htm pe cardul microSD apoi se intializeaza placă ethernet cu ip-ul setat anterior.Legat de conexiunea cu placa ethernet, în mod normal se poate alege să se urce codul htm atât pe cardul microSD cât și scris în memoria internă a plăcii Arduino.Am ales să folosesc varianta cu cardul micro SD deoarece îmi oferă spațiu de memorie relevant astefel încât să nu am probleme dimensiunea prea mare a codului.Pentru a seta acest tip de memorie, se dezactivează chipul plăcii ethernet, setând pinul digital 10 al plăcii arduino pe LOW.

Tot în porțiunea aceasta de cod se intializeaza pinii folosiți pe placa Arduino.După cum puteți observa în fig. 5.10 pinii digitali ai plăcii Arduino au fost setați atât "INPUT" – pin pregătit să primească valori logice de la diverși senzori sau butoane, cât și "OUTPUT" – pin pregătit să trimită semnal digital către releu, led,etc.Pentru senzorii magnetici folosiți la geamuri pinii au fost setați că "INPUT-PULLUP".În momentul în care un capăt al unuia din firele senzorului magnetic este conectat la pinul setat input-pullup, celălalt trebuie conectat la groundul plăcii de dezvoltare.Astfel pinul reușește să citească valori logice diferite în funcție de prezența unui magnet în preajma senzorului.

fig. 5.10 Configurarea pinilor digitali utilizati

Următoarea secțiune a codului sursa al microcontrolerului este funcția "loop()".Această funcție, ca și funcția "setup()" este obligatorie în structura de cod Arduino.Diferență majoră dintre "setup()" și "loop()" este că aceasta din urmă este accesata repetitiv în timpul funcționarii microcontrolerului.Cu alte cuvinte, codul existent în interiorul acestei funcții intra într-o buclă infinită.

În prima parte vom descrie fragmentul de cod, care realizează transferul de informații dintre placă de dezvoltare Arduino și pagină web, care reprezintă interfața utilizatorului.

fig. 5.11 Sectiunea de cod care realizeaza transferul de date dintre Arduino si pagina web

Arduino verifica prin "HTTP_req" dacă primește răspuns de la pagină web, implicit de la utilizator(ex: dacă s-a apăsat un buton), le verifică și acționează în funcție de ce primește.Un exemplu concret este funcția "setLEDs()" care este rulata în momentul în care se primește un răspuns de la serverul web.După cum bine observăm și în fig. 5.11 această funcție verifica ce se primește de la serverul web și acționează dacă recunoaște ceva.În exemplul de mai jos, dacă se primește "LED1=1" se va acționa un releu.

fig. 5.12 Functie de verificare date primite de la serverul web

Ceea ce trimite Arduino către serverul web, respectiv către aplicația web este conținut de funcția "XML_response(EthernetClient cl)", care este rulata continuu atât timp cât există o conexiune cu serverul.

fig. 5.13 Functie de trimitere date catre serverul web

După cum putem observa în fig. 5.13 funcția "XML_response(EthernetClient cl)" trimite către pagină web valori de la diferiți senzori, valori situate între etichete(ex:<analog>valoare_de _trimis</analog>).Astfel se reușește citirea corectă a datelor din codul Javascript al paginii HTML.

Recapitulând cele spuse anterior legate de transferul reciproc de date dintre Arduino și serverul web, tragem concluzia că există 2 funcții principale care ajută la asta.Funcția "setLEDs()" care reușește să verifice informația primită de la pagină web și acționează conform acesteia – folosită la implementarea butoanelor de pe aplicația web și funcția "XML_response(EthernetClient cl)" care trimite datele colectate de la senzori organizate în etichete, ca apoi să fie preluate de Javascript-ul paginii web și distribuite eficient în HTML-ul aplicației web.

Trebuie să menționez faptul că informațiile conținute de "XML_response" nu se trimit decât dacă serverul web este activ, cu alte cuvinte, doar dacă este accesata pagină web.De aceea pentru că sistemul să funcționeze corect, toți algoritmii care ajută la automatizarea sistemului se scriu în funcția "loop()" a codului sursa.

fig. 5.14 Programarea elementelor conectate la Arduino in "loop()"

În figură de mai sus sunt prezentate câteva if-uri care fac anumite module ale sistemului să fie automate.În prima parte se face o verificare între temperatura citită de la senzor și pragul setat de utilizator în aplicația web.În momentul în care pragul este mai mic decât temperatura citită, se oprește ledul situat pe pinul 9.În caz contrar ledul pornește.Ledul simulează sursa de căldură din încăpere.

Următoarele linii de cod citesc valorile analogice de la senzorul de gaz respectiv senzorul cu efect Hall.

"wg.available()" verifică codul cardului cu care se încearcă accesul ușii principale.Dacă codul corespunde se deschide ușa.Mai departe se verifică valoarea senzorului Hall,respectiv dacă ușa este închisă.Dacă senzorul Hall este activat se comută releul care alimentează zăvorul.

5.3.2 Cod sursa aplicație web

Codul sursă al aplicației web este compus din trei părți.Prima parte este reprezentată de funcțiile Javascript, a doua parte de stilurile CSS3 și ultima parte efectiv conținutul paginii scris în HTML.

Am result să combin aceste trei limbaje astfel în cât aplicația web să funcționeze rapid și eficient.Metoda folosită a fost AJAX , metoda prezentată la capitolul 5.Cu AJAX se reușește transferul de date dintre server și pagină web în spate, fără a reîncărca pagină web folosind XML.

După cum puteți observa în fig. 5.15 funcția "GetArduinoIO()" recepționează datele primite din etichetele trimise de la microcontroler și le distribuie mai departe în HTML.

fig. 5.15 Funcția javascript de recepționare date de la MCU

Tot în Javascriptul paginii web se realizează și transferul de date către microcontroler.Lucru evidențiat fin fig. 6.16.

fig. 5.16 Cod javascript de trimitere date către MCU

Am creat în partea asta de cod și funcții care se aplică dacă un buton este aplicat și trimit diverse mesaje către microcontroler.Tot codul javascript a fost scris în interiorul etichetei <script></script>.

Continuând , următoare structură este conținută de etichetă <style><style> și este reprezentată de limbajul CSS3. Cu ajutorul acestei secvențe de cod am creat un design mai interesant al aplicației web.

Ultima parte este reprezentată de codul HTML, care afișează conținutul aplicației web.În fig 5.17 observăm dispoziția elementelor afișate în aplicația web în tabele.Elementele care se schimbă în funcție de ce se primește de la microcontroler au id-uri,astfel funcția din javascript știe exact unde să trimită datele.

fig. 5.17 Exemplu de cod HTML

Codul aplicației web este conținut de un fișier index.htm accesat de browser de pe cardul microSD al plăcii Ethernet.

5.4 Crearea conexiunii Arduino-Router-Internet

Pentru că aplicația web stocată de placă ethernet pe cardul microSD să fie accesibilă oriunde de pe internet, avem nevoie de un router.În codul sursă al plăcii de dezvoltare Arduino putem asocia plăcii ethernet o adresă IP și un port.

fig. 5.18 Setari conexiune internet

Adresa IP trebuie să fie din aceeași clasă de IP-uri cu routerul.Pentru a accesa aplicația web din rețeaua locală, dispozitivul pe care îl folosim (laptop,tableta,telefon) trebuie să fie conectat la rândul lui, la același router.

Pentru a asigura conexiunea, putem seta manual proprietățile conexiunii locale IPv4 (vezi fig.5.19).

IP address este adresa IP a device-ului folosit,Subnet mask, masca,iar default gateway adresa routerului.

fig. 5.19 Setari IPv4

fig.5.20 Conexiune fizica retea locala

Pentru a face posibil accesul paginii web din altă rețea este nevoie de configurarea routerului.Trebuie creat un port forwarding pe adresa IP a plăcii ethernet.Acest lucru se face accesând meniul routerului,după cum urmează:Într-un browser se accesează adresa IP a routerului.În cele mai dese cazuri adresa poate fi 192.168.0.1 sau 192.168.1.1.În meniul routerului găsiți tabul "Forwarding".

Aici adăugăm adresa IP și portul plăcii ethernet.

După salvare, reporniți routerul.În acest moment, pagină web stocată de placă ethernet poate fi accesată din altă rețea.Accesul se face în felul următor:

Într-un browser, cu conexiune la internet, scrieți adresa IP a providerului de internet asociată routerului unde este conectat sistemul și portul.Exemplu:

5.5 Funcționalitate Aplicație Web

Structura aplicației web se poate observa în fig. 6.5.1 . Primul tab conține elementele legate de securitate.Se primește în timp real statusul geamurilor (închis/deschis) și prezența mișcare în diferite zone ale locuinteri.

În tabul ușa intrare primim informații legate de statusul ușii și încuietorii(închisă/deschisă).

Temperatura este monitorizată cu ajutorul unui afișaj circular iar pragul de temperatura este setat din cele două butoane "+" și "-".

Umiditatea și consumul de energie electrică, la fel ca temperatura este monitorizată pe același tip de afișaj circular.

Controlul luminilor este realizat utilizând butoane (ON/OFF) care își schimbă denumirea în funcție de statusul becurilor.

Se poate monitoriza nivelul de gaz și nivelul de iluminare din încăpere.

Afișajul circular folosit în aplicație este predefinitin javascript.Utilizarea în proiecte a acestuia este gratuită.Licența se găsește la anexă 1.

fig. 5.21 Privire de ansamblu aplicație web

Aplicația rulează rapid pe orice device cu browser web compatibil HTML5.Având în vedere că este aplicație web, accesul este flexibil folosind atât laptop cât și tableta și/sau telefon.

5.6 Descriere panou de prezentare

fig. 5.21 Ansamblu panou de prezentare

Am ales să folosesc ca model de prezentare un panou construit din sine DIN.Fiecare modul este reprezentat separat pentru a observa mai ușor funcționalitatea acestuia.Conexiunile exterioare necesare funcționalității complete a sistemului sunt alimentarea electrică de la priză(AC 220V) și cablu pentru conexiunea internet.

Pentru a simula parametri dintr-o încăpere, am creat medii închise din plexiglas în care am montat senzorii necesari măsurătorilor.

6.Dezvoltare

După realizarea proiectului și în timpul acesta, am realizat că această ramură, domotica, permite o dezvoltare vastă.Sistemele de automatizare locuința pot fi oricând extinse și upgradate.Deasemenea se pot prelua tehnologiile noi apărute pentru a îmbunătăți sitemul domotic.

Cum am precizat și în capitolul doi, sistemul domotic trebuie conectat la o sursă de energie regenerabilă.Un exemplu concret este montarea de panouri fotovoltaice.Piața panourilor fotovoltaice s-a dezvoltat și ea, existând tot mai mulți producători.Avantajul principal în utilizarea unei surse regenerabile este reducerea costului la energie electrică.Dacă se optează pentru alimentarea întregii clădiri de la osursa regenerabila, costul pentru energia electrică este zero.

Pentru a spori confortul utilizatorului se poate monta un sistem de încălzire în pardosele.Acest sistem ar îmbunătăți eficienta menținerii temperaturii dorite constant în încăpere.

Având în vedere că am creat un sistem compus din module independente, adăugarea de alte elemente este facilă.Spre exemplu, dacă se dorește, se pot adăuga mai mulți senzor, atât timp cât poate microcontrollerul.

O îmbunătățire majoră a sistemului creat de mine este înlocuirea conexiunii cablata și adăugarea unor module wi-fi care ajută elementele din locuința ca comunice între ele.

Cu alte cuvinte, dezvoltarea acestui tip de sistem este limitată doar de bugetul și dorințele utilizatorului.Se poate crea un sistem domotic complet autonom, utilizând surse de energie regenerabilă.

7.Concluzie

Se observă clar o dorință a utilizatorilor de locuințe pentru implementarea sistemelor de casă inteligentă.Având în vederea dezvoltarea tehnologiilor de comunicație între componentele electronice, acest lucru a devenit facil.

După analiza acestor sisteme, consider că cel mai important element îl reprezintă sursa de energie electrică ce alimentează întregul ansamblu.Plecând de la faptul că se utilizează o sursă de energie regenerabilă, trebuie creat un plan de management al consumului pentru a distribui energia într-un mod cât mai eficient.

Practic, reducerea consumului de energie electrică se realizează utilizând echipamente electronice și electrice cu consum redus.Un exemplu concret, înlocuirea becurilor cu filament care au un consum mare, cu becuri led.Deasemenea se pot folosi diverși senzori cu care se controlează funcționalitatea unor unor echipamente electronice.Ca exemplu avem asocierea unui senzor de prezența sau a unui senzor de lumină cu sistemul de iluminat din locuința.

Elementele termo din locuința, care consumă în funcție de comparația temperaturii din încăpere cu temperatura setată de utilizator, au o eficientă a consumului electric izolând încăperea.

Confortul dat de sistemele de casă inteligentă este, în principal, reprezentat de faptul că utilizatorul schimba paramaetri din locuința cu doar un click folosind aplicația web oriunde de pe internet.Cu ajutorul Internet of Things toate elementele din locuința comunica cu microcontrolerul, iar acesta din urmă cu utilizatorul folosind interfața web.

Rezumat

Plecând de la ideea generală că oamenii tind să-și ușureze și să-și simplifice activitățile zilnice am ales să folosesc tehnologia pentru a îndeplini această dorință.Domeniul pe care l-am ales este comun atât utilizatorilor casnici cât și firmelor ce au clădiri cu birouri.

Tema proiectului evidențiază două aspecte importante ale automatizării unei locuințe.Primul aspect important este reducerea consumului de energie electrică, care este în creștere față de ultimii ani.Am considerat că trebuie făcută o analiză a consumului de energie electrică în funcție de tipul de consumatori utilizați în imobil.Astfel se poat lua măsuri în funcție de fiecare situație pentru a reduce consumul.Un exemplu rapid și detaliat în proiect este asocierea unor senzori cu anumiți consumatori.Sistemul de iluminat, de multe ori, funcționează fără întrerupere și fără a fi necesar acest lucru.Dacă sistemului de iluminat îi asociem un senzor de prezența, acesta va porni numai în cazul în care este necesar.Astfel consumul sistemului de iluminat este eficient.

Deasemenea utilizarea de surse de energie electrică regenerabila, așa cum sunt panourile fotovoltaice,crește eficiența în consumul de energie electrică din locuința.

Al doilea aspect important în sistemul de smart house este confortul.Confortul este dat de ușurința cu care utilizatorul acționează anumite elemente sau monitorizează parametrii din locuința.Aplicația web creată de mine, consider că sporește drastic confortul față de o locuință tradițională.

Utilizatorul poate controla sistemul de iluminat și temperatura din locuința prin internet de pe orice device.

Încă un plus adus confortului este securitatea locuinței.Utilizând aplicația se pot monitoriza parametri care informează utilizatorul dacă geamurile sunt deschise sau dacă ușile sunt încuiate.

Deasemenea automatizarea sistemului de ventilație asociind funcționarii acestuia un senzor de gaz sporește siguranță.Un exemplu de scenariu real: Nu este nimeni acasă și într-o încăpere sunt scurgeri de gaz.Senzorul le detectează și dacă depășesc pragul critic, se acționează automat sistemul rapid de ventilație.

Sistemele de control și monitorizare locuința sunt pe o pantă ascendentă, iar proprietarii de locuințe doresc din ce în ce mai mult instalarea lor.Un avantaj îl reprezintă faptul că sistemele se pot îmbunătăți pe parcurs, adăugând elemente noi.

Bibliografie

[1] B. Hirl, Energy Efficiency Status Report. 2012. (PDF)

[2] Floroian D.,Moldoveanu F., Microcontrolere,Universitatea Transilvania din Brașov,2009

[3] Alan Trevenor ,Practical AVR Microcontrollers (PDF)

[4] http://webbut.unitbv.ro/Carti%20on-line/BSM/BSM/capitol4.pdf,senzori

[5] https://github.com/Mikhus/canvas-gauges/blob/master/LICENSE, licența afișaj HTML5

[6] https://www.arduino.cc/en/Main/arduinoBoardMega2560, proprietăți Arduino Mega 2650

[7] http://www.w3schools.com/,informatii referitoare la HTML/CSS3/Javascript

Anexa 1 [Licenta utilizare afisaj circular aplicatie web]

The MIT License (MIT)

Copyright (c) 2016 Mykhailo Stadnyk <mikhus@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy

of this software and associated documentation files (the "Software"), to deal

in the Software without restriction, including without limitation the rights

to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

copies of the Software, and to permit persons to whom the Software is

furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in

all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

SOFTWARE.

Anexa 2 [Codul sursă microcontroler]

#include <SPI.h>

#include <Ethernet.h>

#include <SD.h>

#include <Password.h>

#include <Keypad.h>

#include <dht.h>

#include <Wiegand.h>

#define dht_dpin A1 //se defineste pinul analogic pentru senzorul de temperatura

#define MQ2 A2//se defineste pinul analogic pentru senzorul de gaz

#define REQ_BUF_SZ 50 //marime buffer pentru HTTP requests

WIEGAND wg;

dht DHT;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //adreasa MAC a placii Ethernet

IPAddress ip(192, 168, 1, 101); // Adresa IP a placii Ethernet

EthernetServer server(80); // Portul placii Ethernet

File webFile;

char HTTP_req[REQ_BUF_SZ] = {0};

char req_index = 0;

boolean LED_state[5] = {0}; // Statusul ledurilor folosite la butoane

int senzor_magnetic=22,senzor_magnetic2=24; //pini senzori magnetici

int r1=23,r2=25,r3=27,r4=29; //pini relee

int led_w=6,buzzer_w=5;//pini led si buzzer cititor RFID

int prag_setat;

int rel_usa=7;//pin releu folosit la incuietoare

int gaslevel;//variabila valoare senzor gaz

float teset=200;//variabila prag temp setat, initializat cu 20*C

int pir1=37,pir2=41;

const int hallPin = 26;

int hallState = 0;

const int analogIn = A3;

int mVperAmp = 66;

int RawValue= 0;

int ACSoffset = 2500;

double Voltage = 0;

double Amps = 0;

double Watt = 0;

Password password = Password( "1234" );

const byte ROWS = 4; // Four rows

const byte COLS = 4; // columns

// Define the Keymap

char keys[ROWS][COLS] = {

{'1','2','3','A'},

{'4','5','6','B'},

{'7','8','9','C'},

{'*','0','#','D'}

};

byte rowPins[ROWS] = { 35,33,31,36 };

byte colPins[COLS] = { 34,32,30,28, };

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()

{

// dezactivare chip ethernet

pinMode(10, OUTPUT);

digitalWrite(10, HIGH);

Serial.begin(9600); // pentru debugging in serial monitor

// initializare card SD

Serial.println("Initializare card SD…");

if (!SD.begin(4)) {

Serial.println("EROARE! – Initializare card SD esuata!");

return; // initializare esuata

}

Serial.println("SUCCES! – Card SD initializat");

// cauta fisierul .htm

if (!SD.exists("index.htm")) {

Serial.println("EROARE! – Nu gaseste fisierul .htm!");

return; // can't find index file

}

Serial.println("SUCCES! – Fisier .htm gasit!");

Ethernet.begin(mac, ip); // initializare placa Ethernet

server.begin(); // porneste server

//servoMain.attach(42); //pin servo

pinMode(led_w,OUTPUT); //pin led reader

pinMode(buzzer_w,OUTPUT); //pin buzzer reader

digitalWrite(buzzer_w,HIGH);

digitalWrite(led_w,HIGH); //initializate

wg.begin();//initializare reader RFID

DHT.read11(dht_dpin);//citeste valoare senzor de temperatura

pinMode(senzor_magnetic, INPUT_PULLUP); //defineste pin senzor magnetic de tip pull-ip

pinMode(senzor_magnetic2, INPUT_PULLUP); //defineste pin senzor magnetic de tip pull-ip

pinMode(pir1, INPUT);//pin senzor PIR 1

pinMode(pir2, INPUT);//pin senzor PIR 2

pinMode(9, OUTPUT);//test led

pinMode(rel_usa, OUTPUT);//releu incuietoare

pinMode(r1, OUTPUT);//releu 1

pinMode(r2, OUTPUT);//releu 2

pinMode(r3, OUTPUT);//releu 3

pinMode(r4, OUTPUT);//releu 4

digitalWrite(rel_usa, HIGH); //initializare relee oprite

digitalWrite(r1, HIGH);

digitalWrite(r2, HIGH);

digitalWrite(r3, HIGH);

digitalWrite(r4, HIGH);

pinMode(MQ2,INPUT); //initializare senzor gaz

digitalWrite(9, LOW);//led test

pinMode(hallPin, INPUT);

keypad.addEventListener(keypadEvent); //add an event listener for this keypad

}

void loop()

{

EthernetClient client = server.available(); // cauta client

if (client) { // verifica daca exista client

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) { // date client disponibile pentru citit

char c = client.read(); // citeste 1 byte(caracter) de la client

if (req_index < (REQ_BUF_SZ – 1)) {

HTTP_req[req_index] = c; // salveaza caracter

req_index++;

}

if (c == '\n' && currentLineIsBlank) {

// trimite raspuns http standard

client.println("HTTP/1.1 200 OK");

//cerere Ajax

if (StrContains(HTTP_req, "ajax_inputs")) {

// trimite restul raspunsului HTTP

client.println("Content-Type: text/xml");

client.println("Connection: keep-alive");

client.println();

SetLEDs(); //trimite functiile cu statuturile intrarilor

PrimestePrag();

XML_response(client);

}

else { // web page request

// send rest of HTTP header

client.println("Content-Type: text/html");

client.println("Connection: keep-alive");

client.println();

// trimite pagina web

webFile = SD.open("index.htm"); // deschide pagina web

if (webFile) {

while(webFile.available()) {

client.write(webFile.read()); // trimite pagina web clientului

}

webFile.close();

}

}

// afiseaza HTTP request primit pe portul serial

//Serial.print(HTTP_req);

req_index = 0;

StrClear(HTTP_req, REQ_BUF_SZ);

break;

}

// every line of text received from the client ends with \r\n

if (c == '\n') {

// last character on line of received text

// starting new line with next character read

currentLineIsBlank = true;

}

else if (c != '\r') {

// a text character was received from client

currentLineIsBlank = false;

}

} // end if (client.available())

} // end while (client.connected())

delay(1); // give the web browser time to receive the data

client.stop(); // close the connection

} // end if (client)

// verifica temperatura setata cu temperatura primita

if (teset/10<=DHT.temperature) {

digitalWrite(9, LOW); //opreste caldura

}

else if ( teset/10 >DHT.temperature) {

digitalWrite(9,HIGH); //porneste caldura

}

delay(10);

gaslevel=(analogRead(MQ2)); //citeste valoare senzor gaz

hallState = digitalRead(hallPin);//citeste valoare senzor hall

if(wg.available())

{

if(wg.getCode()==748907){

OpenDoor();

}

}

if (hallState == LOW){ //daca usa este inchisa

digitalWrite(rel_usa, HIGH); //incuie usa

digitalWrite(led_w,HIGH);

digitalWrite(buzzer_w,HIGH);

}

keypad.getKey();

RawValue = analogRead(analogIn);

Voltage = (RawValue / 1024.0) * 5000; // Gets you mV

Amps = ((Voltage – ACSoffset) / mVperAmp);

Watt = -(Voltage/10)*Amps;

}

void StrClear(char *str, char length)

{

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

str[i] = 0;

}

}

char StrContains(char *str, char *sfind)

{

char found = 0;

char index = 0;

char len;

len = strlen(str);

if (strlen(sfind) > len) {

return 0;

}

while (index < len) {

if (str[index] == sfind[found]) {

found++;

if (strlen(sfind) == found) {

return 1;

}

}

else {

found = 0;

}

index++;

}

return 0;

}

void SetLEDs(void)

{

// releu 1

if (StrContains(HTTP_req, "LED1=1")) {

LED_state[0] = 1; // state releu 1

digitalWrite(r1, LOW);

}

else if (StrContains(HTTP_req, "LED1=0")) {

LED_state[0] = 0; // state releu 1

digitalWrite(r1, HIGH);

}

if (StrContains(HTTP_req, "LED2=1")) {

LED_state[1] = 1; // state releu 2

digitalWrite(r2, LOW);

}

else if (StrContains(HTTP_req, "LED2=0")) {

LED_state[1] = 0; // state releu 2

digitalWrite(r2, HIGH);

}

if (StrContains(HTTP_req, "LED3=1")) {

LED_state[2] = 1; // state releu 3

digitalWrite(r3, LOW);

}

else if (StrContains(HTTP_req, "LED3=0")) {

LED_state[2] = 0; // state releu 3

digitalWrite(r3, HIGH);

}

if (StrContains(HTTP_req, "LED4=1")) {

LED_state[3] = 1; // state releu 4

digitalWrite(r4, LOW);

}

else if (StrContains(HTTP_req, "LED4=0")) {

LED_state[3] = 0; // state releu 4

digitalWrite(r4, HIGH);

}

if (StrContains(HTTP_req, "LED5=1")) {

LED_state[4] = 1; // state buton incrementare prag temperatura

teset = teset + 5;

}

else if (StrContains(HTTP_req, "LED5=0")) {

LED_state[4] = 0; // state buton incrementare prag temperatura

teset = teset + 5;

}

if (StrContains(HTTP_req, "LED6=1")) {

LED_state[5] = 1; // state buton decrementare prag temperatura

teset = teset – 5;

}

else if (StrContains(HTTP_req, "LED6=0")) {

LED_state[5] = 0; // state buton decrementare prag temperatura

teset = teset – 5;

}

}

void PrimestePrag(void){

String pragul= "";

if (StrContains(HTTP_req, "P20")) {

prag_setat = 20;

digitalWrite(9, LOW);//test led

pragul="Valoare 20";

Serial.println(pragul);

}

else if (StrContains(HTTP_req, "P30")) {

prag_setat = 30;

digitalWrite(9, HIGH);//test led

pragul="Valoare 30";

Serial.println(pragul);

}

}

void XML_response(EthernetClient cl)

{

float analog_val; // variabila valori intrari analogice

int sw_arr[] = {pir1,pir2}; // pini senzori pir

int count;

float temp = DHT.temperature; //variabila temperatura

float umi = DHT.humidity; //variabila umiditate

int numar = 0;

cl.print("<?xml version = \"1.0\" ?>");

cl.print("<inputs>");

analog_val =analogRead(0); //citeste valoare senzor lumina

cl.print("<analog>");

cl.print(analog_val); //trimite valoare luminozitate in primul analog

cl.println("</analog>");

analog_val = temp; //citeste temperatura

cl.print("<analog>");

cl.print(analog_val,1); //trimite temperatura in al doilea analog

cl.print("</analog>");

analog_val = umi; //citeste umiditate

cl.print("<analog>");

cl.print(analog_val); //trimite umiditate in al treilea analog

cl.print("</analog>");

cl.print("<analog>");

cl.print(teset/10,1); //trimite valoare prag setat in al 4-lea analog

cl.println("</analog>");

cl.print("<analog>");

cl.print(gaslevel); //trimite valoare senzor de gaz in al 5-lea analog

cl.println("</analog>");

cl.print("<p>");

if (digitalRead(senzor_magnetic)) { //verifica status senzor magnetic 1 in primul p

cl.println("Deschis!");

//cl.println("&#128227;");

}

else {

cl.println("Inchis!");

}

cl.print("</p>");

cl.print("<p>");

if (digitalRead(senzor_magnetic2)) { //verifica status senzor 2 in al doilea p

cl.println("Deschis!");

}

else {

cl.println("Inchis!");

}

cl.print("</p>");

for (count = 0; count < 2; count++) {

cl.print("<switch>");

if (digitalRead(sw_arr[count])) {

cl.print("DA!");

// cl.print("&#128276");

//servoMain.write(135);

}

else {

cl.print("NU!");

//servoMain.write(90);

}

cl.println("</switch>");

}

cl.print("<LED>");

if (LED_state[0]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.print("<LED>");

if (LED_state[1]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.print("<LED>");

if (LED_state[2]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.print("<LED>");

if (LED_state[3]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.print("<LED>");

if (LED_state[4]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.print("<LED>");

if (LED_state[5]) {

cl.print("on");

}

else {

cl.print("off");

}

cl.println("</LED>");

cl.println("<WIG>");

if(digitalRead(hallPin)==0){

cl.print("Inchisa!");}

else{cl.print("Deschisa!");}

cl.println("</WIG>");

cl.println("<WATT>");

cl.print(Watt,3);

cl.println("</WATT>");

cl.print("</inputs>");

}

void OpenDoor(){

digitalWrite(rel_usa, LOW);

digitalWrite(led_w,LOW);

digitalWrite(buzzer_w,LOW);

delay(3000);

}

void keypadEvent(KeypadEvent eKey){

switch (keypad.getState()){

case PRESSED:

Serial.print("Pressed: ");

Serial.println(eKey);

switch (eKey){

case '*': checkPassword(); break;

case '#': password.reset(); break;

default: password.append(eKey);

}

}

}

void checkPassword(){

if (password.evaluate()){

Serial.println("Success");

OpenDoor();

//Add code to run if it works

}else{

Serial.println("Wrong");

//add code to run if it did not work

}

}

Anexa 3 [Codul sursă al paginii web]

<!DOCTYPE html>

<html>

<head>

<title>Home Automation</title>

<script>

var data_val = 0; //valoare senzor iluminare

var data_val1 = 0;//valoare senzor temperatura

var data_val2 = 0;//valoare senzor umiditate

var data_val3 = 0;//valoare senzor curent

var data_val4 = 0;//valoare prag setat

var data_val5 = 0;

strLED1 = "";//releu 1

strLED2 = "";//releu 2

strLED3 = "";//releu 3

strLED4 = "";//releu 4

strLED5 = "";//prag+

strLED6 = "";//prag-

var LED1_state = 0;//status releu 1

var LED2_state = 0;//status releu 2

var LED3_state = 0;//status releu 3

var LED4_state = 0;//status releu 4

var LED5_state = 0;//status prag+

var LED6_state = 0;//status prag-

var LED_state = 0;

var prag_setat = 0;//valoare prag temperatura

<!– Gauge Code vezi licenta –>

function GetArduinoIO()

{

nocache = "&nocache=" + Math.random() * 1000000;

var request = new XMLHttpRequest();

request.onreadystatechange = function()

{

if (this.readyState == 4) {

if (this.status == 200) {

if (this.responseXML != null) {

var count;

//intrari analogice

document.getElementById("senzor_iluminare").innerHTML = //senzor iluminare

this.responseXML.getElementsByTagName('analog')[0].childNodes[0].nodeValue;

document.getElementById("senzor_temperatura").innerHTML = //senzor temperatura

this.responseXML.getElementsByTagName('analog')[1].childNodes[0].nodeValue;

document.getElementById("senzor_umiditate").innerHTML = //senzor umiditate

this.responseXML.getElementsByTagName('analog')[2].childNodes[0].nodeValue;

document.getElementById("termostat").innerHTML = //valoare prag setat

this.responseXML.getElementsByTagName('analog')[3].childNodes[0].nodeValue;

document.getElementById("senzor_gaz").innerHTML = //valoare senzor gaz

this.responseXML.getElementsByTagName('analog')[4].childNodes[0].nodeValue;

data_val = this.responseXML.getElementsByTagName('analog')[0].childNodes[0].nodeValue;

data_val1 = this.responseXML.getElementsByTagName('analog')[1].childNodes[0].nodeValue;

data_val2 = this.responseXML.getElementsByTagName('analog')[2].childNodes[0].nodeValue;

data_val4= this.responseXML.getElementsByTagName('analog')[3].childNodes[0].nodeValue; //val prag setat

data_val5= this.responseXML.getElementsByTagName('analog')[4].childNodes[0].nodeValue; //val nivel gaz

data_val3= this.responseXML.getElementsByTagName('WATT')[0].childNodes[0].nodeValue; //valoare consum energie electrica

document.getElementById("aer_m").value = data_val5; //modifica meter calitate aer

document.getElementById("snzmag").innerHTML = //senzor magnetic 1

this.responseXML.getElementsByTagName('p')[0].childNodes[0].nodeValue;

document.getElementById("snzmag2").innerHTML = //senzor magnetic 2

this.responseXML.getElementsByTagName('p')[1].childNodes[0].nodeValue;

document.getElementById("usa").innerHTML = //reader proximitate

this.responseXML.getElementsByTagName('WIG')[0].childNodes[0].nodeValue;

//citire senzori prezenta

var num_an = this.responseXML.getElementsByTagName('switch').length;

for (count = 0; count < num_an; count++) {

document.getElementsByClassName("switches")[count].innerHTML =

this.responseXML.getElementsByTagName('switch')[count].childNodes[0].nodeValue;

}

//verificare status releee

// releu 1

if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "on") {

document.getElementById("LED1").innerHTML = "ON";

LED1_state = 1;

}

else {

document.getElementById("LED1").innerHTML = "OFF";

LED1_state = 0;

}

// releu 2

if (this.responseXML.getElementsByTagName('LED')[1].childNodes[0].nodeValue === "on") {

document.getElementById("LED2").innerHTML = "ON";

LED2_state = 1;

}

else {

document.getElementById("LED2").innerHTML = "OFF";

LED2_state = 0;

}

// releu 3

if (this.responseXML.getElementsByTagName('LED')[2].childNodes[0].nodeValue === "on") {

document.getElementById("LED3").innerHTML = "ON";

LED3_state = 1;

}

else {

document.getElementById("LED3").innerHTML = "OFF";

LED3_state = 0;

}

// releu 4

if (this.responseXML.getElementsByTagName('LED')[3].childNodes[0].nodeValue === "on") {

document.getElementById("LED4").innerHTML = "ON";

LED4_state = 1;

}

else {

document.getElementById("LED4").innerHTML = "OFF";

LED4_state = 0;

}

// LED 5

if (this.responseXML.getElementsByTagName('LED')[4].childNodes[0].nodeValue === "on") {

document.getElementById("LED5").innerHTML = "+";

LED5_state = 1;

}

else {

document.getElementById("LED5").innerHTML = "+";

LED5_state = 0;

}

// LED 6

if (this.responseXML.getElementsByTagName('LED')[5].childNodes[0].nodeValue === "on") {

document.getElementById("LED6").innerHTML = "-";

LED6_state = 1;

}

else {

document.getElementById("LED6").innerHTML = "-";

LED6_state = 0;

}

}

}

}

}

// send HTTP GET request with LEDs to switch on/off if any

request.open("GET", "ajax_inputs" + strLED1 + strLED2 + strLED3 + strLED4 + strLED5 + strLED6 + prag_setat + nocache, true);

request.send(null);

setTimeout('GetArduinoIO()', 500);//refresh time

strLED1 = "";

strLED2 = "";

strLED3 = "";

strLED4 = "";

strLED5 = "";

strLED6 = "";

prag_setat ="";//trimite catre arduino

}

function GetButton1() //functie buton releu 1

{

if (LED1_state === 1) {

LED1_state = 0;

strLED1 = "&LED1=0";

}

else {

LED1_state = 1;

strLED1 = "&LED1=1";

}

}

function GetButton2() //functie buton releu 2

{

if (LED2_state === 1) {

LED2_state = 0;

strLED2 = "&LED2=0";

}

else {

LED2_state = 1;

strLED2 = "&LED2=1";

}

}

function GetButton3() //functie buton releu 3

{

if (LED3_state === 1) {

LED3_state = 0;

strLED3 = "&LED3=0";

}

else {

LED3_state = 1;

strLED3 = "&LED3=1";

}

}

function GetButton4() //functie buton releu 4

{

if (LED4_state === 1) {

LED4_state = 0;

strLED4 = "&LED4=0";

}

else {

LED4_state = 1;

strLED4 = "&LED4=1";

}

}

function GetButton5() //functie buton termostat +

{

if (LED5_state === 1) {

LED5_state = 0;

strLED5 = "&LED5=0";

}

else {

LED5_state = 1;

strLED5 = "&LED5=1";

}

}

function GetButton6() //functie buton termostat –

{

if (LED6_state === 1) {

LED6_state = 0;

strLED6 = "&LED6=0";

}

else {

LED6_state = 1;

strLED6 = "&LED6=1";

}

}

function check(form) { //functie autentificare

if(form.userid.value == "user" && form.pswrd.value == "P@ssw0rd") {

document.getElementById("myDIV").style.display = "none";

}

else {

alert("Error Password or Username")

}

}

function sendValue15(){ //functie trimitere prag catre MCU

prag_setat = "P15";

}

function sendValue20(){ //functie trimitere prag catre MCU

prag_setat = "P20";

}

function sendValue25(){ //functie trimitere prag catre MCU

prag_setat = "P25";

}

function sendValue30(){ //functie trimitere prag catre MCU

prag_setat = "P30";

}

</script>

<style>

table, th, td { /*stil general tabele*/

border-collapse: collapse;

}

th, td {

padding: 5px;

text-align: left;

vertical-align: top;

}

table{

height:100%;width:100%;

}

table#t01{

width:100%;

}

table#t02{

width:100%;

}

table#t03{

width:100%;

}

table#t04{

width:100%;

}

th#sec{ /*stil caseta securitate*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#usa_intrare{ /*stil caseta usa intrare*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#tmp{ /*stil caseta temperatura*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#umi{ /*stil caseta umiditate*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#lum{ /*sil caseta control lumini*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#con{ /*stil caseta consum*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#aer{ /*stil caseta aer*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#ilu{ /*sil caseta luminozitate*/

color:black;

background-color: #a3c2c2;

text-align:center;

font:bold 18px Georgia, serif;

}

th#logo{ /*stil caseta logo home*/

color:#b3cccc;

background-color: #1f2e2e;

text-align:center;

font-size: 300%;

}

th#bot{ /*stil caseta bottom*/

color:#b3cccc;

background-color: #1f2e2e;

text-align:center;

font-size: 150%;

}

p#sec01{ /*sil text securitate*/

text-align: left;

}

p#usa01{ /*sil text usa intrare*/

text-align: left;

}

p#usa02{ /*sil text usa intrare*/

text-align: left;

}

p#tmp01{ /*stil text temperatura*/

text-align: center;

font-size: 80%;

}

p#lum01{ /*stil text control lumini*/

text-align:left;

font-size:80%;

}

p#con01{ /*stil gauge consum energie electrica*/

text-align:left;

}

meter { /*stil bar-metter nivel aer*/

width: 300px;

height: 15px;

border: 1px solid #ccc;

border-radius: 3px;

}

#myDIV { /*stil div autentificare*/

position: absolute;

width: 100%;

height: 100%;

background-color: lightblue;

display:none; /*modifica la final*/

}

h1#autentificare{ /*stil text autentificare*/

color:red;

text-align:center;

}

form#pass { /*stil caseta user&password*/

display: block;

margin-top: 0em;

text-align:center;

}

/*–––––––––––––––––stil buton random*/

.buttonS {

background-color: #4CAF50;

border: none;

color: white;

padding: 10px 22px;

text-align: center;

text-decoration: none;

display: inline-block;

font-size: 16px;

margin: 4px 2px;

cursor: pointer;

border-radius: 4px;

border: 2px solid #40ff50;

}

.buttonS:hover {

background-color: #40ff50;

color: black;

border: 2px solid white;

box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);

}

.buttonS:active {

background-color: #3e8e41;

box-shadow: 0 5px #666;

transform: translateY(4px);

}

/*–––––––––––––––––stil buton control lumini*/

.buttonL {

display: inline-block;

padding: 5px 25px;

font-size: 15px;

cursor: pointer;

text-align: center;

text-decoration: none;

outline: none;

color: #fff;

background-color: #4CAF50;

border: none;

border-radius: 5px;

box-shadow: 0 9px #666;

}

.buttonL:hover {background-color: #3e8e41}

.buttonL:active {

background-color: #3e8e41;

box-shadow: 0 5px #666;

transform: translateY(4px);

}

/*–––––––––––––––––stil buton prag temperatura*/

.buttonT {

display: inline-block;

padding: 7px 20px;

font-size: 15px;

cursor: pointer;

text-align: center;

text-decoration: none;

outline: none;

color: #fff;

background-color: #01A9DB;

border: none;

border-radius: 5px;

box-shadow: 0 7px #666;

}

.buttonT:hover {background-color: #0080FF}

.buttonT:active {

background-color: #0080FF;

box-shadow: 0 3px #666;

transform: translateY(4px);

}

#chenar1{

width: 100%;

padding: 12px 20px;

margin: 8px 0;

box-sizing: border-box;

border: none;

background-color: #3CBC8D;

color: white;

}

</style>

</head>

<body onload="GetArduinoIO()" bgcolor="#1f2e2e"> <!–updateaza datele primite de la MCU–>

<div id="myDIV"><br></br><br></br><br></br> <!–div-ul de autentificare–>

<h1 id="autentificare"> User Autentification </h1>

<form name="login" id="pass">

Username<input type="text" name="userid"/><br></br>

Password<input type="password" name="pswrd"/><br></br>

<input type="button" onclick="check(this.form)" value="Login"/>

<input type="reset" value="Cancel"/>

</form>

</div>

<table id="t01"> <!–tabel nr1–>

<tr><th id="logo" > Monitorizare si control parametrii locuinta</th> <!–logo home–>

</table>

<table id="t02"> <!–tabel nr2–>

<tr> <!–caseta securitate–>

<th id="sec"><p id="chenar1" >SECURITATE</p>

<p id="sec01">Geam dormitor:</p><p id="snzmag">Inchis!</p>

<p id="sec01">Geam intrare:</p> <p id="snzmag2">Inchis!</p>

<hr>

<p id="sec01">Prezenta Hol:</p> <span class="switches">NU</span>

<p id="sec01">Prezenta Intrare:</p><span class="switches">NU</span>

</th>

<th id="usa_intrare"> <p id="chenar1" >USA INTRARE <p> <!–caseta usa intrare–>

<p id="usa01"> Status usa:</p> <p id="usa">Inchisa!</p>

<hr>

<p id="usa02"> Status incuietoare: </p> <p id="incuietoare">Inchisa!</p>

</th>

<th id="tmp"><p id="chenar1" >TEMPERATURA: <p>

&nbsp;&nbsp;&nbsp;&nbsp;

<canvas id="an_gauge_1" data-title="Temperatura" data-units=" &deg;C" width="200" height="200" data-major-ticks="-10 0 10 20 30 40 50 60 70 80 90" data-type="canv-gauge" data-min-value="-10" data-max-value="90" data-highlights="-10 0 #80ffe5, 0 20 #79d2a6, 20 30 #79d279, 30 50 #ffa366, 50 90 #ff6666" data-onready="setInterval( function() { Gauge.Collection.get('an_gauge_1').setValue(data_val1);}, 200);"></canvas>

<form method="post" action="" id="temp_form">

<p id="tmp01">Setare prag:

<!–<button type="button" onclick="sendValue15()" class="buttonT">15</button>

<button type="button" onclick="sendValue20()" class="buttonT">20</button>

<button type="button" onclick="sendValue25()" class="buttonT">25</button>

<button type="button" onclick="sendValue30()" class="buttonT">30</button>

–>

<button type="button" id="LED6" onclick="GetButton6()" class="buttonT">-</button>

<span id="termostat">…</span>

<button type="button" id="LED5" onclick="GetButton5()" class="buttonT">+</button>

</p>

</form>

</th>

<th id="umi"><p id="chenar1" >UMIDITATE:</p>

<canvas id="an_gauge_2" data-title="Umiditate" data-units=" %RH" width="200" height="200" data-major-ticks="0 10 20 30 40 50 60 70 80 90 100" data-type="canv-gauge" data-min-value="0" data-max-value="100" data-highlights="0 30 #ffa366, 30 70 #ffff80, 70 100 #79d279" data-onready="setInterval( function() { Gauge.Collection.get('an_gauge_2').setValue(data_val2);}, 200);"></canvas>

</th>

<th id="lum"><p id="chenar1" >CONTROL LUMINI </p> <!–caseta control lumini–>

<hr>

<div align="left"><p id="lum01"> Dormitor I:</div> <div align="right"><button type="button" id="LED1" onclick="GetButton1()" class="buttonL">OFF</button></div></p>

<!–<div align="left"><p id="lum01">Hol:</div> <div align="right"><button type="button" id="LED2" onclick="GetButton2()" class="buttonL">OFF</button></div></p>–>

<hr>

<div align="left"><p id="lum01"> Dormitor II:</div> <div align="right"><button type="button" id="LED3" onclick="GetButton3()" class="buttonL">OFF</button></div></p>

<hr>

<div align="left"><p id="lum01"> Living:</div> <div align="right"><button type="button" id="LED4" onclick="GetButton4()" class="buttonL">OFF</button></div></p>

<hr>

</th>

</tr>

</table><br><br>

<table id="t03"> <!–tabel nr3–>

<tr>

<th id="con" ><p id="chenar1" >CONSUM ENERGIE ELECTRICA </p><!–caseta consum energie electrica–>

<p id="con01"><canvas id="an_gauge_3" data-title="Consum" data-units="W" width="250" height="250" data-major-ticks="0 500 1500 2000 2500 3000 4000 5000 6000 7000 10000" data-type="canv-gauge" data-min-value="0" data-max-value="10000" data-highlights="0 2000 #79d279, 2000 5000 #ffff80, 5000 10000 #ff6666" data-onready="setInterval( function() { Gauge.Collection.get('an_gauge_3').setValue(data_val3);}, 200);"></canvas>

</p>

</th>

<th id="aer"> <p id="chenar1" >NIVEL CALITATE AER</p> <!–caseta calitate aer–>

<meter min="0" low="350" high="400" max="1023" value="0" id="aer_m" ></meter><br>

<span id="senzor_gaz"> … </span>

</th>

<th id="ilu"><p id="chenar1" > NIVEL ILUMINARE</p> <!–caseta nivel iluminare–>

<span id="senzor_iluminare"> … </span>

</th>

</tr>

</table>

<table id="t04"> <!–tabel nr4–>

<tr><th id="bot" >Universitatea Transilvania din Brasov <hr>Facultatea de Inginerie Electrica si Stiinta Calculatoarelor</th>

</tr>

</table>

</body>

</html>

Similar Posts

  • 1.1. Legislația privind managementul deșeurilor în Europa și în România

    Introducere Încă de la începuturile activității creative ale primelor comunități omenești, acestea au avut efecte asupra mediului natural, inclusiv prin deșeurile pe care le produceau. Pentru făurirea uneltelor de piatră, omul a realizat primele cariere sau exploatări de resurse minerale care au produs o cantitate foarte mare de deșeuri în raport cu cantitatea de rocă…

  • Procese morfodinamice și riscuri seismice în Subcarpații Vrancei [306304]

    UNIVERSITATEA BUCUREȘTI Facultatea de Geografie Procese morfodinamice și riscuri seismice în Subcarpații Vrancei Îndrumător științific: Verga Mihaela Absolvent: [anonimizat] 2016 UNIVERSITATEA BUCUREȘTI Facultatea de Geografie Domeniul: Programul de studii Procese morfodinamice și riscuri seismice în Subcarpații Vrancei Îndrumător științific: Verga Mihaela Absolvent: [anonimizat] 2016 [anonimizat], [anonimizat] , [anonimizat].[anonimizat], [anonimizat], [anonimizat]. [anonimizat] a pagubelor produse în…

  • Materialul conține principii ale schimb ării [600631]

    Materialul conține principii ale schimb ării procesului de învățământ pe care le -am studiat prin participarea la cursul Erasmus+ ―Teaching Tomorrow‖ organizat în Malta, perioada 4 -11 noiembrie 2017. Elemente scrise ale cursului au fost traduse din limba engleză, adaptate și sintetizate pentru a fi diseminate. Prof. dr. Gabriel State, Colegiul Național ―Ienăchiță Văcărescu ‖Târgoviște…

  • SPECIALIZAREA : INGINERIE ECONOMICA INDUSTRIAL Ă [608867]

    UNIVERSITATEA TEHNICĂ DIN CLUJ-NAPOCA FACULTATEA CONSTRUCȚII DE MAȘINI SPECIALIZAREA : INGINERIE ECONOMICA INDUSTRIAL Ă Lucrare de diplomă Absolvent: [anonimizat] 2019 CUPRINS REZUMAT ………………………….. ………………………….. ………………………….. ………………………….. … 3 SUMMARY ………………………….. ………………………….. ………………………….. ………………………….. .. 4 INTRODUCERE ………………………….. ………………………….. ………………………….. ……………………….. 9 1. Noțiuni teoretice privind managementul stocurilor ………………………….. ………………………. 10 1.2. Locul sistemelor de stocuri…

  • METODE FIZICE MODERNE UTILIZATE ÎN RECUPERAREA MEDICALĂ PENTRU CONTROLUL DURERII CRONICE [309874]

    [anonimizat]: Lect. Dr. Ailioaie M. Laura Prof. Dr. Ailioaie D. Constantin Absolvent: [anonimizat] 2019 Iași CUPRINS PARTEA GENERALĂ CAPITOLUL I – FORMELE DURERII ȘI EFECTELE ACESTEIA Motivația alegerii temei……………………………………………………………………………………1 Obiectivele temei…………………………………………………………………………………………….1 Durerea…………………………………………………………………………………………………………2 Definiție și statistici……………………………………………………………………………….2 Etiologie……………………………………………………………………………………………….3 Clasificare…………………………………………………………………………………………….5 Cauze, simptome și factori de risc……………………………………………………………7 Investigația……………………………………………………………………………………………8 Tratament……………………………………………………………………………………………..9 [anonimizat]……………………………………………………………………………………………….12 [anonimizat]…………………………………………………………………..14 Curentul de joasă frecvență……………………………………………………………………18 Curentul de medie frecvență………………………………………………………………….20…

  • Satisfacţia Pacientului În Condiţiile Spitaliceşti [605587]

    212 4. Politicile de combatere a obesității.Monitor Politici de sănătate. Institutul de sănătate ș i asisitență Socială.Buletin electronic. Nr.1, 2011. 5. Lloyd -Jones D, Adams R, Carnethon M, et al. Heart disease and stroke statistics —2009 update: a report from the American Heart Association Statistics Committee and Stroke Statistics Subcommittee. Circu lation. 2009;119:e21 -e181. 6….