This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:theodor.mitrofan [2026/05/09 16:19] theodor.mitrofan [Software Design] |
pm:prj2026:atoader:theodor.mitrofan [2026/05/14 20:06] (current) theodor.mitrofan |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| Pentru mine, utilitatea este didactica si practica: invat sa stapanesc interactiunea dintre senzori asincroni (RFID, Ultrasonic) si actuatoare (Servomotor) folosind o arhitectura de tip Finite State Machine (FSM), eliminand total functiile blocante de tip delay(). Pentru un utilizator real, sistemul ofera un feedback clar (pe ecranul LCD) si un acces fluid. | Pentru mine, utilitatea este didactica si practica: invat sa stapanesc interactiunea dintre senzori asincroni (RFID, Ultrasonic) si actuatoare (Servomotor) folosind o arhitectura de tip Finite State Machine (FSM), eliminand total functiile blocante de tip delay(). Pentru un utilizator real, sistemul ofera un feedback clar (pe ecranul LCD) si un acces fluid. | ||
| + | |||
| + | Laboratoarele folosite au fost 3-timere, 5-spi si 6-i2c | ||
| ===== Descriere generala ===== | ===== Descriere generala ===== | ||
| - | Sistemul este centralizat in jurul microcontrolerului ATmega328P. La momentul scanarii unui card, microcontrolerul interogheaza senzorul RFID prin protocolul SPI. Daca UID-ul cardului este validat si exista locuri disponibile, sistemul trimite date prin I2C catre ecranul LCD pentru actualizarea interfetei si genereaza un semnal PWM pentru a ridica servomotorul (bariera). | + | Arhitectura software a sistemului este concepută sub forma unui automat cu stări finite (Finite State Machine), implementat în limbaj C la nivel de regiștri pe microcontrolerul ATmega328P. Sistemul este construit în jurul unei bucle principale non-blocking, care orchestrează comunicația cu perifericele, asigurând un management fluid al accesului auto și al resurselor parcării. |
| - | Ulterior, controlul este preluat de senzorul ultrasonic. Folosind functiile de temporizare (Timere hardware), microcontrolerul masoara timpul de raspuns al ecoului pentru a determina cand masina a eliberat complet zona de tranzit. Odata confirmata trecerea, bariera coboara, iar contorul locurilor de parcare este decrementat. | + | Fluxul operațional este împărțit în patru module logice principale: |
| + | **1. Autentificare și Gestiunea Accesului (Comunicație SPI)** | ||
| + | Sistemul interoghează continuu senzorul RFID RC522 prin intermediul protocolului de comunicație de mare viteză SPI (Serial Peripheral Interface). | ||
| + | * **Validarea Identității:** La detectarea unui tag RFID (card sau breloc), microcontrolerul extrage identificatorul unic (UID) pe 4 octeți. Acest UID este comparat cu o structură de date internă ce conține utilizatorii autorizați. | ||
| + | * **Logica de Capacitate:** Chiar dacă un card este recunoscut ca fiind valid, accesul este condiționat de variabila globală a locurilor de parcare. Sistemul verifică preventiv dacă există locuri disponibile, refuzând accesul (și afișând un mesaj corespunzător pe ecran) în cazul în care parcarea este la capacitate maximă. | ||
| + | |||
| + | **2. Interfață și Feedback Vizual (Comunicație I2C)** | ||
| + | Feedback-ul către utilizator este asigurat de un ecran LCD 1602, controlat eficient prin protocolul I2C pentru a minimiza numărul de pini utilizați (se folosesc doar SDA și SCL). | ||
| + | * **Actualizare Dinamică:** Microcontrolerul actualizează interfața grafică în timp real, gestionând tranzițiile de stare: de la mesajul implicit de așteptare (,,Locuri Libere: X''), la mesaje de validare (,,Acces Permis''), sau mesaje de eroare (,,Card Invalid'' / ,,Parcare Ocupată''). | ||
| + | |||
| + | **3. Controlul Mecanic al Barierei (Timer Hardware și PWM)** | ||
| + | Pentru acționarea fizică a barierei (Servomotorul SG90), sistemul evită funcțiile de blocare a codului (precum funcțiile de delay), bazându-se pe resursele hardware interne ale microcontrolerului. | ||
| + | * **Generare Semnal Precis:** Este utilizat Timer-ul 1 pe 16-biți în modul Fast PWM. Prin setarea regiștrilor (ex: ICR1 și OCR1A), microcontrolerul generează un semnal PWM cu o frecvență fixă de 50Hz, modificând doar factorul de umplere (Duty Cycle) pentru a ridica bariera (poziția de 90 grade) la momentul validării accesului. | ||
| + | |||
| + | **4. Telemetrie și Siguranța Tranzitului (Senzor Ultrasonic)** | ||
| + | Odată bariera ridicată, controlul logic este delegat modulului de siguranță gestionat de senzorul ultrasonic HC-SR04, pentru a preveni coborârea accidentală a brațului peste autovehicul. | ||
| + | * **Măsurarea Timpului de Zbor (ToF):** Microcontrolerul trimite un impuls scurt (Trigger) de 10 microsecunde și utilizează funcții de temporizare pentru a măsura durata impulsului de întoarcere (Echo). | ||
| + | * **Conversie și Decizie:** Distanța este calculată matematic pe baza vitezei sunetului în aer. | ||
| + | * **Logica de Tranzit:** Sistemul monitorizează continuu distanța. Când distanța scade sub un anumit prag, sistemul detectează mașina sub barieră. Doar în momentul în care distanța revine la valoarea inițială (confirmând că mașina a eliberat complet zona de tranzit), microcontrolerul comandă închiderea barierei și decrementează contorul locurilor de parcare, actualizând simultan afișajul LCD. | ||
| {{pm:prj2026:atoader:mitrofan_theodor.png?670}} | {{pm:prj2026:atoader:mitrofan_theodor.png?670}} | ||
| + | |||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| - | **Lista de piese:** | + | ^ Piesa ^ Link ^ Tip Utilizare ^ |
| - | * Placa de dezvoltare **ATmega328P-Xplained Mini** (Microcontroler central si interfata de debugging mEDBG). | + | | ATmega328P-Xplained Mini | [[https://www.microchip.com/en-us/development-tool/atmega328p-xmini|ATmega328P-Xplained Mini]] | Baza dezvoltare | |
| - | * Modul **RFID RC522** (13.56 MHz) - Alimentat la 3.3V, conectat la pinii SPI (MOSI, MISO, SCK, SS). | + | | Modul RFID RC522 | [[https://www.bitmi.ro/modul-rfid-rc522-13-59mhz-cu-card-si-tag-10468.html?gad_source=1&gad_campaignid=22991722025&gbraid=0AAAAADLag-nnaAD2-KamZ6qMPeX9EODW5&gclid=CjwKCAjw5ZXQBhBdEiwAI5XVWWYh4P4q0otfQLW_UaE-AMkAOe1yxy4PVNM3kBF_5TlyA5kxobgOlhoC0qEQAvD_BwE|Modul RFID RC522]] | SPI | |
| - | * **Display LCD 1602** retroiluminat cu modul **I2C PCF8574** lipit pe spate - Alimentat la 5V, conectat la pinii SDA (PC4) si SCL (PC5). | + | | Display LCD 1602 cu convertor I2C | [[https://www.bitmi.ro/electronica/modul-interfata-i2c-pentru-lcd1602-10456.html|Modul interfață I2C pentru LCD]] | I2C | |
| - | * **Servomotor SG90** - Alimentat la 5V, semnal de control conectat la un pin capabil de PWM (Timer1). | + | | Servomotor SG90 | [[https://www.bitmi.ro/servomotor-sg90-180-grade-9g-10496.html?gad_source=1&gad_campaignid=22991722025&gbraid=0AAAAADLag-nnaAD2-KamZ6qMPeX9EODW5&gclid=CjwKCAjw5ZXQBhBdEiwAI5XVWQXZa27TW67QwGFsDZUVFMhMdv7029RM0G-rRfPgTVxxRnwx-d1RfRoCtfkQAvD_BwE|Servomotor SG90]] | PWM (Timer1) | |
| - | * **Senzor Ultrasonic HC-SR04** - Alimentat la 5V, conectat la pini GPIO/Input Capture pentru masurarea impulsului de ecou. | + | | Senzor Ultrasonic HC-SR04 | [[https://sigmanortec.ro/Senzor-ultrasunete-HC-SR04-p125423514?SubmitCurrency=1&id_currency=2&srsltid=AfmBOorCJkTIpRGAV4zxJQd6-_3oJh7cRBnG1qOWIAHL12xkTYJTcHGaZik|Senzor Ultrasonic HC-SR04]] | GPIO, Input Capture | |
| - | * Breadboard si fire de conexiune DuPont (Tata-Tata, Mama-Tata). | + | | Breadboard si fire DuPont | [[https://www.bitmi.ro/breadboard-400-puncte-pentru-montaje-electronice-rapide-10633.html?gad_source=1&gad_campaignid=22991722025&gbraid=0AAAAADLag-nnaAD2-KamZ6qMPeX9EODW5&gclid=CjwKCAjw5ZXQBhBdEiwAI5XVWeDqc7DeK0XeCdZCfTkPi31TB3drat6GdZFtWn-J7no54kN9QCawohoCJsMQAvD_BwE|Breadboard si fire DuPont]] | Conexiuni hardware | |
| - | + | ||
| - | *(Aici se va adauga o schema electrica desenata in Fritzing, Proteus sau Eagle, detaliind conexiunile mentionate mai sus).* | + | |
| + | {{pm:prj2026:atoader:circuit_electric_mitrofan_theodor.jpeg?670}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | Dezvoltarea software este pe o masina de stari finita (FSM) care dicteaza comportamentul sistemului, eliminand complet functiile blocante. | + | Dezvoltarea software este bazata pe o masina de stari finita (FSM) care dicteaza comportamentul sistemului, eliminand complet functiile blocante. |
| - | + | ||
| - | Stari implementate: | + | |
| - | Starea IDLE: Sistemul asteapta scanarea unui card RFID. LCD-ul afiseaza numarul actualizat "Locuri libere: X". | + | |
| - | Starea VALIDARE: Se verifica UID-ul cardului scanat. Daca cardul este recunoscut si exista locuri disponibile (contor > 0), se trece la deblocare; daca nu, se afiseaza "Acces Respins" sau "Parcare Plina". | + | |
| - | Starea DESCHIDERE: Servomotorul se roteste la 90 de grade prin intermediul unui semnal PWM pentru a ridica bariera. | + | |
| - | Starea TRANZIT: Sistemul citeste constant datele de la senzorul HC-SR04. Atata timp cat distanta masurata este mica, masina se afla sub bariera. Sistemul asteapta ca distanta sa revina la normal (confirmarea trecerii). | + | |
| - | Starea INCHIDERE: Dupa eliberarea zonei, bariera coboara (PWM la 0 grade), contorul de locuri libere este decrementat, iar sistemul revine in starea IDLE. | + | |
| + | **Stari implementate:** | ||
| + | * **Starea IDLE:** Sistemul asteapta scanarea unui card RFID. LCD-ul afiseaza numarul actualizat "Locuri libere: X". | ||
| + | * **Starea VALIDARE:** Se verifica UID-ul cardului scanat. Daca cardul este recunoscut si exista locuri disponibile (contor > 0), se trece la deblocare; daca nu, se afiseaza "Acces Respins" sau "Parcare Plina". | ||
| + | * **Starea DESCHIDERE:** Servomotorul se roteste la 90 de grade prin intermediul unui semnal PWM pentru a ridica bariera. | ||
| + | * **Starea TRANZIT:** Sistemul citeste constant datele de la senzorul HC-SR04. Atata timp cat distanta masurata este mica, masina se afla sub bariera. Sistemul asteapta ca distanta sa revina la normal (confirmarea trecerii). | ||
| + | * **Starea INCHIDERE:** Dupa eliberarea zonei, bariera coboara (PWM la 0 grade), contorul de locuri libere este decrementat, iar sistemul revine in starea IDLE. | ||
| ===== Rezultate Obtinute ===== | ===== Rezultate Obtinute ===== | ||