This shows you the differences between two versions of the page.
|
pm:prj2025:vstoica:cristina.szabo [2025/05/18 21:45] cristina.szabo |
pm:prj2025:vstoica:cristina.szabo [2025/05/30 02:23] (current) cristina.szabo [Concluzii] |
||
|---|---|---|---|
| Line 40: | Line 40: | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| BOM: | BOM: | ||
| + | |||
| ^ Componenta ^ Link-uri ^ | ^ Componenta ^ Link-uri ^ | ||
| - | | Arduino Uno | [[http://example.com|Link]] | | + | | Arduino Uno | [[https://www.optimusdigital.ro/en/avr-boards/1685-development-board-compatible-with-arduino-uno-r3-atmega328p-atmega16u2.html?search_query=arduino+uno&results=116|Link]] | |
| - | | Breadboard 830 puncte MB-102 | - | | + | | Breadboard 830 puncte MB-102 | [[https://sigmanortec.ro/Breadboard-830-puncte-MB-102-p125923983|Link]] | |
| - | | Modul LED semafor, 56mm, 3.3-5V | R → D3, Y → D4, G → D5, GND → GND | | + | | Modul LED semafor, 56mm, 3.3-5V | [[https://sigmanortec.ro/modul-led-semafor-56mm-33-5v|Link]] | |
| - | | Buton Mini 6x6x5, 4 pini | Un pin → D13, celalalt → GND | | + | | Buton Mini 6x6x5, 4 pini | [[https://sigmanortec.ro/buton-mini-6x6x5-4-pini|Link]] | |
| - | | Fotorezistor (5537) 5mm | Un capat → 5V, celalalt → A0 si rezistenta de 10k → GND| | + | | Fotorezistor (5537) 5mm | [[https://sigmanortec.ro/Fotorezistor-5537-5mm-p160378607|Link]]| |
| - | | Modul joystick doua axe XY | VRx → A1, VRy → A2, VCC → 5V, GND → GND, SW → D7| | + | | Modul joystick doua axe XY | [[https://sigmanortec.ro/Modul-joystick-doua-axe-XY-p126458908|Link]]| |
| | Display OLED 0.96" I2C IIC Albastru |[[https://sigmanortec.ro/Display-OLED-0-96-I2C-IIC-Albastru-p135055705|Link]]| | | Display OLED 0.96" I2C IIC Albastru |[[https://sigmanortec.ro/Display-OLED-0-96-I2C-IIC-Albastru-p135055705|Link]]| | ||
| - | | Fire de conexiune | Leaga pinii Arduino cu componentele pe breadboard| | + | | 2 x Fire de conexiune | [[https://www.optimusdigital.ro/en/wires-with-connectors/885-wires-male-male-10p-10cm.html?search_query=wire&results=1439|Link]]| |
| Descriere pini folositi: | Descriere pini folositi: | ||
| + | |||
| ^ Componenta ^ Pini Arduino folositi ^ Functie^ | ^ Componenta ^ Pini Arduino folositi ^ Functie^ | ||
| | **Joystick KY-023 ** | VRx → A1, VRy → A2 (nefolosit) | Axa X - control prin semnal analogic | | | **Joystick KY-023 ** | VRx → A1, VRy → A2 (nefolosit) | Axa X - control prin semnal analogic | | ||
| - | | | SW → D7 | Buton apasare joystick | | + | | | SW → D6 | Buton apasare joystick | |
| | | VCC → 5V | Alimentare | | | | VCC → 5V | Alimentare | | ||
| | | GND → GND | Masa | | | | GND → GND | Masa | | ||
| Line 60: | Line 62: | ||
| | | VCC → 5V | Alimentare | | | | VCC → 5V | Alimentare | | ||
| | | GND → GND | Masa | | | | GND → GND | Masa | | ||
| - | | **Buton 6x6x5 mm** | Un pin → D13 | Detecteaza intrerupere - pauza | | + | | **Buton 6x6x5 mm** | Un pin → D7 | Detecteaza intrerupere - pauza | |
| | | Celalalt pin → GND | Inchide circuitul | | | | Celalalt pin → GND | Inchide circuitul | | ||
| | **Modul semafor LED ** | Rosu → D3, Galben → D4, Verde → D5 | Indica vietile ramase | | | **Modul semafor LED ** | Rosu → D3, Galben → D4, Verde → D5 | Indica vietile ramase | | ||
| Line 69: | Line 71: | ||
| Implementare hardware: | Implementare hardware: | ||
| - | {{:pm:prj2025:vstoica:hardware.jpg?300|}} | + | {{:pm:prj2025:vstoica:bbg1.jpeg?300|}} |
| + | {{:pm:prj2025:vstoica:bbg2.jpeg?300|}} | ||
| Schema electrica: | Schema electrica: | ||
| - | {{:pm:prj2025:vstoica:schematic_brick_breaker.png?600|}} | + | {{:pm:prj2025:vstoica:bbg.png?600|}} |
| - | {{:pm:prj2025:vstoica:cirkit_brick.png?600|}} | + | |
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | == Surse si functii implementate == | ||
| - | <note tip> | + | | Functie | Descriere | |
| - | Descrierea codului aplicaţiei (firmware): | + | | setup() | Initializare pini, afisaj, intreruperi, lumina ambientala, stare joc | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | | loop() | Executa logica jocului: miscare, coliziuni, afisare, verificare butoane, vieti si stare finala | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | | reset() | Reseteaza complet jocul, afiseaza 3-2-1 cu delay hardware (prin startWaitTimer()) | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | | resetBall() | Pune mingea deasupra paletei si ii seteaza directia initiala | |
| - | * (etapa 3) surse şi funcţii implementate | + | | drawGame() | Deseneaza mingea, paleta si caramizile in functie de luminozitate | |
| - | </note> | + | | final() | Afiseaza pe ecran starea finala: “Winner” sau “Loser” si asteapta resetarea | |
| + | | updateLeds() | Aprinde LED-urile in functie de numarul de vieti | | ||
| + | | analogReadReg() | Citeste valorile analogice direct din registri ADC pentru viteza mai mare | | ||
| + | | startWaitTimer() | Configureaza Timer1 pentru o intarziere de ~1 secunda, neblocanta | | ||
| + | | ISR(TIMER1_COMPA_vect) | Semnalizeaza cand timpul setat in timer s-a scurs | | ||
| + | | ISR(PCINT2_vect) | Detecteaza apasarea butoanelor de pauza si reset, cu debounce minimal | | ||
| - | ===== Rezultate Obţinute ===== | + | == Stadiul actual al implementarii software == |
| + | Proiectul este complet functional. Jocul poate fi jucat cu minge si paleta, caramizile se distrug corect, afisajul OLED actualizeaza toate informatiile, iar luminile LED indica numarul de vieti ramase. Sunt gestionate corect pauza, resetarea jocului si detectarea starii finale (castig sau pierdere). | ||
| - | <note tip> | + | == Alegerea bibliotecilor == |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Am folosit bibliotecile: |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | - `Wire.h` pentru comunicatia I2C cu ecranul OLED. |
| - | ===== Download ===== | + | - `Adafruit_GFX.h` si `Adafruit_SSD1306.h` pentru a putea desena si scrie pe ecran. |
| - | <note warning> | ||
| - | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | ||
| - | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | == Element de noutate == |
| - | </note> | + | Proiectul include un mod automat de detectare a luminozitatii ambientale folosind un senzor LDR. In functie de lumina detectata, jocul isi inverseaza culorile pentru a fi vizibil si in intuneric, si in lumina puternica. Jocul foloseste un timer hardware (Timer1) pentru intarzieri precise fara a bloca logica programului. Jocul poate fi pus pe pauza si resetat prin intreruperi generate de butoane. |
| - | ===== Jurnal ===== | + | == Justificarea utilizarii functionalitatilor din laborator == |
| + | 1. Intreruperi externe pentru butoanele de pauza si reset. | ||
| - | <note tip> | + | 2. Timer hardware (Timer1) pentru realizarea unui delay neblocant inainte de startul jocului si la reseturi. |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | |
| - | ===== Bibliografie/Resurse ===== | + | 3. Acces direct la registrii ADC si I/O pentru eficienta sporita si control total. |
| + | |||
| + | 4. Afisaj grafic OLED controlat prin I2C, ca aplicatie practica a interfetelor seriale studiate. | ||
| + | |||
| + | == Structura si interactiunea dintre functionalitati == | ||
| + | |||
| + | - La pornire, jocul verifica lumina ambientala si seteaza modul de afisare (light/dark). | ||
| + | |||
| + | - Se initializeaza paleta, mingea si caramizile. | ||
| + | |||
| + | - Joystick-ul controleaza paleta, iar mingea se misca automat, interactiunea fiind desenata in timp real pe ecran. | ||
| + | |||
| + | - Coliziunile cu caramizile sunt detectate si tratate, iar vietile sunt afisate cu LED-uri. | ||
| + | |||
| + | - Se foloseste un timer hardware pentru intarzieri fara a bloca restul programului. | ||
| + | |||
| + | - Jocul poate fi pus pe pauza sau resetat oricand prin intreruperi externe. | ||
| + | |||
| + | - Starea de castig sau pierdere este afisata pe ecran si permite reluarea jocului prin buton. | ||
| + | |||
| + | == Calibrarea senzorilor == | ||
| + | |||
| + | Senzorul LDR a fost calibrat folosind citiri brute din `analogReadReg()` la pornirea sistemului. Valoarea de prag (`threshold = 100`) a fost stabilita prin testare practica in mai multe conditii de lumina. Citirea se face cu acces direct la registrii ADC pentru eficienta si viteza. | ||
| + | |||
| + | == Optimizari si mediu de dezvoltare == | ||
| + | Folosirea ISR si a timerului hardware pentru delay-uri precise, fara blocaj si accesul direct la registri (`PORTD`, `ADMUX`, etc.) pentru viteza mai mare decat functiile standard Arduino. Mediul de dezvoltare este PlatformIO, codul fiind scris in C++, combinat cu cateva functii din bibliotecile folosite. | ||
| + | |||
| + | ===== Rezultate Obţinute ===== | ||
| + | Am atasat o arhiva cu codul meu si un filmulet de prezentare a proiectului. | ||
| + | |||
| + | {{:pm:prj2025:vstoica:brick_breaker_game.zip|}} | ||
| + | |||
| + | ===== Concluzii ===== | ||
| + | Am realizat un joc de tip breakout pe un ecran OLED folosind Arduino. Am folosit un fotorezistor pentru a detecta luminozitatea ambientala, astfel incat afisajul sa se adapteze automat la conditiile de iluminare, fie in modul intunecat, fie in modul deschis. Controlul paletei se face prin joystick, iar butoanele imi permit sa pun jocul pe pauza sau sa il resetez. Logica jocului include detectarea coliziunilor mingii cu zidurile, paleta si caramizile, iar eu urmaresc reducerea vietilor si determinarea castigatorului sau invinsului. Am folosit intreruperi pentru butoane si timer pentru delay-uri, ceea ce imbunatateste functionalitatea si raspunsul sistemului. Prin acest proiect am vrut sa creez o experienta interactiva si distractiva. | ||
| - | <note> | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
| - | </note> | ||
| <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||