Sunteți pe pagina 1din 69

Rezumat

În vederea susținerii licenței am elaborat o lucrare cu titlul Sistem de securitate


pentru imobile.

Am ales această temă deoarece, impactul tehnologiei în societstea actula estr tot
mai vizibil iar integrarea unor sisteme capabile de control a dispozitivelor electronice
existente reprezintă un factor important în îmbunătățirea calității vieții . În ultimele
decenii ,micsorarea componente electronice precum tranzistorul, și reducerea
substanțială a costurilor de achiziționare face ca implementarea noilor tehnologii sa fie
o simplă rutină pentru un mare procent din populație.

Această lucrare este împărțită în X capitole. În partea de Introducere ,


reprezentată prin capitolul 1, am prezentat motivele alegerii acestui teme și stadiul
actual în care se află acest proiect.

În cel de-al doilea capitol denumit alegerea soluției am prezentat opțiunile


existente în domeniu securității locuințelor, avantajele avantajele și dezavantajele
acestora, s AAAAAA componente?

În capitolele cu numărul 3 și 4 , repsectiv proiectarea hardware și Proiectarea


software, am detaliata caracteristici tehnice ale componentelor folosite dar și logică de
implementare a softului paragraful necesită corecție

Sunt de părere că mi-am atins obiectivele de proiectare și cercetare propuse și că


vin cu o soluție favorabilă pentru crearea unui sistem de securitate cu costuri reduse și
totodată economic din punct de vedere al sistemelor existente pe piață. Consider
totodată că potențialul acestui proiect nu a fost încă atins iar în perioada ce urmeaza
intenționez să îl extind in vederea respectării standardelor în vigoare ce privesc acest
subiect.

1
CUPRINS

Cap.1 Introducere............................................................................................................................................5

Cap.2 Alegerea soluției.................................................................................................................................7

2.1. Obiectivele proiectului..............................................................................................................7

2.2. Soluții posibile..............................................................................................................................7

2.3. Soluția aleasă..............................................................................................................................10

Cap.3 Proiectarea Hardware..................................................................................................................13

3.1. Plăcile de dezvoltare Arduino.............................................................................................13

3.1.1. Arduino Mega....................................................................................................................13

3.1.2. Arduino Uno şi Nano......................................................................................................16

3.2. Modulul de procesare vocală...............................................................................................18

3.3. Modulul transceiver (Bluetooth) .....................................................................................21

3.4. Modul cu senzor de detecție a mișcării...........................................................................23

3.5. Modulul de readio-frecvență(RFID).................................................................................24

3.6. Proiectare cablajului...............................................................................................................26

Cap.4 Proiectarea Software.....................................................................................................................27

4.1. Organigramele software........................................................................................................27

4.2. Mediul de programare pentru Aduino...........................................................................29

4.3. Mediul de programate pentru Easy VR...........................................................................32

Cap.5 Realizare fizică..................................................................................................................................37

Cap.6 Concluzii...............................................................................................................................................

Bibliografie.......................................................................................................................................................

Cap.7 Anexe.......................................................................................................................................................

2
LISTA FIGURILOR

Figura 2.1. AmazonEcho..................................................................................................................................8

Figura 2.2. Google Home.................................................................................................................................9

Figura 2.3. Raspbery Pi 3..............................................................................................................................10

Figura 2.4. Schema electronică realizată pentru a exemplifica soluția aleasă…………..…..12

Figura 3.1. Schema electronică Arduino Mega……………………………………………………..…….13

Figura 3.2. Diagrama block a microprocesorului Atmega 2560..................................................14

Figura 3.3. Schema bloc a transferului de date dintre computer şi procesor........................15

Figura 3.4. Reprezentarea pinilor ICSP..................................................................................................16

Figura 3.5. Arduino Nano.............................................................................................................................17

Figura 3.6. Arduino Uno................................................................................................................................17

Figura 3.7. Diagrama pinilor procesorului ATmega 328p.............................................................17

Figura 3.8. EayVR 3.........................................................................................................................................18

Figura 3.9. Pinii folosiți pentru comunicația UART dintre host și EasyVR.............................20

Figura 3.10. EasyVR 3 împreună cu shieldu-ul dedicat...................................................................20

Figura 3.11. Modulul bluetooth HC-05...................................................................................................21

Figura 3.12. Schema bloc de conexiune UART....................................................................................22

Figura 3.13. Schema simplificată a pachetelor de date ce sunt transferate...........................22

Figura 3.14. Senzor PIR, partea superioară..........................................................................................23

Figura 3.15. Senzor PIR, partea inferioară............................................................................................23

Figura 3.16. Principiul de funcționare al ansamblului PIR............................................................24

Figura 3.17. Principiul de funcționare al tehnologiei RFID...........................................................25

Figura 3.18. Schema simplificată a unui cititor RFID.......................................................................25

3
Figura 3.19. Proiectarea montajului cu ajutorul programului Proteus...................................26

Figura 3.20. Proiectarea montajului cu ajutorul programului Proteus...................................26

Figura 4.1. Organigrama software pentru comanda vocală, modulul bluetooth și


senzorul de mișcare........................................................................................................................................27

Figura 4.2. Organigrama software pentru modulul RFID...............................................................29

Figura 4.3. Interfața programului Arduino IDE..................................................................................30

Figura 4.4. Identificarea portului din device manager....................................................................31

Figura 4.5. Interfața programulul EasyVR Commander................................................................33

Figura 4.6. Procesul de antrenare.............................................................................................................33

Figura 4.7. Interfața pentru modificarea setărilor de recunoaștere..........................................34

Figura 4.8. Interfața programului QS......................................................................................................35

Figura 4.9. Descărcarea tabelei de sunete în modul EasyVR………..................................………36

4
INTRODUCERE

Încă din cele mai vechi timpuri comunicarea prin voce a reprezentat modalitatea
dominantă prin care oamenii au creat legături sociale și au schimbat informație. Dacă
până de curând limbajul vorbit reprezenta o modalitate de comunicare doar între
oameni, odată cu dezvoltarea electronicii și tehnicilor de calcul, comunicarea verbală a
devenit posibilă și între oameni și mașini.

Chiar înainte de formarea societăților de către oameni, cultul securității era un


factor esențial în asigurarea continuității vieții și a unui trai mai bun. Locul unde își
alegeau alegeau ariile de locuit avea că scop să fie unul ce avea un grad crescut de
siguranță și securitate împotriva prădătorilor sau a invadatorilor. Odată cu avansul
tehnologic tehnicile de asigurare a securității bunurilor și a vieților omenești s-au tot
schimbat, iar în secolul 21 aceste tehnici sunt reprezentate majoritar de sisteme
electronice automate .

In contextul actual unde problemele privind rezervele globale disponibile sunt


din ce in ce mai reduse , realizarea unor unor procese realizate până acum sub
dependenta factorului uman , tind să se automatizeze ceea ce eficientizează consumul
de resurse dar și performanțele obținute .

Trebuie totuși paragraful necesită corecție

In vederea paragraful necesită corecție

În contextul în care unele probleme ale secolului nostru sunt resursele din ce în
ce mai puține precum și încălzirea globală, eficientizarea și optimizarea proceselor
industriale dar şi cele la scară redusă este esențială.

În paralel trebuie găsit un echilibru care să ţină cont de progresul tehnologic dar
şi de confortul şi gradul de mobilitate al oamenilor, într-o lume în care un minut poate
face diferenţă.

În conducerea acestor procese atât de vitale, elementul cheie îl reprezintă casa


inteligentă, care să conducă la satisfacerea cerinţelor utilizatorilor cu un grad de abatere
cât mai mic.

5
 Şi totuşi, de ce este nevoie de casa inteligentă? Trăim într-o lume în care
avansul tehnologic se vede cu ochiul liber. Suntem înconjuraţi de maşini,
dispozitive şi elemente de legătură. Nevoia de autonomie, securitate şi
confort, plus administrarea eficientă a energiei, printr-un sistem de
dispozitive care permit monitorizarea, primirea de alerte pe computer,
smartphone sau tabletă şi, în unele cazuri, intervenţia de la distanţă au
dus la crearea unei case inteligente sau smart home.

Nevoia securității locuinței nu are nevoie de prea multe explicații unde conform
Ierarhiei nevoilor a lui Abraham Maslow securitatea se află pe locul secund după
nevoile fiziologice, însă de ce ar fi nevoie de un sistem de securitate a locuințelor ? Un
sistem de securitate ne oferă un grad crescut de siguranță iar în legislația actuală a
multor țări dezvoltate printre care și România, in cazul unui eveniment nefericit precum
furtul din locuințe sau devastarea acestora , proprietarul locuinței este principalul
responsabil din prisma autorităților iar despăgubirile vor fi inexistente.

Această lucrare studiază unele tehnologii posibile pentru realizarea unui sistem
de securitate a imobilelor , respectiv sisteme de securitate antiefracție cu detectori de
mișcare sau sisteme de securitate cu supraveghere video paragraful necesită corecție.

Motivaţia care a stat la baza acestei lucrări a pornit de la necesitatea


aprofundării, înţelegerii şi explicării acestor tehnologii avansate în contextul actual dar
şi datorită faptului că, conceptele menţionate în lucrare sunt, după părerea mea,
insuficient abordate de societatea românească.

Motivația care stă la baza acestei lucrări pornește de la necesitatea înțelegerii


aprofundării și dezvoltării ulterioare a unora dintre aceste tehnologii in contextul
avansului tehnologic actual, dar și datorită faptului că pe piața românească de profil nu
există nici o entitate comercială ce produce acest un astfel de sistem.

Care este primul lucru pe care îl faci când ajungi acasă, obosit după o zi de
muncă? Bâjbâi în întuneric, atingi pereții şi cauți întrerupătorul, ca să te poți descălța.
Pentru un confort sporit cu o simplă comandă vocală putem deţine controlul asupra
luminii din casă dar şi din afara ei deoarece încă din cele mai vechi timpuri comunicarea
prin voce a reprezentat modalitatea dominantă dar şi cea mai simplă prin care oamenii
au creat legături şi au schimbat informaţii. Dacă până nu demult limbajul vorbit
reprezenta o modalitate de acţiune subiect uman - subiect uman, odată cu dezvoltarea
microelectronicii şi cu creşterea accesibilităţii tehnicii de calcul, comunicarea prin voce
devine un mijloc de comunicare între subiectul uman şi maşina de calcul.

Pornind de la conceptul de comandă vocală, am dezvoltat ulterior acest proiect


până în punctul în care se pot folosi şi aplicaţiile mobile pentru comanda lor.

6
Cea de a doua tehnologie, yala contactless sau yala cu radio-frecvență, este în
mod legitim viitorul pieţei de securitate pentru uşi şi imobile. Oameni din toată lumea,
familiile, iubitorii de gadget-uri, proprietarii înaintaţi în vârstă, sau chiar administratorii
de proprietăţi urmăresc un singur lucru – soluţii convenabile.

În contextul unor medii inteligente, casele inteligente sunt adesea evidențiate ca


fiind unul dintre principalele componente ale unor medii mai inteligente de viață.

Dacă acum câțiva ani vice-președintele de la divizia Smart-home a companiei


Coreene Samsung declara ȋn timpul unei conferințe de la Connetion că ,, Produsele
Smart-home sunt departe de a fi omniprezente în acest moment și pot provoaca
probleme. Înainte de a vă recomanda un serviciu, fac o verificare meticuloasă pentru a
vedea dacă pot rezolva problemele.”, progresul tehnologic din ultima perioadă a condus
la obținerea unor locuințe inteligente al căror control rapid și eficient se poate realiza
ușor și la un preț accesibil. Ȋn tot acest context alegerea proiectelor și echipamentelor,
care să satisfacă cerinţele fiecărui utilizator reprezintă singura alegere dificilă.

7
CAP. 2 ALEGEREA SOLUȚIEI

O interfață vocală între elementul uman și mașină trebuie să conțină cel puțin un
subsistem de recunoaștere a vorbirii și un altul de sintetizare a vocii precum şi o bază
de date pentru compararea datelor rezultate cu cele predefinite pentru a ghida sistemul
în ȋntelegerea cuvintelor utilizatorului și pentru a-i permite alegerea acțiunii potrivite,
ȋn acord cu cerințele elementului uman. La toate acestea se mai adaugă și elementele de
control secundare care implică alte subsisteme.

Sistemul de securitate antiefracție trebuie să conțină un subsistem dedicat


interfeței intre utilizator și sistem pentru personalizarea și adaptarea la nevoi
particulare, un alt subsistem de detecție cu privire la paragraful necesită corecție

2.1 Obiective
În alegerea soluției optime pentru realizarea practică a acestei teme s-a ținut
cont de următoarele criterii:

In vederea alegerii soluției optime pentru realizarea practică a acestui proiect,


factorii determinanți au fost:

- Implementarea și customizarea cu usurință a comen

- Personalizarea și implementarea cu ușurință a elementelor de detecție

- L

8
- Interconectarea dispozitivului de recunoaștere vocală cu alte dispozitive
periferice şi usurința ȋn interconectare;

- Numărul maxim de comenzi ce pot fi implementate;

- Conectarea cu dispozitivele mobile ce au ca sistem de operare Android OS;

- Prețul total de achiziție al echipamentelor;

- Ușurința în implementarea sistemului per ansamblu;

- Gradul de mentenabilitate ridicat;

- Siguranța împotriva virușilor;

- Riscul de efracție;

- Rata de eroare a sistemului;

- Viteza de răspuns a sistemului;

2.2 Soluții posibile


În urma căutării pe diverse surse din mediul on-line, s-a constatat că există mai
multe soluții posibile pentru realizarea acestui proiect.
Pentru realizarea analizei comenzilor vocale acestea folosesc serviciile on-line
ale Amazon Web Services sau ale Google.

În cele ce urmează vor fi discutate cȃteva dispozitive ce pot fi controlate prin


voce sau bluetooth.

Amazon Echo
Denumit pe scurt Echo, este un dispozitiv sub forma unei boxe portabile
dezvoltat de compania Amazon. Acesta are ca sistem de operare Fire OS și se conectează
la serviciul de asistență personală Alexa. Acesta este activat la rostirea cuvȃntului
“Alexa” dar în funcție de preferințe se poate ȋnlocui cu ,,Amazon”, ,,Echo” sau
,,Computer”. Acest dispozitiv este capabil să interaționeze verbal, să stabilească alarme,
să redea muzică, să ofere informații din trafic sau informații meteo ȋn timp real și chiar
să trimită mesaje text dacă este conectat la un dispozitiv mobil. De asemenea el mai
poate funcționa ca o unitate ,,master” pentru alte dispozitive inteligente din casă. A
devenit disponibil pe scară largă începând cu luna iunie a anului 2015. Acesta este
comercializat sub formele:

-Echo

-Echo Dot

9
-Amazon Tuch

-Echo Look

Fig. 2.1. Amazon Echo

www.amazon.com/Echo

Google Home
Google Home este un dispozitiv smart sub forma unei boxe portabile conectate la
wireless produs de compania Google. Aparatul are forma unui cilindru cu înălțime de
14,3 centimetri și diametru de 9,6 centimetri. Acesta cântărește 480 de grame și are ca
sistem de operare Chromecast, conectandu-se la serviciul Google Assistant.
La fel ca si concurentul lui produs de Amazon, acesta se poate conecta doar la
alte dispozitive inteligente şi este comercializat sub formele:

-Google Home Mini

-Google Home

-Google Home Max

10
Fig. 2.2. Google Home

store.google.com/us/product/google_home

Pentru partea de procesare a semnalelor și suport pentru modulele de


recunoaștere a vocii, pe piața actuală sunt două mari categorii de produse: Raspbery Pi
și Arduino.

Raspbery Pi
Raspbery Pi este un computer ȋn miniatură, sub forma unei singure plăci PCB și
de dimensiunile unui card de credit. Acesta a fost creat cu scopul promovării
informaticii în școli. În momentul actual cel mai performant dispozitiv produs de
această firmă este Raspbery Pi 3. Acest model este propulsat de un procesor cu 4 nuclee
Cortex A53 pe 64 de biți tactat la frecvența de 1,4 Ghz. Dispune de conectori de rețea
prin fir Ethernet cu o viteză maximă de 300 Mbps, conectivitate bluetooth și Wi-fi,
precum și 4 porturi USB de clasă 2. Se alimentează cu tensiune continuă la 5 Volți și la
acest moment este cel mai performant dispozitiv de acest tip. Dezavantajul acestui
dispozitiv este acela că folosește un sistem de operare numit Raspian, un sistem de
operare bazat pe Linux, ceea ce îl face extrem de greu de programat.

Fig. 2.3 Raspbery Pi 3

www.raspberrypi.org/products/raspberry-pi-3

2.3 Soluția aleasă


Pentru realizarea practică a acestui proiect s-a decis alegerea unor dispozitive
fiabile și totodată mai puțin costisitoare. Pentru partea de procesare și prelucrare a
semnalului vocal s-a decis implementarea unui modul EasyVR 3 iar pentru găzduirea
acestuia se va folosi o placă de dezvoltare Arduino Mega.
11
În ceea ce privește conectivitatea cu dispozitivele mobile care au la bază Android
OS s-au integrat tehnologiile bluetooth. Principalul motiv pentru care am decis să
implementez și această alternativă pentru a comanda obiectele, este acela că în anumite
momente ale zilei devine incomodă sau chiar deranjantă comanda vocală. Spre exemplu,
dacă cineva din locuinţă doarme, este deranjat de o altă persoană care dorește să
aprindă iluminatul. Pentru acest ansamblu s-a folosit un transceiver bluetooth de tipul
HC-05 care are ca și unitate de control placa de dezvoltare Arduino Uno R3, iar pentru
detecția mișcării s-a folosit un senzor de prezență care folosește senzorul LHI778, care
va fi controlat de Arduino Uno.
În cazul subsistemului de acces în locuință am preferat să elimin varianta clasică
prin cheie, ȋnlocuind-o cu un sistem de citire a cardurilor prin radio-frecvență.
Principalul motiv luat în considerare pentru această decizie a fost siguranța. Din punctul
meu de vedere un dispozitiv electronic de acest tip este mult mai sigur împotriva
efracțiilor decât metoda clasică, deoarece aceste cititoare lucrează la diferite frecvențe,
de unde rezultă că și cardurile trebuie să lucreze la aceeași frecvență. Un alt impediment
în spargerea acestui sistem ȋl constituie numărul unic de identificare al cardului care
este citit.

Avantajele acestui sistem sunt:

- Fiecare subsistem este controlat de propria sa unitate master. Am ales acest


compromis pentru a putea crește gradul de mentenabilitate dar și pentru a
scădea rata de defectare a sistemului per ansamblu. Dacă spre exemplu toate
dispozitivele erau conectate la o singură unitate de control și datorită gradului de
îmbătrânire sau al unui șoc survenit din rețeaua de alimentare se defecta, tot
sistemul era compromis. În metoda aleasă de mine, dacă unitatea care controleză
modulul bluetooth se defectează, aceasta poate fi ușor scoasă din schemă;

- Independența față de rețeaua de internet. Consider acesta ca fiind un avantaj


major deoarece acest sistem fiind off-line nu poate fi găsit în rețea și astfel nu
poate fi atacat;

- Controlul absolut al tuturor comenzilor pe care utilizatorul dorește să le


implementeze. Un exemplu care să sublinieze acest avantaj este o întâmplare din
mass-media în care se relata faptul că Amazon a înregistrat și trimis unui contact
din agenda o conversație personală între proprietar și soția acestuia;

- Folosirea unui mediu de programare relativ ușor de înțeles;

- Consumul scăzut de energie;

- Ușurință în interconectare;

- Conectarea cu alte dispozitive fără ca acestea să fie ,,smart,,.

12
Dezavantajele acestui sistem:

- Necesitatea unor ample cunoștințe de programare ȋn cazul ȋn care se dorește


adăugarea de noi echipamente;

- Volumul relativ mai mare decât in cazul celorlalte echipamente.

13
Fig. 2.4. Schema electronică realizată pentru a exemplifica soluția aleasă

CAP. 3 PROIECTAREA HARDWARE

3.1. Plăcile de dezvoltare Arduino


Arduino sunt cunoscute ca și platforme de procesare de tip open-source, bazate
pe componente hardware și software flexibile, construite în principal în jurul
microcontrollerelor ATmega. Acestea sunt capabile să preia date de la senzori conectaţi
la pinii acestora și de a acționa asupra unor dispozitive precum LED-uri, motoare, sau
altor dispozitive electronice pe baza comenzilor scrise într-un program cu un limbaj
asemănător limbajului C++.

3.1.1. Arduino Mega


Arduino Mega este un dispozitiv electronic ce are la bază un microcontroler
ATmega 2560 pe 8 biți. Dispune de un număr de 78 de porturi configurabile, din care 54
pot fi folosite ca intrări sau ieșiri digitale, 16 pot fi folosite ca intrări analogice şi 4
perechi de porturi seriale pentru comunicațiile UART (Universal Asynchronous
Receiver-Transmitter). Alimentarea se realizează cu tensiune continuă ce poate fi
cuprinsă între 7 și 12 Volți iar la ieșire oferă tensiuni stabilizate de 5 și respectiv 3,3
Volți, tensiuni continue. Cutrentul maxim ce poate fi dat pentru fiecare pin de ieșire este
de 20mA, iar pentru portul de ieșire al stabilizatorului de 3,3 volți, curentul maxim este
de 50mA.

14
Fig. 3.1 Schema electronică Arduino
Megahttps://easyeda.com/hot/Arduino_Mega_2560-z92kCUO6o

Microprocesorul Atmega 2560 aparține familiei AVR și are la bază o arhitectură


avansată de tip RISC. Arhitectura RISC (Reduced Instruction Set Computing) se
caracterizează printr-un număr limitat de instruțiuni pentru programare. Numărul
maxim de instrucțiuni distincte ce sunt necesare pentru programarea acestuia este de
135.

Fig. 3.2 Diagrama block a microprocesorului Atmega 2560

15
Atmel ATmega640/V-1280/V-1281/V-2560/V-2561/V DATASHEET pag. 5

Acestui microcontroler îi sunt alocate mai multe circuite de memorare. Astfel acest
procesor are o memorie de program cu o capacitate de 256 Kilo-octeți ce suportă un
număr de 10.000 de operațiuni de rescriere, o memorie de date SRAM cu capacitate de
8Kilo-octeți si o memorie EEPROM de 4Kilo-octeți. Frecvența de lucru a acestuia este de
16 MHz, setată din exterior cu ajutorul unui oscilator cu cristal de cuarț.

Alimentarea se poate realiza prin mai multe moduri. Astfel, ea se poate realiza
printr-un conector dedicat integrat ȋn cablaj, prin pinul dedicat denumit Vin si pinul de
masă sau prin portul care are și rolul de port pentru programare.

Programarea acestuia se poate realiza printr-un port usb sau prin pinii ICSP(In-
Circuit Serial Programming) integrați în cablaj. Pentru a putea realiza programarea prin
interfață usb placa de dezvoltare mai conține și un convertor CH340. Acest integrat
realizează conversia semnalului din standardul RS232, standard folosit de către
procesorul nostru în semnal cu standard usb, folosit de toate calculatoarele pentru a
comunica cu exteriorul.

Fig. 3.3 Schema bloc a transferului de date dintre computer şi procesor

(Realizată în programul Paint)

În cazul programării prin intermediul ICSP, sau ISP (In-Circuit Programming),


aceasă placă dispune de 6 pini si folosește protocolul SPI (Serial Peripheral Interface).

SPI reprezintă o interfață sincronă de transfer de date utilizată de microcontrollere


pentru comunicarea rapidă cu unul sau mai multe dispozitive periferice pe distanțe
scurte sau pentru comunicarea între două microcontrollere. În conexiunea SPI există
întotdeauna un dispozitiv principal (master) care controlează alte dispozitive periferice
(unități slave).

16
Programarea prin intermediul ISP este un proces prin care un microcontroller
montat pe o placă poate fi programat fără a se interveni fizic la pinii acestuia. Avantajul
acastei metode apare în momentul în care nu mai există un alt mod de programare
implementat sau ușurează pocesul de fabricaţie al dispozitivelor electronice prin faptul
că se pot include într-un singur proces atât programarea cât și testarea. Dezavantajul în
cazul acesta este acela că este necesar un programator extern.

Liniile de semnal ce sunt utilizate în acest proces de programare sunt MOSI, MISO, SCK,
SS, Vcc şi Gnd.

- MOSI (Master Out Slave In)- reprezintă linia prin care unitatea slave trimite
datele către unitatea de control master.

- MISO (Master In Slave OUT)- reprezină linia prin care unitatea de control trimite
date către unitatea slave.

- SCK (Serial Clock)- reprezintă linia prin care sunt transmise semnalele de ceas
care ajută la sincronizarea celor două unități în vederea transmiterii de date.

- SS (Slave Select)- reprezintă linia prin care unitatea master selectează unitatea
slave cu care dorește să comunice, în cazul în care sunt conectate mai multe
dispozitive .

- Vcc- reprezintă pinul pentru alimentare pozitiv.

- Gnd- reprezintă pinul de masă .

Fig. 3.4 Reprezentarea pinilor ICSP

În ceea ce privește proiectarea hardware, cablajul are o lungime de 101,52


milimetri, o lățime de 53,3 milimetri și o greutate aproximativă de 37 de grame. În
partea de sus a acestuia se pot observa câteva led-uri de stare, conectorii pentru
alimentare și programare, cristalul de cuarț, pinii pentru programarea ICSP sau pinii de
intrare și ieșire ce pot fi configurați. De asemenea, mai există și un buton cu revenire, ce
are rolul de a reseta circuitul dar nu și de a șterge programul memorat.

17
3.1.2 Arduino Uno și Arduino Nano
Datorită faptului că în soluția alesă cele 2 plăci, din punct de vedere structural,
conțin același microprocesor, aceeași capacitate de memorie și același set de
instrucțiuni, vor fi prezentate în același subcapitol.

Ambele plăci de dezvoltare sunt bazate pe microcontrollerul Atmega 328p pe 8


biți produs de către firma Atmel și convertorul serial CH340.

Tensiunea de alimentare recomandată a acestor echipamente este cuprinsă în


intervalul 7-12 volți dar poate lua valori maxime în intervalul 6-20 volți tensiune
continuă. Alimentarea se poate realiza prin conectorul prin care se realizeaza
programarea sau prin pinul dedicat Vin., singura diferență între cele două la acest
capitol este aceea că Arduino Uno mai dispune și de un conector separat de alimentare
integrat în cablaj. De menționat este faptul că valorile prezentate mai sus nu sunt
valabile și în cazul alimentării prin pinul Vin, în acest caz
fiind necesară
tensiunea de 5 volți.

Fig. 3.5 Arduino Nano Fig. 3.6 Arduino Uno

store.arduino.cc/arduino-nano store.arduino.cc/arduino-uno

Microprocesorul Atmega 328p aparține familiei AVR, familie de microprocesoare


dezvoltate de Atmel începând cu anul 1996. Acestea sunt de tip single-chip (integrate
într-o singură pastilă de siliciu) cu o arhitectură Harvart și un set de instrucțiuni de tip
RISC (Reduced Instruction Set Computing). AVR a fost una dintre primele familii de
microcontrollere care utilizează memorii foarte rapide integrate de tip Flash pentru
program, spre deosebire de alți producători care foloseau memorii EPROM sau
EEPROM. Numărul total de instrucțiuni distincte este de 131.

Frecvența de lucru a acestora este de


16MHz, setată de către un oscilator extern cu
cristal de cuarț.

Pe partea de conectică, aceste


plăci de dezvoltare dispun de un număr de 14
pini digitali ce pot fi configurați ca intrări
sau ieșiri, 8 pini configurați pentru a

18
îndepli funcția de intrare analogică, un pin ce are rol de ieșire a unui stabilizator de
tensiune ce redă 3,3 volți, un pin pentru a prelua o valoare de referință în tensiune
pentru convertorul Analog-Numeric(CAN). Din cei 14 pini digitali, 6 pot fi folosiți ca și
iesiri PWM şi 2 pentru interfața de comunicare UART. Curentul maxim ce poate fi
absorbit pentru fiecare pin este de 20 mA iar ieșirea stabilizatorului este de 50 mA.

Fig. 3.7 Diagrama pinilor procesorului ATmega 328p

Atmega328/P DATASHEET COMPLETE pag. 16

Subunitatea de memorie este alcătuită din mai multe memorii de capacități și


tipuri diferite. Astfel, memoriei de program îi este alocată o capacitate de 32 kocteți de
tip Flash, memoria de date de tip SRAM și dimensionată la 2 Kocteți și o memorie
EEPROM ce poate fi folosită pentru stocarea informaţiilor pe termen lung cu o
capacitate de 1 Koctet.

Pentru a putea încărca un program în precesor sunt disponibile poturile usb sau
pinii pentru modul ICSP. În cazul modulului Arduino Uno conectorul atașat pe cablaj
este de tip B iar în cazul modulului Arduino Nano, acesta este de tip Mini usb.

În ceea ce priveşte realizarea, în cazul Arduino Nano dimensiunile fizice sunt 45


milimetri lungime, 18 milimetri lățime și o greutate de doar 7 grame, iar în cazul celui
de-al doilea modul dimensiunile fizice sunt
68,6 milimetri lungime, 53,4 milimetri lățime şi
o masă egală cu 25 grame.

3.2 Modulul de recunoaștere


vocală
EasyVR este un modul de
recunoaștere a vocii conceput pentru a

19
adăuga cu ușurință capacități de identificare a comenzilor vocale în aproape orice
domeniu. Pentru a putea funcționa, acestui dispozitiv îi este necesară conectarea cu un
dispozitiv gazdă ce dispune de o interfață de comunicație UART(Universal
Asynchronous Receiver/Transmitter) și care dispun de tensiuni stabilizate de 5 și
respectiv 3,3 volți, tensiuni continue.

Fig.3.8 EayVR 3

EasyVR 3 User Manual pag. 7

Acest dispozitiv are la bază un procesor digital de semnal (DSP) care analizează
semnalele analogice primite de la un micofon.

Un DSP (Digital Signal Processor) este un tip de procesor optimizat pentru


procesare continuă rapidă (în timp real) al unui flux analogic sau digital de date precum
audio sau video. Pentru a realiza prelucrarea semnalelor analogice, acesta are integrate
convertoare analog-digitale (CAN). În funcție de tehnologiile în care sunt fabricate,
acestea pot avea arhitecturile de procesor Von Neumann, Harvard sau Harvard
modificată. Algoritmii de procesare digitală a semnalelor de intrare reclamă o gamă
foarte largă de operații matematice, care să prelucreze rapid și fără erori semnalele
primite, spre exemplu, de la senzori auditivi.

Acest dispozitiv se comercializează împreună cu un microfon ce are o


sensibilitate de -38 decibeli, o inpedanță de 2,2 Kohmi și o tensiune de lucru de 3 volți.
Acest microfon poate capta sunete cu o lățime de bandă cuprinsă între 100 de Hz şi 20
de KHz, ceea ce este destul de aproape de ceea ce poate reda un om, având în vedere
faptul că vocea umană poate genera sunete cu frecvențe cuprinse între 80 Hz si 6Khz.
Microfonul se conectează prin pinii special semnalizați în partea de sus a modulului.

20
Întrucât acest modul poate fi programat astfel încât pentru fiecare comandă
recunoscută să ofere utilizatorului un feedback sonor, producătorul a implementat
conectori speciali pentru ataşarea unui difuzor de putere mică. De asemenea, mai
dispune de 2 pini separați pentru conectarea unui difuzor de putere mai mare denumiți
SP+ și SP- și de un conector mama JACK cu diametrul de 3,5 milimetri pentru
conectarea la un amplificator audio. Producătorul, în momentul proiectării
dispozitivului a decis integrarea a 7 pini (I0-I6) într-un banc numit GPIO (General
Purpose Input/ Output) ce au rolul de a regla nivelul intern al tensiunii. Acest nivel este
setat în mod implicit la valoarea de 3 volți.

În partea superioară a dispozitivului, în afară de diverse componente electronice


sau circuite integrate care realizează funcționarea normală a dispozitivului, se mai pot
distinge două diode luminescente și un soclu ce are în interior 6 pini. Cele două diode
emit culori diferite, una emițând lumină de culoare roșie ce are rolul de a indica
prezența alimentării în circuit iar cea de-a doua emițând lumină de culoare verde și
având rolul de a indica faptul că montajul funcționează la parametri normali și modulul
este setat pe modul de ascultare și recunoaștere a comenzilor vocale. La un interval de
timp setat de către utilizator cea de-a doua diodă nu va mai emite lumină pentru o
perioadă foarte scurtă de timp, ceea ce va indica faptul că placa intră în procesul de
analiză a semnalelor acustice captate prin intermediul microfonului și de acționare
conform comenzilor scrise în program.

Rolul celor 6 pini este de ajuta utilizatorul să programeze modulul fără a fi


necesară o gazdă, ci prin intermediul unui adaptor usb- uart.

Totuși, pentru ca între modulul de recunoaștere vocală și gazda acestuia să se


poată realiza comunicarea, este necesară scrierea în memoria gazdei a unui mic
program numit ,,Bridge”. Acest program vine sub forma unui șablon ce se găsește sub
formă de librărie și poate fi descărcat de pe site-ul producătorului.
Modelele în care acest produs este disponibil pe piață sunt multiple, fiecare
model putând fi achiziționat cu sau fără un suport propriu care facilitează
interconectarea cu alte dispozitive. În soluția aleasă acest suport este inclus. Un avantaj
al folosirii unui asemenea shield este acela că facilitează conectarea dispozitivului cu
gazda. Datorită faptului că acoperă o zonă foate mare din gazdă, pinii suportului ca
dispunere și distanță sunt identici cu cei ai plăcilor de dezvoltare Arduino, în speță,
gazda pentru acest dispozitiv fiind aleasă un modul Arduino Mega. Această soluție a fost
aleasă pentru ca utilizatorul să poată folosi acești pini în funcție de necesități. Singurii
pini ai gazdei folosiți de către EasyVR sunt ieşirile stabilizatoarelor de tensiune de 3,5 și
5 volți, un pin de masă și pinii pentru comunicația UART RX si TX.

EasyVR Gazdă

21
Fig. 3.9 Pinii folosiți pentru comunicația UART dintre host și EasyVR

EasyVR 3 User Manual pag. 23

Un alt motiv impotrant pentru care s-a decis această alegere este acela că
permite comutarea a mai multor moduri de operare a dispozitivului prin intermediul
unui ștrap poziționat în partea superioară.

Fig. 3.10 EasyVR 3 împreună cu shieldu-ul dedicat


EasyVR 3 User Manual pag. 21

Prin modificarea poziției unui conector, se pot alege modurile SW, HW, PC, UP,
LEO, fiecare mod având roluri diferite în funcție de placa gazdă.

În cazul în care gazda este un Arduino Uno sau un Arduino Mega, se optează
pentru modul SW atunci când dorim să încărcăm în modulul gazdă programele scrise,
atunci când se dorește funcționarea normală sau atunci când se dorește montorizarea
prin intermediul unui calculator a modulului de recunoaștere vocală. În cazul în care se
dorește antrenarea de noi comenzi, testarea acestora sau a unor suntete interactive,
conectorul se va poziționa în dreptul modului PC. Modul UP este selectat în cazul în care
se dorește încărcarea în memorie a unor sunete noi sau în cazul în care este necesară o
actualizare a sistemului de operare al modulului.

În cazul în care gazda este un Arduino Zero sau M0 Pro, se pot alege poziţiile HW
pentru încărcarea programelor și funcționarea în regim normal, instruirea unor noi
comenzi, testarea comenzilor și LEO pentru încărcarea de noi sunete interactive sau
actualizarea sistemului de operare.

Dacă gazda este un Arduino Due, HW se selectează atunci când este necesară
încărcarea unui program, PC atunci când se actualizează lista comenzilor sau testarea
acestora și Up atunci când se actualizează software-ul sau lista sunetelor interactive.

22
În vecinătatea conectorilor se află și un LED care luminează doar atunci când
sunt selectate modurile de programare.

3.3 Modulul transceiver (Bluetooth)

Pentru realizarea comunicării dintre placa de dezvoltare Arduino Uno și


dispozitivele mobile s-a considerat o soluție fiabilă și calitativă modulul bluetooth
HC- 05.

Fig, 3.11 Modulul bluetooth HC-05

Deoarece acesta este un dispozitiv B.L.E. (Bluetooth Low Energy) denotă faptul
că va avea un consum redus de energie. Tensiunea de alimentare poate varia între 3,6 și
6 volți, tensiune continuă.

Acest modul poate juca rolul de unitate master sau de unitate slave. Aceste roluri
se modifică prin software. În acest proiect, rolul dispozitivul va fi de slave, astfel el va
recepționa semnalele primite de la dispozitivul mobil.

Pentru a se realiza comunicarea cu unitatea de control Arduino, HC-05 folosește


protocolul de comunicații UART.

UART (Universal Asynchronous Receiver/Transmitter) este un protocol de date


asincron, care două cricuite comunică direct unul cu celălalt. Dispozitivul de transmisie
convertește datele paralele dintr-un dispozitiv de control în formă serială, le transmite
în serie către dispozitivul de receptive. Dispozitivul de recepție convertește apoi datele
seriale înapoi în date paralele pentru destinația finală. Doar două fire sunt necesare
pentru a transmite date între două dispozitive. Datele fluxului de la pinul Tx al UART-
ului de transmisie la pinul Rx al UART-ului de receptive și vice-versa în cazul în care se
dorește transmiterea de date în sens invers.

23
Fig. 3.12 Schema bloc de conexiune UART

Datorită faptului că este o comunicație asincronă, între cele două circuite nu se


transmite nici un semnal de ceas care să ajute la sincronizarea emițătorului cu
receptorul. În locul acestor semnale de ceas, în comunicațiile UART se transmit, la
începutul şi sfârșitul fiecărui pachet de biți, câte un bit de start și unul sau doi biți de
stop, astfel încât receptorul va ști exact când se va începe sau se va termina
transmiterea unui pachet de date. Obțional se mai poate transmite și un bit de paritate.

Fig.3.13 Schema simplificată a pachetelor de date ce sunt transferate

În partea de proiectare se pot observa circuitul integrat HC-05, un led ce emite o


lumină de culoare roșie care are rolul de a indica dacă circuitul este alimentat sau
conectat la un alt dispozitiv bluetooth și un buton de resetare. Conform specificațiilor
date de producător acest circuit are un curent maxim consumat de 30 de mA, o lungime
de 37,5 mm și o lățime de 15,2 mm. Puterea de emisie a antenei este de +4 dBm, ceea ce
se rezumă printr-o distanță maximă de transmisie de 10 metri și o sensibilitate de
recepție de -80 dBm.

3.4 Modulul cu senzor de detecție a mișcării

Senzorul infraroșu pasiv (PIR) este un dispozitiv electronic ce măsoară radiațiile


infraroșii emise de obiectele aflate în câmpul său vizual.

Folosit in domeniul sub acronimul PIR(pasive infrared receptor) este un dispozitiv


electronic ce este capabil de a măsura radiațiile electromagnetice din spectrul infraroșu
ce sunt emise de toate obiectele aflate în raza lui de acoperire.

24
Un detector de mișcare este un dispozitiv ce recunoaşte mișcările corpurilor din
vecinătatea acestuia și este compus dintr-un mecanism fizic sau un senzor electronic
care poate cuantiza mișcarea. Detectoarele de mișcare sunt componenta principală a
sistemelor de efracție și sunt ideale în cazul sistemelor de iluminat unde nu se dorește o
sursă de lumină constantă. . Cel mai întâlnit este senzorul pasiv. Acesta reacționează la
schimbarea temperaturii cauzată de schimbarea fluxului de radiații (în principal
radiație termică) de la oameni, animale sau vehicule. Răspunde doar la stimulii cauzați
de sursele de radiație variabile, nu și la cele statice provenite spre exemplu de la lumina
solară; în schimb, dacă acesta este montat într-o zonă cu foarte multe radiaţii, acesta va
detecta mai greu mișcările, neexistând o diferență foarte mare între mediul ambiental și
corpul ce se dorește a fi detectat.

Un detector de mișcare este reprezentat de orice dispozitiv electronic ce poate


detecta schimbările de din mediu pe care noi le percepem că mișcare, aceasta este
alcătuit din un senzor electric sau mecanic ce paragraful necesită corecție

În acest proiect a fost ales modul cu senzor infraroșu pasiv LHI778 alături de un
circuit integrat BISS0001 care controlează modul în care este detectată mișcarea.

Fig. 3.14 Senzor PIR, partea superioară Fig. 3.15 Senzor PIR, partea inferioară

În partea de jos se regăsesc două potențiometre alături de 3 pini. Unul dintre


potențiometre are rolul de reglare a sensibilității și cel de-al doilea având rolul de a
regla timpul în care ieșirea este activă după detectarea unui obiect care se deplasează.
Această perioadă poate fi reglată în intervalul 0,3 secunde- 5 minute. De asemenea, pe
partea inferioară se mai poate observa prezența unor conectori. Aceștia au rolul de a
facilita comutarea între modurile de declanșare H și L. În modul de declanșare H,
senzorul transmite un nou semnal de fiecare dată când detectează mișcare. Atunci când
este selectat modul L, senzorul transmite un semnal la începutul detecției iar următorul
semnal va fi transmis doar după ce va expira timpul setat din potențiometru.

25
În afara senzorului propriu-zis, în distanța focală, se găsește o cupolă de lentile
convexe albe, dintr-un material plastic care în infraroșu este transparent. Aceste lentile
au rolul de a colecta lumină în infraroșu, aceasta ajungând la senzor ce transformă
această energie în energie electrică ce poate fi analizată de un circuit integrat.

Fig. 3.16 Principiul de funcționare al ansamblului PIR

Modulul poate detecta obiectele care se deplasează de la o distanță maximă de 7


metri și are un unghi de deschidere de 110 grade. Poate fi alimentat cu tensiune
continuă cuprinsă în intervalul 5-20 volți iar la ieșire emite semnale digitale de 3,3 și 0
volți. Curentul consumat este de 65 mA.

3.5 Modulul de radio-frecvență.

RFID (Radio-Freqvency Identification) este o metodă de indentificare


automantă ce se bazează pe stocarea și regăsirea datelor fără atingere, de la distanță,
prin unde radio,
folosind anumite
dispozitive
electronice numite
tag-uri şi cititoare
RFID.

26
Fig. 3.17 Principiul de funcționare al tehnologiei RFID

Un tag este compus în principal din 3 piese și anume o carcasă, de obicei dintr-un
material plastic, un circuit integrat și o antenă. Circuitul integrat are rolul de a prelucra
și stoca informații, de a modula și demodula semnalul provenit de la cititorul de tag-uri
iar antena are rolul de a transmite şi recepționa semnalele, dar și de a alimenta circuitul
întrucât tag-ul nu dispune de o sursă activă de energie electrică. Unele din acestea pot fi
citite de la mai mulți metri depărtare, uneori de la o distanță mai mare de 50 de metri.

Cititorul este realizat în jurul unui circuit integrat denumit MFRC522 dezvoltat
de firma NXP. Acest integrat este programat astfel încât cu el se pot efectua atât operații
de scriere cât și de citire asupra tag-urilor la o distanță de aproximativ 50 de milimetri,
această distanță depinzând de mărimea antenei și de natura materialelor ce se interpun
între el și dispozitivul asupra căruia se efectuează operțiile.

În principal modulele sunt alcătuite dintr-o antenă, un circuit de interfațare


analogic, un buffer unde se stochează datele ce urmează a fi trimise către unitatea de
control.

Fig. 3.18 Schema simplificată a unui cititor RFID

NXP Semiconductors, NFRC522 datasheet, pag. 4

Comunicația dintre cititor si modulul de comandă a acestuia se poate realiza prin


interfațele SPI (Serial Peripheral Interface), UART, I2C, acestea jucând rolul de slave.
Pentru a transmite date sunt necesare, pe lângă alimentare, semnalele SCK (semnalul de
ceas, dictat de placa master), MOSI (Master Out Slave In), MISO (Master In Slave OUT),
SDA (Serial Data Line). Frecvența de operare este de 13,5 MHz stabilită de un oscilator
cu cristal de cuarț iar viteza de transfer a datelor este de 5 Mbiți/s.

3.6 Proiectarea cablajului

27
Fig 3.19 Proiectarea montajului cu ajutorul programului Proteus

Fig 3.20. Proiectarea montajului

CAP.4 PROIECTAREA SOFTWARE

28
4.1 Organigramele software

Fig 4.1 Organigrama software pentru comanda vocală, modulul bluetooth și senzorul de
mișcare

În această organigramă este prezentat modul în care proiectul a fost gândit și


comenzile ce au fost implementate în sistem. Acest sistem a fost gândit pentru un
apartament cu dormitor și living-room, o baie, o bucătărie și un mic hol de acces în
încăperi. Fiecare încăpere a fost proiectată cu câte un bloc de lumini și un bloc pentru
prize. Toate acestea vor fi acționate prin intermediul unor reţele comandate la
tensiunea de 5 volți.

Prima comandă ce trebuie introdusă este cea pentru selectarea modului în care
dorim să inserăm comenzile. Această comandă se introduce vocal prin rostirea
cuvintelor bluetooth up pentru a activa modulul bluetooth și bluetooth down pentru
dezactivarea acestuia. În mod implicit, modulul bluetooth este inactiv și comandarea se

29
face doar vocal. În momentul în care se dorește activarea modulului bluetooth, comanda
vocală rămane activă doar pentru operațiile de aprindere a luminilor, nu și pentru
stingere.

După cum se poate observa, pentru blocul de iluminat pentru baie nu a fost
implementată o comandă vocală deoarece, pentru simplitate și pentru o mai bună
funcționare, s-a decis inserarea tuturor comenzilor în limba engleză. Datorită acestui
lucru și datorită faptului că asemănarea dintre cuvântul bedroom și cuvântul bathroom
este foarte mare, a fost necesară sacrificarea unei comenzi. În schimb, pentru
aprinderea acestui bloc de lumini au fost inserate aceste comenzi în interfața bluetooth.

De asemenea, blocul de lumini din hol vor fi acționate în întregime prin


intermediul senzorului de prezență PIR.

Astfel, pentru comanda vocală avem la dispozitie comenzile bedroom up și


bedroom down, ce realizează operațiile de aprindere și stingere a bloculul de lumini din
dormitor, comenzile kitchen up și kitchen down pentru comanda luminilor din
bucătărie și comenzile livingroom up și livingroom down ce acționează asupra luminilor
din livingroom.

Totodată, datorită lipsei de porturi disponibile pe modulul Arduino Uno,


comenzile pentru acționarea prizelor au fost puse doar pentru comanda de la
dispozitivele Andrid. Astfel prin intermediul aplicaţiei de pe Android avem posibilitatea
de a comanda toate încăperile în totalitate.

Pentru realizerea comandării, atât în meniul aplicației mobile cât și în programul


scris în memoria modulului Arduino au fost prestabilite caractere alfanumerice (atât
litere cât și cifre).
Pentru dormitor sunt memorate caracterele 0 și 1 pentru comanda luminilor, 8 și
9 pentru cuplarea sau decuplarea prizelor.
Pentru bucătărie au fost memorate caracterele 2 și 3 în comanda luminilor, G și H
pentru prize.
De asemenea, caracterele care au efect în comandarea luminilor din living sunt 4
și 5. Pentru prize acestea sunt C și D.
În cazul băii, avem la dispoziție caracterele 6 și 7 pentru comanda blocului de
lumini, I şi J pentru blocul de prize.

30
Fig. 4.2 Organigrama software pentru modulul RFID

În ceea ce privește partea de programare pentru modulul de identificare prin


radio-frecvență, partea de programare este relative simplă. Pentru aceasta sunt
necesare câteva linii de cod care să redea caracterele citite de la tag. Datorită faptului că
datele sustrase din tag sunt în format binar (0 şi 1 logic), se va folosi o funcție pentru
transformarea acestora din format binar în format hexa și o funcție string pentru a reuni
toate caracterele.

Pentru a realiza interfața de comuicație dintre modulul și placa de comandă este


utilizată o librărie numită MFRC522.h pusă la dispoziție de către producător. De
asemenea, se mai definesc și pinii SS și RST.

31
4.2 Mediul de programare pentru Aruino

Programele pentru plăcile de dezvoltare Arduino pot fi scrise în orice limbaj de


programare cu un compilator capabil să producă un cod mașină binar. Producătorul
microprocesorului, Atmel, oferă medii de dezvoltare precum AVR Studio sau Atmel
Studio. Totuşi, pentru a realiza programarea plăcilor de dezvoltare Arduino
dezvoltatorul a pus la dispoziţie un mediu de programare numit Arduino IDE.

Plăcile de dezvoltare Arduino conțin un microcontroller ceea ce înseamnă că pot


fi programate cu o mulțime de limbaje de programare cat timp cat compilatorul,
asamblorul, etc este capabil sa producă cod mașină din codul scris .
Producătorul microcontrollerului , respectiv Atmel, ne furnizează medii propri de
dezvoltare cum ar fi AVR Studio sau Atmel Studio. Dar cea mai comună metodă de
programare a plăcilor de dezvoltare Arduino este prin mediul de programare Arduino
IDE
Arduino IDE este aplicație obținută prind folosirea limbajului Java iar
caracteristicile cele mai importante la acest lucru îl reprezintă capacitatea lui de cross-
platform , adică poate fi folosit pe orice sistem de operare ce poate rula Java. Arduino
IDE este un editor de text și compilator însă are și abilitatea de a transfera firmwareul
serial.

Arduino IDE este o aplicație Java de tip cross-platform ce are rol de editor de
coduri și compilatoare . De asemenea, aplicația este capabilă să transfere firmware-ul în
serie.

Mediul de dezvoltare se bazează pe procesare, un IDE (integrated development


environment) conceput pentru a introduce programarea pentru doritorii nefamiliarizați
cu dezvoltarea de software. Limbajul de programare este derivat din Wiring, un limbaj
asemănător C, care oferă o funcționalitate similară pentru o gamă de arhitectur ale
plăcilor mai restrânsă, a cărui IDE se bazează de asemenea pe procesare.
Acronimul IDE vine de la integrated development environment, adică mediul de
dezvoltare este integrat in ed paragraful necesită corecție

Meniul programului este relativ simplist și incude 5 meniuri principale în partea


de sus, un antet, iar zona de mijloc este folosită pentru scrierea liniilor de program.
În meniul File se pot crea proiecte noi sau se pot deschide proiecte realizate
anterior. Tot aici se pot găsi și proiecte șablon realizate de alţi utilizatori.
În meniul Edit se pot modifica fontul textului, mărimea acestuia şi se poate
realiza operația de căutare a unui cuvânt.
Din meniul Sketch se includ librăriile, se compilează programul și tot de aici se
efectuează operația de încărcare.

32
În meniul Tootls se regăsesc submeniurile de unde se selectează modelul plăcii
ce urmează a fi programat, se selectează portul usb al computerului la care este
conectată placa și se selectează programatorul. Tot de aici se deschid interfețele de
serial monitor și de serial plotter. În cazul în care sunt mai multe dispozitive conectate,
portul corect se poate identifica intrând în meniul
device manager al laptopului.

Fig.4.4 Identificarea portului din device manager

În partea inferioară a interfeței grafice a programului se specifică dispozitivul


selectat pentru programare și portul unde este acesta conectat.
La fel ca în cazul celorlalte medii de programare, în arduino IDE sunt nesesare
câteva structuri de program.
Astfel, orice program scris în acest mediu de dezvoltare începe cu definirea
pinilor și includerea librăriilor. Pentru definirea pinilor se pot folosi
sintaxele ,,#define’’, ,,int’’, ,,const int’’,. Pentru a include librările se utilizează
sintaxa ,,include’’, urmând a fi inserat numele librăriei scris între caracterele ,,<, >”.
Un exemplu de includere a unei librării este ,,#include <MFRC522.h>”
Următorul pas este crearea unei structuri de inițializare numită ,,Setup”.
Această structură fără a fi reapelată, rulează o singură dată. În aceasă structură se pot
defini funcțiile pinilor (de intrare sau de ieșire). Pentru ca un pin să fie de intrare sau
ieşire se folosește comanda ,,pinMode” urmată de numărul sau eticheta pinului și
funcția acestuia ce este scrisă cu majuscule. Un exemplu în acest mod este funcția
,, pinMode(pin, INPUT); ‘’. Tot aici se inițializează toate echipamentele periferice ce vor
comunica cu placa sau valoarea de început a pinilor.
Ultima structură creată se numește loop și este este o structură repetitivă.
Aceasta este bucla principală din program și în aceasta se pot citi datele recepționate de
la periferice în mod continuu, se pot insera condiții pe baza datelor primite, se pot crea
structuri de tip numărător sau se pot modifica valorile pinilor setați ca ieșiri.
Suplimentar se pot crea structuri secundare ce sunt apelate din bucla principală de
program.
De reținut este faptul că la sfărșitul fiecărei funcții sau comenzi este necesară
inserarea unei terminații ,, ; “.
Câteva funcții ce pot fi întâlnite în programul scris pentru acest proiect sunt:
• delay( )- această funcție este folosită pentru a introduce întârzieri;

33
• digitalWrite(pin, HIGH) – este folosită pentru a seta un pin la valoarea de maxim;
• digitalWrite(led, LOW)- prin această funcție valoarea unui pin este adusă la 0;
• analogRead( )- este întâlnită atunci când se doreşte citirea unei valori de la intrarea
unui pin analogic;
• seral.print - este o funcție ce are rolul de a scrie informaţii pe consola de serial şi are
rol foarte important în depanare.

CAP.5 REALIZARE FIZICĂ

34
CAP.6 CONCLUZII

35
Cu ceva ani în urmă1, conceptul de automatizare părea că se încadrează în
domeniul ştiinţifico-fantastic. Nu mai e cazul şi astăzi încât casa inteligentă a devenit
realitate, rămânând însă un concept inedit.

Deși cu nu mult timp in urmă ideea automatizării unor astfel de procese pe o


scară atât de largă nu părea posibil , astăzi tehnologia face acest lucru posibil și ca orice
produs, costul său tinde să se reducă iar calitatea să îi crească fiind folosit pe o scară și
mai largă decât în momentul de față.

In concluzie, sistemul de securitate antiefracție are ,,viitor,, paragraful necesită


corecție

În concluzie, comanda vocală sau prin intermediul aplicațiilor de mobil a


luminilor, yala contactless , părţi ale procesului de automatizare a locuinţelor viitorului,
ne oferă multe avantaje, atât din punct de vedere practic ( uşurează viaţa utilizatorilor,
oferă securitate sporită, eficienţă energetică, comfort şi divertisment), cât si estetic,
ajutându-ne să obţinem admosfera dorită în fiecare încăpere cu un minimum de efort.
Acestea reprezintă soluţii pragmatice, prezente deja în case inteligente din străinătate,
iar industria de automatizări este mai mult decât pregătită să realizeze orice dorinţă
legată de control asupra casei .

Soluția prezentată este una pragmatică iar în realizarea proiectului nu s-au folosit
componente ce se găsesc în nici un sistem deja existent pe piață.

Scopul declarat al acestei lucrări este acela de realiza un sistem fiabil, uşor de
implementat într-o locuință care să ușureze viața cotidiană a unei persoane prin
tehnologizare.

Scopul acestei lucrări așa cum am rezumat in primele capitole este acela de a
realiza un sistem de securitate fiabil, simplu de implementat într-un imobil chiar și fără
o pregătire de specialitate, care să sporească nivelul de securitate în cadrul locuinței,
făcând viața cotidiană mai sigură.

Pentru început voi menționa faptul că această lucrare este mai mult decât o
lucrare tehnică. Scopul inginerului în societate este acela de a rezolva problemele
cotidiene și de a îmbunătăți viața acestuia și a celor din jur prin dezvoltarea unor soluții
inovative. Primul pas pentru a realiza acest lucru este identificarea problemei. Imediat
ce a fost identificată problema, acesta are la bază cunoștințe solide și gândirea tehnică
pentru realizarea unor soluții optime. Pentru că proiectele reușite sunt legate
întotdeauna de o organizare reușită, în cadrul acestei lucrări au fost alese mai multe

1
În 1964, Isaac Asimov afirma că ”Până în 2014, panourile electroluminiscente vor fi comune. Tavanele și
pereții vor lumina blând, într-o varietate de culori care vor putea fi schimbate prin apăsarea unui buton”.
36
principii care au reprezentat punctele cheie ale acestui sistem. Unul dintre aceste
principii a fost păstrarea sistemului în zona de aplicații cu un cost redus de
implementare, iar un altul fiind implementarea unei soluții off-line.

Consider această lucrare mai mult decât scopul pentru care ea a fost realizată, ea
reprezintă o dorință personală de a îmi aduce aportul la societatea de astăzi prin
folosirea cunoștințelor și abilităților dobândite până în acest punct. paragraful necesită
corecție

BIBLIOGRAFIE

37
CAP.7 ANEXE
//Develop by Naziru Adrian

//Student of "Dunarea de Jos" University in Galati

//

#include <Wire.h>

#include <Password.h>

#include <Keypad.h>

#include <LiquidCrystal_I2C.h>

const int nrCol=16;

// PIR=Passive infrared sensor

// in simulare avem adresa 0x20 dar in realitate adresa este 0x3F !!!

LiquidCrystal_I2C lcd(0x20, 16, 2); //initializare display

const byte ROWS = 4;

const byte COLS = 4;

38
char keys[ROWS][COLS] = {

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

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

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

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

};

byte rowPins[ROWS] = {9, 8, 7, 6};

byte colPins[COLS] = {5, 4, 3, 2}; // pins declaration for keypad mapping

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

//byte customCharDown[] = //not needed

// { // define an special character for lcd display(IT IS A DOWN ARROW)

// B00100, B00100, B00100, B00100, B00100, B10101, B01110, B00100

// };

const int pir11 = 11;

const int pir12 = 12;

const int pir13=A2;

const int speaker = 10;

const int sign = 13;

const int panicButton=A0;

const int magneticContact=A1;

byte alarmStatus=0 ;

byte pir11Value;

int timer=1000;

byte exitTime=1;

byte entryTime=1;

int cursorForPassword=0;

byte recordZone1=0;

39
byte recordZone2=0;

byte recordZone3=0;

byte recordPanicButton=0;

byte recordMagneticContact=0;

byte valPanicButton = 0;

byte newPasswordRequest = 0;

byte newPasswordRequestConfirm = 0;

byte menuEntry = 0;

byte menuExit=0;

char newPassword[6];

char dataPassword[7];

byte data_count=0;

byte alarmConfirm=0;

byte z1Enable=1;

byte z2Enable=1;

byte z3Enable=1;

byte z4Enable=1;

byte z1=0;

byte z2=0;

byte z3=0;

byte z4=0;

byte language=1;

Password password = Password( "12" ); //password for disarm

void setup() {

Wire.begin(); //for i2c com

lcd.init(); //turn on the lcd

40
lcd.backlight(); //turn the backlight on

pinMode(sign, OUTPUT); //pin setat pe output pentru indicator

pinMode(speaker, OUTPUT); //set the speaker pin to be output

digitalWrite(sign, LOW); //set the led sign to be open

digitalWrite(speaker, LOW); //set the speaker to be off

// lcd.createChar(1, customCharDown); //create an ,,down arrow,,character

pinMode(panicButton, INPUT);

void Speaker(){

switch(alarmStatus){

case 1 :

for(int i = 1; i <= 2; i++)

keypad.getKey();

keypad.addEventListener(keypadEvent);

analogWrite(speaker, 200);

analogWrite(sign, i*100);

delay(200);

keypad.getKey();

analogWrite(speaker, 25);

analogWrite(sign, i*100);

delay(200);

keypad.getKey();

analogWrite(speaker, 17000);

analogWrite(sign, i*100);

delay(200);

41
digitalWrite(sign,LOW);

keypad.getKey();

break;

case 0:

digitalWrite(sign,LOW);

digitalWrite(speaker, LOW);

break;

void StatusSpeaker() //this function is use to tell the user that the system is ARMED and
ready to act in case of bulgary or rubbery

for(int i = 1; i <= 3; i++)

analogWrite(speaker, 200); //Set the speaker pin to start a 200 HZ tone / this loop shoud
happen 4 times after that the system will be ARMED

digitalWrite(sign, HIGH); //Set the sign led ON(digital HIGH) the led should blink 4 times to
know that the system is ARMED

delay(100); //delay set for blinking effect and for sound effect

digitalWrite(sign,LOW); //Set the sign led OFF(digital LOW) the led should blink 4 times to
know that the system is ARMED

} //end of Status Speaker function this function will be call in the main loop

void SignEvent() //Function for LED signal

digitalWrite(sign, HIGH);

delay(100);

digitalWrite(sign, LOW);

42
delay(100);

digitalWrite(sign, HIGH);

delay(100);

digitalWrite(sign, LOW);

delay(100);

digitalWrite(sign, HIGH);

delay(100);

digitalWrite(sign, LOW);

void Alarm() //Function for alarm condition

{ //This function is call when an unwanted event happen like rubbery

long i=0;

for(i=0; i<=(entryTime*timer)/30;i++)

{ keypad.getKey();

keypad.addEventListener(keypadEvent);

keypad.getKey();delay(30);

if(i>=(entryTime*timer)/30)

{ do{

Speaker(); } while(alarmStatus==1); // call speaker(); function

else

{}

} //This is the end of Alarm condition function

void Check()

if(alarmStatus==0)

43
{

if(analogRead(panicButton)>=600)

{ long i=0;

for(i=0; i<=(timer*3)/30;i++)

{ delay(30);

if(i>=(timer*3)/30&&analogRead(panicButton)>=600)

{ alarmStatus=1;

recordPanicButton=1;

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" SITUATIE "));break;

case 2: lcd.print(F(" L'EVENEMENT "));break;

case 3: lcd.print(F(" PANIC SITUATION"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" DE PANICA "));break;

case 2: lcd.print(F(" DE PANIQUE " ));break;

case 3: lcd.print(F(" PANIC SITUATION"));break; }

do

Speaker(); //Call the Speaker function

} while (alarmStatus==1);

}}}

if(alarmStatus==1)

Sensor();

44
}

void Sensor()

if(digitalRead(pir12)==HIGH&&(z1Enable==1))

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" !!! ALARMA !!!"));break;

case 2: lcd.print(F("DECHARGE ALARME"));break;

case 3: lcd.print(F(" !!! ALARM !!!"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" Probleme zona 1"));break;

case 2: lcd.print(F("Problemes zone 1"));break;

case 3: lcd.print(F(" Zone 1 problems"));break; }

recordZone1=1;

do

Alarm(); //Call the alarm function

} while (alarmStatus==1);

if(digitalRead(pir11)==HIGH&&(z2Enable==1))

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" !!! ALARMA !!!"));break;

45
case 2: lcd.print(F("DECHARGE ALARME"));break;

case 3: lcd.print(F(" !!! ALARM !!!"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" Probleme zona 2"));break;

case 2: lcd.print(F("Problemes zone 2"));break;

case 3: lcd.print(F(" Zone 2 problems"));break; }

recordZone2=1;

do

Alarm(); //Call the alarm function

} while (alarmStatus==1); //while ARMED condition is on

if(digitalRead(pir13)==HIGH&&(z3Enable==1))

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" !!! ALARMA !!!"));break;

case 2: lcd.print(F("DECHARGE ALARME"));break;

case 3: lcd.print(F(" !!! ALARM !!!"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" Probleme zona 3"));break;

case 2: lcd.print(F("Problemes zone 3"));break;

case 3: lcd.print(F(" Zone 3 problems"));break; }

recordZone3=1;

do

46
Alarm(); //Call the alarm function

} while (alarmStatus==1);

if(digitalRead(magneticContact)==HIGH&&(z4Enable==1))

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" !!! ALARMA !!!"));break;

case 2: lcd.print(F("DECHARGE ALARME"));break;

case 3: lcd.print(F(" !!! ALARM !!!"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" Probleme zona 4"));break;

case 2: lcd.print(F("Problemes zone 4"));break;

case 3: lcd.print(F(" Zone 4 problems"));break; }

recordMagneticContact=1;

do

Alarm(); //Call the alarm function

} while (alarmStatus==1);

void checkPassword(){

if (password.evaluate())

{ if(alarmStatus==0&&menuEntry==1){

newPasswordRequest=0;

lcd.clear();

47
switch(language){

case 1: lcd.print(F(" PIN CORECT "));break;

case 2: lcd.print(F(" PIN CORRECT " ));break;

case 3: lcd.print(F(" PIN CORRECT"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F("INTR. NOUL PIN"));break;

case 2: lcd.print(F("ENTRER NEUF PIN" ));break;

case 3: lcd.print(F(" PRESS NEW PIN"));break; }

password.reset();

cursorForPassword=0;

delay(1000);

lcd.clear();

keypad.getKey();

keypad.addEventListener(keypadEvent);

newPasswordRequestConfirm=1;

if(alarmStatus==1){

lcd.clear();switch(language){

case 1: lcd.print(F("SISTEM DEZARMAT "));break;

case 2: lcd.print(F("SYSTEME DESARME " ));break;

case 3: lcd.print(F("SYSTEM DISARMED "));break; }

delay(100);

alarmStatus=0;

cursorForPassword=0;

pinMode(pir11,OUTPUT);

digitalWrite(pir11,LOW);

pinMode(pir12,OUTPUT);

digitalWrite(pir12,LOW);

48
pinMode(pir13,OUTPUT);

digitalWrite(pir13,LOW);

delay(1500); lcd.clear();

pinMode(magneticContact,OUTPUT);

digitalWrite(magneticContact,LOW);

else

lcd.clear();

switch(language){

case 1: lcd.print(F(" PAROLA GRESITA"));break;

case 2: lcd.print(F(" PIN INCORRECT" ));break;

case 3: lcd.print(F(" WRONG PASSWORD "));break; }

delay(100); password.reset();

void keypadEvent(KeypadEvent eKey){

if(alarmStatus==1){

switch (keypad.getState()){

case PRESSED:

if(cursorForPassword==0){lcd.clear();}

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" TASTA INTRODUSA "));break;

case 2: lcd.print(F(" ENTRER PIN" ));break;

case 3: lcd.print(F(" PIN PRESSED "));break; }

49
if(eKey){cursorForPassword++;

if(cursorForPassword==16||eKey=='B'){cursorForPassword=0;lcd.clear();}

lcd.setCursor(cursorForPassword,1);}

lcd.print(eKey);

if(eKey=='B')

{lcd.clear();

switch(language){

case 1: lcd.print(F(" RESETARE "));break;

case 2: lcd.print(F(" REINITIALISER" ));break;

case 3: lcd.print(F(" ATTEMPT RESET "));break; }

delay(300);}

switch (eKey){

case 'A': checkPassword();break; //Call the checkPassword function to evalutate the password
user insert with the system current password

case 'B': cursorForPassword=0; password.reset(); break; //Reset the user inserted password

default: password.append(eKey);

if(alarmStatus==0&&newPasswordRequest==1){

switch (keypad.getState()){

case PRESSED:

if(cursorForPassword==0){lcd.clear();}

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" TASTA INTRODUSA "));break;

case 2: lcd.print(F(" ENTRER PIN" ));break;

case 3: lcd.print(F(" PIN PRESSED "));break; }

if(eKey){cursorForPassword++;

if(cursorForPassword==16||eKey=='B'){cursorForPassword=0;lcd.clear();}

50
lcd.setCursor(cursorForPassword,1);}

lcd.print(eKey);

if(eKey=='B')

{lcd.clear();

switch(language){

case 1: lcd.print(F(" RESETARE "));break;

case 2: lcd.print(F(" REINITIALISER" ));break;

case 3: lcd.print(F(" ATTEMPT RESET "));break; }

delay(300);}

switch (eKey){

case 'A': checkPassword();break; //Call the checkPassword function to evalutate the password
user insert with the system current password

case 'B': cursorForPassword=0; password.reset(); break; //Reset the user inserted password

default: password.append(eKey);

if(alarmStatus==0&&newPasswordRequestConfirm==1){ // new password , step 2

switch (keypad.getState()){

case PRESSED:

if(cursorForPassword==0){lcd.clear();}

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" TASTA INTRODUSA "));break;

case 2: lcd.print(F(" ENTRER PIN" ));break;

case 3: lcd.print(F(" PIN PRESSED "));break; }

if(eKey){cursorForPassword++;

if(cursorForPassword==16||eKey=='B'){cursorForPassword=0;lcd.clear();}

lcd.setCursor(cursorForPassword,1);}

51
lcd.print(eKey);

if(eKey=='B')

{lcd.clear();

switch(language){

case 1: lcd.print(F(" RESETARE "));break;

case 2: lcd.print(F(" REINITIALISER" ));break;

case 3: lcd.print(F(" ATTEMPT RESET "));break; }

delay(300);}

switch (eKey){

case 'A': password.set(dataPassword);

lcd.clear();

switch(language){

case 1: lcd.print(F(" PAROLA A FOST "));break;

case 2: lcd.print(F(" LE MOT DE PASSE" ));break;

case 3: lcd.print(F(" THE PASSWORD "));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" SCHIMBATA"));break;

case 2: lcd.print(F(" A ETE CHANGE" ));break;

case 3: lcd.print(F(" WAS CHANGED "));break; }

newPasswordRequestConfirm=0; break; //Call the checkPassword function to


evalutate the password user insert with the system current password

case 'B': cursorForPassword=0; password.reset(); break; //Reset the user inserted password

default: if (7>data_count){dataPassword[data_count]=eKey;data_count++;}

else {lcd.clear();

lcd.print("MAXIMUM NUMBER ");

lcd.setCursor(0,1);

lcd.print("OF CHARACTERS");}

52
}

void keypadRecordMenu(KeypadEvent recordKey){ //function use for menu

if(alarmStatus==0){

switch (keypad.getState()){

case PRESSED:

lcd.clear();

switch(language){

case 1: lcd.print(F("OPTIUNE INVALIDA"));break;

case 2: lcd.print(F(" CHOIX INVALIDE" ));break;

case 3: lcd.print(F(" OPTION INVALID "));break; }

lcd.setCursor(0,1);

lcd.print(recordKey);

if (recordKey=='1'){

lcd.clear();

lcd.setCursor(0,0);

if(recordZone1==1){ switch(language){

case 1: lcd.print(F(" PROBLEME ZONA 1"));break;

case 2: lcd.print(F("PROBLEMES ZONE 1"));break;

case 3: lcd.print(F(" ZONE 1 PROBLEMS"));break; }}

else switch(language){

case 1: lcd.print(F(" ZONA 1 OK "));break;

case 2: lcd.print(F(" ZONE 1 OK"));break;

case 3: lcd.print(F(" ZONE 1 OK"));break; };

lcd.setCursor(0,1);

if(recordZone2==1){switch(language){

53
case 1: lcd.print(F(" PROBLEME ZONA 2"));break;

case 2: lcd.print(F("PROBLEMES ZONE 2"));break;

case 3: lcd.print(F(" ZONE 2 PROBLEMS"));break; }}

else switch(language){

case 1: lcd.print(F(" ZONA 2 OK "));break;

case 2: lcd.print(F(" ZONE 2 OK"));break;

case 3: lcd.print(F(" ZONE 2 OK"));break; }}

if (recordKey=='4'){

lcd.clear();

lcd.setCursor(0,0);

if(recordZone3==1){switch(language){

case 1: lcd.print(F(" PROBLEME ZONA 3"));break;

case 2: lcd.print(F("PROBLEMES ZONE 3"));break;

case 3: lcd.print(F(" ZONE 3 PROBLEMS"));break; }}

else switch(language){

case 1: lcd.print(F(" ZONA 3 OK "));break;

case 2: lcd.print(F(" ZONE 3 OK"));break;

case 3: lcd.print(F(" ZONE 3 OK"));break; }

lcd.setCursor(0,1);

if(recordMagneticContact==1){switch(language){

case 1: lcd.print(F(" PROBLEME ZONA 4"));break;

case 2: lcd.print(F("PROBLEMES ZONE 4"));break;

case 3: lcd.print(F(" ZONE 4 PROBLEMS"));break; }}

else switch(language){

case 1: lcd.print(F(" ZONA 4 OK "));break;

case 2: lcd.print(F(" ZONE 4 OK"));break;

case 3: lcd.print(F(" ZONE 4 OK"));break; }}

if (recordKey=='7'){

lcd.clear();

54
lcd.setCursor(0,0);

if(recordPanicButton==0){

lcd.setCursor(0,0);

switch(language){lcd.clear();

case 1: lcd.print(F("NICI O SIT. DE"));break;

case 2: lcd.print(F("L'EVENEMENT DE"));break;

case 3: lcd.print(F(" NO PANIC EVENT"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F("PANICA INTANLITA"));break;

case 2: lcd.print(F("PANIQUE INEXIST." ));break;

case 3: lcd.print(F(" OCCUR "));break; }}

else lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" SITUATIE DE "));break;

case 2: lcd.print(F("L'EVENEMENT DE "));break;

case 3: lcd.print(F(" PANIC SITUATION"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F("PANICA INTANLITA "));break;

case 2: lcd.print(F("PANIQUE N'EXISTE " ));break;

case 3: lcd.print(F(" OCCUR "));break; }}

if (recordKey=='A'){

recordPanicButton=0; recordZone1=0;recordZone2=0;recordZone3=0;recordMagneticContact=0;

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("JURNAL DE EVEN."));break;

55
case 2: lcd.print(F("JURNAL D'EVEN."));break;

case 3: lcd.print(F(" EVENT LOG"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" A FOST STERS "));break;

case 2: lcd.print(F(" A ETE EFFACE." ));break;

case 3: lcd.print(F(" IS CLEAR"));break; }

void keypadSensorMenu(KeypadEvent sensorKey){ //function use for menu

if(alarmStatus==0&&menuEntry==1){

switch (keypad.getState()){

case PRESSED:

lcd.clear();

switch(language){

case 1: lcd.print(F("OPTIUNE INVALIDA"));break;

case 2: lcd.print(F(" CHOIX INVALIDE" ));break;

case 3: lcd.print(F(" OPTION INVALID "));break; }

lcd.setCursor(0,1);

lcd.print(sensorKey);

if (sensorKey=='1'){z1++;

if(z1>=2){z1Enable= !z1Enable;;z1=0;}

lcd.clear();

lcd.setCursor(0,0);

if(z1Enable==0){switch(language){

56
case 1: lcd.print(F("ZONA 1 INACTIVA "));break;

case 2: lcd.print(F("ZONE 1 DEZACTIV." ));break;

case 3: lcd.print(F("ZONE 1 DISABLE "));break; }}

else {switch(language){

case 1: lcd.print(F("ZONA 1 ACTIVATA"));break;

case 2: lcd.print(F("ZONE 1 ACTIVER" ));break;

case 3: lcd.print(F("ZONE 1 ENABLE"));break; }}}

if (sensorKey=='2'){z2++;

if(z2>=2){z2Enable= !z2Enable;z2=0;}

lcd.clear();

lcd.setCursor(0,0);

if(z2Enable==0){switch(language){

case 1: lcd.print(F("ZONA 2 INACTIVA "));break;

case 2: lcd.print(F("ZONE 2 DEZACTIV." ));break;

case 3: lcd.print(F("ZONE 2 DISABLE "));break; }}

else {switch(language){

case 1: lcd.print(F("ZONA 2 ACTIVATA"));break;

case 2: lcd.print(F("ZONE 2 ACTIVER" ));break;

case 3: lcd.print(F("ZONE 2 ENABLE"));break; }}}

if (sensorKey=='3'){z3++;

if(z3>=2){z3Enable= !z3Enable;;z3=0;}

lcd.clear();

lcd.setCursor(0,0);

if(z3Enable==0){switch(language){

case 1: lcd.print(F("ZONA 3 INACTIVA "));break;

case 2: lcd.print(F("ZONE 3 DEZACTIV." ));break;

case 3: lcd.print(F("ZONE 3 DISABLE "));break; }}

else {switch(language){

case 1: lcd.print(F("ZONA 3 ACTIVATA"));break;

57
case 2: lcd.print(F("ZONE 3 ACTIVER" ));break;

case 3: lcd.print(F("ZONE 3 ENABLE"));break; }}}

if (sensorKey=='4'){z4++;

if(z4>=2){z4Enable= !z4Enable;;z4=0;}

lcd.clear();

lcd.setCursor(0,0);

if(z4Enable==0){switch(language){

case 1: lcd.print(F("ZONA 4 INACTIVA "));break;

case 2: lcd.print(F("ZONE 4 DEZACTIV." ));break;

case 3: lcd.print(F("ZONE 4 DISABLE "));break; }}

else {switch(language){

case 1: lcd.print(F("ZONA 4 ACTIVATA"));break;

case 2: lcd.print(F("ZONE 4 ACTIVER" ));break;

case 3: lcd.print(F("ZONE 4 ENABLE"));break; }}}

if (sensorKey=='A'){

z1Enable=1;z2Enable=1;z3Enable=1;z4Enable=1;

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("RESETARE SETARI "));break;

case 2: lcd.print(F(" RESTAURATION" )); lcd.setCursor(0,1);lcd.print(F(" DU SYSTEMER " ));break;

case 3: lcd.print(F("SYSTEM RESTORE"));break; }

lcd.print("SYSTEM RESTORE");

delay(1500);

lcd.clear();

if (sensorKey=='B'){

58
lcd.clear();

if(z1Enable==1){ lcd.setCursor(0,0);

lcd.print("Z1=ON");}

if(z1Enable==0){ lcd.setCursor(0,0);

lcd.print("Z1=OFF");}

if(z2Enable==1){ lcd.setCursor(10,0);

lcd.print("Z2=ON");}

if(z2Enable==0){ lcd.setCursor(10,0);

lcd.print("Z2=OFF");}

if(z3Enable==1){ lcd.setCursor(0,1);

lcd.print("Z3=ON");}

if(z3Enable==0){ lcd.setCursor(0,1);

lcd.print("Z3=OFF");}

if(z4Enable==1){ lcd.setCursor(10,1);

lcd.print("Z4=ON");}

if(z4Enable==0){ lcd.setCursor(10,1);

lcd.print("Z4=OFF");}

void keypadEventMenu(KeypadEvent mKey){ //function use for menu

if(alarmStatus==0){menuEntry=1;

switch (keypad.getState()){

case PRESSED:

59
lcd.clear();

switch(language){

case 1: lcd.print(F("OPTIUNE INVALIDA"));break;

case 2: lcd.print(F(" CHOIX INVALIDE" ));break;

case 3: lcd.print(F(" OPTION INVALID "));break; }

lcd.setCursor(0,1);

lcd.print(mKey);

switch (mKey){

case '3': if(menuEntry==1) { for(int i=0;i<1;i++){

lcd.clear();

switch(language){

case 1: lcd.print(F("JURNAL DE EVEN."));break;

case 2: lcd.print(F("JOURNAL DES EVEN" ));break;

case 3: lcd.print(F(" EVENT RECORD "));break; }

delay(500);

menuEntry=0;

keypad.getKey();

keypad.addEventListener(keypadRecordMenu);}

;break;

case '6': if(menuEntry==1) { for(int i=0;i<1;i++){

lcd.clear();

switch(language){

case 1: lcd.print(F(" SETARI SENZORI."));break;

case 2: lcd.print(F(" REGLAGES DE " )); lcd.setCursor(0,1);lcd.print(F(" CAPTEURS" ));break;

case 3: lcd.print(F(" SENSORS SETINGS "));break; }}

60
delay(500);

menuEntry=0;

keypad.getKey();

keypad.addEventListener(keypadSensorMenu);}

;break;

case '1': lcd.clear(); //Increase exit time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP DE IESIRE"));break;

case 2: lcd.print(F("TEMPS DE SORTIE" ));break;

case 3: lcd.print(F("NEW EXIT TIME"));break; }

exitTime++;

lcd.setCursor(0,1);

lcd.print(exitTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

;break;

case '4': lcd.clear(); //Decrease exit time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP DE IESIRE"));break;

case 2: lcd.print(F("TEMPS DE SORTIE" ));break;

case 3: lcd.print(F("NEW EXIT TIME"));break; }

exitTime--;

if(exitTime<=1){

61
lcd.clear();

switch(language){

case 1: lcd.print(F("TIMP MINIM"));break;

case 2: lcd.print(F("TEMPS MINIMUM" ));break;

case 3: lcd.print(F("MINIMUM TIME"));break; }

lcd.setCursor(4,1);

exitTime=1;}

lcd.setCursor(0,1);

lcd.print(exitTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

;break;

case '2': lcd.clear(); //Increase entry time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP DE INTRARE"));break;

case 2: lcd.print(F("TEMPS DE ENTREES" ));break;

case 3: lcd.print(F("NEW ENTRY TIME"));break; }

entryTime++;

lcd.setCursor(0,1);

lcd.print(entryTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

62
;break;

case '5':lcd.clear(); //Decrease entry time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP DE INTRARE"));break;

case 2: lcd.print(F("TEMPS DE ENTREES" ));break;

case 3: lcd.print(F("NEW ENTRY TIME"));break; }

entryTime--;

if(entryTime<=1){lcd.clear();

switch(language){

case 1: lcd.print(F("TIMP MINIM"));break;

case 2: lcd.print(F("TEMPS MINIMUM" ));break;

case 3: lcd.print(F("MINIMUM TIME"));break; }

lcd.setCursor(4,1);

entryTime=1;}

lcd.setCursor(0,1);

lcd.print(entryTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

;break;

case '7': lcd.clear(); //See the current exit time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP ACT. IESIRE"));break;

case 2: lcd.print(F("COURANT DE SORTIE" ));break;

case 3: lcd.print(F("ACT. EXIT TIME"));break; }

63
lcd.setCursor(0,1);

lcd.print(exitTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

;break;

case '8': lcd.clear(); //See the current exit time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("TIMP ACT. INTRARE"));break;

case 2: lcd.print(F("HEURE D'ENTREE " ));break;

case 3: lcd.print(F("ACT. ENTRY TIME "));break; }

lcd.setCursor(0,1);

lcd.print(entryTime);

lcd.setCursor(4,1);

switch(language){

case 1: lcd.print(F("SECUNDE"));break;

case 2: lcd.print(F("SECONDES" ));break;

case 3: lcd.print(F("SECONDS"));break; }

;break;

case 'A': if(menuEntry==1) {lcd.clear(); language++; //See the current exit time

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("LIMBA SISTEMULUI")); lcd.setCursor(0,1); lcd.print(F(" ROMANA")); break;

case 2: lcd.print(F("LANGUE SYSTEME")); lcd.setCursor(0,1); lcd.print(F(" FRANCAIS"));break;

case 3: lcd.print(F("SYSTEM LANGUAGE")) ; lcd.setCursor(0,1); lcd.print(F(" ENGLISH"));;break; }

if(language>3){language=1;lcd.print(F("LIMBA SISTEMULUI")); lcd.setCursor(0,1); lcd.print(F("


ROMANA"));}}

64
;break;

case 'B': if(alarmStatus==0&&menuEntry==1)

lcd.clear();

switch(language){

case 1: lcd.print(F("INTRODUCETI PIN"));break;

case 2: lcd.print(F(" ENTRER PIN" ));break;

case 3: lcd.print(F(" PRESS PIN "));break; }

newPasswordRequest=1;

keypad.getKey();

keypad.addEventListener(keypadEvent);

void loop() {

Check();

char key = keypad.getKey();

if (key)

{ if(menuExit>=4)

{lcd.clear();

delay(500);

65
menuExit=0;

loop();}

keypad.getKey();

lcd.setCursor (0,0);

if(key=='*')

{ menuEntry=1;

lcd.clear();

switch(language){

case 1: lcd.print(F(" MENIU "));break;

case 2: lcd.print(F(" MENU " ));break;

case 3: lcd.print(F(" MENU "));break; }

keypad.getKey();

keypad.addEventListener(keypadEventMenu);

if(key=='D')

if(alarmStatus==1)

{ lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" SISTEM ARMAT "));break;

case 2: lcd.print(F(" SYSTEME ARME " ));break;

case 3: lcd.print(F(" SYSTEM ARMED "));break; }

if(alarmStatus==0)

{ lcd.clear();

lcd.setCursor(0,0);

switch(language){

66
case 1: lcd.print(F("SISTEM DEZARMAT "));break;

case 2: lcd.print(F("SYSTEME DESARME " ));break;

case 3: lcd.print(F("SYSTEM DISARMED "));break; }

delay(1500); lcd.clear();

if(key=='#')

if(alarmStatus==1)

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F(" SISTEMUL "));break;

case 2: lcd.print(F(" LE SYSTEME" ));break;

case 3: lcd.print(F(" THE SYSTEM"));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F(" E ARMAT "));break;

case 2: lcd.print(F(" EST ARMEE" ));break;

case 3: lcd.print(F(" IS ARMED"));break; }

if(alarmStatus==0)

{menuExit++;

lcd.clear();

lcd.setCursor(0,0);

switch(language){

case 1: lcd.print(F("ARMARE SISTEM"));break;

67
case 2: lcd.print(F("SYSTEME ARMEE" ));break;

case 3: lcd.print(F("ARM THE SYSTEM"));break; }

long i=0;

for(i=0; i<=(exitTime*timer)/30;i++)

{ delay(30);

if( i>=(exitTime*timer)/30)

{ pinMode(pir11,INPUT);

pinMode(pir12,INPUT);

pinMode(pir13,INPUT);

pinMode(magneticContact, INPUT);

StatusSpeaker();

SignEvent();

lcd.clear();

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F("SISTEM ARMAT"));break;

case 2: lcd.print(F("SYSTEME ACTIVE" ));break;

case 3: lcd.print(F("SYSTEM IS ARMED"));break; }

alarmStatus=1;

Check();

if((key=='C')&&(alarmStatus==1))

{ keypad.getKey();

lcd.setCursor(0,0);

lcd.clear();

switch(language){

68
case 1: lcd.print(F("INTRODUCETI PIN"));break;

case 2: lcd.print(F(" ENTRER PIN" ));break;

case 3: lcd.print(F(" PRESS PIN "));break; }

lcd.setCursor(0,1);

switch(language){

case 1: lcd.print(F("PENTRU DEZARMARE "));break;

case 2: lcd.print(F("POUR LA DESARME " ));break;

case 3: lcd.print(F(" TO DISARM"));break; }

if(keypad.getKey()){

lcd.clear();}

password.reset();cursorForPassword=0;

keypad.addEventListener(keypadEvent);

analogWrite(speaker, 0);

69