Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:alazar:alarm_system [2021/05/31 12:54]
andrei_dorin.oprea [Jurnal]
pm:prj2021:alazar:alarm_system [2021/05/31 15:50] (current)
andrei_dorin.oprea [Software Design]
Line 38: Line 38:
   * [[https://​playground.arduino.cc/​Code/​Keypad/​|Keypad.h]] pentru interfatarea key padului   * [[https://​playground.arduino.cc/​Code/​Keypad/​|Keypad.h]] pentru interfatarea key padului
   * [[https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​|LiquidCrystal_I2C.h]] pentru comunicarea folosind protocolul I2C cu LCD-ul   * [[https://​www.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​|LiquidCrystal_I2C.h]] pentru comunicarea folosind protocolul I2C cu LCD-ul
 +
 + ​Alarma poate fi considerata un fel de state machine. Variabilele globale movementDetected,​ alarmArmed si changePassword denota in principiu aceste schimbari.
 +
 + Alte **__variabile globale__**:​
 +  * **ROWS, COLS , keys[][], rowPins, colPins** - folosite pentru initializarea tastaturii;
 +  * **keypad** - obiect de tip Keypad (referinta catre tastatura);
 +  * **lcd** - obiect de tip LiquidCrystal_I2C (referinta catre display);
 +  * **password** - buffer pentru parola alarmei;
 +  * **inputPassword** - stocheaza inputul utilizatorului cand ii este oferit promptul de parola;
 +  * **setup()** - In setup se initializeaza LCD-ul, pinul pentru buzzer si se ataseaza functia ce se executa in cazul unei intreruperi primite de la senzor. Intreruperea este declansata de frontul crescator al semnalului;
 +  * **resetInput()** - seteaza inputIdx la inceputul bufferului si suprascrie password cu caractere dummy care nu sunt pe tastatura;
 +  * **renderLcd()** - apeleaza displayUnarmed sau diplayPrompt in functie de starea in care se afla alarma;
 +  * **inputIdx** - pe care trebuie sa scriui in inputPassword cand userul apasa pe o tasta;
 +  * **waitTime** - vector cu timpii de asteptare in caz de inserare parola gresita(2s, 2s, 2s, 5s, 15s, 30s, 60s, 90s);
 +  * **waitIdx** ​ contor pentru a retine cate incercari gresite consecutive are userul;
 +  * **char_lock** si **char_unlock** - caractere custom facute sa arate ca un lacat inchis respectiv deschis;
 +  * **reRender** - boolean setat cand trebuie rerandat ecranul (dupa apasarea unei taste pe tastatura).
 +
 +**__Functii__**:​
 +  * **initLcd()** - intializare display, curatare, aprindere lumina de fundal, creeaza caracterele custom;
 +  * **initKeypad()** ​ - seteaza timpul de debounce al tastaturii;
 +  * **displayUnarmed()** - afisare pentru alarma dezactivata;​
 +  * **diplayPrompt()** - afisare prompt pentru parola. Promptul difera in functie de variabila chagePassword;​
 +  * **handleBuzzer()** - seteaza pinul pentru buzzer pe HIGH sau LOW in functie de variabila movementDetected;​
 +  * **interrupt_routine()** - codul pentru intreruperea generata de senzorul PIR. Seteaza variabila movement detected in functie de starea alarmei;
 +  * **wrongTry()** - Afiseaza un mesaj de eroare pe ecran si obliga userul sa astepte un timp definit de waitTime in functie de numarul de incercari gresite. In acest timp se afiseaza timpul ramas de asteptare si se verifica daca buzzerul trebuie pornit. Timpul ramas este calculat prin intermediul functiei milis;
 +  * **setup()** - se initializeaza LCD-ul, pinul pentru buzzer si se ataseaza functia ce se executa in cazul unei intreruperi primite de la senzor. Intreruperea este declansata pe frontul crescator al semnalului primit de la senzor;
 +  * **loop()**
 +    * preia input de la keypad;
 +    * rerandeaza displayul daca este cazul;
 +    * modifica starea buzzerului;
 +    * daca inputul de la keypad exista (nu este null) in functie de starea alarmei control flowul este diferit:
 +      * daca alarma este armata atunci verific daca caracterul este #. Daca da sterg ultimul caracter din buffer. Daca nu il adaug in buffer. Apoi verific daca parola este corecta si daca da resetez toate variabilele globale corespunzator. Altfel apelez wrongTry si resetez bufferul;
 +      * daca alarma nu este armata atunci verific daca inputul este * si atunci schimb variabila globala care semnalizeaza activarea ei. Daca este # atunci semnalizez ca trebuie sa schimb parola. Pentru schimbarea parolei ​ preiau 4 caractere ca input si le copiez in bufferul password;
 +      * semnalizez ca ecranul trebuie actualizat.
 ===== Rezultate obtinute ===== ===== Rezultate obtinute =====
 Overview al proiectului:​ Overview al proiectului:​
Line 62: Line 97:
 Sound warning secunda 45. Sound warning secunda 45.
 ===== Concluzii ===== ===== Concluzii =====
 +
 +  * Am reusit sa implementez tot ce mi-am propus si sunt multumit de rezultat.
 +  * Am invatat cum sa lucrez cu partea hardware a unui proiect. Faptul ca am proiectat singur designul proiectului m-a ajutat sa inteleg mult mai bine informatia din laboratoare.
 +  * Dificultai:
 +    * rabdarea (maini mari, componente mici)
 +    * debugging (30 de minute sa imi dau seama ca LCD-ul functioneaza cum trebuie si nu exista nici un bug software, ci contrastul nu era calibrat m( + multe altele)
 ===== Download ===== ===== Download =====
 +
 +Arhiva cu codul sursa si readme: ​
 +{{:​pm:​prj2021:​alazar:​pm:​prj2021:​cb:​oprea_andrei_dorin:​alarm_system_oprea_andrei_dorin.zip|alarm_system.zip}}.
 ===== Jurnal ===== ===== Jurnal =====
  
-  25.04: alegerea temei de proiect si creearea pagini de wiki. +  ​25.04: alegerea temei de proiect si creearea pagini de wiki. 
-  ​25.04 - 16.05: lucru la partea hardware a proiectului (conectare + verificare componente). +  ​* 26.04 - 16.05: lucru la partea hardware a proiectului (conectare + verificare componente). 
-  17.05 - 30.05: lucru la partea software a proiectului (implementare software efectiva si testare). +  ​17.05 - 30.05: lucru la partea software a proiectului (implementare software efectiva si testare). 
-  31.05: finalizarea paginii de wiki.+  ​31.05: finalizarea paginii de wiki.
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2021/alazar/alarm_system.1622454889.txt.gz · Last modified: 2021/05/31 12:54 by andrei_dorin.oprea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0