Differences

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

Link to this comparison view

pm:prj2021:alazar:bluetooth_door_lock [2021/05/26 20:02]
irina.popescu0706 poze
pm:prj2021:alazar:bluetooth_door_lock [2021/05/30 01:09] (current)
irina.popescu0706 demo
Line 1: Line 1:
-[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​alazar/​bluetooth_door_lock|Popescu Irina-Elena Bluetooth ​Door Lock]]+[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​alazar/​bluetooth_door_lock|Popescu Irina-Elena Bluetooth ​and RFID door lock]]
 ====== Bluetooth and RFID door lock ====== ====== Bluetooth and RFID door lock ======
 ===== Autor ===== ===== Autor =====
Line 50: Line 50:
  
 Variabilele globale sunt: Variabilele globale sunt:
 +  * recv_bluetooth:​ este 1 daca s-au primit date de la bluetooth, si 0 daca nu s-a primit nimic.
 +  * data_bluetooth:​ byte-ul primit de la modulul de bluetooth.
   * door_locked:​ reprezinta starea actuala a usii; ia valoarea 1/0 daca usa este inchisa/​deschisa.   * door_locked:​ reprezinta starea actuala a usii; ia valoarea 1/0 daca usa este inchisa/​deschisa.
   * i, state: variabile auxiliare.   * i, state: variabile auxiliare.
Line 72: Line 74:
 **setupComponents()** **setupComponents()**
  
-Initializez variabilele globale. Folosind //​AddicoreRFID_Init()//​ initializez obiectul myRFID. Folosind //write// setez servo motorul la 0 grade, si variabila door_locked este 0, adica usa este deschisa.+Initializez variabilele globale. Folosind //​AddicoreRFID_Init()//​ initializez obiectul myRFID. Folosind //write// setez servo motorul la 0 grade, si variabila ​//door_locked// este 0, adica usa este deschisa. In plus, variabila //​recv_bluetooth//​ este setata la 0 initial, pentru ca nu se primesc date de la bluetooth la setup. 
 + 
 +**setupBluetoothInterrupt()** 
 + 
 +Setez variabilele corespunzatoare pentru intreruperea pe USART, deoarece modulul de bluetooth comunica pe USART. Dezactivez intreruperile prin //cli()//. Setez //UBRR0// pe 103, pentru a configura baud rate-ul la 9600bps. Setez bitii //UCSZ01// si //UCSZ00// pe 1 in //UCSR0C// pentru a seta ca voi recepta/​transmite date de 8 biti. Pentru a activa receptia/​transmiterea,​ setez in //UCSR0B// biii //​RXEN0//​(activeaza receptia pe USART), //​TXEN0//​(activeaza transmiterea pe USART) si //RXCIE0// pe 1. 
 +La final, activez interuperile prin //sei()//.
  
 **setup()** **setup()**
 +
 +Pornesc libraria SPI, deoarece este folosita de RFID. Apelez cele 3 functii descrise anterior si setez bitii corespunzatori pentru a activa interuperea pentru modulul de bluetooth.
  
 **set_RGB_led(int red_light, int green_light,​ int blue_light)** **set_RGB_led(int red_light, int green_light,​ int blue_light)**
 +
 +Pornesc led-ul RGB, folosind //​analogWrite(pin,​ freq), unde freq = [0, 255], pin = {7, 8, 9}//.
  
 **servo_lock(int startp, int endp)** **servo_lock(int startp, int endp)**
 +
 +Pornesc servo motorul, care face o rotire de la unghiul startp la endp, folosindu-se de functia //write//. Pentru a fi o miscare lina, folosesc un for, pentru a trece prin fiecare unghi de la startp la endp, si dupa fiecare miscare fac un //delay//.
 +
 +<​note>​
 +Daca as face doar un write(endp),​ s-ar misca prea repede.
 +</​note>​
  
 **servo_unlock(int startp, int endp)** **servo_unlock(int startp, int endp)**
 +
 +Aplic aceeasi idee ca la functia anterioara, doar ca in sens opus.
  
 **door_routine(int redl, int greenl, int bluel, int delayt, int flickert, int freqb)** **door_routine(int redl, int greenl, int bluel, int delayt, int flickert, int freqb)**
 +
 +Rutina care se executa cand se da lock/​unlock. De //​flickert//​ ori, se executa:
 +  * se porneste led-ul RGB
 +  * se porneste buzzer-ul la o frecventa //freqb//, folosind functia //tone//
 +  * delay
 +  * se opreste led-ul RGB
 +  * se opreste buzzer-ul
 +  * delay
  
 **lock()** **lock()**
 +
 +Functia care se apeleaza cand se inchide usa. Se apeleaza functia //​door_routine//,​ pentru a porni led-ul si buzzer-ul, si se porneste servo motorul.
  
 **unlock()** **unlock()**
 +
 +Functia care se apeleaza cand se deschide usa. Se apeleaza functia //​door_routine//,​ pentru a porni led-ul si buzzer-ul, si se porneste servo motorul.
  
 **wrong_tag()** **wrong_tag()**
 +
 +Daca tag-ul pus la RFID este cel gresit, se apeleaza doar //​door_routine//,​ dar nu se actioneaza si servo motorul.
  
 **check_tag()** **check_tag()**
 +
 +Se verifica daca tag-ul pus este cel corect. Se verifica fiecare byte din codul tag-ului cu numarul din tag-ul meu. In plus, ca o verificare extra, se verifica si checksum.
 +
 +<​note>​
 +Reader-ul de RFID returneaza un numar pe 5 bytes: primii 4 bytes reprezinta numarul unic al tag-ului, iar al 4-lea este checksum.
 +</​note>​
  
 **RFID_routine()** **RFID_routine()**
  
-**bluetooth_routine()**+DUpa ce s-a detectat un tag, daca tag-ul este cel corect, se da lock/​unlock. Daca tag-ul este gresit, se apeleaza functia corespunzatoare. Daca inainte se da lock, se apeleaza unlock, si invers. 
 + 
 +**ISR(USART_RX_vect)** 
 + 
 +Rutina de tratare a interuperii USART pentru bluetooth. Retin byte-ul primit prin //URD0//, si setez variabila //​recv_bluetooth//​ pe 1, asta insemnand ca am primit date de la telefon.  
 + 
 +<note important>​ 
 +Variabila //​recv_bluetoot//​ este [[https://​www.arduino.cc/​reference/​en/​language/​variables/​variable-scope-qualifiers/​volatile/​|volatila]] pentru a ma asigura ca valoarea ei se schimba imediat.  
 +</​note>​ 
  
 **loop()** **loop()**
 +
 +Se verifica daca s-a gasit vreun tag, sau daca se primesc date de la telefon pe bluetooth. Daca s-a gasit tag, se verifica ce tag s-a gasit, si se verifica manual checksum. Dupa ce se apeleaza functia //​RFID_routine()//,​ se da //halt// la modul. Daca s-au primit date de la telefon, se verifica ce functie s-a primit (lock/​unlock),​ se apeleaza functia specifica, si se trimite inapoi la telefon valoarea corespunzatoare (1/0).
 +
 +<note important>​
 +In rutina de intrerupere doar am setat variabila //​recv_bluetooth//​ pentru ca lock()/​unlock() contin **delay** si nu e bine sa ai delay in interuperi.
 +</​note>​
 +
 +**Functionare:​**
 +
 +Prin RFID, cand se citeste tag-ul bun, automat se da lock(daca starea anterioara a fost unlock), sau unlock(daca starea anterioara a fost lock). Prin bluetooth(folosindu-se de o aplicatie de mobil pe Android), se poate alege daca se doreste lock sau unlock.
 +
 +<​note>​
 +La bluetooth, daca se da lock, desi usa este locked, nu se intampla nimic. (la fel si pentru unlock).
 +</​note>​
 +
 +<​note>​
 +Se retine starea usii printr-o varabila cu valorile posibile **0(unlocked)** sau **1(locked)**.
 +</​note>​
 +
 +Indiferent daca s-a dat lock/unlock prin RFID sau bluetooth, se apeleaza aceeasi **rutina** pentru pornit led-ul, buzzer-ul si servo motorul.
 +
 +**Aplicatia de mobil pentru comunicarea cu modulul de bluetooth**
 +
 +Am folosit [[https://​appinventor.mit.edu/​|MIT App Inventor]] pentru a crea aplicatia de mobil ce comunica cu modulul de bluetooth.
 +
 +Partea de frontend:
 +
 +{{ :​pm:​prj2021:​alazar:​frontend-ip.png?​300 |}}
 +
 +Partea de backend:
 +
 +{{ :​pm:​prj2021:​alazar:​backend-ip.png?​800 |}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
-TODO+ 
 + 
 +Asa arata proiectul, cu toate componentele:​ 
 + 
 +{{ :​pm:​prj2021:​alazar:​bluetooth_lock_pi_poza1.jpeg?​600 |}} 
 + 
 +{{ :​pm:​prj2021:​alazar:​bluetooth_lock_pi_poza2.jpeg?​600 |}} 
 + 
 + 
 +Demo-ul care arata cum functioneaza proiectul:​[[https://​drive.google.com/​file/​d/​1-a-eM0CwmazW_RFdytdrfh9KYTh73WLN/​view?​usp=sharing|demo]] 
 + 
 ===== Concluzii ===== ===== Concluzii =====
-TODO+ 
 +**REUSITE** 
 + 
 +  * Am reusit sa implementez tot ce mi-am propus, si a iesit exact cum mi-am dorit. 
 +  * Am reusit sa fac o aplicatie de mobil functionala. 
 + 
 +**PROBLEME INTAMPINATE** 
 + 
 +  * Am avut probleme la a face interuperea pentru USART pentru bluetooth. In rutina de interuperea apelam si lock()/​unlock(),​ care contin **delay()**,​ si din cauza asta, nu se executau corect. 
 +  * Nu am reusit inca sa fac un log in care sa retin pe aplicatia de mobil cand s-a deschis/​inchis usa mereu. Am creat o baza de date in aplicatie, dar nu le afisez inca cum vreau eu. 
 + 
 +**CE AM INVATAT DIN PROIECT?​** 
 + 
 +  * Am invatat sa folosesc modulul de bluetooth, si in acelasi timp, am inteles mai bine cum se face o intrerupere. 
 +  * Am invatat sa citesc mai bine datasheet-ul pentru placa Arduino UNO. 
 +  * Am invatat sa fac o logica pentru un proiect pe Arduino ce contine mai multe module. 
 + 
 ===== Download ===== ===== Download =====
-TODO+ 
 +Arhiva cu codul sursa si README este: {{:​pm:​prj2021:​alazar:​bluetooth_rfid_door_lock_popescu_irina-elena_331cb.zip|arhiva_cod}} 
 ===== Jurnal ===== ===== Jurnal =====
   * 25.04.2021: am ales proiectul si am creat pagina.   * 25.04.2021: am ales proiectul si am creat pagina.
-  * 03.05.2021 - 26.05.2021: lucrat la proiect +  * 03.05.2021 - 26.05.2021: lucrat la proiect. 
-  * 26.05.2021: update la pagina + adaugat schema electrica +  * 26.05.2021: update la pagina + adaugat schema electrica. 
-  * 26.05.2021: ​+  * 27.05.2021: ​modificat functiile din software design + concluzii. 
 +  * 30.05.2021: adaugat link demo + arhiva cod + bibliografie
    
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​PDF</​a></​html>​+  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab0-2021|PM-laborator 0]] - scrieri/​citiri digitale 
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab1-2021|PM-laborator 1]] - Intrerupere 
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2021|PM-laborator 2]] - USART 
 +  * [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2021|PM-laborator 3]] - PMW - led RGB, servomotor 
 +  * [[https://​create.arduino.cc/​projecthub/​muhammad-aqib/​arduino-rgb-led-tutorial-fc003e|LED RGB]] 
 +  * [[https://​create.arduino.cc/​projecthub/​SURYATEJA/​use-a-buzzer-module-piezo-speaker-using-arduino-uno-89df45|BUZZER]] 
 +  * [[https://​www.instructables.com/​Arduino-Servo-Motors/​|Servomotor]] 
 +  * [[https://​randomnerdtutorials.com/​security-access-using-mfrc522-rfid-reader-with-arduino/​|RFID]] 
 +  * [[https://​howtomechatronics.com/​tutorials/​arduino/​arduino-and-hc-05-bluetooth-module-tutorial/​|Bluetooth HC-05]] 
 +  * <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​PDF</​a></​html>​
pm/prj2021/alazar/bluetooth_door_lock.1622048552.txt.gz · Last modified: 2021/05/26 20:02 by irina.popescu0706
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