This is an old revision of the document!
Popescu Irina-Elena Bluetooth and RFID door lock
Door lock-ul se poate deschide atat prin RFID, folosindu-se de un tag, cat si prin modul de bluetooth, folosindu-se de o aplicatie de telefon. Exista doua functii: lock si unlock door. Cand se va apela una dintre aceste functii, se vor porni led-ul si buzzer-ul, si un servomotor se va roti 180 de grade, pentru a trage de un zavor. Am vrut sa fac un door lock pentru a mi-l pune la usa mea, deoarece daca imi inchid usa, mereu trebuie sa ma ridic sa o deschid pentru altcineva; dar acum, pot sa fac totul de pe telefon.
Schema bloc:
Lista de componente:
Schema electrica:
Am folosit Arduino IDE pentru a dezvolta programul. Bibliotecile folosite au fost:
Variabilele globale sunt:
Functii:
setPins()
Setez pinii pe care voi lega componentele de arduino pe OUTPUT:
si ii atasez obiectului de tip servo pinul PWM 3.
activatePins()
Scriu pe pinul 10 valoarea LOW si pe pinul 5 valoarea HIGH, pentru a activa RFID-ul.
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.
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.
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)
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.
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)
Rutina care se executa cand se da lock/unlock. De flickert ori, se executa:
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()
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()
Daca tag-ul pus la RFID este cel gresit, se apeleaza doar door_routine, dar nu se actioneaza si servo motorul.
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.
RFID_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.
bluetooth_routine()
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()
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().
TODO
TODO
TODO