This shows you the differences between two versions of the page.
|
pm:prj2026:theodor_ioan.buliga:diana_andreea.raceu [2026/05/03 18:53] diana_andreea.raceu created |
pm:prj2026:theodor_ioan.buliga:diana_andreea.raceu [2026/05/24 22:29] (current) diana_andreea.raceu |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Bomb Defusal Game ====== | + | ====== Bomb Defusal Duel ====== |
| - | ===== Descriere ===== | + | ===== Introducere ===== |
| - | Proiectul consta in implementarea unui joc embedded de tip „Bomb Defusal” pe platforma ATmega328P Xplained Mini. | + | Proiectul „Bomb Defusal Duel” reprezintă un joc embedded multiplayer realizat pe platforma ATmega328P Xplained Mini. |
| - | Utilizatorul trebuie sa dezamorseze o „bomba” prin introducerea unei secvente corecte de butoane intr-un timp limitat. Sistemul ofera feedback vizual (LED-uri) si auditiv (buzzer), simuland un scenariu de dezamorsare. | + | Jocul simulează dezamorsarea unei bombe prin introducerea unei secvențe corecte de butoane într-un timp limitat. Proiectul utilizează multiple periferice hardware și software pentru a crea o experiență interactivă completă: |
| + | * LED-uri pentru feedback vizual | ||
| + | * buzzer pentru efecte sonore | ||
| + | * display OLED pentru afișarea informațiilor | ||
| + | * butoane pentru interacțiunea utilizatorului | ||
| + | * logică multiplayer și sistem de scor | ||
| - | ===== Scopul proiectului ===== | + | Scopul principal al proiectului este utilizarea integrată a funcționalităților studiate în cadrul laboratoarelor PM pentru realizarea unui sistem embedded interactiv și modular. |
| - | Scopul proiectului este utilizarea perifericelor microcontrolerului pentru realizarea unui sistem interactiv care implica: | ||
| - | * citirea input-urilor (butoane) | ||
| - | * controlul output-urilor (LED-uri și buzzer) | ||
| - | * gestionarea timpului (countdown) | ||
| - | * implementarea unei logici de tip state machine | ||
| + | ===== Descriere generală ===== | ||
| - | ===== Componente utilizate ===== | + | Jocul funcționează în două faze principale: |
| - | * ATmega328P Xplained Mini | + | - faza de setare a codului |
| - | * 4 x LED-uri (rosu, galben, albastru, verde) | + | - faza de dezamorsare |
| - | * 4 x butoane | + | |
| - | * rezistente 220Ω | + | |
| - | * buzzer pasiv | + | |
| - | * breadboard + fire de conexiune | + | |
| - | * display OLED SSD1306 (I2C) | + | |
| + | La începutul fiecărei runde, unul dintre jucători introduce o secvență secretă formată din 4 culori folosind butoanele disponibile. | ||
| - | ===== Functionalitati ===== | + | După confirmarea secvenței, celălalt jucător trebuie să reproducă secvența corectă înainte de expirarea timpului. |
| - | * afisarea unui countdown | + | Sistemul oferă: |
| - | * introducerea unei secvente de butoane | + | |
| - | * validarea corectitudinii secventei | + | |
| * feedback vizual prin LED-uri | * feedback vizual prin LED-uri | ||
| - | * feedback audio prin buzzer: | + | * feedback audio prin buzzer |
| - | * sunet de „tick” | + | * afișarea informațiilor pe display OLED |
| - | * sunet de eroare | + | * gestionarea rundelor și scorului |
| - | * sunet de explozie | + | |
| - | * sunet de succes | + | |
| - | * reset | + | |
| - | ===== Arhitectura ===== | + | Jocul continuă până când unul dintre jucători ajunge la 5 victorii. |
| - | Proiectul este organizat in mai multe module logice: | + | ===== Stadiul actual al implementării hardware ===== |
| - | * Input: butoane (PD2–PD5) | + | În etapa actuală au fost integrate și testate toate componentele hardware principale necesare funcționării jocului. |
| - | * Output: LED-uri (PB0–PB3), buzzer (PD6) | + | |
| - | * Timer: implementat software prin delay-uri | + | |
| - | * Logica: state machine pentru verificarea secventei | + | |
| - | Fluxul principal: | + | Au fost realizate: |
| - | * citire buton | + | * conectarea și testarea LED-urilor |
| - | * verificare stare | + | * conectarea și validarea butoanelor |
| - | * actualizare progres | + | * integrarea buzzer-ului pasiv |
| - | * generare feedback | + | * integrarea display-ului OLED prin protocol I2C |
| + | * conectarea butonului suplimentar pentru confirmarea codului | ||
| + | * implementarea butonului onboard pentru pornirea și oprirea jocului | ||
| - | ===== Pasi de implementare ===== | + | Toate componentele funcționează simultan și au fost validate individual înainte de integrarea finală. |
| - | - test LED-uri | + | === Imagine ansamblu hardware === |
| - | - test butoane | + | {{ :pm:prj2026:theodor_ioan.buliga:photo-2026-05-24-15-17-59.jpg?300 |}} |
| - | - integrare input-output | + | |
| - | - implementare secventa | + | ===== Componente utilizate ===== |
| - | - implementare countdown | + | |
| - | - adaugare buzzer | + | ^ Componentă ^ Rol ^ |
| - | - testare finala | + | | ATmega328P Xplained Mini | Microcontroler principal | |
| + | | Breadboard | Prototipare și interconectare | | ||
| + | | 4 x LED-uri | Feedback vizual pentru acțiuni | | ||
| + | | 4 x rezistențe 220Ω | Limitarea curentului pentru LED-uri | | ||
| + | | 5 x butoane | Introducerea comenzilor | | ||
| + | | buzzer pasiv | Generarea efectelor sonore | | ||
| + | | display OLED SSD1306 | Afișarea informațiilor | | ||
| + | | fire jumper | Realizarea conexiunilor | | ||
| + | |||
| + | ===== Configurația pinilor ===== | ||
| + | |||
| + | ^ Componentă ^ Pin microcontroler ^ | ||
| + | | LED roșu | PB0 | | ||
| + | | LED galben | PB1 | | ||
| + | | LED albastru | PB2 | | ||
| + | | LED verde | PB3 | | ||
| + | | Buton roșu | PD2 | | ||
| + | | Buton galben | PD3 | | ||
| + | | Buton albastru | PD4 | | ||
| + | | Buton verde | PD5 | | ||
| + | | Buzzer | PD6 | | ||
| + | | Buton confirmare | PD7 | | ||
| + | | Buton onboard START/STOP | PB7 | | ||
| + | | OLED SDA | PC4 | | ||
| + | | OLED SCL | PC5 | | ||
| + | |||
| + | === OLED funcțional === | ||
| + | {{ :pm:prj2026:theodor_ioan.buliga:photo-2026-05-24-22-19-48_2.jpg?300 |}} | ||
| + | {{ :pm:prj2026:theodor_ioan.buliga:photo-2026-05-24-22-19-48.jpg?300 |}} | ||
| + | |||
| + | ===== Justificarea utilizării pinilor ===== | ||
| + | |||
| + | Pinii au fost aleși astfel încât să permită organizarea logică și eficientă a componentelor. | ||
| + | |||
| + | LED-urile au fost grupate pe PORTB pentru simplificarea controlului ieșirilor digitale. | ||
| + | |||
| + | Butoanele au fost grupate pe PORTD pentru utilizarea facilă a intrărilor digitale și activarea rezistențelor interne de tip pull-up. | ||
| + | |||
| + | Display-ul OLED utilizează protocolul I2C, fiind conectat la: | ||
| + | * PC4 (SDA) | ||
| + | * PC5 (SCL) | ||
| + | |||
| + | conform configurației hardware standard a microcontrolerului ATmega328P. | ||
| + | |||
| + | |||
| + | ===== Schema bloc ===== | ||
| + | |||
| + | * utilizatorul introduce date prin butoane | ||
| + | * microcontrolerul procesează logica jocului | ||
| + | * feedback-ul este transmis prin: | ||
| + | * LED-uri | ||
| + | * buzzer | ||
| + | * display OLED | ||
| + | {{ :pm:prj2026:theodor_ioan.buliga:captură_de_ecran_din_2026-05-24_la_14.57.50.png |}} | ||
| + | |||
| + | ===== Schema electrică ===== | ||
| + | {{ :pm:prj2026:theodor_ioan.buliga:captură_de_ecran_din_2026-05-24_la_15.04.20.png?300 |}} | ||
| + | ===== Funcționalități utilizate din laboratoare ===== | ||
| + | |||
| + | În cadrul proiectului au fost utilizate multiple concepte și funcționalități prezentate în laboratoare: | ||
| + | |||
| + | * GPIO pentru controlul LED-urilor și citirea butoanelor | ||
| + | * debounce software pentru butoane | ||
| + | * protocol I2C pentru comunicarea cu display-ul OLED | ||
| + | * generarea semnalelor audio utilizând PWM și funcția tone() | ||
| + | * state machine pentru gestionarea stărilor jocului | ||
| + | * management software al timpului folosind millis() | ||
| + | |||
| + | ===== Stadiul actual al implementării software ===== | ||
| + | |||
| + | Implementarea software este complet funcțională și include: | ||
| + | |||
| + | * sistem multiplayer | ||
| + | * gestionarea rundelor | ||
| + | * introducerea codului secret | ||
| + | * verificarea secvențelor | ||
| + | * countdown în timp real | ||
| + | * sistem de scor | ||
| + | * efecte audio și vizuale | ||
| + | * afișare pe OLED | ||
| + | * pornire și oprire din buton onboard | ||
| + | |||
| + | Arhitectura proiectului este modulară, funcționalitățile fiind separate în funcții dedicate pentru: | ||
| + | * afișare | ||
| + | * sunete | ||
| + | * efecte LED | ||
| + | * gestionarea input-urilor | ||
| + | * logică de joc | ||
| + | |||
| + | |||
| + | ===== Biblioteci utilizate ===== | ||
| + | |||
| + | ^ Bibliotecă ^ Rol ^ | ||
| + | | Wire.h | Comunicare I2C | | ||
| + | | Adafruit_GFX.h | Funcții grafice pentru display | | ||
| + | | Adafruit_SSD1306.h | Control display OLED SSD1306 | | ||
| + | |||
| + | ===== Elementul de noutate ===== | ||
| + | |||
| + | Elementul principal de noutate al proiectului este implementarea unui joc multiplayer embedded complet interactiv, utilizând exclusiv resurse hardware limitate ale microcontrolerului. | ||
| + | |||
| + | Proiectul combină: | ||
| + | * logică multiplayer | ||
| + | * feedback audio-vizual | ||
| + | * interfață grafică | ||
| + | * gestionarea timpului | ||
| + | * efecte dinamice | ||
| + | |||
| + | pentru a crea o experiență similară unui joc real de tip „bomb defusal”. | ||
| + | |||
| + | ===== Validarea funcționalităților ===== | ||
| + | |||
| + | Fiecare componentă a fost testată individual înainte de integrarea finală: | ||
| + | |||
| + | * LED-urile au fost validate prin secvențe de aprindere | ||
| + | * butoanele au fost testate individual | ||
| + | * OLED-ul a fost validat folosind scanare I2C | ||
| + | * buzzer-ul a fost testat prin generarea de tonuri | ||
| + | * funcționalitatea multiplayer a fost testată prin simularea rundelor complete | ||
| + | |||
| + | Validarea finală a constat în rularea completă a jocului cu doi jucători. | ||
| + | |||
| + | ===== Optimizări realizate ===== | ||
| + | |||
| + | Au fost realizate următoarele optimizări: | ||
| + | |||
| + | * utilizarea funcției millis() în locul delay-urilor lungi | ||
| + | * reutilizarea funcțiilor pentru LED-uri și sunete | ||
| + | * organizarea codului în funcții modulare | ||
| + | * minimizarea utilizării memoriei RAM | ||
| + | * gruparea logicii în state machine pentru claritate și eficiență | ||
| + | |||
| + | ===== Demo video ===== | ||
| + | [[https://youtu.be/SMri4l_4zwc]] | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | Proiectul demonstreaza utilizarea eficienta a perifericelor unui microcontroler pentru realizarea unui sistem interactiv. | + | Proiectul demonstrează integrarea eficientă a mai multor periferice hardware și concepte software într-un sistem embedded interactiv. |
| + | |||
| + | În cadrul proiectului au fost utilizate noțiuni importante precum: | ||
| + | * control GPIO | ||
| + | * comunicare I2C | ||
| + | * debounce software | ||
| + | * gestionarea timpului | ||
| + | * state machine | ||
| + | * feedback audio-vizual | ||
| + | |||
| + | Rezultatul final este un joc multiplayer complet funcțional și extensibil. | ||
| + | |||
| + | ===== Resurse ===== | ||
| + | * datasheet ATmega328P | ||
| + | * documentație SSD1306 | ||
| + | * biblioteci Adafruit | ||
| - | S-au aplicat concepte precum lucrul cu GPIO, debounce pentru butoane, generarea de semnale audio si implementarea unei logici de tip state machine. | ||