Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 ====
pm/prj2026/cezar.zlatea/madalin.militaru.1778191213.txt.gz · Last modified: 2026/05/08 01:00 by madalin.militaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0