Documente Academic
Documente Profesional
Documente Cultură
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.
1
CUPRINS
Cap.1 Introducere............................................................................................................................................5
Cap.6 Concluzii...............................................................................................................................................
Bibliografie.......................................................................................................................................................
Cap.7 Anexe.......................................................................................................................................................
2
LISTA FIGURILOR
Figura 3.9. Pinii folosiți pentru comunicația UART dintre host și EasyVR.............................20
3
Figura 3.19. Proiectarea montajului cu ajutorul programului Proteus...................................26
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.
Î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ţă.
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.
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.
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.
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.
2.1 Obiective
În alegerea soluției optime pentru realizarea practică a acestei teme s-a ținut
cont de următoarele criterii:
- L
8
- Interconectarea dispozitivului de recunoaștere vocală cu alte dispozitive
periferice şi usurința ȋn interconectare;
- Riscul de efracție;
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
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
10
Fig. 2.2. Google Home
store.google.com/us/product/google_home
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.
www.raspberrypi.org/products/raspberry-pi-3
- Ușurință în interconectare;
12
Dezavantajele acestui sistem:
13
Fig. 2.4. Schema electronică realizată pentru a exemplifica soluția aleasă
14
Fig. 3.1 Schema electronică Arduino
Megahttps://easyeda.com/hot/Arduino_Mega_2560-z92kCUO6o
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.
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 .
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.
store.arduino.cc/arduino-nano store.arduino.cc/arduino-uno
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.
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.
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
Acest dispozitiv are la bază un procesor digital de semnal (DSP) care analizează
semnalele analogice primite de la un micofon.
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.
EasyVR Gazdă
21
Fig. 3.9 Pinii folosiți pentru comunicația UART dintre host și EasyVR
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ă.
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.
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.
23
Fig. 3.12 Schema bloc de conexiune UART
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.
Î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ă
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.
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.
27
Fig 3.19 Proiectarea montajului cu ajutorul programului Proteus
28
4.1 Organigramele software
Fig 4.1 Organigrama software pentru comanda vocală, modulul bluetooth și senzorul de
mișcare
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.
30
Fig. 4.2 Organigrama software pentru modulul RFID
31
4.2 Mediul de programare pentru Aruino
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.
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.
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.
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.
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
//
#include <Wire.h>
#include <Password.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
// in simulare avem adresa 0x20 dar in realitate adresa este 0x3F !!!
38
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// };
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;
void setup() {
40
lcd.backlight(); //turn the backlight on
pinMode(panicButton, INPUT);
void Speaker(){
switch(alarmStatus){
case 1 :
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
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
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);
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{
else
{}
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){
lcd.setCursor(0,1);
switch(language){
do
} while (alarmStatus==1);
}}}
if(alarmStatus==1)
Sensor();
44
}
void Sensor()
if(digitalRead(pir12)==HIGH&&(z1Enable==1))
lcd.clear();
lcd.setCursor(0,0);
switch(language){
lcd.setCursor(0,1);
switch(language){
recordZone1=1;
do
} while (alarmStatus==1);
if(digitalRead(pir11)==HIGH&&(z2Enable==1))
lcd.clear();
lcd.setCursor(0,0);
switch(language){
45
case 2: lcd.print(F("DECHARGE ALARME"));break;
lcd.setCursor(0,1);
switch(language){
recordZone2=1;
do
if(digitalRead(pir13)==HIGH&&(z3Enable==1))
lcd.clear();
lcd.setCursor(0,0);
switch(language){
lcd.setCursor(0,1);
switch(language){
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){
lcd.setCursor(0,1);
switch(language){
recordMagneticContact=1;
do
} while (alarmStatus==1);
void checkPassword(){
if (password.evaluate())
{ if(alarmStatus==0&&menuEntry==1){
newPasswordRequest=0;
lcd.clear();
47
switch(language){
lcd.setCursor(0,1);
switch(language){
password.reset();
cursorForPassword=0;
delay(1000);
lcd.clear();
keypad.getKey();
keypad.addEventListener(keypadEvent);
newPasswordRequestConfirm=1;
if(alarmStatus==1){
lcd.clear();switch(language){
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){
delay(100); password.reset();
if(alarmStatus==1){
switch (keypad.getState()){
case PRESSED:
if(cursorForPassword==0){lcd.clear();}
lcd.setCursor(0,0);
switch(language){
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){
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){
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){
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);
switch (keypad.getState()){
case PRESSED:
if(cursorForPassword==0){lcd.clear();}
lcd.setCursor(0,0);
switch(language){
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){
delay(300);}
switch (eKey){
lcd.clear();
switch(language){
lcd.setCursor(0,1);
switch(language){
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.setCursor(0,1);
lcd.print("OF CHARACTERS");}
52
}
if(alarmStatus==0){
switch (keypad.getState()){
case PRESSED:
lcd.clear();
switch(language){
lcd.setCursor(0,1);
lcd.print(recordKey);
if (recordKey=='1'){
lcd.clear();
lcd.setCursor(0,0);
if(recordZone1==1){ switch(language){
else switch(language){
lcd.setCursor(0,1);
if(recordZone2==1){switch(language){
53
case 1: lcd.print(F(" PROBLEME ZONA 2"));break;
else switch(language){
if (recordKey=='4'){
lcd.clear();
lcd.setCursor(0,0);
if(recordZone3==1){switch(language){
else switch(language){
lcd.setCursor(0,1);
if(recordMagneticContact==1){switch(language){
else switch(language){
if (recordKey=='7'){
lcd.clear();
54
lcd.setCursor(0,0);
if(recordPanicButton==0){
lcd.setCursor(0,0);
switch(language){lcd.clear();
lcd.setCursor(0,1);
switch(language){
else lcd.setCursor(0,0);
switch(language){
lcd.setCursor(0,1);
switch(language){
if (recordKey=='A'){
recordPanicButton=0; recordZone1=0;recordZone2=0;recordZone3=0;recordMagneticContact=0;
lcd.clear();
lcd.setCursor(0,0);
switch(language){
55
case 2: lcd.print(F("JURNAL D'EVEN."));break;
lcd.setCursor(0,1);
switch(language){
if(alarmStatus==0&&menuEntry==1){
switch (keypad.getState()){
case PRESSED:
lcd.clear();
switch(language){
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;
else {switch(language){
if (sensorKey=='2'){z2++;
if(z2>=2){z2Enable= !z2Enable;z2=0;}
lcd.clear();
lcd.setCursor(0,0);
if(z2Enable==0){switch(language){
else {switch(language){
if (sensorKey=='3'){z3++;
if(z3>=2){z3Enable= !z3Enable;;z3=0;}
lcd.clear();
lcd.setCursor(0,0);
if(z3Enable==0){switch(language){
else {switch(language){
57
case 2: lcd.print(F("ZONE 3 ACTIVER" ));break;
if (sensorKey=='4'){z4++;
if(z4>=2){z4Enable= !z4Enable;;z4=0;}
lcd.clear();
lcd.setCursor(0,0);
if(z4Enable==0){switch(language){
else {switch(language){
if (sensorKey=='A'){
z1Enable=1;z2Enable=1;z3Enable=1;z4Enable=1;
lcd.clear();
lcd.setCursor(0,0);
switch(language){
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");}
if(alarmStatus==0){menuEntry=1;
switch (keypad.getState()){
case PRESSED:
59
lcd.clear();
switch(language){
lcd.setCursor(0,1);
lcd.print(mKey);
switch (mKey){
lcd.clear();
switch(language){
delay(500);
menuEntry=0;
keypad.getKey();
keypad.addEventListener(keypadRecordMenu);}
;break;
lcd.clear();
switch(language){
60
delay(500);
menuEntry=0;
keypad.getKey();
keypad.addEventListener(keypadSensorMenu);}
;break;
lcd.setCursor(0,0);
switch(language){
exitTime++;
lcd.setCursor(0,1);
lcd.print(exitTime);
lcd.setCursor(4,1);
switch(language){
case 1: lcd.print(F("SECUNDE"));break;
case 3: lcd.print(F("SECONDS"));break; }
;break;
lcd.setCursor(0,0);
switch(language){
exitTime--;
if(exitTime<=1){
61
lcd.clear();
switch(language){
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 3: lcd.print(F("SECONDS"));break; }
;break;
lcd.setCursor(0,0);
switch(language){
entryTime++;
lcd.setCursor(0,1);
lcd.print(entryTime);
lcd.setCursor(4,1);
switch(language){
case 1: lcd.print(F("SECUNDE"));break;
case 3: lcd.print(F("SECONDS"));break; }
62
;break;
lcd.setCursor(0,0);
switch(language){
entryTime--;
if(entryTime<=1){lcd.clear();
switch(language){
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 3: lcd.print(F("SECONDS"));break; }
;break;
lcd.setCursor(0,0);
switch(language){
63
lcd.setCursor(0,1);
lcd.print(exitTime);
lcd.setCursor(4,1);
switch(language){
case 1: lcd.print(F("SECUNDE"));break;
case 3: lcd.print(F("SECONDS"));break; }
;break;
lcd.setCursor(0,0);
switch(language){
lcd.setCursor(0,1);
lcd.print(entryTime);
lcd.setCursor(4,1);
switch(language){
case 1: lcd.print(F("SECUNDE"));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){
64
;break;
lcd.clear();
switch(language){
newPasswordRequest=1;
keypad.getKey();
keypad.addEventListener(keypadEvent);
void loop() {
Check();
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){
keypad.getKey();
keypad.addEventListener(keypadEventMenu);
if(key=='D')
if(alarmStatus==1)
{ lcd.clear();
lcd.setCursor(0,0);
switch(language){
if(alarmStatus==0)
{ lcd.clear();
lcd.setCursor(0,0);
switch(language){
66
case 1: lcd.print(F("SISTEM DEZARMAT "));break;
delay(1500); lcd.clear();
if(key=='#')
if(alarmStatus==1)
lcd.clear();
lcd.setCursor(0,0);
switch(language){
lcd.setCursor(0,1);
switch(language){
if(alarmStatus==0)
{menuExit++;
lcd.clear();
lcd.setCursor(0,0);
switch(language){
67
case 2: lcd.print(F("SYSTEME ARMEE" ));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){
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;
lcd.setCursor(0,1);
switch(language){
if(keypad.getKey()){
lcd.clear();}
password.reset();cursorForPassword=0;
keypad.addEventListener(keypadEvent);
analogWrite(speaker, 0);
69