Programul de studii Automatică și.informatică aplicată [613687]

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automatică și Tehnologia Informației
Programul de studii Automatică și.informatică aplicată
2
Cuprins

1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. …… 4
1.1. De ce microcontroler? ………………………….. ………………………….. ………………………….. …………. 5
1.2. Scurt istoric ………………………….. ………………………….. ………………………….. ……………………….. 6
Automate programabile ………………………….. ………………………….. ………………………….. …………………….. 8
1.3. Definiție ………………………….. ………………………….. ………………………….. ………………………….. .. 8
1.4. Panouri de automatizare clasice ………………………….. ………………………….. ………………………… 8
1.5. Panouri d e automatizare cu automate programabile ………………………….. …………………………. 9
1.6. Componentele automatelor programabile ………………………….. ………………………….. …………. 11
2. Microcontroler ………………………….. ………………………….. ………………………….. ………………………… 13
2.1. Definiție ………………………….. ………………………….. ………………………….. ………………………….. 13
3.2. Arhitectura unui microcontroler ………………………….. ………………………….. ………………………….. . 15
3. Instrumente utilizate ………………………….. ………………………….. ………………………….. …………………. 18
3.1. Arduino ………………………….. ………………………….. ………………………….. ………………………….. . 18
4.1.1 Generalități ………………………….. ………………………….. ………………………….. ……………………… 18
4.1.2. Arguino Mega ………………………….. ………………………….. ………………………….. ………………… 19
3.2. Senzori ………………………….. ………………………….. ………………………….. ………………………….. .. 21
3.2.1. Senzorul de temperatura si umiditate DHT11 ………………………….. …………………………. 22
3.2.2. Senzorul infrarosu pasiv (PIR -Passive Invrared Sensor) ………………………….. ………….. 23
3.2.3. Senzorul magnetic ………………………….. ………………………….. ………………………….. ……… 24
3.2.4. Senzorul de lumină ………………………….. ………………………….. ………………………….. …….. 25
4. Alte medii de programar e ………………………….. ………………………….. ………………………….. …………. 26
4.1. HTML ………………………….. ………………………….. ………………………….. ………………………….. … 26
4.2. CSS ………………………….. ………………………….. ………………………….. ………………………….. ……. 27
4.3. Java ………………………….. ………………………….. ………………………….. ………………………….. ……. 28
4.4. Ajax ………………………….. ………………………….. ………………………….. ………………………….. ……. 29
5. Implementare ………………………….. ………………………….. ………………………….. ………………………….. 31
5.1. Instalarea IDE -ului Arduino ………………………….. ………………………….. ………………………….. .. 31
5.2. Realizarea circuitului ………………………….. ………………………….. ………………………….. ………… 34
5.3. Scrierea codului sursă ………………………….. ………………………….. ………………………….. ……….. 35
5.4. Accesare Mega dintr -o pagină web ………………………….. ………………………….. ………………….. 39
5.5. Realizare pagină web ………………………….. ………………………….. ………………………….. ………… 40
6. Posibilități de dezvoltare ………………………….. ………………………….. ………………………….. …………… 44
7. Concluzii finale ………………………….. ………………………….. ………………………….. ……………………….. 45

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

3
8. Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. … 46
9. Webografie ………………………….. ………………………….. ………………………….. ………………………….. …. 47
10. Anexe ………………………….. ………………………….. ………………………….. ………………………….. …….. 48
10.1. Cod sursă Arduino ………………………….. ………………………….. ………………………….. ………… 48
10.2. Cod sursă HTML ………………………….. ………………………….. ………………………….. ……………. 59
10.3. Licență Gauge ………………………….. ………………………….. ………………………….. ……………….. 74

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

4

1. Introducere

Lucrarea de față își propune să pună în practică una dintre cele mai actuale modalități de
tehnologizare prin intermediul inteligenței artificiale și anume implementarea de sisteme
automate capabile să genereze confort, siguranță, dar și un control eficien t al resurselor
energetice actuale.
Globalizarea este un fenomen care redefinește ceea ce a existat pană acum. Tehnologiile
evoluează într -un ritm galopant, iar implementarea de sisteme automatizate devine din ce în ce
mai comună. Principalul motiv îl rep rezintă dorința de independeță față de activitățile zilnice
umane, dar mai ales câștigarea a cât mai mult timp liber pe care oamenii să -l petreacă alături
de membrii familiei.
În ultimii 20 de ani s -a înregistrat un boom al evoluției informaționale, iar componentele
capabile să gestioneze anumite baze de date au devenit mult mai eficiente și mult mai bine
integrate, astfel încât să nu ocupe fizic mai mult decât este cazul. Posibilitățile multiple pe care
le oferă sfera sistemelor automatizate m -a determin at să aleg microcontrollerele pentru că se
pretează pentru o gamă largă de electronice și electrocasnice.
Mai mult de atât automatele programate ar fi supradimensionate pentru o locuință, iar
costurile de investiție nu ar fi justificate, tocmai de accea c ea mai bună soluție privind raportul
utilitate/ cost produs o reprezintă microcontrollerele. Casele inteligente fie sunt proiectate de
la bun început cu astfel de sisteme automatizate fie sunt dotate în funcție de necesitățile
individuale.
În cadrul proie ctului de față mi -am propus să utilizez microcontrollere care să ofere confort
în reglarea parametrilor de ambianță termică, eliminarea risipei de energie electrică prin
montarea de senzori capabili să genereze lumină artificială în condiții de prezență a
întunericului și a mișcării, sporirea securității locuinței și a membrilor familiei prin
supraveghere și înregistrare a activității zilnice în timp real.
Ideea de control de la distață facilitează o mai bună coordonare a situației mediului
ambiental din c adrul locuinței prin simpla acționare a programului instalat pe gadgeturi cum ar

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

5
fi tabletele și telefoanele. Desigur acționarea se poate realiza și prin intermediul unui laptop
interconectat. Cel mai important lucru al controlului de la distanța este acel a că membrii
familiei pot fi supravegheați în timp real chiar și atunci când lipsești de acasă. Acest lucru
definește siguranța familiei și se pretează mai ales pentru oamenii care au copii mici sau parintii
la vârste înaintate.
Cu noile modalități de con trol informatic se poate face față la tot ceea ce este denumit drept
stres, care defapt se traduce prin lipsa de timp pentru a rezolva activități pe care acum patru
decenii nici nu ne închipuiam că le putem face. Tocmai de accea consider implementarea unui
astfel de proiect o idee de succes menită să vină în ajutorul omului pre a ocupat al mileniului
trei.
1.1.De ce microcontroler?

O casă inteligentă sau clădire inteligenta este o casă sau clădire, de obicei nouă, care este
echipată cu cabluri structurate special pentru a permite ocupanților să controleze sau să
programeze o serie de dispozitive electronice pentru casa automata, prin introducerea unei
singure comenzi de la distanță.
De exemplu, un proprietar ce se află în vacanță se poate folosi de un telefon pentru a arma
sistemul de securitate al locuinței, a controla temperatura, aprinde sau închide anumite aparate
electrocasnice, controlul luminilor sau multe alte sarcini definite de utilizator.
Conform piramidei lui Maslow, la baza cerințelor omului se află nevoile fiziologice primare
urmate de siguranța si securitatea personală . Nevoia de siguranță poate fi satisfăcută cu ajutorul
unui sistem de securitate inteligent, iar totul fiind posibil de controlat de la distanță cu ajutorul
unui dispozitiv prin intermediul căruia se poate accesa casa inteligentă.
Pentru a putea controla t oate aceste dispozitive de la distanță trebuie ales un mod de
implementare al acestor dispozitive, iar pentru a putea realiza această implementare am avut
de ales între automatizarea cu PLC si automatizarea cu Arduino. Pentru o mai bună decizie a
fost nece sară o analiză a avantajelor si dezavantajelor fiecărui tip de automatizare.
În urma analizei diferențelor dintre PLC și Arduino am decis să îl utilizez pe cel de al doilea
pentru a pune bazele automatizării unui Smart House. Analizând atât avantajele cât si
dezavantajele celor două am ajuns la concluzia că Arduino este cel mai potrivit pentru acest
caz.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

6
Luând în considerare faptul că vorbim de automatizarea unui sistem la nivel mai mic am
decis să îl utilizez pe acesta si nu un PLC deoarece sistemul pentru un smart house nu implică
o automatizare la nivel industrial, unde este necesar să se folosească un automat programabil.
Sunt zone în industrie unde se folosesc automatele programabile în locul plăcilor Arduino,
chiar dacă aceste plăci ar reprezenta o sol uție mai bună și mai ieftină, dar cu toate aceste există
totuși procese industriale ce necesită utilizarea unui PLC.
Cred că cel mai important lucru este să înțelegem domeniul de utilizare si abia apoi să luam
o decizie. Arduino reprezintă alegerea perfect ă pentru aplicații de automatizări pentru
laboratoare, proiecte făcute acasă și chiar și pentru aspectele legate de crearea de prototipuri
ale sistemelor integrate.

1.2. Scurt istoric

În ciuda faptului că acest sistem este relativ modern el are în spate o istorie vastă, bazele
sale fiind puse încă din cele mai vechi timpuri. Se pare că încă din anul 270 înainte de Hristos
oamenii au fost curioși să controleze automat lucrurile înconjurătoare și astfel au pus bazele
unui ceas pe apă. Mai târziu, prin jurul a nilor 1700 René -Antoine Ferchault de Réaumur (1683 –
1757) a încercat să controleze temperatura din incubatoare, și și -a bazat ideea pe invenția lui
Corneliul Drebbel. Foloseau un vas în formă de „U” ce conținea mercur și acționa un mâner al
unui furnal care controla refluxul de căldură prin măsurarea constantă a temperaturii.
Totodată au existat si varii încercări de a controla motorul cu aburi de -a lungul timpului
fapt ce a contribuit la dezvoltarea acestor sisteme automate. Au apărut îmbunătățiri odată cu
apariție armelor noi, navelor de dimensiuni mai mari și mai ales odată cu apariție sistemelor
propulsive performante unde pentru a controla mecanismele de poziție ale acestora se folosea
puterea pneumatică. Apariția electricității a avut și ea un rol foa rte important în dezvoltarea
automatelor programabile, deoarece atunci a fost dezvoltat și primul regulator PID. Cel care a
pus bazele acestui sistem a fost nimeni altul decât Elmer Sperry, iar acest prim regulator a fost
folosit chiar pentru manevrarea un ei nave în anul 1911.
Cu toate acestea, legea asociată buclei regulatorului PID a fost stabilită de Nicholas
Minorsky, iar conform acestuia au existat trei factori ce implicau buna funcționare a
regulatorului în raport cu nava. Primul factor consta în ori entarea navei raportând direcția
acesteia la direcția dorită și reprezintă factorul proporțional, cel integrativ este cel ce implică

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

7
corecția unei erori, cel de -al treile, derivativ, fiind cel ce favorizează repararea erorii prin
anticiparea nevoii corectă rii acesteia, fiind capabil să observe variația unui proces.
Evoluția sistemelor automate a atins un punct culminant în perioada secolului al XX -lea
când s -au pus bazele unei prime organizații profesionale în acest sens. Organizația a fost creată
în anul 1936 și avea ca denumire „Industrial Instruments and Regulators Committee”, scopul
ei principal fiind reprezentat de stabilirea unui standard pentru metodele de control automat.
Luând exemplul acesteia, în jurul anilor 1940 -1950 o mulțime de companii și -au îmbunătățit
produsele, încercând să atingă aceste standarde.
Existența electronicelor și calculatoarelor din ziua de azi ce utilizează sisteme automate
performante, se datorează acestei evoluții rapide, în special din timpul secolului trecut când
aceast a a cunoscut o perioadă de înflorire în adevăratul sens al cuvântului, punându -se bazele
noilor sisteme automate de programare. De atunci, lucrurile au evoluat constant, ținând pasul
cu noile tehnologii și fiind la curent cu ultimele tendințe în domeniu.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

8
Automate programabile
1.3.Definiție

Sistemele de control a proceselor reprezinta o multitudine de dispozitive electronice ce
ofera performanta, stabilitate și precizie. Sistemele de operare au forme variate de
implementare pornind de la surse de alimentare și până la mașini. Prin interconect area în sistem
a unor automate programabile și unități centrale de proces se pot rezolva si cele mai complicate
probleme ce pot aparea in proces.
Automatele programabile ( PLC – Programmable Logic Controller ) pe lângă conexiunea
cu aparatele de măsură și senzorii din procesul de automatizare, va trebui să comande întregul
proces și să comunice operatorului stările procesului prin diferite mijloace cum ar fi
transmiterea de semnale vizuale sau acustice sau chiar prin intermediul comunicării cu un
computer l ocal sau HMI (Human Machine Interface ). Datorita monitorizării parametrilor de
baza ai procesului se pot pune in evidenta valentele automatizării.
1.4.Panouri de automatizare clasice

Odată cu revoluția industrială s -a început folosirea releelor electromagnetice pentru
automatizarea proceselor sau în componența panourilor de automatizare, acest lucru a
determinat și utilizarea a mai multor cabluri pentru conexiunea releelor. În unele situații panoul
de automatizarea avea dimensiunea unui perete în treg. În cazul apariției unei erori in sistemul
de automatizare era nevoie de o perioada mai lunga de timp pentru găsirea acesteia iar durata
de timp creștea odată cu nivelul de dificultate al instalației de automatizare.
Un dezavantaj major al releului e lectromagnetic îl constituie ciclul de viață scurt cauzat de
modul de construcție dar si de modul de operare al acestuia. Problemele apărute în instalația
de automatizare se datorau problemelor de fiabilitate scăzută a releelor din componenta
panoului de a utomatizare, lucru ce se încheia cu înlocuirea frecventa a acestora. Întreținerea
era costisitoare și punea probleme chiar si celor mai experimentați electricieni in găsirea si
remedierea defecțiunii.
În general, un panou de automatizare putea conduce doa r un singur proces si nu putea ține
pasul cu evoluția noilor tehnologii de lucru. Putem spune că panourile de automatizare
convenționale nu sunt maleabile, deoarece trebuia schimbat modul de funcționare al panoului

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

9
sau a unor piese componente pentru a se p utea îmbunătăți parametrii de proces a sistemului de
automatizare.
În Fig. 1 se poate observa structura unui panou de automatizare convențional, însă acesta
nu este atât de complex cum au fost unele panouri convenționale din perioada respectivă.

Fig. 1 Panou Automatizare Convențional

Dezavantajele majore ale panourilor de automatizare convenționale sunt:
– Manopera costisitoare pentru conexiunea cablurilor
– Complexitate ridicată pentru schimbarea sau înlocuirea componentelor
– Dificultăți în descoperirea erorilor, necesită electricieni pricepuți și cu experiență vastă
– Timpul de remediere a problemelor nu se poate stabili cu exactitate

1.5.Panouri de automatizare cu automate programabile

Structura de proiectare a sistemelor de control automate s -a schimbat considerabil odată cu
concepția a utomatului programabil. În Fig. 2 avem prezentat un panou de automatizare cu
PLC.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

10

Fig. 2 Panou Automatizare cu PLC

PLC-ul utilizează cu pana la 80% mai puține conductoare in comparație cu panoul de
automatizare conven țional, iar consumul de energie se reduce considerabil deoarece automatul
programabil utilizează o cantitate de energie electrică mult mai mică față de releele din
componența panoului de automatizare convențional.
Identificarea erorilor din automatul progr amabil este foarte rapidă. Iar pentru a schimba
modul de operare a aplicației se realizează foarte ușor prin schimbarea unor secvențe de
program sau înlocuirea programului scris in memoria automatului programabil, totul se face cu
ajutorul unu PC (pentru a modifica modul de operare al PLC -ului nu trebuie schimbată
structura panoului de automatizare cum era necesar la panourile de automatizare convenționale
ci totul se rezuma doar la conectarea unor noi dispozitive la intrările și/sau ieșirile PLC -ului
daca sunt necesare aceste noi dispozitive).
Mentenanța panourilor de automatizare cu PLC se poate face foarte ușor datorita numărului
redus de piese ce trebuie schimbate. Grație echipării PLC -ului cu o gama vastă de intrări -ieșiri
se pot realiza funcții comple xe prin conectarea unui număr mare de periferice, făcând PLC -ul
să fie mai ieftin in comparație cu sistemul de automatizare clasic unde trebuie schimbată
structura acestuia.
Automatele programabile au si o serie de dezavantaje precum faptul că nu toate apl icațiile
au nevoie de un automat programabil, iar acest fapt se datorează complexității reduse a acesteia,
sau existenta unor condiții nefavorabile pentru o buna funcționare a automatelor datorită

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

11
fluctuațiilor de temperatură ce pot apărea. Un alt dezavant aj este reprezentat de costurile mari
pe care le poate implica folosirea automatului în anumite procese .
1.6.Componentele automatelor programabile
PLC-ul reprezintă un sistem industrial cu microcontroler ce este alcătuit din două părti: o
parte hardware si o parte software reprezentativă și specifică mediilor industriale. O vedere de
ansamblu asupra schemei bloc a automatulu i programabil poate fi observată in Fig. 3

Fig. 3 Schema bloc a automatului programabil

PLC-ul este reprezentat de o serie de componen te ce au rol important pentru buna
funcționare a acestuia. Una dintre aceste componente este reprezentată de Unitatea Centrala de
Procesare (CPU) ce este totodată si elementul central al automatului programabil. CPU este in
mod uzual un microcontroler, ace ste microcontrolere au fost construite la început pe 8 biți, iar
in zilele noastre avem microcontrolere pe 16 sau 32 biți. Pentru verificarea memoriei si a stării
tehnice a automatului programabil unitatea centrala de procesare rulează o serie de rutine de
verificare.
Memoria FLASH a sistemului este o alta componentă utilizată de automatul programabil si
are rolul de a stoca programul folosit în controlul automatizării. Memoria sistemului este
divizată pe o serie de blocuri ce îndeplinesc anumite funcțional ități. Pentru fiecare intrare sau
ieșire a automatului programabil ii este asociat un bit de memorie ce pot lua valori binare (1

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

12
sau 0). Variabilele ce se utilizează în timpul rulării programului pot fi stocate în anumite zone
de memorie.
Cea de a treia co mponentă a PLC -ului este reprezentată de intrările și ieșirile automatului
programabil. Gradul de inteligență a automatului programabil este direct proporțional cu
capacitatea acestuia de a citi diferitele semnale primite de la senzorii si dispozitivele co nectate
la intrările PLC -ului. Dacă nu există niciun dispozitiv conectat la ieșirile PLC -ului atunci acesta
nu poate efectua nici o sarcină de lucru. Pentru a extinde numărul de intrări sau ieșiri ale
automatului programabil este necesar să conectăm un mod ul de intrări sau ieșiri extern.
Fiecare automat programabil are nevoie de o sursă de alimentare. Aceasta are rolul de a
alimenta automatul programabil cu energie electrică. Majoritatea PLC -urilor lucrează cu
tensiuni de 24Vdc sau 230Vac. Mai există o categorie de automate programabile ce trebuie
alimentate printr -o sursă de energie electrică separată, acestea fiind automate programabile
mari. Astfel încât să determinăm puterea electrică trebuie să știm cantitatea de energie electrică
consumată de PLC, determinată si de necesarul de curent al ieșirilor.
Există mai multe metode de programare a automatelor programabile precum prin utilizarea
unei console pentru programarea manuală sau prin utilizarea unui calculator, reprezentând o
tehnologie modernă folos ită recent în domeniu. Pentru a fi utilizat calculatorul acesta trebuie
sa aibă instalat un soft special ce poate permite controlul absolut asupra PLC -ului.
În zilele noastre calculatoarele pot folosi linii de transmisie astfel încât să se faciliteze
procesul de programare. Comunicația cu PLC -ul este foarte importantă deoarece aduce o serie
de avantaje dar permite si monitorizarea procesului de automatizare de la distanță.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

13
2. Microcontroler

2.1.Definiție

La începuturi a fost electricitatea. Oamenii erau fericiți și nu erau conștienți că ea există
peste tot în jurul lor și putea fi utilizată. Primele mașinării care foloseau un nou tip de energie
au apărut rapid. Ceva vreme trecuse de atunci, și chiar când o amenii se obișnuiseră cu ideea și
nu mai acordau atenție noilor generații de specialiști, cineva a venit cu noțiunea că electronicele
pot reprezenta o jucărie foarte utilă. Era o idee foarte bună de la care nu a mai existat drum de
întoarcere.
O nouă știi nță a însemnat noi specialiști. În timp ce restul umanității privea cu neîncredere
ce se întâmplă, planurile s -au împărțit în două grupe: „orientare software” și „orientare
hardware”, ambele evoluând pe căi diferite. În timp ce primul grup se dezvolta cons tant și
treptat, oamenii din branșa hardware, conduși de succes, au încălcat limitele siguranței și au
inventat tranzistoarele.
Până la acel moment, lucrurile puteau fi ținute sub control mai mult sau mai puțin, dar o
publicitate largă nu era conștientă de ceea ce se întâmplă de fapt, lucru ce a condus la o greșeală
fatală. Naivi, crezând că niște trucuri ieftine puteau încetini dezvoltarea tehnologiei și că puteau
da timpul înapoi în zilele bune, piața de atunci și -a deschis porțile pentru produse din in dustria
electronică. O scădere rapidă a prețurilor a făcut posibilă disponibilitatea acestor componente
pentru publicul larg.
Primele circuite integrate și procesoare au apărut curând, fapt ce a cauzat o diminuare și
mai mare a prețurilor calculatoarelor și celorlalte produse electronice. Astfel, puteau fi
cumpărate de pretutindeni, și oamenii de rând puteau avea în posesie un calculator.
În timp ce această evoluție se manifesta, atât profesioniștii cât și cei pasionați lucrau din
greu la proiectele lor . Apoi, cineva și -a pus întrebarea de ce să nu facă o componentă universală.
De ce să nu facă un circuit integrat universal, ieftin, care putea fi programat și folosit în orice
domeniu al electronicii oricând era nevoie ? Tehnologia s -a dezvoltat la fel de mult ca și piața,
atunci de ce nu ? Astfel, a luat naștere primul circuit integrat numit microcontroller.

Ca toate lucrurile bune, această componentă puternică este de fapt foarte simplă. A luat
naștere și s -a dezvoltat plecând de la următoarele idei p recum că cel mai simplu procesor de

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

14
calculator este folosit pe post de „creier” al întregului sistem, și în funcție de gusturile
producătorului, se poate adăuga memorie, câteva convertoare A/D, temporizatoare, dispozitive
de intrare -ieșire. Totodată, toat e acestea sunt plasate în module standard, existând un software
simplu care să fie în stare să controleze totul și care să fie ușor de dezvoltat pentru toată lumea.
Pe baza acestor reguli, au fost dezvoltate numeroase tipuri de microcontroller -e care au
devenit imediat însoțitorul invizibil al omului. Simplitatea și flexibilitatea lor incredibilă ne -au
cucerit cu mult timp în urmă, iar aproape orice nouă invenție cu referire la ele a fost probabil
deja încercată de altcineva. O influență crucială asupra de zvoltării și succesu lui
microcontroller -elor s -a datorat unei serii de factori ce urmează a fi enumerați în continuare.
Electronicele puternice și alese cu atenție din microcontroller pot controla procese variate
și aparate (automatizări industriale, curen tul electric, temperatura, performanțele unui motor,
etc), fie independent sau prin dispozitive de intrare -ieșire (întrerupătoare, butoane de apăsa t,
senzori, afișare LCD, relee).
Prețurile scăzute au permis ca ele să fie implementate în aparate în care p ână de curând nu
meritau timpul alocat. Datorită acestui fapt, piața de astăzi este mai mult decât încărcată de
aparate automate s imple cu aplicabilități variate.
Nu este nevoie de cunoștințe aprofundate în domeniu, fiind suficient să se dispună de un
calculator și un dispozitiv simplu numit programator care este folosit pentru a încărca
programele în microcontroller.

Fig. 4 Microcontroler

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

15
3.2. Arhitectura unui microcontroler

Un microcontroller conține de obicei:
– unitate centrală
– memoria volatilă (RAM)
– generatorul de tact
– memoria nevolatilă (ROM)
– dispozitive I/O seriale și paralele
– controller de întreruperi, controller DMA, numărătoare/temporizatoare, convertoare A/D,
D/A, etc
– periferice

Fig. 5 Argitectura m icrocontroler

Ca intrări se folosesc de obicei semnale provenind de la comutatoarele individuale sau de
la traductoare (de temperatură, de presiune, foto traductoare specializate). Intrările pot fi
digitale sau analogice. Intrările digitale vehiculează se mnale discrete, informația citită fiind
informația ce se eșantionează la momentul citirii liniei respective. Intrările analogice
vehiculează informații exprimabile prin funcții continue în timp. Citirea acestora de către
microcontroller presupune prezența unori circuite capabile să prelucreze aceste informații, fie
comparatoare analogice, fie convertoare analog -numerice, ale căror ieșiri sunt citite de către
acesta.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

16
Ieșirile sunt fie analogice, caz în care reprezintă de fapt ieșiri ale convertoarelor numeric –
analogice, fie sunt digitale, caz în care informația este general memorată pe acestea până la o
nouă scriere operată de către unitatea centrală la un port al micr ocontroller -ului. Ieșirile pot
comanda dispozitive de afișare, relee, motoare, difuzoare, etc.
Memoria Random Access (RAM) reprezintă un tip de memorie folosită pentru stocarea
temporară a informației și a rezultatelor intermediare create și folosite în t impul operației cu
microcontroller -ul. Conținutul acestei memorii este eliberat odată ce circuitul nu mai este
alimentat de la o sursa de current electric.
Memoria EEPROM este un tip special de memorie care nu se regăsește în toate
microncontroller -ele. Co nținutul ei poate fi schimbat în timpul execuției programului, similar
cu RAM, dar rămâne în permanență salvat chiar după oprirea circuitului. Este folosită de obicei
pentru a stoca valori create și folosite în timpul operației (valori de calibrare, de con torizare,
etc), care trebuiesc salvate neapărat după închiderea circuitului. Un dezavantaj al acestui tip de
memorie este încetinirea procesului de programare, măsurat în milisecunde.
Regiștrii speciali SFR fac parte din memoria RAM. Scopul lor este prede finit de producător
și nu poate fi schimbat. Deoarece biții lor sunt conectați fizic la circuite din cadrul
microcontroller -ului, ca de exemplu convertorul A/D sau modulul de comunicație serială, orice
schimbare a stării lor afectează operația de pe microc ontroller sau alte circuite. Spre exemplu,
scrierea „0” sau „1” într -un SFR ce controlează un port intrare/ieșire are ca efect configurarea
portului respectiv ca intrare sau ca ieșire. În alte cuvinte, fiecare bit din acest registru
controlează funcția unu i singur pin.
Contorizatorul de program PC este un motor care rulează programul și pointează către
adresa de memorie ce conținte următoarea instrucțiune de executat. După fiecare instrucțiune
executată, valoarea contorului este incrementată cu 1. Din acest motiv, programul execută doar
o instrucțiune la un moment dat, la fel cum este scrisă. Valoarea contorului poate fi schimbată
oricând, fapt ce cauzează un salt într -o locație nouă de memorie, astfel sunt executate
subrutinele. După salt, contorul reia num ărătoarea.
Unitatea centrală de procesare CPU, după cum îi sugerează și numele, reprezintă o unitate
care monitorizează și controlează toate procesele ce au loc în microcontroller iar utilizatorul
nu poate influența acest proces.
Aceasta este fromată din mai multe subunități precum decodorul de instrucțiuni ce este acea
parte care recunoaște instrucțiunile programului și pe baza acestora operează alte circuite.
Abilitățile acestui circuit sunt exprimate în setul de instrucțiuni care diferă pentru fiecare

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

17
familie de microcontrolere. Unitatea logică aritmetică ALU reprezintă o altă subunitate ce se
ocupă cu toate operațiile matematice și logice asupra datelor, iar acumulatorul este un registru
de tip SFR în strânsă legătură cu ALU.
Porturile de intrare/ieș ire reprezintă niște regiștri conectați la pinii microcontroller -ului care
sunt necesari pentru a se conecta la dispozitivele periferice. Ele se numesc intrare/ieșire
deoarece se poate schimba funcția unui pin în conformitate cu cerințele utilizatorului. A cești
regiștri sunt singurii regiștri din microcontroller a căror stare se poate verifica cu un voltmetru.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

18

3. Instrumente utilizate

3.1.Arduino

4.1.1 Generalități

Arduino reprezintă mediul de programare ce implică aplicația ce este scrisă în limbajul de
programare Java și derivă din platforma „Writing” și IDE -ul „Processing”. Această aplicație
are ca rol esențial introducerea oricui în noțiunile programării, fie că discutăm despre un
utilizator experimentat sau unul care nu a avut contact direct cu acest e noțiuni până acum.
În cadrul acestui program există o serie de indicii și elemente ajutătoare, fiind capabil să
cuprindă și să încarce codul scris pe placa Arduino ce poartă numele de „sketch”. Totodată, cu
ajutorul acestui program se pot alinia automat rândurile, Arduino implicând și un soft de
evidențiere a sintaxelor sau de închidere și deschidere a parantezelor pentru funcții.
Limbajul de programare ce este folosit în cadrul programului Arduino este bine -cunoscutul
C++ , însă există o variantă ajutăto are pentru a facilita operațiile obișnuite de intrare și ieșire
prin librăria incorporată numita „writing”. Utilizatorul aplicației trebuie să definească două
funcții, „setup()” și „loop()” denumite astfel obligatoriu pentru a fi recunoscute, astfel încât să
producă un program executabil ciclic.
Fiecare dintre cele două funcții are rolul său esențial, iar funcția „setup()” are rolul de a
inițializa setările diverse ce pot fi cerute de utilizator. Acesta are oportunitatea de a alege dintre
a declara viariabi lele, a seta pinii sau de a inițializa comunicații seriale. Cealaltă funcție,
„loop()” realizează partea cea mai consistentă fiind centrul fiecărui program, iar asemeni
denumirii sale aceasta se execută repetitiv și citește valori sau afișează ieșiri până când placa
Arduino este deconectată de la o sursă de tensiune.
Totodată, în cadrul acestei aplicații utilizatorul are ocazia să implementeze și funcții proprii
prin utilizarea unei bucăți de cod cu un nume și instrucțiuni ce vor fi executate în momentul în
care funcția este apelată. Funcțiile de acest gen pot fi folos ite în mai multe scopuri precum
reducerea dezorganizării într -un program sau pentru a executa sarcini repetitive. Asemănarea

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

19
dintre Arduino si C++ este foarte mare, atât ca structură cât și ca funcționalitate.

4.1.2. Arguino Mega

Arduino Mega este o p lacă ce are la baza microcontrolerul ATmega1280. Această placă
are in componență 54 de pini de intrare/ieșire digitali (dintre care 14 pini pot fi utilizați pentru
ieșirile PWM), 16 intrări analogice, 4 UARTs, un oscilator de cristal ce lucrează la frecven ța
de 16 MHz, o conexiune USB, alimentare etc. Conține tot ce este necesar pentru
microcontroler. Arduino Mega este compatibil cu majoritatea shield -urilor create pentru
Arduino Duemilanove sau Arduino Diecimila.
Microcontrolerul ATmega1280 beneficiază de o memorie ce dispune de următoarele
caracteristici 128 KB de memorie pentru stocarea codurilor ( din care 4 KB este utilizată de
bootloader), 8 KB de memorie pentru SRAM si 4 Kb de memorie pentru EEPROM ( ce poate
fi citita si scrisa cu ajutorul librăriei EEPROM).
Toți cei 54 de pinii din cadrul plăcii Mega pot fi folosiți ca sursă de intrare dar și ca sursă
de ieșire, utilizând fincțiile pinMode(), digitalWrite() si digitalRead(). Acești pini lucreaza la
tensiunea de 5 volți. Fiecare pin poate suporta un amperaj maxim de 40 mA si au o rezistență
de pull -up interna ce are valoarea cuprinsă între 20 -50 kOhms.
Arduino Mega dispune de 16 intrări analogice, fiecare dintre ele furnizează 10 biți de
rezoluție (pana la 1024 valori diferite). Inițial ei măsoară in intervalul 0 -5 volți, cu toate acestea
se poate modifica limita superioara a intervalului folosint pinul AREF (tensiunea de referință
pentru intrările analogice. Se utilizează împreună cu analogReference() ) si funcția
analogReference().
Arduino Mega are o multitudine de beneficii pentru comunicația cu calculatorul, alte plăci
Arduino sau alte microcontrolere. ATmega1280 asigura 4 UARTs pentru comunicația serială.
Un FTDI FT23RL pentru canalele de comunicare unul dintre acestea fiind peste USB si driver –
ele FTDI asigura un port de comunicație pentru soft de la computer.
Softul Arduino include și o monitorizare seriala ce permite ca textele simple sa fie trimise
spre si de la placa Arduino. Led -urile RX si TX vor clipi cand va exista o transmisie de date

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

20
prin intermediul FTDI si conexiunea USB la calculator. (dar nu pentru comunicatia seriala pe
pinii 0 si 1).
Libraria SoftwareSerial permite comunicatia seriala pe oricare din pinii digitali ai placii
Mega. Micorcontrolerul ATmega1280 suporta de asemenea comun icatia de tip I2C si SPI.
Arduino Mega poate fi programat utilizand software -ul Arduino. Microcontrolerul
ATmega1280 de pe placa Arduino Mega vine cu un bootloader preinstalat ceea ce permite
utilizatorului sa incarce un cod nou fara a folosi un programato r extern.

Fig. 6 Arduino Mega

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

21
3.2.Senzori

Termenul propriu -zis de „senzor” a apărut relativ târziu atunci când s -a dorit asocierea
acestuia cu obiectul în sine, odată cu dezvoltarea microelectronicii, pe măsură ce au apărut și
alți termeni de impact precum „microprocesor”,„microcontroler” sau „transputer”. Majoritatea
elementelor tehnice sunt asociate funcției de „traductor”, ce constă într -un dispozitiv de
prelucrare a instrumentelor de măsurare sau calculatoare prin convertirea efectelor fizice în
semnale electrice.
Din păcate, nu există o definiție clară, concisă a acestui termen de „senzor” iar datorită
acestui fapt se pot interpreta diverse definiții pentru el, existând o ambiguitate și o confuzie
totodată. Pentru a clarifica termenul în sine, ma joritatea autorilor preferă să îi asocieze
senzorului termenul de traductor, în lucrările lor regăsindu -se sub forma de „senzori și
traductoare”. În cadrul acestor lucrări cei doi termeni sunt fie puși în relație de egalitate, fie
sunt diferențiați ierarhi c, scopul lor rămânând neschimbat totuși.
Pentru că nu există un sinonim total pentru termenul de „senzor” uneori se mai foloseste
noțiunea de „captor” pentru a sta drept acesta. Această noțiune provine din limba franceză și
desemnează elemente tehnice, r egăsindu -se în mod normal sub forma de „capteur”, fapt ce a
dus la amplificarea ambiguității termenului și caracteristicilor acestuia.
Denumirea senzorului provine din cuvântul latin „sensus”, care însemnă simț și înainte de
a fi adoptat pentru sisteme teh nice, a fost și este utilizat pentru a desemna capacitățile organelor
de simț ale oamenilor și ale organismelor vii, de a culege și prelucra informații din mediul
înconjurător și a le transmite creierului. În acest proces mărimile fizice, neelectrice, sunt
convertite în semnale electrice, pe care creierul le poate prelua și interpreta și pe baza cărora
coordonează acțiunile mușchilor.
Funcția senzorială cu cel mai mare impact și de o mare importanță este funcția vizuală ce
are cea mai mare viteză de trans fer și ce asigură în general o cantitate preponderentă de
informație. Vederea în general asigură omului, și nu numai, orientarea în spațiu, identificarea
obiectelor sau configurația, poziționarea acestora și mai ales aprecierea corectă a distanțelor.
Dator ită faptului că acest stimul senzorial este foarte bine dezvoltat la oameni, aceștia nu
dispun și de alți senzori de investigare cum se întâmplă în cazul altor ființe. Unele speci de
animale sunt dotate cu senzori ultrasocnici astfel încât să detecteze cu o mai mare ușurință
posibilele pericole.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

22
În ceea ce privește funcția vizuală, aceasta nu constă în simpla proiectare a unei imagini pe
retină ci și pe transmiterea semnalelor către creier ce implică o serie de reglări inteligente. Acest
lucru se datorează mușchilor optici și configurației ochiului cu cristalinul și irisul ce
îmbunătățesc prelucrarea datelor transmise.
O clasifcare a senzorilor îi împarte pe aceștia în diverse categorii, luând cel puțin 100 de
mărimi fizice diferite, în funcție de mediul ac estora de proveniență, iar dacă aici sunt implicați
și senzorii diferitelor substanțe chimice numărul acestora poate cește considerabil. La nivel
mondial există cel puțin 2000 de tipuri diferite de senzori ce au peste 100.000 de variante, iar
datorită div ersității mari a principiilor de conversie sau a soluțiilor de implementare a acestora
se deosebesc o mare varietate de criterii de clasificare a acestora
O metodă de clasificare a senzorilor constă în diferențierea acestora în funcție de
tehnologiile util izate în realizarea lor precum tehnologii ale materialelor feromagnetoca, piezo –
ceramice și mai ales tehnologii ale microelectronicii și microsistemelor. Mai există tehnologii
ale straturilor subțiri sau ale foliilor, iar pe lângă acestea se mai pot regăsi o mulțime de alte
tehnologii utilizate de senzori.
O altă modalitate de clasificare a senzorilor implică mărimea acestora fizică, iar din acest
punct de vedere ei pot fi clasificați în senzori absouți, ce implică semnalul electric ce poate
reprenta toat e valorile posibile ale mărimii fizice de intrare și senzori incrementali ce nu își
pot stabilii o origine pentru toate punctele din cadrul domeniului de măsurare.
Foarte importantă este clasificarea în funcție de tipul mărimii de ieșire, iar aici întâlni m
senzori analogici, pentru care semnalul de ieșire este în permanență proporțional cu mărimea
fizică de intrare și senzori numerici, la care semnalul de ieșire poate lua numai un număr limitat
de valori discrete, și mai ales permit cuantificarea semnalulu i fizic de intrare.
Dacă luăm în considerare ieșirea din numărul de valori posibile, mai regăsim alte două
categorii de senzori, și anume, senzorii bineri ce implică doar două valori distincte la ieșire și
senzorii analogici cu un număr mare de valori.
3.2.1. Senzorul de temperatura si umiditate DHT11

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

23

Fig. 7 Senzor de temperatură și umididate 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 tempera tura 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 infrarosu pasiv (PIR -Passive Invrared Sensor)

Fig. 8 Senzor PIR

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ă .

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

24

3.2.3. Senzorul magnetic

Fig. 9 Senzor 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 logi c. Am folosit acest sensor pentru a monitoriza statusul (închis/deschis) al ușilor
locuinței și a garajului.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

25
3.2.4. Senzorul de lumină

Fig. 10 Senzor lumin ă

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. În funcție de valoarea recepționat ă de la acest senzor
microcontroler -ul va comanda un led pentru a oferi o anumită cantit ate de lumină artificială.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

26
4. Alte medii de programare

4.1.HTML

Realizarea paginilor web se face cu ajutorul limbajului de programare HTML (HyperText
Markup Language). Țelul limbajului de programare HTML este prezentarea informatiilor
paragrafe, fonturi, tabele etc. si nu descrierea semanticii documentului. Specificațiile HTML
sunt date de World Wide Web Consortium (W3C).
HTML este o forma de adnotare orientată spre expunerea documentelor text pe o singură
pagină, folosind un software specializat denumit a gent utilizator HTML. Cu ajutorul HTML
conținutul unui document poate fi marcat cu o multitudine de tipuri de metadate si indicații de
redare.
Acest limbaj de marcare constă din câteva componente cheie (cum ar fi tag -urile si
atributele lor), tipuri de dat e bazate pe caracter, referințe de caracter și referințe de entitate.
Tag-urile sau etichetele sunt pereche, una pentru deschiderea etichetei <eticheta> și alta pentru
a închide eticheta </eticheta>. Fișierele HTML au extensia „.html” sau „.htm”, iar pagin a
principală a unui domeniu este fișierul „index.html” sau „index.htm”.

HTML este proiectat pentru a putea fi citit si editat utilizând un simplu editor de text. Cu
toate acestea pentru a putea scrie sau modifica o pagina web sunt necesare cunoștințe solide de
HTML si necesita si un timp mai îndelungat.
Cu timpul au fost dezvoltate o serie de editoare grafice cum ar fi Macromedia,
Dreamweaver, Adobe GoLive sau Microsoft FrontPage ce permit utilizatorului sa creeze pagini
web mult mai ușor, însă aceste programe generează un cod HTML ce de multe ori este de
proastă calitate.
Este absolut obligatoriu ca toate paginile HTML să înceapă și să se termine cu etichetele <html>
și </html>. Ca și etichete obligatorii se regăsesc următoarele perechi <head>, </head > și
<body>, </body>.Aceste etichete de <head> conțin titlul paginii între etichetele <title> și
</title>, descrieri de tip <meta>, stiluri de formatare a textului dar si script -uri sau legături către
fișiere externe.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

27

Fig. 11 Exemplu HTML

Textul poate lua diverse forme iar prin intermediul acestui de programare putem explora diferite
forme ale acestuia, precum îngroșat, înclinat sau chiar subliniat astfel încât să putem evidenția
aspectele importante. Totuși faptul că textul poate fi modificat, uneori p utem ajunge în situația de a
încărca inutil pagina chiar dacă nu asta a fost intenția. Pentru ca acest lucru să nu aibă loc avem
acum oportunitatea de a importa stilurile dintr -un fișier extern si astfel putem evita cu ușurință acest
aspect, deoarece pagin a va avea un aspect mai aerisit.

4.2. CSS

Cascading Style Sheets (CSS) reprezintă un standard pentru formatarea conținutului unui
document HTML. Stilurile se pot adăuga elementelor HTML fie prin intermediul fișierelor
externe fie in cadrul documentului, pri n elementul <style> sau atributul style. Formatarea
elementelor de tip XHTML, XML si SVGL se poate realiza de asemenea prin intermediul
limbajului de programare CSS.

Fig. 12 Exemplu CSS în pagina HTML

Odată cu îmbunătățirea CSS apare CSS3 ce aduce noi atribute si contribuie la dezvoltarea
noilor concepte în webdesign. Unele dintre cele mai importante module adăugate acestui

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

28
standard pentru formatarea elementelor HTML aduc un avantaj considerabil în dezvoltarea
activității de webdesign, printre cele mai importante module adăugate se numără: selectors,
box model, background and borders, text effects, animations etc.
Odată cu apariția noilor browesere au apărut si unele probleme de compatibilitate, însă cele
mai multe proprietăți ale CSS3 au fost implementa te cu succes în variantele noi de browsere.

Fig. 13 Exemplu CSS fisier extern

4.3. Java

Java a fost conceput la începutul anilor ʼ90 de către James Goslin la Sun Microsystems
(acum filială Oracle). Java este un limbaj de programare orientat -obiect, puternic tipizat.
Majoritatea aplicațiilor partajate sunt scrise în Java, iar evoluția tehnologică permite utilizarea
acestui limbaj de programare și pe dispozitivele mobile precum telefoane, agende electronice
etc. Astfel a fost posibilă crearea unei plat forme unice, la nivelul programatorului, suprapusa
unui mediu diversificat.
Totuși limbajul de programare Java are o mare parte din sintaxa limbajelor C și C++, însă
modelul obiectelor este mult mai simplu și prezintă mai puține facilități de nivel jos. Ru larea
programelor pe orice platformă ce are instalată o mașina virtuala Java (JVM) fără a se face
modificări in codul sursa se datorează standardului de compilare si anume cod de octet care
este intermediar între codul mașină și codul sursă.
Programele Ja va se executa pe un mediu denumit masina virtuala Java. În zilele noastre
exista mai multi furnizori de JVM, printre care se numără Oracle, IBM, Bea, FSF. Începând cu
anul 2006 varianta de JVM a celor de la Sun a devenit open -source.
Oracle furnizează 4 pl atforme Java pentru diferite sisteme. Una dintre aceste platforme este
Java Card utilizata pentru smartcard -uri. Cea de -a doua platformă este Java Platform, Micro
Edition (Java ME) ce este utilizată de PDA sau telefoanele mobile deoarece au sistemele

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

29
hardw are cu resurse limitate. Sistemele workstation utilizează Java Platform Standard Edition
(Java SE), iar aceasta se gaseste pe majoritatea PC -urilor, iar sistemele de calcul mari cel mai
probabil si distribuite folosesc Java Platform Enterprise Edition (Jav a EE).

Fig.14 Java

4.4. Ajax

Odată cu crearea de aplicații web interactive s -a dezvoltat o noua tehnică de programare
denumita Ajax si este o prescurtate pentru Asynchronous JavaScript and XML. Dezvoltarea
acestei aplicații s -a bazat pe nevoia oamenilor de a utiliza cu o mai mare ușur ință aplicațiile
web și nu numai.
Dorința acestei noi tehnici este ca paginile web să fie mai rapide și în consecință mai
acceptate, datorită schimbului de date cu serverul în cantități mici pagina nu trebuie sa mai fie
reîncărcată la fiecare acțiune a ut ilizatorului.
Termenul de Ajax nu reprezintă o tehnologie propriu -zisă deoarece el stă ca definiție pentru
aplicațiile web ce folosesc o multitudine de tehnologii

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

30

Fig. 15 Ajax

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

31
5. Implementare

În acest capitol voi vorbi despre realizarea practică a acestui proiect, într -o ordine
cronologică a evenimentelor, plecând de la primul contact cu Arduino Mega până la finalizarea
proiectului.

5.1. Instalarea IDE -ului Arduino

Un prim pas pentru acest proiect îl reprezintă instalarea soft-ului oferit de Arduino pentru
scrierea codului sursă și încărcarea acestuia pe microcontroler. Această aplicație este de tip
open -source și se poate descărca gratuit de pe pagina oficială a celor de la Arduino. Se
instalează foarte ușor, nefiind nevoi e de cunoștințe adiționale.
La pornirea aplicației se creează in mod automat o fișă de lucru denumită „sketch”.
Întotdeauna trebuie verificat dacă în meniul „Tools” este ales modelul corespunzător de placă
folosit și dacă portul de comunicație este selecta t corect, atunci când scriem un cod nou sau
modificăm un sketch ce va fi încarcat pe placă. Urcarea codului sursă pe placă se face printr –
un cablu usb conectat la calculator.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

32

Fig. 16 IDE Arduino

Pentru a putea înțelege mai bine cum lucrează acest tip de placă la început am rulat unele
sketch -uri iar apoi am început modificarea lor, adăugând noi funcționalități sau eliminând unele
detalii. În exemplul de mai jos se poate observa codul sursă pentru programarea si citirea
valorilor unui senzor de lumină rez istiv. (Vezi Fig. 17)

Fig.17 Sketch Arduino

Valența programului poate fi observată prin modificările ce au fost aduse codului
anterior, modificare care a dus la apariția unei noi funcții ce implică starea actuală a unui led,

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

33
acesta se poate aprinde sau stinge în funcție de intensitatea luminoasă din încăpere. (Vezi Fig.
18)

Fig 18. Exemplu program

Trebuie specificat faptul că pentru orice pin folosit de pe placa Arduino fie pin de intrare
sau iesire trebuie declarant numărul acestuia, altfel acesta nu poate fi utilizat. Un e xemplu poate
fi observant în Fig. 19 .

Fig. 19 Declarare pini

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

34
5.2.Realizarea circuitului

Pentru a evidenția mai bine structura circuitului ce urmează a fi implementat, voi enumera
mai întâi piesele componente și rolul acestora in cadrul lucrării. Componenta centrală a
sistemului o reprezintă placa Arduino Mega ce are ca scop principal strângerea informațiilor
de la senzorii utilizați și coordonarea unor procese în funcție de datele colectate de la senzori
sau preferințele utilizat orului.
Un set de componente importante îl reprezintă senzorii. Fiecare senzor are un mod diferit
de operare, iar datele oferite de fiecare senzor trebuie interpretate în funcție de anumiți factori.
În cadrul acestui sistem au fost implementați cinci senzo ri, unul de temperatură și umiditate,
unul de luminozitate, unul de prezență și doi senzori magnetici.
Fiecare dintre acești senzori dispune de trei pini, doi pini pentru alimentare (marcați cu
negru pentru GND, și cu roșu VCC) și unul pentru semnal. Pinu l de semnal are rolul de a
furniza date despre mediul înconjurător al senzorului, iar interpretarea datelor se face de către
utilizator cu ajutorul microcontroler -ului. Informația furnizată de senzorul de lumină si
senzorul de temperatură și umiditate este analogică. Primul senzor este conectat pe pinul „A0”,
iar al doilea senzor este conectat pe pinul „A1”, ambii reprezentând pini analogici.
Senzorul de prezență (PIR) este conectat pe pinul „D32”, ce reprezintă un pin digital. Rolul
senzorului de prezență în cadrul circuitului de a modifica statusul unui led doar atunci când
este detectată prezența unui corp cald. Totodată senzorii magnetici normal închiși sunt
conectați pe pinii digitali ”D22” si „D24” și au rolul de a furniza informații dacă circuitul
acestora este închis sau deschis având ca rezultat starea unei uși, valorile pe care le poate avea
sunt închise sau deschise.
Sistemul de climatizare al locuinței este realizat cu ajutorul unui bec clasic ce este comandat
cu ajutorul unui modul de relee. Releul este conectat pe placă la pinul digital „D7”, iar acesta
comandă mai departe becul în funcție de valorile primite de pla că de la senzorul de temperatură.
Sistemul de securitate al locuinței este simulat cu ajutorul unor componente precum
tastatură, led, senzor magnetic normal închis. Led -ul va indica dacă ușa este închisă sau
deschisă. La introducerea parolei corecte siste mul se va dezactiva iar led -ul se va aprinde în
mod automat.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

35
5.3. Scrierea codului sursă

Pentru a efectua operațiile corespunzătoare sau pentru a implementa corect comenzile ce
vor fi accesate mai târziu prin intermediul unui browser, trebuie sa ne asigurăm în primul rând
că avem librăriile corespunzătoare incluse în directorul de librării al soft -ului Arduino dar și in
prima parte a codului sursă Arduino.
Pentru controlul ventilatorului, respectiv a driver -ului, este necesară librăria „Servo.h”, iar
pentru realizarea conexiunii dintre placă și pagina web avem nevoie de librăriile „SPI.h” și
„Ethernet.h”. Codul sursă al paginii web este încărcat pe un card microSD, pentru a putea rula
acest cod cu ajutorul plăcii Arduino Mega este nevoie de o librărie specială denumită
„SD.h”. (vezi Fig. 20)

Fig.20 Declarare librării

Următorul pas îl reprezintă crearea unui server pentru comunicația dintre pagina web și
Mega ce se realizează cu ajutorul unor funcții predefinite. Pentru a crea serverul trebuie definită
adresa MAC a shield -ului Ethernet și să ii fie asignată o adresa IP și totodată trebuie creat un
port de comunicație cu serverul. (vezi Fig. 21 si Fig. 22)

Fig.21 Declarare adrese

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

36
Fig. 22 Inițializare Server

Inițializarea cardului microSD se face în funcția „setup()” și se trimit informații despre
starea cardului pe portul serial, iar aceste informații pot fi vizualizate in softul Arduino cu
ajutorul ferestrei de monitorizare serială. În locul trimiterii paginii web linie cu linie se deschi de
fișierul „index.html” ce se află pe cardul SD și trimite tot conținutul acestui fișier către
browser. (vezi Fig. 23)

Fig. 23 Initializare card SD

În funcția ce se execută în mod repetat până în momentul ce Mega este deconectat de la
sursa de curent, numită „loop()”, am creat o instanță de EthernetClient pentru administrarea
conexiunii. Dacă clientul se conectează la aplicație, aceasta va procesa cererea și va închide
conexiunea când operația s -a încheiat. (vezi Fig. 24)

Fig. 24 Instanță EthernetClient

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

37

În continuare se va verifica clientul prin sintaxa „if(client)” și în caz afirmativ va fi preluată
comanda pe care acesta o transmite. (vezi fig 25)

Fig.25 Verificare Client

Mai departe voi implementa anumite secvențe de cod în funcție de comenzile primite de la
client , exemplu Fig. 26 , spre exemplu dacă textul primit și verificat este „temperatură” atunci
va fi afișată valoarea temperaturii direct în pagina web, adică la adresa „192.168.15.130”
valoarea citită de la senzor va fi afișată.

Fig. 26 Exemplu citire temperatură

De exemplu, pentru lumină, valoarea citită de la senzor este o valoare analogică cuprinsă
intre 0 si 1023. Pentru a afișa în mod corect nivelul de iluminare din încăpere si pentru a putea
controla nivelul de iluminare a unei lămpi de veghe a trebuit implementată o funcție de mapare
a valorii citite de la senz or, ca în exemplul din Fig. 27

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

38

Fig. 27 Mapare valori

Datorită numărului mare de intrări/iesiri ce este oferit de Arduino Mega am ales să conectez
led-urile direct la acești pini, iar controlul acestora se poate realiza foarte simplu prin
verificarea stării unui led , ca în Fig. 28, si trecerea acestuia în „1” sau „0”.

Fig. 28 Control Led -uri

Pentru un mai bun control al temperaturii mediului ambia nt a fost creat un termostat ce este
controlat cu ajuto rul a două butoane din pagina web.

Fig.29 Control termostat

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

39
Totodată pentru ca acest termostat să funcționeze ca unul adevărat trebuie făcută o
verificare a temperaturii mediului înainte ca ac esta să comande pornirea sau oprirea sistemului
de incalzire al locuintei. Această verificare se realizează ca în Fig. 30

Fig. 30 Verificare temperatură

Pentru a implementa sistemul de securitate al locuinței am utilizat un sensor magnetic ce
îmi oferă informații despre statusul ușii, dacă aceasta este închisa sau dacă este deschisă.

Fig. 31 Verificare status ușă

5.4.Accesare Mega dintr -o pagină web

Cum am amintit și mai sus unul dintre beneficiile aduse de Mega este numărul mare de pini
ce îl are, astfel se poate conecta cu ușurință un shield Ethernet pentru a putea conecta Arduino
Mega la internet. Acest shield are un slot pentru carduri de tipul microSD, iar cu ajutorul unui
astfel de card se pot încărca pagini web ce pot fi accesate prin intermed iul unui browser.
La crearea paginii web voi folosi o serie de tehnologii precum HTML, CSS, Java, Ajax.
Toate acestea la un loc permit utilizatorului să acceseze aplicația de pe orice dispozitiv ce se
poate conecta la o rețea de internet, deci calculatoare, telefoane tablete, etc.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

40
Cum am menționat si mai sus conexiunea dintre Mega si calculator se realizează prin
intermediul unui cablu USB ca orice altă placă Arduino. Programul sursă ce va fi încărcat pe
placă va trebui să aibă extensia „.ino”, iar fișierul ce conține codul sursă pentru pagina web va
avea extensia „.html” sau „.htm” și va fi încărcat pe cardul SD.
Pentru accesul comenzilor implementate în codul Arduino, Java oferă o implementare
destul de simplă prin introducerea script -urilor. S pre exemplu următoarea funcție citeste
valoarea unui led iar la apăsarea unui buton execută comanda ce a fost scrisă în Arduino.

Fig. 32 Exemplu Java

Pentru a citi valorile unui senzor trebuie reținut id -ul conținutului când se implementează
funcția Ja va și trebuie apelat în pagina web ca în Fig. 32 :

Fig.32 Apelare id

5.5.Realizare pagină web

Pentru o comunicație mai ușoara între utilizator si sistemul realizat, a fost realizată o
interfață web simplă și ușor de înțeles. Pagina a fost realizată prin expunerea tuturor

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

41
funcționalităților oferite de sistem. Pentru a putea fi cât mai sugestive aces te funcționalități sunt
reprezentate prin intermediul textelor sau animațiilor sugestive.
Prin urmare pagina este alcătuită din mai multe secțiuni și anume: o zonă ce ține de
securitatea locuinței, o zonă ce oferă informații despre temperatura mediului amb iant dar si
umiditatea aerului din încăpere, o zonă ce oferă controlul asupra tuturor led -urilor din cele 4
camere ale machetei și o zona ce oferă informații despre nivelul de iluminare.
Dintre aceste secțiuni o parte dintre acestea pot fi controlate de că tre utilizator în modul
următor: lucrarea permite controlul luminilor dintr -o camera este simulat prin aprinderea sau
stingerea unui led. Acest lucru se poate face apăsând un buton ce poate avea valoarea „ON”
sau „OFF”, de asemenea reglarea temperaturii se poate face prin manipularea a două butoane
„+” și „ -” ce au rol de a porni sau opri sistemul de încălzire simulat printr -un bec clasic controlat
cu ajutorul unui releu.

Fig. 33 Control lumini

Codul a fost realizat cu ajutorul unui editor de text simpl u, acest editor permite crearea de
coduri HTML. Pentru implementarea stilurilor si animațiilor a fost folosit limbajul CSS.
Adăugând acestor elemente vizuale toate comenzile specifice realizate in limbajele Java si Ajax
a rezultat o interfață clară, simplă si ușor de utilizat pentru a controla întregul sistem.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

42

Fig.34 Exemplu cod

Pentru crearea de elemente în cadrul paginii am îmbinat diverse limbaje de programare
precum HTML, CSS, Java, Ajax. Toate acestea au rolul de a crea si a da un aspect cât m ai
plăcut paginii si pentru o mai bună interacțiune a utilizatorului cu aplicația.
Un exemplu reprezentativ poate fi partea de afișare temperatură dar împreună cu controlul
acesteia. Din butoanele „+” și „ -” se poate regla temperatura mediului ambiant.

Fig. 35 Control temperatură

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

43

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

44
6. Posibilități de dezvoltare

Pe măsură ce am avansat în dezvoltarea proiectului, am realizat că această tematică permite
o dezvoltare pe viitor destul de diversificată. Plecând de la înlocuirea senzorilor sau adăugarea
altor noi, ca de exemplu senzor de fum sau de gaz, adăugarea unor servomotoare pentru a
realiza sarcini noi, acest proiect poate suferi o dezvoltare majoră dacă se dorește acest lucru.
O idee pe care o consider utilă, este alimentarea întregului sistem de la o sursă pe baterii
reîncărcabile sau adăugarea unui generator de curent, astfel încât în cazul unei pene de curent,
sistemul să rămână complet funcțional.
Macheta permite introducerea unor instalații suplimentare, cum ar fi spre exemplu un
sistem de acționare auto mat a jaluzelelor în funcție de anumite nevoi ale utilizatorului sau
adăugarea unui sistem de irigare, ce va fi responsabil de udarea gazonului sau a ghivecelor cu
flori, pe baza unor valori citite de la senzorii montați pe suprafața pământului.
Dezvoltare a pe viitor a acestui proiect este limitată doar de imaginația utilizatorului,
existând o multitudine de posibilități, unele mai ușor de implementat fără multe schimbări în
schema circuitului electric sau în programarea microcontroler -ului, altele puțin ma i dificile ce
necesită un minim de cunoștințe pentru a putea fi realizate.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

45
7. Concluzii finale

Din ce în ce mai multe aparate din uzul zilnic al întregii populații sunt bazate pe
calculatoare. Această modă se poate vedea în secțiuni diferite al echipamentului folosit în
locuințe. Cele mai multe sisteme de comunicație sunt bazate pe componente electr onice care
rulează programe specifice.
Prin urmare, aparatele bazate pe electronice sunt mai de încredere decât cele mecanice,
acestea neavând parte de același nivel de deteriorare fizică. De asemenea prezintă posibilitatea
modificării comportării unui si stem după ce acesta a fost construit mai ușor.
Direcția de dezvoltare, destul de izolată și specifică la început, a devenit cooperativă
bazându -se pe dispozitive cu scopuri multiple. În ziua de astăzi, majoritatea telefoanelor mobile
pe lângă funcția de a pelare, pot de asemenea să se conecteze la Internet, să realizeze fotografii,
să ruleze diverse aplicații sau să interacționeze cu alte dispozitive prin intermediul Internetului
sau a unor rețele wireless de comunicare.
Producerea câtor mai multe aparate digitale s -a realizat într -o manieră haotică, multe
tehnologii dezvoltându -se în paralel rezultând o diversitate de standarde de comunicare. Astfel,
pentru a realiza o legătură între acestea, este nevoie de un sistem care poate interfața cu orice
tehnologi e necesară.
Acest proiect ilustrează o abordare modernă a automatizării unei locuințe prin simularea la
scară mică a unui sistem automatizat de monitorizare și întreținere prin control de la distanță.
În cadrul acestuia au fost prezentate atât descrierea unor mecanisme de comunicare moderne
între dispozitive cât și implementarea fizică a circuitului electric realizat.
Proiectul și -a atins toate obiectivele propuse, printre cele mai importante fiind realizarea
unei comunicări ușoare între sistem și utilizat or sau instalarea flexibilă a sistemului în orice
incintă.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

46
8. Bibliografie

Bennett, S. (1996). A Brief History of Automatic Control.
Floroian, D., & Moldoveanu, F. (2009). Microcontrolere. Ed. Universitații Transilvania din Brașov.
Monk, S. (2011). 15 Dangerously Mad Projects for the Evil Genius. McGraw -Hill.
Riley, M. (2012). Programming Your Home . The Pragmatic Programmers.
Schwartz, M., & Buttigieg, S. (2014). Arduino Android Blueprints. PACKT Publishing.

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

47
9. Webografie

http://media0.webgarden.ro/files/media0:50112376a44a6.html.upl/Limbajul_AJAX.html
(ultima accesare 15.12.2016)
https://www.arduino.cc
( ultima accesare 05.01.2017)
http://www.tehnium -azi.ro/page/index/_/articles/automatizari/Automate_programabile
(20.10.2016)
https://www.w3.org/Style/CSS/
(18.12.2016)
https://www.w3.org
(10.11.2016)
http://docs.oracle.com/javase/tutorial/
(20.12.2016)

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

48
10. Anexe
10.1. Cod sursă Arduino
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <Servo.h>
Servo servoMain;
#include <Wiegand.h>
WIEGAND wg;
#include <dht.h>
#define dht_dpin A1
dht DHT;
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ 50
// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 15, 130); // IP address, may need to change
depending on network
EthernetServer server(80); // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null
terminated string
char req_index = 0; // index into HTTP_req buffer
int senzor_magnetic=22,senzor_magnetic2=24;
boolean LED_state [5] = {0}; // stores the states of the LEDs
int r1=23,r2=25,r3=27,r4=29;
int led_w=6,buzzer_w=5;
int prag_setat;
int rel_usa=7;
int stare; // 0 is OFF, 1 is ON
int stare0; // before state
float teset, dete;
int teset0, teset1, teset2, teset3;
int numere = 0;
void setup()
{
// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

49

Serial.begin(9600); // for debugging
// initialize SD card
Serial.println("Initializing SD card…");
if (!SD.begin(4)) {
Serial.println("ERROR – SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS – SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR – Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS – Found index.htm file.");
servoMain.attach(42);
pinMode(led_w,OUTPUT);
pinMode(buzzer_w,OUTPUT);
digitalWrite(buzzer_w,HIGH);
digitalWrite(led_w,HIGH);
wg.begin();
pinMode(senzor_magnetic, INPUT_PULLUP); // switch is attached to
Arduino pin 3
pinMode(senzor_magnetic2, INPUT_PULLUP);
pinMode(32, INPUT);//PIR
pinMode(34, INPUT);//PIR
pinMode(9, OUT PUT);//test led
pinMode(rel_usa, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(r4, OUTPUT);
digitalWrite(rel_usa, HIGH);
digitalWrite(r1, HIGH);
digitalWrite(r2, HIGH);
digitalWrite(r3, HIGH);
digitalWrite(r4, HIGH);
digitalWrite(9, LOW);
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

50
}

void loop()
{
EthernetClient client = serv er.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client .read(); // read 1 byte (character) from
client
// limit the size of the stored received HTTP request
// buffer first part of HTTP request in HTTP_req array
(string)
// leave last element in array as 0 to nul l terminate
string (REQ_BUF_SZ – 1)
if (req_index < (REQ_BUF_SZ – 1)) {
HTTP_req[req_index] = c; // save HTTP request
character
req_index++;
}
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == ' \n' && currentLineIsBlank) {
// send a standard http response header

client.println("HTTP/1.1 200 OK");
// remainder of header follows below, depending on if
// web page or XML page is requested
// Ajax request – send XML file
if (StrContains(HTTP_req, "ajax_inputs")) {
// send rest of HTTP header
client.println("Content -Type: text/xml");
client.println("Connection: keep -alive");
client.println();
SetLEDs();
PrimestePrag();
// send XML file containing input states
XML_response(client);
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

51

else { // web page request
// send rest of HTTP header
client.println("Content -Type: text/html");
client.println("Connection: keep -alive");
client.println();
// send web page
webFile = SD.open("index.htm"); // open web
page file
if (webFile) {
while(webFile.ava ilable()) {
client.write(webFile.read()); // send web
page to client
}
webFile.close();
}
}
// display received HTTP request on serial port
Serial.print(HTTP_req);
// reset buffer index and all buffer elements to 0
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 = fal se;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

52
client.stop(); // close the connection
} // end if (client)

// read switches
if (teset/10>8) {
digitalWrite(9, HIGH);
}
else if ( teset/10 <=8) {
digitalWrite(9, LOW);
}

}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;

len = strle n(str);

if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

53
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}

return 0;
}

void SetLEDs(void)
{
// LED
if (StrContains(HTTP_req, "LED1=1")) {
LED_state[0] = 1; // save LED state
digitalWrite(r1, LOW);
}
else if (StrContains(HTTP_req, "LED1=0")) {
LED_state[0] = 0; // save LED state
digitalWrite(r1, HIGH);
}

if (StrContains(HTTP_req, "LED2=1")) {
LED_state[1] = 1; // save LED state
digitalWrite(r2, LOW);
}
else if (StrContains(HTTP_req, "LED2=0")) {
LED_state[1] = 0; // save LED state
digitalWrite(r2, HIGH);
}

if (StrContains(HTTP_req, "LED3=1")) {
LED_state[2] = 1; // save LED state
digitalWrite(r3, LOW);
}
else if (StrContains(HTTP_req, "LED3=0")) {

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

54
LED_state[2] = 0; // save LED state
digitalWrite(r3, HIGH);
}

if (StrContains(HTTP_req, "LED4=1")) {
LED_state[3] = 1; // save LED state
digitalWrite(r4, LOW);
}
else if (StrContains(HTTP_req, "LED4=0")) {
LED_state[3] = 0; // save LED state
digitalWrite(r4, HIGH);
}

///////////////////////////////////////////////////////////////////////////
////////////////////////////
if (StrContains(HTTP_req, "LED5=1")) {
LED_state[4] = 1; // save LED state
teset = teset + 5;
teset0 = teset/256;
teset1 = teset – teset0*256;
}
else if (StrContains(HTTP_req, "LED5=0")) {
LED_state[4] = 0; // sa ve LED state
teset = teset + 5;
teset0 = teset/256;
teset1 = teset – teset0*256;
}

if (StrContains(HTTP_req, "LED6=1")) {
LED_state[5] = 1; // save LED state
teset = teset – 5;
teset0 = teset/256;
teset1 = teset – teset0*256;
}
else if (StrContains(HTTP_req, "LED6=0")) {
LED_state[5] = 0; // save LED state
teset = teset – 5;

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

55
teset0 = teset/256;
teset1 = teset – teset0*256;
}
}
//////////////////////////////////////////////////////////////////
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)
{
DHT.read11(dht_dpin);
float analog_val; // stores value read from analog inputs
int sw_arr[] = {32,34}; // pins interfaced to switches
int count;
float temp = DHT.temperature;
float umi = DHT.humidity;
int numar = 0;
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");

analog_val =analogRead(0);
analog_val = map(analog_val, 0, 1023, 1023, 0);
analogWrite(7, analog_val);
cl.print("<analog>");
cl.print(analog_val);

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

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

analog_val = temp;
cl.print("<analog>");
cl.print(analog_val);
cl.print("</analog>");

analog_val = umi;
cl.print("<analog>");
cl.print(analog_val);
cl.print("</analog>");

cl.print("<analog>");
cl.print(teset/10,1);
cl.println("</analog>");

cl.print("<p>");
if (digitalRead(senzor_magnetic)) {
cl.println("Deschis!");
}
else {
cl.println("Inchis!");
}
cl.print("</p>");

cl.print("<p>");
if (digitalRead(senzor_magnetic2)) {
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!");
//servoMain.write(135);
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

57
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");

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

58

}
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>");
cl.print("Locked!");cl.print(numar);
if(wg.available())
{
if(wg.getCode()==748907){
cl.print("Deschis");
numar=numar+1;
digitalWrite(led_w,LOW);
digitalWrite(buzzer_w,LOW);
digitalWrite(rel_usa,LOW);
delay(3000);
digitalWrite(led_w,HIGH);

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

59
digitalWrite(buzzer_w,HIGH);
digitalWrite(rel_usa,HIGH);
}
}

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

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

10.2. Cod sursă HTML

<!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 sen zor umiditate
var data_val3 = 0;//valoare senzor curent
var data_val4 = 0;//valoare prag setat
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

var data_val5 = 140;

<!– Gauge Code vezi licenta –>
var Gauge=function(b){function l(a,b){for(var c in b)"object"==typeof
b[c]&&"[object
Array]"!==Object.prototype.toString.call(b[c])&&"renderTo"!=c?( "object"!=ty
peof a[c]&&(a[c]={}),l(a[c],b[c])):a[c]=b[c]}function
q(){z.width=b.width;z.height=b.height;A=z.cloneNode(!0);B=A.getContext("2d"
);C=z.width;D=z.height;t=C/2;u=D/2;f=t<u?t:u;A.i8d=!1;B.translate(t,u);B.sa
ve();a.translate(t,u);a.save()}function v(a){var b=new
Date;G=setInterval(function(){var c=(new Date -b)/a.duration;1<c&&(c=1);var
f=("function"==
typeof
a.delta?a.delta:M[a.delta])(c);a.step(f);1==c&&clearInterval(G)},a.delay||1
0)}function k(){G&&clearInterval(G);var a=I –

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

60
n,h=n,c=b.animation;v({d elay:c.delay,duration:c.duration,delta:c.fn,step:fu
nction(b){n=parseFloat(h)+a*b;E.draw()}})}function e(a){return
a*Math.PI/180}function
g(b,h,c){c=a.createLinearGradient(0,0,0,c);c.addColorStop(0,b);c.addColorSt
op(1,h);return c}function p(){var m=93*(f/10 0),h=f-
m,c=91*(f/100),e=88*(f/100),d=85*(f/100);a.save();b.glow&&(a.shadowBlur=h,a
.shadowColor=
"rgba(0, 0, 0,
0.5)");a.beginPath();a.arc(0,0,m,0,2*Math.PI,!0);a.fillStyle=g("#ddd","#aaa
",m);a.fill();a.restore();a.beginPath();a.arc(0,0,c,0,2*Math.PI,!0);a. fillS
tyle=g("#fafafa","#ccc",c);a.fill();a.beginPath();a.arc(0,0,e,0,2*Math.PI,!
0);a.fillStyle=g("#eee","#f0f0f0",e);a.fill();a.beginPath();a.arc(0,0,d,0,2
*Math.PI,!0);a.fillStyle=b.colors.plate;a.fill();a.save()}function w(a){var
h=!1;a=0===b.majorTicksFo rmat.dec?Math.round(a).toString():a.toFixed(b.majo
rTicksFormat.dec);return 1<b.majorTicksFormat["int"]?
(h=-1<a.indexOf("."), -1<a.indexOf(" -")?"-
"+(b.majorTicksFormat["int"]+b.majorTicksFormat.dec+2+(h?1:0) –
a.length)+a.replace(" –
",""):""+(b.majorTicksForma t["int"]+b.majorTicksFormat.dec+1+(h?1:0) –
a.length)+a):a}function d(){var
m=81*(f/100);a.lineWidth=2;a.strokeStyle=b.colors.majorTicks;a.save();if(0=
==b.majorTicks.length){for(var h=(b.maxValue –
b.minValue)/5,c=0;5>c;c++)b.majorTicks.push(w(b.minValue+h*c)) ;b.majorTicks
.push(w(b.maxValue))}for(c=0;c<b.majorTicks.length;++c)a.rotate(e(45+c*(270
/(b.majorTicks.length –
1)))),a.beginPath(),a.moveTo(0,m),a.lineTo(0,m –
15*(f/100)),a.stroke(),a.restore(),a.save();b.strokeTicks&&(a.rotate(e(90))
,a.beginPath(),a.arc(0, 0,m,e(45),e(315),!1),a.stroke(),a.restore(),a.save()
)}function J(){var
m=81*(f/100);a.lineWidth=1;a.strokeStyle=b.colors.minorTicks;a.save();for(v
ar h=b.minorTicks*(b.majorTicks.length –
1),c=0;c<h;++c)a.rotate(e(45+c*(270/h))),a.beginPath(),a.moveTo(0,m),a. line
To(0,m-7.5*(f/100)),a.stroke(),a.restore(),a.save()}function s(){for(var
m=55*(f/100),h=0;h<b.majorTicks.length;++h){var c=
F(m,e(45+h*(270/(b.majorTicks.length -1))));a.font=20*(f/200)+"px
Arial";a.fillStyle=b.colors.numbers;a.lineWidth=0;a.textAlign=" center";a.fi
llText(b.majorTicks[h],c.x,c.y+3)}}function x(a){var
h=b.valueFormat.dec,c=b.valueFormat["int"];a=parseFloat(a);var
f=0>a;a=Math.abs(a);if(0<h){a=a.toFixed(h).toString().split(".");h=0;for(c –
=a[0].length;h<c;++h)a[0]="0"+a[0];a=(f?" –
":"")+a[0]+ "."+a[1]}else{a=Math.round(a).toString();h=0;for(c –
=a.length;h<c;++h)a="0"+a;a=(f?" -":"")+a}return a}function F(a,b){var c=
Math.sin(b),f=Math.cos(b);return{x:0*f -a*c,y:0*c+a*f}}function
N(){a.save();for(var m=81*(f/100),h=m –
15*(f/100),c=0,g=b.highlights.l ength;c<g;c++){var
d=b.highlights[c],r=(b.maxValue -b.minValue)/270,k=e(45+(d.from –
b.minValue)/r),r=e(45+(d.to –
b.minValue)/r);a.beginPath();a.rotate(e(90));a.arc(0,0,m,k,r,!1);a.restore(
);a.save();var l=F(h,k),p=F(m,k);a.moveTo(l.x,l.y);a.lineTo(p.x,p.y);va r
p=F(m,r),n=F(h,r);a.lineTo(p.x,p.y);a.lineTo(n.x,n.y);a.lineTo(l.x,l.y);a.c
losePath();a.fillStyle=d.color;a.fill();
a.beginPath();a.rotate(e(90));a.arc(0,0,h,k –
0.2,r+0.2,!1);a.restore();a.closePath();a.fillStyle=b.colors.plate;a.fill()
;a.save()}}function K(){var
m=12*(f/100),h=8*(f/100),c=77*(f/100),d=20*(f/100),k=4*(f/100),r=2*(f/100),
l=function(){a.shadowOffsetX=2;a.shadowOffsetY=2;a.shadowBlur=10;a.shadowCo
lor="rgba(188, 143, 143, 0.45)"};l();a.save();n=0>n?Math.abs(b.minValue –
n):0<b.minValue?n –
b.minValue:Math.abs(b.minValue)+n;a.rotate(e(45+n/((b.maxValue –
b.minValue)/270)));a.beginPath();a.moveTo( -r,-d);a.lineTo( -k,

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

61
0);a.lineTo( -1,c);a.lineTo(1,c);a.lineTo(k,0);a.lineTo(r, –
d);a.closePath();a.fillStyle=g(b.colors.needle.start,b.colors.needle.end,c –
d);a.fill();a.beginPath();a.lineTo( -0.5,c);a.lineTo( -1,c);a.lineTo( –
k,0);a.lineTo( -r,-d);a.lineTo(r/2 -2,-
d);a.closePath();a.fillStyle="rgba(255, 255, 255,
0.2)";a.fill();a.restore();l();a.beginPath();a.arc(0,0,m,0,2*Math.PI,!0);a.
fillStyle=g("#f0f0f0","#ccc",m) ;a.fill();a.restore();a.beginPath();a.arc(0,
0,h,0,2*Math.PI,!0);a.fillStyle=g("#e8e8e8","#f5f5f5",h);a.fill()}
function L(){a.save();a.font=40*(f/200)+"px Led";var
b=x(y),h=a.measureText(" -"+x(0)).width,c=f -33*(f/100),g=0.12*f;a.save();var
d=-h/2-0.025*f,e =c-g-
0.04*f,h=h+0.05*f,g=g+0.07*f,k=0.025*f;a.beginPath();a.moveTo(d+k,e);a.line
To(d+h-k,e);a.quadraticCurveTo(d+h,e,d+h,e+k);a.lineTo(d+h,e+g –
k);a.quadraticCurveTo(d+h,e+g,d+h –
k,e+g);a.lineTo(d+k,e+g);a.quadraticCurveTo(d,e+g,d,e+g –
k);a.lineTo(d,e+k);a.qu adraticCurveTo(d,e,d+k,e);a.closePath();d=a.createRa
dialGradient(0,c -0.12*f-0.025*f+(0.12*f+0.045*f)/
2,f/10,0,c -0.12*f-
0.025*f+(0.12*f+0.045*f)/2,f/5);d.addColorStop(0,"#888");d.addColorStop(1,"
#666");a.strokeStyle=d;a.lineWidth=0.05*f;a.stroke();a.shadow Blur=0.012*f;a
.shadowColor="rgba(0, 0, 0,
1)";a.fillStyle="#babab2";a.fill();a.restore();a.shadowOffsetX=0.004*f;a.sh
adowOffsetY=0.004*f;a.shadowBlur=0.012*f;a.shadowColor="rgba(0, 0, 0,
0.3)";a.fillStyle="#444";a.textAlign="center";a.fillText(b, –
0,c);a.re store()}Gauge.Collection.push(this);this.config={renderTo:null,wid
th:200,height:200,title:!1,
maxValue:100,minValue:0,majorTicks:[],minorTicks:10,strokeTicks:!0,units:!1
,valueFormat:{"int":3,dec:2},majorTicksFormat:{"int":1,dec:0},glow:!0,anima
tion:{delay: 10,duration:250,fn:"cycle"},colors:{plate:"#fff",majorTicks:"#4
44",minorTicks:"#666",title:"#888",units:"#888",numbers:"#444",needle:{star
t:"rgba(240, 128, 128, 1)",end:"rgba(255, 160, 122,
.9)"}},highlights:[{from:20,to:60,color:"#eee"},{from:60,to:80,col or:"#ccc"
},{from:80,to:100,color:"#999"}]};var
y=0,E=this,n=0,I=0,H=!1;this.setValue=
function(a){n=b.animation?y:a;var d=(b.maxValue –
b.minValue)/100;I=a>b.maxValue?b.maxValue+d:a<b.minValue?b.minValue –
d:a;y=a;b.animation?k():this.draw();return
this};this. setRawValue=function(a){n=y=a;this.draw();return
this};this.clear=function(){y=n=I=this.config.minValue;this.draw();return
this};this.getValue=function(){return
y};this.onready=function(){};l(this.config,b);this.config.minValue=parseFlo
at(this.config.minVa lue);this.config.maxValue=parseFloat(this.config.maxVal
ue);b=this.config;n=
y=b.minValue;if(!b.renderTo)throw Error("Canvas element was not specified
when creating the Gauge object!");var
z=b.renderTo.tagName?b.renderTo:document.getElementById(b.renderTo), a=z.get
Context("2d"),A,C,D,t,u,f,B;q();this.updateConfig=function(a){l(this.config
,a);q();this.draw();return this};var M={linear:function(a){return
a},quad:function(a){return Math.pow(a,2)},quint:function(a){return
Math.pow(a,5)},cycle:function(a){return 1 –
Math.sin(Math.acos(a))},bounce:function(a){a:{a=1 -a;for(var b=0,
c=1;;b+=c,c/=2)if(a>=(7 -4*b)/11){a= -Math.pow((11 -6*b-
11*a)/4,2)+Math.pow(c,2);break a}a=void 0}return 1 –
a},elastic:function(a){a=1 -a;return 1 -Math.pow(2,10*(a –
1))*Math.cos(30*Math.PI/3*a)}}, G=null;a.lineCap="round";this.draw=function(
){if(!A.i8d){B.clearRect( -t,-u,C,D);B.save();var
g={ctx:a};a=B;p();N();J();d();s();b.title&&(a.save(),a.font=24*(f/200)+"px
Arial",a.fillStyle=b.colors.title,a.textAlign="center",a.fillText(b.title,0
,-f/4.25),a.r estore());b.units&&(a.save(),a.font=22*(f/200)+"px Arial",

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

62
a.fillStyle=b.colors.units,a.textAlign="center",a.fillText(b.units,0,f/3.25
),a.restore());A.i8d=!0;a=g.ctx;delete g.ctx}a.clearRect( -t,-
u,C,D);a.save();a.drawImage(A, -t,-
u,C,D);if(Gauge.initialized )L(),K(),H||(E.onready&&E.onready(),H=!0);else
var
e=setInterval(function(){Gauge.initialized&&(clearInterval(e),L(),K(),H||(E
.onready&&E.onready(),H=!0))},10);return this}};Gauge.initialized=!1;
(function(){var b=document,l=b.getElementsByTagName("head")[ 0],q=-
1!=navigator.userAgent.toLocaleLowerCase().indexOf("msie"),v="@font -face
{font-family: 'Led';src: url('fonts/digital -7-
mono."+(q?"eot":"ttf")+"');}",k=b.createElement("style");k.type="text/css";
if(q)l.appendChild(k),l=k.styleSheet,l.cssText=v;else{tr y{k.appendChild(b.c
reateTextNode(v))}catch(e){k.cssText=v}l.appendChild(k);l=k.styleSheet?k.st
yleSheet:k.sheet||b.styleSheets[b.styleSheets.length -1]}var
g=setInterval(function(){if(b.body){clearInterval(g);
var
e=b.createElement("div");e.style.fontFamily= "Led";e.style.position="absolut
e";e.style.height=e.style.width=0;e.style.overflow="hidden";e.innerHTML="."
;b.body.appendChild(e);setTimeout(function(){Gauge.initialized=!0;e.parentN
ode.removeChild(e)},250)}},1)})();Gauge.Collection=[];
Gauge.Collection.get =function(b){if("string"==typeof b)for(var
l=0,q=this.length;l<q;l++){if((this[l].config.renderTo.tagName?this[l].conf
ig.renderTo:document.getElementById(this[l].config.renderTo)).getAttribute(
"id")==b)return this[l]}else return"number"==typeof
b?this[b]:n ull};function
domReady(b){window.addEventListener?window.addEventListener("DOMContentLoad
ed",b,!1):window.attachEvent("onload",b)}
domReady(function(){function b(b){for(var
e=b[0],d=1,g=b.length;d<g;d++)e+=b[d].substr(0,1).toUpperCase()+b[d].substr
(1,b[d]. length-1);return e}for(var
l=document.getElementsByTagName("canvas"),q=0,v=l.length;q<v;q++)if("canv –
gauge"==l[q].getAttribute("data -type")){var
k=l[q],e={},g,p=parseInt(k.getAttribute("width"),10),w=parseInt(k.getAttrib
ute("height"),10);e.renderTo=k;p&&(e .width=p);w&&(e.height=w);p=0;for(w=k.a
ttributes.length;p<w;p++)if(g=k.attributes.item(p).nodeName,"data –
type"!=g&&"data -"==
g.substr(0,5)){var d=g.substr(5,g.length -5).toLowerCase().split(" –
");if(g=k.getAttribute(g))switch(d[0]){case
"colors":d[1]&&(e.col ors||(e.colors={}),"needle"==d[1]?(d=g.split(/ \s+/),e.
colors.needle=d[0]&&d[1]?{start:d[0],end:d[1]}:g):(d.shift(),e.colors[b(d)]
=g));break;case
"highlights":e.highlights||(e.highlights=[]);g=g.match(/(?:(?: -?\d*\.)?(-
?\d+){1,2} ){2}(?:(?:#|0x)?(?:[0 -9A-F|a-f]){3,8}|rgba? \(.*?\))/g);for(var
d=0,J=g.length;d<J;d++){var
s=g[d].replace(/^ \s+|\s+$/g,"").split(/ \s+/),x={};
s[0]&&""!=s[0]&&(x.from=s[0]);s[1]&&""!=s[1]&&(x.to=s[1]);s[2]&&""!=s[2]&&(
x.color=s[2]);e.highlights.push(x)}break;case
"animation":d[1]&&(e .animation||(e.animation={}),"fn"==d[1]&&/^ \s*function \
s*\(/.test(g)&&(g=eval("("+g+")")),e.animation[d[1]]=g);break;default:d=b(d
);if("onready"==d)continue;if("majorTicks"==d)g=g.split(/ \s+/);else
if("strokeTicks"==d||"glow"==d)g="true"==g?!0:!1;else
if("valueFormat"==d)if(g=g.split("."),2==g.length)g={"int":parseInt(g[0],10
),dec:parseInt(g[1],10)};else continue;
e[d]=g}}e=new Gauge(e);k.getAttribute("data –
value")&&e.setRawValue(parseFloat(k.getAttribute("data –
value")));k.getAttribute("data –
onready")&&(e.o nready=function(){eval(this.config.renderTo.getAttribute("da
ta-onready"))});e.draw()}});window.Gauge=Gauge;
<!– Gauge Code vezi licenta –>

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

63

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.getElemen tById("input3").innerHTML =
//senzor iluminare

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

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

this.responseXML.getElementsByTagName('analog')[1].childNodes[0].nodeValue;
document.getElementById("input5").innerHTML =

//senzor umiditate

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

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

this.responseXML.getElementsByTagName('analog')[3].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;

document.getElementById("aer_m").value
= data_val; //modifica metter

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

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

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

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

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

64

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

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

//
document.getElementById("membru").innerHTML =
//reader proximitate
//
this.responseXML.getElementsByTagName('WIG ')[1].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].in nerHTML =

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.responseXM L.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

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

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

document.getElementById("LED3").innerHTML = "ON";
LED3_state = 1;
}
else {

document.getElementBy Id("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 = "tset +";
LED5_state = 1;
}
else {

document.getElementById("LED5").innerHTML = "tset +";
LED5_state = 0;
}
// LED 6
if
(this.responseXML.getElementsByT agName('LED')[5].childNodes[0].nodeValue
=== "on") {

document.getElementById("LED6").innerHTML = "tset -";
LED6_state = 1;
}
else {

document.getElementById("LED6").innerHTML = "tset -";
LED6_state = 0;
}
}
}
}
}

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

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

66
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 ="";

}

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";
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

67
}
function GetButton5()
{
if (LED5_state === 1) {
LED5_state = 0;
strLED5 = "&LED5=0";
}
else {
LED5_state = 1;
strLED5 = "&LED5=1";
}
}
function GetButton6()
{
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 catr e 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";
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

68

</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%;
}

th#sec{ /*stil caseta securitate*/
color:black;
background -color: #A9A9F5;
text-align:center;
font:bold 18px Georgia, serif;
}

th#usa_intrare{ /*stil caseta usa intrare*/
color:black;
background -color: #F2F2F2;
text-align:center;
font:bold 18px Georgia, serif;
}

th#tmp{ /*stil caseta
temperatura*/
color:black;
background -color: #F5A9A9 ;
text-align:center;
font:bold 20px Georgia, serif;
}

th#umi{ /*stil caseta
umiditate*/
color:black;
background -color: #F4FA58;
text-align:center;
font:bold 20px Georgia, serif;
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

69
th#lum{ /*sil caseta control
lumini*/
color:black;
background -color: #81DAF5;
text-align:center;
font:bold 20px Georgia, serif;
}

th#con{ /*stil caseta
consum*/
color:black;
background -color: #A9F5A9;
text-align:center;
font:bold 20px Georgia, serif;
}

th#aer{ /*stil caseta aer*/
color:blac k;
background -color: #FE9A2E;
text-align:center;
font:bold 20px Georgia, serif;
}

th#ilu{ /*sil caseta
luminozitate*/
color:black;
background -color: #F5A9F2;
text-align:center;
font:bold 20px Georgia, serif;
}

th#logo{ /*stil caseta logo hom e*/
color:#27ff0f;
background -color: #5c5c5c;
text-align:center;
font-size: 300%;
}

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;

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

70
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 50 px 0
rgba(0,0,0,0.19);
}

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

71
.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 {backgr ound-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 {backgr ound-color: #0080FF}

.buttonT:active {
background -color: #0080FF;
box-shadow: 0 3px #666;
transform: translateY(4px);
}

</style>

</head>

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

72
<body onload="GetArduinoIO()" bgcolor="black"> <! –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" >Home Automation</th> <! –logo home –>
</table>

<table id="t02"> <!–tabel nr2 –>
<tr> <!–caseta
securitate –>
<th id="sec"> ––-SECURITATE ––-<br></br>
<hr>
<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>
<hr>
</th>

<th id="usa_intrare">USA INTRARE<br></br> <! –caseta usa intrare –>
<hr>
<p id="usa01">Status:</p> <p id="usa">Inchisa!</p>
<hr>
<p id="usa02">Ultima persoana: </p> <p id="membru">Nimeni azi!</p>
</th>

<th id="tmp"> <! –caseta temperatura –>
<p>TEMPERATURA: <span id="input4">… </span><sup></sup>C</p>
&nbsp;&nbsp;&nbsp;&nbsp;
<canvas id="an_gauge_1" data -title="Temperaure" 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 #00ffff, 0 20 #00ff80, 20 30 #80ff00, 30 50 #ff4000, 50
90 #ff0000" 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>

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

73
<span id="input6">…</span>
<button type="bu tton" id="LED5" onclick="GetButton5()"
class="buttonT">+</button>

</p>
</form>
</th>

<th id="umi"> <!–caseta umiditate –
->
<p>UMIDITATE: <span id="input5">… </span><sup></sup>%RH</p>
<canvas id="an_gauge_2" data -title="Umiditate" data -units=" %"
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 #FF4000, 30 70 #FFFF00, 70 100 #01DF01" data –
onready="setInterval( function() {
Gauge.Collection.get('an_gauge_2').setValue(data_val2);}, 200);"></canvas>
</th>

<th id="lum">CONTROL LUMINI <!–caseta control lumini –
>
<hr>
<div align="left"><p id="lum01">Dormitor:</div> <div
align="right"><button type="button" id="LED1" onclick="G etButton1()"
class="buttonL">OFF</button></div></p>
<hr>
<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">Baie:</div> <div
align="right"><button type="button" id="LED3" onclick="GetButton3()"
class="buttonL">OFF</button></div></p>
<hr>
<div align="left"><p id="lum01">Bucatarie:</div> <div
align="right"><button type="button" id="LED4" onclick="GetB utton4()"
class="buttonL">OFF</button></div></p>
<hr>
</th>
</tr>
</table>

<table id="t03"> <!–tabel nr3 –>
<tr>
<th id="con" >CONSUM ENERGIE ELECTRICA <! –caseta consum energie
electrica –>
<p id="con01"><canvas id="an_ga uge_3" data -title="Consum" data –
units="W" width="150" height="150" 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 #0BB950, 2000 5000 #cc5,
5000 10000 #f33" data -onready="setInterval( function() {
Gauge.Collection.get('an_gauge_3').setValue(data_val3);}, 200);"></canvas>
</p>
</th>

<th id="aer">CALITATE AER<br></br> <!-
-caseta calitate aer –>
<meter value="0" min="0" max="1023" id="aer_m" ></meter>

Facultatea de Inginerie Elect rică și Știința Calculatoarelor
Departamentul Automa tică și Tehnologia Informației
Programul de studii Aut omatică și.informatică aplicată

74
</th>

<th id="ilu">NIVEL ILUMINARE<br></br> <!–
caseta nivel iluminare –>
<span id="input3"> … </span>
</th>

</tr>
</table>

</body>
</html>

10.3. Licență Gauge

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 not ice 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 PURPO SE 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.

Similar Posts