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 21:03]
irina.popescu0706 completed function description
pm:prj2021:alazar:bluetooth_door_lock [2021/05/30 01:09] (current)
irina.popescu0706 demo
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 pornesc comunicarea pe Serial pe baud rate de 9600bps, deoarece asa comunica ​modulul de bluetooth.+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)**
Line 128: Line 135:
 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. 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.
  
-**bluetooth_routine()**+**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>​
  
-Dupa ce s-au primit date pe seriala de la telefon, se verifica daca s-a primit 0(unlock), sau 1(lock). Dupa ce se apeleaza functia corespunzatoare de unlock/​lock,​ se trimit inapoi la telefon date. 
  
 **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 receptioneaza datasi se apeleaza functia //bluetooth_routine()//.+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.1622052224.txt.gz · Last modified: 2021/05/26 21:03 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