This shows you the differences between two versions of the page.
pm:prj2021:cghenea:smartlock [2021/04/29 17:33] violeta.fasui |
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. Daca incuietoarea este inchisa si se simte miscare, atunci alarma va semnala acest lucru. Pentru a putea inchide si deschide incuietoarea, voi utiliza o parola ce presupune introducerea unui cod prin keypad. In permanenta, incuietoarea este conectata la telefon prin bluethooth. | + | 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 deschisa, nu se tine cont de datele obtinute de la senzorul de miscare. | ||
+ | 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, care sa detecteze miscare in cazul in care incuietoarea este inchisa, si un servomotor. Mecanismul de deschidere/inchiderea al incuietorii se va realiza folosind servomotorul care se va misca, sau nu, in functie de codul introdus. In cazul detectarii miscarii in cadrul incuietorii inchise, un buzzer va semnala acest lucru. Prin bluethooth voi putea controla starea incuietorii inchis/deschis, mai exact starea servomotorului. | + | 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; | ||
+ | * deschisa: atunci cand parola introdusa este corecta (1234); | ||
+ | Atunci cand incuietoarea este inchisa, vom monitoriza datele obtinute de senzorul pir si vom semnala prezenta unei persoane prin buzzer. | ||
+ | De pe telefon vom putea inchide sau inchide incuietoarea. | ||
+ | |||
- | ===Hardware Design=== | + | ====== Hardware Design ====== |
Modul Bluetooth\\ | Modul Bluetooth\\ | ||
Modul PIR - senzor de prezenta\\ | Modul PIR - senzor de prezenta\\ | ||
Line 19: | Line 27: | ||
Fire\\ | Fire\\ | ||
- | {{:pm:prj2021:cghenea:captura.jpg?200|}} | + | {{:pm:prj2021:cghenea:captura.jpg?500|}} |
- | ===Software Design=== | + | {{:pm:prj2021:cghenea:smartlock.jpg?600|}} |
- | ===Rezultate Obţinute=== | + | ====== 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. | ||
- | ===Concluzii=== | + | <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. | ||
+ | |||
+ | ====== 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\\ | ||
+ | |||
+ | |||
+ | ====== 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|}} | ||