This shows you the differences between two versions of the page.
|
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?200|}} | + | {{: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|}} | ||