Differences

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

Link to this comparison view

pm:prj2021:cghenea:smartlock [2021/05/31 21:22]
violeta.fasui [Smart Lock]
pm:prj2021:cghenea:smartlock [2021/06/02 18:52] (current)
violeta.fasui
Line 1: Line 1:
-{{:​pm:​prj2021:​cghenea:​smart_lock.pdf|}} +====== Smart Lock ======
-====Smart Lock====+
 Nume: Fasui Violeta Alexandra\\ Nume: Fasui Violeta Alexandra\\
 Grupa: 334CA Grupa: 334CA
  
-===Introducere===+====== Introducere ​======
 Tema proiectului propus este o incuietoare inteligenta. Acesta va simula modul de functionare al unei alarme, tinand cont de starea incuietorii. Astfel vor exista doua situatii: Tema proiectului propus este o incuietoare inteligenta. Acesta va simula modul de functionare al unei alarme, tinand cont de starea incuietorii. Astfel vor exista doua situatii:
   * Daca incuietoarea este inchisa si se simte miscare, atunci alarma va semnala acest lucru, folosind un buzzer.   * Daca incuietoarea este inchisa si se simte miscare, atunci alarma va semnala acest lucru, folosind un buzzer.
Line 10: Line 9:
 Pentru a putea inchide si deschide incuietoarea,​ voi utiliza o parola ce presupune introducerea unui cod prin keypad. In permanenta, incuietoarea este conectata la un telefon ce ii poate modifica starea. Pentru a putea inchide si deschide incuietoarea,​ voi utiliza o parola ce presupune introducerea unui cod prin keypad. In permanenta, incuietoarea este conectata la un telefon ce ii poate modifica starea.
  
-===Descriere generala===+====== Descriere generala ​======
 In scopul realizarii acestei incuietori voi utiliza un senzor de miscare, un servomotor, un keypad, un buzzer si modelul bluetooth. Incuietoarea va avea doua stari determinate de codul introdus prin keypad: ​ In scopul realizarii acestei incuietori voi utiliza un senzor de miscare, un servomotor, un keypad, un buzzer si modelul bluetooth. Incuietoarea va avea doua stari determinate de codul introdus prin keypad: ​
   * inchisa: fie atunci cand se introduce #, fie atunci cand se introduce o parola gresita;   * inchisa: fie atunci cand se introduce #, fie atunci cand se introduce o parola gresita;
Line 18: Line 17:
    
  
-===Hardware Design===+====== Hardware Design ​======
 Modul Bluetooth\\ Modul Bluetooth\\
 Modul PIR - senzor de prezenta\\ Modul PIR - senzor de prezenta\\
Line 30: Line 29:
 {{:​pm:​prj2021:​cghenea:​captura.jpg?​500|}} {{:​pm:​prj2021:​cghenea:​captura.jpg?​500|}}
  
-{{:​pm:​prj2021:​cghenea:​smartlock.jpg?​500|}}+{{:​pm:​prj2021:​cghenea:​smartlock.jpg?​600|}} 
 + 
 +====== Software Design ====== 
 +In scopul realizarii proiectului,​ am utilizat o variabila care monitorizeaza starea incuietorii. Aceasta isi schimba starea astfel: 
 +  * este inchisa atunci cand se apasa tasta '#'​ sau atunci cand parola introdusa este gresita.  
 +  * este deschisa atunci cand combinatia de caractere retinuta in variabila password este aceeasi cu cea setata initial ca fiind codul de deschidere ("​1234"​). 
 +Pe masura ce tastele sunt apasate, codul este in permanenta retinut intr-un string, iar in momentul in care se introduce caracterul special "​*",​ codul este verificat in functia checkPassword(). Se face compararea a doua stringuri, pentru a putea determina atat starea incuietorii,​ cat si pe cea a buzzer-ului. Dupa fiecare verificare parola este resetata. 
 +Buzzerul verifica atat starea incuietorii,​ cat si datele obtinute de senzorul pir. Daca incuietoarea este inchisa iar valoarea senzorului pir este 1, atunci alarma suna. 
 +In loop, se verifica constant datele primite de la telefon. Acesta poate trimite caracterele '​c'​ pentru a inchide incuietoarea,​ sau '​o'​ pentru a o deschide. 
 + 
 +<spoiler Cod sursa> 
 +<​code>​ 
 +#include <​Servo.h>​ 
 +#include <​Keypad.h>​ 
 + 
 +#define delay_time 100 
 + 
 +Servo servo1; 
 +String pass = "​1234";​ 
 +int lock = 0; 
 + 
 +String password; 
 +const byte Rows = 4; 
 +const byte Cols = 4; 
 + 
 +int pir = 12; 
 +int move = 0; 
 +char phone_data;​ 
 +int buzzer = 13; 
 + 
 +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 colsPins[Cols] = {5, 4, 3, 2}; 
 + 
 +Keypad keypad = Keypad(makeKeymap(keys),​ rowPins, colsPins, Rows, Cols); 
 + 
 +void setup() { 
 +  Serial.begin(9600);​ 
 +  servo1.attach(11);​ 
 +  keypad.addEventListener(keypadEvent);​ 
 +  pinMode(pir,​ INPUT); 
 +  Serial.println("​==== Incuietoare deschisa ====="​);​ 
 +  servo1.write(180);​ 
 +  pinMode (buzzer, OUTPUT) ; 
 +
 + 
 +void loop() { 
 +  keypad.getKey();​ 
 +  move = digitalRead(pir);​ 
 +  Serial.println("​Senzor PIR:"​);​ 
 +  Serial.println(move);​ 
 +  delay(delay_time);​ 
 +  Serial.println(keypad.getKey());​ 
 +  if(lock == 1 && move == 1) 
 +  { 
 +    Serial.println("​==== SUNA ALARMA ===="​);​ 
 +    for (int i = 0; i <10; i++) 
 +    { 
 +      digitalWrite (buzzer, HIGH) ; 
 +      delay (2) ; 
 +      digitalWrite (buzzer, LOW) ; 
 +      delay (2) ; 
 +    } 
 +  } 
 +  phone_data = Serial.read();​ 
 +  if(phone_data == '​c'​) 
 +  { 
 +      lock = 1; 
 +      servo1.write(0);​ 
 +  } else if(phone_data == '​o'​) 
 +    { 
 +      lock = 0; 
 +      servo1.write(180);​ 
 +    } 
 +
 + 
 +void keypadEvent(KeypadEvent ekey) { 
 +  switch(keypad.getState()) 
 +  { 
 +    case PRESSED: 
 +      switch (ekey) 
 +      { 
 +        case '​*':​ checkPassword();​ break; 
 +        case '#'​ : password = "";​ lock = 1; servo1.write(0);​ Serial.println("​==== INCUIETOARE INCHISA ===="​);​ break;  
 +        default: password += ekey; 
 +      } 
 +  } 
 +
 + 
 +void checkPassword() 
 +
 +  Serial.println(password);​ 
 +  if(password.compareTo(pass)) 
 +  { 
 +    password = "";​ 
 +    servo1.write(0);​ 
 +    lock = 1; 
 +  Serial.println("​!!!! PAROLA INTRODUSA ESTE GRESITA !!!!"​);​ 
 +  } else 
 +  { 
 +    servo1.write(180);​ 
 +    password = "";​ 
 +    lock = 0; 
 +    Serial.println("​!!!! PAROLA INTRODUSA ESTE CORECTA !!!!"​);​ 
 +  } 
 +
 + 
 +</​code>​ 
 +</​spoiler>​ 
 + 
 + 
 + 
 +====== Rezultate Obţinute ====== 
 + 
 +Proiectul simuleaza functionarea unei alarme. Acest lucru este evidentiiat atat in demo, cat si in urmatoarele imagini: 
 +  * Incuietoare inchisa 
 +{{:​pm:​prj2021:​cghenea:​inchis.jpg?​200|}} 
 + 
 +  * Incuietoare deschisa 
 + 
 +{{:​pm:​prj2021:​cghenea:​deschis.jpg?​200|}} 
 + 
 +[[https://​youtu.be/​QhZYxrSIBnA]] 
 + 
 +====== Concluzii ====== 
 +Proiectul a necesitat atat acumularea cunostintelor prezentate la laborator, cat si creativitatea fiecaruia. Consider ca proiectul a fost unul practic, cu o utilitate reala, ce poate fi privit ca o experienta constructiva.
  
-===Software Design===+====== ​Jurnal ====== 
 +25 aprilie: am ales tema a proiectului\\ 
 +29 aprilie: am modificat ideea de inceput, am ales piesele si am creat aceasta pagina\\ 
 +10 mai: am comandat piesele suplimentare de care aveam nevoie\\ 
 +14 mai: implementare proiect\\ 
 +26 mai: finalizare proiect\\
  
-===Rezultate Obţinute=== 
  
-===Concluzii===+====== ​Resurse / Bibliografie ====== 
 +[[https://​ardushop.ro/​ro/​home/​29-placa-de-dezvoltare-uno-r3.html?​search_query=arduino+uno&​results=242]] 
 +[[https://​ocw.cs.pub.ro/​courses/​pm]]
  
-===Download== 
  
-===Jurnal=== 
 {{:​pm:​prj2021:​cghenea:​smart_lock.pdf|}} {{:​pm:​prj2021:​cghenea:​smart_lock.pdf|}}
 +{{:​pm:​prj2021:​cghenea:​smartlock.pdf|}}
  
pm/prj2021/cghenea/smartlock.1622485379.txt.gz · Last modified: 2021/05/31 21:22 by violeta.fasui
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