This shows you the differences between two versions of the page.
|
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 data, si 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> | ||