This shows you the differences between two versions of the page.
pm:prj2025:ccristi:robert_alex.enciu [2025/05/25 12:13] robert_alex.enciu [Introducere] |
pm:prj2025:ccristi:robert_alex.enciu [2025/05/26 15:26] (current) robert_alex.enciu [Bibliografie/Resurse] |
||
---|---|---|---|
Line 45: | Line 45: | ||
Alt buton permite dezactivarea yalei manual. | Alt buton permite dezactivarea yalei manual. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | <note> | ||
+ | Biblioteci utilizate: <Wire.h>, <LiquidCrystal_I2C.h>, <SPI.h>, <MFRC522.h> | ||
- | + | Github: [[https://github.com/robertenciu/SecureBox|github.com/robertenciu/SecureBox]] | |
- | <note tip> | + | |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
</note> | </note> | ||
- | ===== Rezultate Obţinute ===== | + | ======1. Setup() ====== |
+ | Această funcție este apelată o singură dată la pornirea microcontrolerului. În cadrul ei: | ||
- | <note tip> | + | Se inițializează comunicațiile Serial, SPI și RFID. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | Se configurează pinul pentru releu ca ieșire și este setat HIGH (yală închisă). |
- | ===== Download ===== | + | Se configurează butonul de mod ca intrare cu rezistență de pull-up. |
- | <note warning> | + | Se pornește LCD-ul și se afișează starea curentă (Secure Box, Mod: ...). |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Se inițializează vectorul care conține UID-urile autorizate (storedUIDs) cu valoarea 0xFF (memorie "goală"). |
+ | |||
+ | ====== 2. loop() ====== | ||
+ | |||
+ | Această funcție rulează continuu și: | ||
+ | |||
+ | Detectează apăsarea butonului de mod și comută între cele 3 moduri: | ||
+ | |||
+ | Mod 0: CITIRE | ||
+ | |||
+ | Mod 1: SCRIERE | ||
+ | |||
+ | Mod 2: ȘTERGERE | ||
+ | |||
+ | Evită afișarea repetitivă pe LCD dacă modurile nu se schimbă. | ||
+ | |||
+ | Detectează o nouă cartelă RFID și validează dacă are un UID de lungime corectă. | ||
+ | |||
+ | Afișează UID-ul detectat pe LCD. | ||
+ | |||
+ | În funcție de modul activ: | ||
+ | |||
+ | CITIRE: Verifică dacă UID-ul este autorizat și deschide temporar yala dacă da. | ||
+ | |||
+ | SCRIERE: Adaugă UID-ul în listă dacă nu este deja salvat și dacă mai este spațiu. | ||
+ | |||
+ | ȘTERGERE: Elimină UID-ul dacă există în listă. | ||
+ | |||
+ | După fiecare operație, se actualizează LCD-ul și se reafișează starea principală (Secure Box, Mod: ...). | ||
+ | |||
+ | ====== 3. initUIDs() ====== | ||
+ | |||
+ | Inițializează toți vectorii de UID din memorie cu valoarea 0xFF, semnalând că sloturile sunt goale. De asemenea, resetează contorul UID-urilor salvate. | ||
+ | |||
+ | ====== 4. findEmptySlot() ====== | ||
+ | |||
+ | Caută un slot liber în vectorul storedUIDs și returnează indexul unde poate fi salvat un nou UID. Dacă toate sloturile sunt ocupate, returnează MAX_UIDS. | ||
+ | |||
+ | ====== 5. compareUIDs(byte* uid1, byte* uid2) ====== | ||
+ | |||
+ | Compară două UID-uri (de tip vector de byte) și returnează true dacă sunt identice, altfel false. | ||
+ | |||
+ | ====== 6. isUIDAuthorized(byte* uid) ====== | ||
+ | |||
+ | Verifică dacă un UID scanat există deja în lista UID-urilor salvate (adică este autorizat). | ||
+ | |||
+ | ====== 7. saveUID(byte* uid) ====== | ||
+ | |||
+ | Salvează un nou UID în vectorul storedUIDs la primul slot liber și crește contorul savedUIDCount. | ||
+ | |||
+ | ====== 8. deleteUID(byte* uid) ====== | ||
+ | |||
+ | Caută și elimină un UID existent din lista de autorizări, adică setează slotul său din vector înapoi la 0xFF și decrementează savedUIDCount. | ||
+ | |||
+ | ====== 9. afiseazaModPeLCD() ====== | ||
+ | |||
+ | Actualizează LCD-ul pentru a reflecta modul curent de funcționare: CITIRE, SCRIERE sau STERGERE, împreună cu titlul Secure Box. | ||
+ | |||
+ | ====== Concepte folosite: ====== | ||
+ | |||
+ | <note important>====== **SPI (Serial Peripheral Interface)** ====== | ||
+ | |||
+ | Este folosit pentru comunicarea cu cititorul RFID MFRC522. Comunicarea SPI este inițiată cu SPI.begin() și folosită intern de biblioteca MFRC522 pentru a transmite comenzi și a primi date de la tagurile RFID. | ||
+ | |||
+ | ====== **I2C (Inter-Integrated Circuit)** ====== | ||
+ | |||
+ | Este utilizat pentru a controla afișajul LCD cu modul I2C. Acesta comunică prin pini SDA și SCL pentru a trimite text și comenzi către ecranul LCD. Biblioteca LiquidCrystal_I2C gestionează aceste comunicări. | ||
+ | |||
+ | ====== **UART (Universal Asynchronous Receiver/Transmitter)** ====== | ||
+ | |||
+ | Comunicarea serială prin Serial.begin(9600); este un exemplu de utilizare UART, unde microcontrolerul trimite datele la un terminal sau la un alt dispozitiv pentru debug sau afișare. | ||
+ | |||
+ | ====== ** GPIO (General Purpose Input/Output)** ====== | ||
+ | |||
+ | Este folosit pentru interacțiunea cu butonul de schimbare mod și controlul releului conectat la yală. | ||
+ | * Pin A0 (RELAY_PIN) – Configurat ca ieșire pentru a activa/dezactiva yala. | ||
+ | * Pin D2 (BUTTON_MODE_PIN) – Configurat ca intrare cu pull-up pentru a detecta apăsarea butonului. | ||
</note> | </note> | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | [[https://youtube.com/shorts/1zdsOxPraxA?feature=share|Video testare]] | ||
+ | |||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 96: | Line 171: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Github – MFRC522 Library: [[https://github.com/miguelbalboa/rfid]] |
+ | |||
+ | Github – LiquidCrystal_I2C Library: [[https://github.com/johnrickman/LiquidCrystal_I2C]] | ||
+ | |||
+ | Arduino Forum: [[https://forum.arduino.cc]] | ||
+ | |||
+ | How to Use an RFID Module with Arduino for Beginners: [[https://www.youtube.com/watch?v=lg8HRY8q004]] | ||
+ | |||
+ | I2C-LCD Tutorial: [[https://lastminuteengineers.com/i2c-lcd-arduino-tutorial]] | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||