This shows you the differences between two versions of the page.
|
pm:prj2026:cezar.zlatea:madalin.militaru [2026/05/08 01:00] madalin.militaru |
pm:prj2026:cezar.zlatea:madalin.militaru [2026/05/09 22:02] (current) madalin.militaru [Algoritmi și structuri de date] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Smart Lock ====== | ====== Smart Lock ====== | ||
| + | |||
| ===== Introducere ===== | ===== Introducere ===== | ||
| Line 19: | Line 20: | ||
| * Pentru utilizatori: înlocuiește cheile fizice cu un cod ușor de reținut și schimbat | * Pentru utilizatori: înlocuiește cheile fizice cu un cod ușor de reținut și schimbat | ||
| * Pentru mine: integrează multiple concepte din electronică digitală - GPIO, PWM, comunicație I2C, timere, într-un singur proiect coerent | * Pentru mine: integrează multiple concepte din electronică digitală - GPIO, PWM, comunicație I2C, timere, într-un singur proiect coerent | ||
| + | |||
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| Line 24: | Line 26: | ||
| Sistemul este organizat în jurul microcontrollerului ATmega328P (placă XMINI), care coordonează toate modulele hardware și implementează logica aplicației printr-o mașină de stări. | Sistemul este organizat în jurul microcontrollerului ATmega328P (placă XMINI), care coordonează toate modulele hardware și implementează logica aplicației printr-o mașină de stări. | ||
| - | <code> | + | {{:pm:prj2026:cezar.zlatea:diagrama.png?600|}} |
| - | {{:pm:prj2026:cezar.zlatea:diagrama.png?200|}} | + | |
| - | </code> | + | |
| **Module hardware:** | **Module hardware:** | ||
| Line 46: | Line 46: | ||
| **Interacțiune între module:** Butoanele generează evenimente care sunt procesate de mașina de stări, care la rândul ei actualizează LCD-ul, controlează servo-ul prin PWM, schimbă culoarea LED-ului RGB și citește/scrie din EEPROM. | **Interacțiune între module:** Butoanele generează evenimente care sunt procesate de mașina de stări, care la rândul ei actualizează LCD-ul, controlează servo-ul prin PWM, schimbă culoarea LED-ului RGB și citește/scrie din EEPROM. | ||
| + | |||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| + | |||
| ==== Listă de componente ==== | ==== Listă de componente ==== | ||
| Line 63: | Line 65: | ||
| | Rezistor 220Ω | 3 | Limitare curent canale R/G/B LED | | | Rezistor 220Ω | 3 | Limitare curent canale R/G/B LED | | ||
| | Condensator electrolitic 470µF / 35V | 1 | Filtrare alimentare servo | | | Condensator electrolitic 470µF / 35V | 1 | Filtrare alimentare servo | | ||
| - | | Fire jumper M-M și M-F | ~20 | Conexiuni între componente | | + | |
| + | |||
| + | ==== Schema electrică ==== | ||
| + | |||
| + | **TO DO:** Schema electrică va fi realizată în Fusion 360 Electronics și adăugată aici la etapa 2. | ||
| + | |||
| + | |||
| + | ==== Diagrame de semnal ==== | ||
| + | |||
| + | **TO DO:** Diagramele PWM (servo) și I2C (LCD) vor fi adăugate la etapa 2. | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | |||
| ==== Mediu de dezvoltare ==== | ==== Mediu de dezvoltare ==== | ||
| + | |||
| * **PlatformIO** (extensie pentru VSCode) - build system și upload pe placă | * **PlatformIO** (extensie pentru VSCode) - build system și upload pe placă | ||
| * **avr-gcc** - compilator pentru AVR | * **avr-gcc** - compilator pentru AVR | ||
| * **avrdude** - utilitar de programare prin debugger-ul mEDBG integrat în XMINI | * **avrdude** - utilitar de programare prin debugger-ul mEDBG integrat în XMINI | ||
| * **Limbaj:** C99 (bare-metal, fără framework Arduino) | * **Limbaj:** C99 (bare-metal, fără framework Arduino) | ||
| + | |||
| ==== Biblioteci 3rd-party folosite ==== | ==== Biblioteci 3rd-party folosite ==== | ||
| + | |||
| * **avr-libc** - biblioteca standard AVR (avr/io.h, avr/interrupt.h, avr/eeprom.h, util/delay.h) | * **avr-libc** - biblioteca standard AVR (avr/io.h, avr/interrupt.h, avr/eeprom.h, util/delay.h) | ||
| * **lcd_i2c** - driver minimal I2C pentru LCD (modificat și integrat în proiect) | * **lcd_i2c** - driver minimal I2C pentru LCD (modificat și integrat în proiect) | ||
| + | |||
| ==== Algoritmi și structuri de date ==== | ==== Algoritmi și structuri de date ==== | ||
| - | **1. Mașină de stări finite (FSM):** | + | **1. Mașină de stări finite:** |
| <code c> | <code c> | ||
| Line 90: | Line 106: | ||
| STATE_SET_OLD_PIN, // Verifica PIN-ul vechi inainte de schimbare | STATE_SET_OLD_PIN, // Verifica PIN-ul vechi inainte de schimbare | ||
| STATE_SET_NEW_PIN, // Introducere PIN nou + salvare in EEPROM | STATE_SET_NEW_PIN, // Introducere PIN nou + salvare in EEPROM | ||
| - | STATE_LOCKOUT // 3 incercari gresite -> blocare 30s | + | STATE_LOCKOUT // 3 incercari gresite blocare 30s |
| } system_state_t; | } system_state_t; | ||
| </code> | </code> | ||
| Line 96: | Line 112: | ||
| **2. Debouncing software pentru butoane:** | **2. Debouncing software pentru butoane:** | ||
| * Timer interrupt la 10ms care eșantionează starea butoanelor | * Timer interrupt la 10ms care eșantionează starea butoanelor | ||
| - | * Un buton e considerat apăsat doar dacă e citit ca LOW de 3 ori consecutiv | ||
| * Detecție flanc descendent pentru a genera un singur eveniment per apăsare | * Detecție flanc descendent pentru a genera un singur eveniment per apăsare | ||
| **3. Generare PWM pentru servo:** | **3. Generare PWM pentru servo:** | ||
| - | * Timer1 configurat în mod Fast PWM, ICR1=39999 (perioadă 20ms la 16MHz) | + | * Timer1 configurat în mod Fast PWM |
| * Modificare OCR1A între 1000 (1ms = 0°) și 4800 (2.4ms = 180°) | * Modificare OCR1A între 1000 (1ms = 0°) și 4800 (2.4ms = 180°) | ||
| - | **4. Stocare în EEPROM:** | + | **4. Anti-brute-force:** |
| - | * Adresa 0x00: flag "first boot" (1 byte) | + | |
| - | * Adresele 0x01-0x04: cele 4 cifre ale PIN-ului | + | |
| - | * Adresa 0x05: contor încercări greșite (resetat la lockout) | + | |
| - | + | ||
| - | **5. Anti-brute-force (lockout):** | + | |
| * Contor de încercări greșite consecutive | * Contor de încercări greșite consecutive | ||
| - | * La 3 încercări → tranziție în STATE_LOCKOUT pentru 30 secunde | + | * La 3 încercări tranziție în STATE_LOCKOUT pentru 30 secunde |
| * Pe LCD se afișează countdown în timp real | * Pe LCD se afișează countdown în timp real | ||
| * Toate butoanele ignorate în timpul lockout-ului | * Toate butoanele ignorate în timpul lockout-ului | ||
| - | ==== Funcții implementate (etapa 3) ==== | ||
| - | //De completat la etapa finală cu lista funcțiilor și descrierea lor./ | ||
| ===== Rezultate Obținute ===== | ===== Rezultate Obținute ===== | ||
| + | **TO DO:** Vor fi documentate rezultatele după asamblarea hardware-ului și implementarea software-ului (etapa 3). | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | **TO DO:** Concluziile vor fi adăugate la finalul proiectului. | ||
| Line 129: | Line 139: | ||
| + | ==== Repository GitHub ==== | ||
| + | |||
| + | **TO DO:** Link-ul către repository-ul public GitHub va fi adăugat aici. | ||
| + | |||
| + | |||
| + | ==== Demo video ==== | ||
| + | |||
| + | **TO DO:** Link YouTube cu demo-ul proiectului va fi adăugat la finalizare. | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| - | * **01.05.2026** Achizitionarea pieselor | + | * **01.05.2026** - Achiziționarea pieselor |
| - | * **08.05.2026** Prima versiune a documentatiei | + | * **08.05.2026** - Prima versiune a documentației |
| + | * **TO DO:** Update-uri ulterioare pe măsură ce proiectul progresează | ||
| + | |||
| ===== Bibliografie / Resurse ===== | ===== Bibliografie / Resurse ===== | ||
| + | |||
| ==== Resurse Hardware ==== | ==== Resurse Hardware ==== | ||
| - | |||
| - | ==== Resurse Software ==== | ||
| + | ==== Resurse Software ==== | ||