This shows you the differences between two versions of the page.
|
pm:prj2026:victor.stoica0203:cosmin.buciu1904 [2026/05/18 12:13] cosmin.buciu1904 [Funcționalitatea Componentelor] |
pm:prj2026:victor.stoica0203:cosmin.buciu1904 [2026/05/23 12:38] (current) cosmin.buciu1904 [Jurnal] |
||
|---|---|---|---|
| Line 8: | Line 8: | ||
| **Ce face proiectul?** | **Ce face proiectul?** | ||
| - | Proiectul constă în realizarea unui dispozitiv electronic interactiv care simulează sistemul de armare al unei **bombe**, inspirat din mecanicile jocurilor tactice. Utilizatorul interacționează cu o tastatură numerică pentru a introduce un cod de securitate format din 7 cifre. Odată ce codul este validat, sistemul pornește o numărătoare inversă afișată în timp real pe un ecran LCD. | + | Proiectul constă în realizarea unui dispozitiv electronic interactiv care simulează sistemul de armare al unei **bombe**, inspirat din mecanicile jocurilor tactice. Utilizatorul interacționează cu o tastatură numerică pentru a introduce un cod de securitate format din 7 cifre. Odată ce codul este validat, sistemul pornește o numărătoare inversă afișată în timp real pe un ecran LCD. În această fază, utilizatorul poate încerca dezamorsarea prin menținerea apăsată a unui buton timp de 5 secunde, acțiune care generează un sunet electronic secundar, intercalat simultan peste bipurile de alertă ale bombei, indiferent de timpul rămas. |
| Pe durata cronometrării, un buzzer pasiv emite semnale sonore scurte (bip-uri) care se accelerează pe măsură ce timpul expiră, crescând tensiunea. În final, dacă timpul se scurge complet, sistemul semnalează „explozia” prin avertizări sonore continue și prin feedback vizual (mesaj de alertă pe ecran și schimbarea stării LED-ului RGB). | Pe durata cronometrării, un buzzer pasiv emite semnale sonore scurte (bip-uri) care se accelerează pe măsură ce timpul expiră, crescând tensiunea. În final, dacă timpul se scurge complet, sistemul semnalează „explozia” prin avertizări sonore continue și prin feedback vizual (mesaj de alertă pe ecran și schimbarea stării LED-ului RGB). | ||
| Line 14: | Line 14: | ||
| **Care este scopul lui?** | **Care este scopul lui?** | ||
| - | Scopul principal este crearea unui joc de strategie și dexteritate sub presiune, care să demonstreze cum un microcontroler poate gestiona procese secvențiale și simultane. Sistemul trebuie să preia și să valideze un cod de la tastatură, iar ulterior să declanșeze o stare de alertă în care rulează un **Timer** pentru cronometrarea precisă. În această a doua fază, microcontrolerul trebuie să actualizeze constant informația pe ecranul **I2C** și să genereze semnale **PWM** pentru buzzer în mod sincronizat cu timpul rămas, fără a bloca execuția programului. Este un exercițiu de logică aplicată unde dispozitivul trece prin stări diferite și oferă feedback instantaneu utilizatorului. | + | Scopul principal este crearea unui joc de strategie și dexteritate sub presiune, care să demonstreze cum un microcontroler poate gestiona procese secvențiale și simultane. Sistemul trebuie să preia și să valideze un cod de la tastatură, iar ulterior să declanșeze o stare de alertă în care rulează un **Timer** pentru cronometrarea precisă. În această a doua fază, microcontrolerul trebuie să actualizeze constant informația pe ecranul **I2C** și să genereze semnale **PWM** pentru buzzer în mod sincronizat cu timpul rămas și să proceseze asincron procesul de dezamorsare prin buton și suprapunerea audio aferentă, fără a bloca execuția programului. Este un exercițiu de logică aplicată unde dispozitivul trece prin stări diferite și oferă feedback instantaneu utilizatorului. |
| **Care a fost ideea de la care am pornit?** | **Care a fost ideea de la care am pornit?** | ||
| - | Ideea mi-a venit inspirându-mă din jocurile video de tip shooter, unde există mecanica de a introduce un cod pentru a activa un anumit obiect. Mi-am dorit să aduc acest element virtual în lumea reală, folosind componente electronice accesibile. De asemenea, am vrut să văd dacă pot reproduce acea interacțiune folosind un buzzer pasiv și un ecran LCD, transformând o funcție software de verificare a unei parole într-un montaj fizic pe care utilizatorul îl poate opera prin apăsarea tastelor. | + | Ideea mi-a venit inspirându-mă din jocurile video de tip shooter, unde există mecanica de a introduce un cod pentru a activa un anumit obiect dar și cea de dezamorsare contracronometru. Mi-am dorit să aduc acest element virtual în lumea reală, folosind componente electronice accesibile. De asemenea, am vrut să văd dacă pot reproduce acea interacțiune folosind un buzzer pasiv și un ecran LCD, transformând o funcție software de verificare a unei parole într-un montaj fizic pe care utilizatorul îl poate opera prin apăsarea tastelor. |
| **De ce este util proiectul?** | **De ce este util proiectul?** | ||
| - | Utilitatea proiectului constă în exemplificarea modului în care un microcontroler poate implementa un sistem de securitate de bază, integrând controlul accesului prin parolă cu avertizări sonore și vizuale. Dispozitivul servește ca un model practic pentru înțelegerea proceselor de monitorizare în timp real și a modului în care un automat de stări poate gestiona corect trecerea de la faza de autentificare la cea de monitorizare contracronometru. | + | Utilitatea proiectului constă în exemplificarea modului în care un microcontroler poate implementa un sistem de securitate de bază, integrând controlul accesului prin parolă cu avertizări sonore și vizuale. Dispozitivul servește ca un model practic pentru înțelegerea proceselor de monitorizare în timp real și a modului în care un automat de stări poate gestiona corect trecerea de la faza de autentificare la cea de monitorizare contracronometru și de întrerupere hardware a alertei în condiții de multitasking electronic. |
| ===== Descriere generală ===== | ===== Descriere generală ===== | ||
| Line 34: | Line 34: | ||
| * **Unitatea de Procesare (Logica Centrală):** Reprezintă componenta software care rulează pe placă. Aceasta validează codul de acces și gestionează tranziția între stările sistemului folosind timerele interne pentru precizia cronometrării. | * **Unitatea de Procesare (Logica Centrală):** Reprezintă componenta software care rulează pe placă. Aceasta validează codul de acces și gestionează tranziția între stările sistemului folosind timerele interne pentru precizia cronometrării. | ||
| - | * **Modulul de Input (Keypad & Buton):** Permite utilizatorului introducerea parolei prin keypad (GPIO) și resetarea instantanee a codului în faza inițială sau dezamorsarea sistemului în faza de alertă, prin acționarea unui buton dedicat | + | * **Modulul de Input (Keypad & Buton):** Permite utilizatorului introducerea parolei prin keypad (GPIO) și resetarea instantanee a codului în faza inițială sau dezamorsarea sistemului în faza de alertă, prin acționarea unui buton dedicat. |
| * **Modulul de Output Vizual (LCD & LED RGB):** Oferă feedback vizual prin două căi: ecranul LCD afișează timpul via protocol I2C, în timp ce LED-ul RGB semnalizează stările prin pini GPIO / PWM dedicați. | * **Modulul de Output Vizual (LCD & LED RGB):** Oferă feedback vizual prin două căi: ecranul LCD afișează timpul via protocol I2C, în timp ce LED-ul RGB semnalizează stările prin pini GPIO / PWM dedicați. | ||
| Line 54: | Line 54: | ||
| | LED RGB | 1 | [[https://sigmanortec.ro/LED-RGB-5mm-4-pini-Anod-comun-p126008495| Link]]|1.51 | | | LED RGB | 1 | [[https://sigmanortec.ro/LED-RGB-5mm-4-pini-Anod-comun-p126008495| Link]]|1.51 | | ||
| | Buton | 1 | [[https://www.bitmi.ro/electronica/modul-buton-switch-ky-004-10672.html| Link]] |2.99 | | | Buton | 1 | [[https://www.bitmi.ro/electronica/modul-buton-switch-ky-004-10672.html| Link]] |2.99 | | ||
| - | | Fire Dupont Tată-Tată 20cm |TBD | [[https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-tata-20cm-10511.html| Link]]|0.23| | + | | Rezistențe |3 | [[https://www.bitmi.ro/electronica/set-rezistori-20-de-valori-400-bucati-10-10m-1-4w-11255.html| Link]]|19.99 (1 set) | |
| - | | Rezistențe |3 | [[https://www.bitmi.ro/electronica/set-rezistori-20-de-valori-400-bucati-10-10m-1-4w-11255.html| Link]]|0.10 | | + | | Fire Dupont Tată-Tată 20cm |20 | [[https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-tata-20cm-10511.html| Link]]|8.99 (1 set)| |
| + | | Fire Dupont Tată-Mamă 20cm |4 | [[https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-mama-20cm-10512.html| Link]]|6.99 (1 set)| | ||
| ^ Preț total ^ ^ ^ 123.36 RON ^ | ^ Preț total ^ ^ ^ 123.36 RON ^ | ||
| Line 79: | Line 80: | ||
| | Tastatură matricială 3x4 | 4, 6, 8 | Digital | Conectați la coloanele tastaturii | | | Tastatură matricială 3x4 | 4, 6, 8 | Digital | Conectați la coloanele tastaturii | | ||
| | Tastatură matricială 3x4 | 3, 5, 7, 13 | Digital | Conectați la rândurile tastaturii | | | Tastatură matricială 3x4 | 3, 5, 7, 13 | Digital | Conectați la rândurile tastaturii | | ||
| - | | Buton | 2 | PCINT | Declanșează întreruperea hardware pentru resetare | | + | | Buton | 2 | PCINT | Declanșează întreruperea hardware pentru resetare sau dezamorsare | |
| | LED RGB (Red) | 9 | PWM | Permite controlul intensității pentru culoarea Red | | | LED RGB (Red) | 9 | PWM | Permite controlul intensității pentru culoarea Red | | ||
| | LED RGB (Green) | 10 | PWM | Permite controlul intensității pentru culoarea Green | | | LED RGB (Green) | 10 | PWM | Permite controlul intensității pentru culoarea Green | | ||
| Line 92: | Line 93: | ||
| **Biblioteci utilizate:** | **Biblioteci utilizate:** | ||
| - | * **LiquidCrystal_I2C:** Utilizată pentru controlul afișajului LCD prin protocolul I2C, permițând gestionarea mesajelor pe cele două linii ale ecranului | + | * **LiquidCrystal_I2C:** utilizată pentru controlul afișajului LCD prin protocolul I2C, permițând gestionarea mesajelor pe cele două linii ale ecranului |
| - | * **Keypad:** Permite gestionarea matricei de taste 3x4, citirea input-ului și tratarea fenomenului de debounce (pentru a evita citirile false la apăsare) | + | * **Keypad:** permite gestionarea matricei de taste 3x4, citirea input-ului și tratarea fenomenului de debounce (pentru a evita citirile false la apăsare) |
| - | * **Wire:** Biblioteca standard pentru comunicația I2C | + | * **Wire:** biblioteca standard pentru comunicația I2C |
| + | |||
| + | **Elementul de noutate al proiectului:** constă în reproducerea fizică a unei mecanice competitive de e-sports (defuse contracronometru) într-un sistem embedded bazat pe stări. Noutatea constă în multitasking-ul audio: suprapunerea dinamică a două fluxuri sonore independente (bip-ul bombei și ticăitul de defuse) pe un singur buzzer, fără a deforma unda PWM principală. | ||
| + | |||
| + | **Justificarea utilizării funcționalităților din laborator:** | ||
| + | * **Timer 1 în mod Fast PWM** (Laborator Timere/PWM): configurează Timerul 1 în Modul 14 (prescaler de 8) pentru a genera frecvențe audio flexibile pe buzzer, menținând un Duty Cycle fix de 50%. | ||
| + | |||
| + | * **Timer 2 în mod CTC** (Laborator Timere/PWM): configurat pe 8 biți cu prescaler de 64 -> generează o întrerupere la fiecare 1 ms, înlocuind complet funcția software standard millis(). | ||
| + | |||
| + | * **Întreruperi Hardware Pin Change** (Laborator Întreruperi): activate prin regiștrii PCICR și PCMSK2 pe Pinul 2 -> permit citirea asincronă a butonului pentru reset/defuse instantaneu, fără blocarea procesorului. | ||
| + | |||
| + | * **Manipulare Directă a Porturilor** (Laborator GPIO): utilizarea regiștrilor DDRB, DDRD, PORTB și PORTD elimină latențele funcțiilor Arduino, permițând comutarea LED-ului RGB într-un singur ciclu de ceas. | ||
| + | |||
| + | **Scheletul proiectului și interacțiunea funcționalităților:** programul este structurat ca un Automat de Stări Finit (FSM) rulat în loop() printr-un bloc "switch-case": | ||
| + | |||
| + | * **B_IDLE:** scanează tastatura pentru stocarea codului, oferă opțiunea de mascare a caracterelor (Hidden / Visible Mode) înainte de armare și gestionează întreruperea de reset. | ||
| + | |||
| + | * **B_ARMED:** monitorizează decrementarea cronometrului, sincronizează pulsațiile LED-ului RGB și, la detectarea asincronă a apăsării butonului, randează progresul dezamorsării pe ecran în paralel cu generarea sunetului secundar intercalat. | ||
| + | |||
| + | * **B_EXPLODED / B_DEFUSED:** reprezintă stările terminale în care sistemul rulează secvențele audio-vizuale de final (zgomot alb bazat pe frecvențe aleatorii sau melodie de succes), după care reinițializează automat toate variabilele pentru revenirea în starea inițială. | ||
| + | |||
| + | **Calibrarea perifericelor și sincronizarea I/O:** | ||
| + | |||
| + | * **Stabilizarea electrică a intrării:** calibrarea butonului s-a realizat prin activarea hardware a rezistenței interne de Pull-Up a microcontrolerului, fixând o stare stabilă de HIGH în repaus și eliminând zgomotul de fond (efectul de pin flotant). | ||
| + | |||
| + | * **Sincronizarea progresului vizual:** calibrarea barei de defuse s-a efectuat prin corelarea timpului fizic de acționare (5 secunde) cu densitatea de pixeli a ecranului. Împărțirea simetrică a intervalului la cele 7 caractere ale codului a determinat o rată de eșantionare de exact 714 ms per segment, asigurând o actualizare fluidă și liniară pe LCD. | ||
| + | |||
| + | **Optimizări arhitecturale realizate:** | ||
| + | |||
| + | * **Optimizare de timp (Hardware Multitasking):** înlocuirea totală a funcției software standard millis() cu un ceas intern generat pe baza Timerului 2. Prin mutarea contorului direct într-o rutină de întrerupere hardware (ISR) la fiecare o milisecundă, s-a eliminat overhead-ul software și s-a redus masiv timpul de ocupare a procesorului. | ||
| + | |||
| + | * **Optimizare de calcul (Eficiență computațională):** în cadrul algoritmului de generare a frecvențelor PWM pentru buzzer, operațiile matematice costisitoare (înmulțiri și împărțiri repetitive de numere mari) au fost simplificate direct prin constante pre-calculate hardware în cod. Astfel, procesorul execută o singură operație aritmetică de bază per apel, salvând cicluri critice de ceas în momentele de alertă maximă (mai ales în ultimele 10 secunde până la explozie). | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| + | [[https://youtube.com/shorts/4AbxcBFpYPQ|Video Proiect]] | ||
| + | |||
| + | Materialul video prezintă funcționarea montajului fizic realizat pe placa Arduino Uno. Sunt ilustrate etapele de armare a sistemului prin tastatură, comportamentul alarmelor sonore și vizuale, precum și simularea procesului de dezamorsare contracronometru utilizând butonul hardware. | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | Proiectul a demonstrat cu succes realizarea unui dispozitiv interactiv de simulare, utilizând eficient resursele hardware ale unei plăci de dezvoltare **Arduino Uno** (bazată pe microcontrolerul **ATmega328P**). Lucrarea a evidențiat faptul că o astfel de platformă accesibilă poate fi transformată dintr-un simplu kit de testare într-un sistem embedded rapid și stabil, capabil să ruleze o logică complexă în timp real. | ||
| + | Pe lângă dezvoltarea algoritmului de joc, proiectul a oferit o experiență practică valoroasă în structurarea codului și în sincronizarea proceselor. Cea mai importantă realizare a fost eliminarea completă a blocajelor software: actualizarea ecranului, scanarea tastelor și generarea alertelor sonore rulează fluid și simultan. Acest lucru garantează un răspuns instantaneu la acțiunile utilizatorului și demonstrează cum optimizarea atentă a programului permite obținerea unui multitasking real pe un hardware limitat. | ||
| ===== Download ===== | ===== Download ===== | ||
| + | |||
| + | * {{:pm:prj2026:victor.stoica0203:bomb.zip|}} | ||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| Line 110: | Line 149: | ||
| * 08.05.2026 - Finalizarea milestone-ului de documentație pentru proiect | * 08.05.2026 - Finalizarea milestone-ului de documentație pentru proiect | ||
| * 11.05.2026 - Realizarea schemei electrice și a pinout-ului pentru milestone-ul hardware | * 11.05.2026 - Realizarea schemei electrice și a pinout-ului pentru milestone-ul hardware | ||
| + | * 19.05.2026 - Finalizarea codului în Arduino IDE și validarea funcționalităților pe hardware | ||
| + | * 22.05.2026 - Actualizarea paginii cu detalii de Software Design | ||
| + | * 23.05.2026 - Atașare videoclip și finalizarea paginii corespunzătoare proiectului meu | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | **Resurse Software** | + | **Resurse Hardware & Software** |
| * Laboratoarele PM | * Laboratoarele PM | ||
| * [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] | * [[https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] | ||