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> |