Differences

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

Link to this comparison view

pm:prj2026:atoader:bogdan.raucescu [2026/05/14 17:53]
bogdan.raucescu
pm:prj2026:atoader:bogdan.raucescu [2026/05/18 19:03] (current)
bogdan.raucescu
Line 21: Line 21:
   * Daca utilizatorul atinge tinta conductoare (ex: banda de cupru, moneda sau folie) inainte ca timpul sa expire, microcontrolerul detecteaza schimbarea de capacitate, inregistreaza lovitura, creste scorul si reda un sunet de succes.   * Daca utilizatorul atinge tinta conductoare (ex: banda de cupru, moneda sau folie) inainte ca timpul sa expire, microcontrolerul detecteaza schimbarea de capacitate, inregistreaza lovitura, creste scorul si reda un sunet de succes.
   * Pe masura ce scorul creste, timpul permis pentru a lovi tinta scade, crescand astfel dificultatea.   * Pe masura ce scorul creste, timpul permis pentru a lovi tinta scade, crescand astfel dificultatea.
-  * Daca timpul expira sau utilizatorul loveste tinta gresita, jocul se termina cu un sunet de "Game Over", iar scorul este afisat pe ecranul LCD.+  * Daca timpul expira sau utilizatorul loveste tinta gresita, jocul se termina cu un sunet de "Game Over", iar scorul este afisat pe ecranul LCD, in timp ce statisticile sunt trimise pe terminalul serial.
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +{{:​pm:​prj2026:​atoader:​schema_bloc_raucesu.png?​300|}}
  
 **Lista de piese (BOM):** **Lista de piese (BOM):**
-  * 1 x Microcontroler ATmega328P (format placuta Arduino Uno)+  * 1 x Microcontroler ATmega328P (format placuta Arduino Uno / Xplained Mini)
   * 6 x Rezistente 10 MΩ (Cruciale pentru constanta de timp RC a senzorilor capacitivi)   * 6 x Rezistente 10 MΩ (Cruciale pentru constanta de timp RC a senzorilor capacitivi)
   * 6 x Rezistente 330 Ω (Pentru limitarea curentului prin LED-uri)   * 6 x Rezistente 330 Ω (Pentru limitarea curentului prin LED-uri)
Line 34: Line 36:
   * 6 x Tinte conductoare (Banda de cupru / Folie de aluminiu)   * 6 x Tinte conductoare (Banda de cupru / Folie de aluminiu)
   * Breadboard si Fire Jumper (Mama-Tata si Tata-Tata)   * Breadboard si Fire Jumper (Mama-Tata si Tata-Tata)
 +
 +{{:​pm:​prj2026:​atoader:​schema_raucescu.png?​300|}}
  
 **Conexiuni si maparea pinilor:** **Conexiuni si maparea pinilor:**
Line 40: Line 44:
   * **Feedback Audio:** Buzzer-ul pasiv este conectat la pinul ''​PC3''​.   * **Feedback Audio:** Buzzer-ul pasiv este conectat la pinul ''​PC3''​.
   * **Afisaj LCD:** Ecranul I2C foloseste pinii hardware TWI standard: SDA (''​PC4''​) si SCL (''​PC5''​).   * **Afisaj LCD:** Ecranul I2C foloseste pinii hardware TWI standard: SDA (''​PC4''​) si SCL (''​PC5''​).
 +  * **Interfata Debugging (USART):** Pinii hardware TX/RX (comunicarea seriala via USB) sunt utilizati pentru a transmite asincron date de monitorizare catre PC.
 +
 +https://​youtube.com/​shorts/​x_dYqr80P_w?​feature=share
  
 ===== Software Design ===== ===== Software Design =====
  
-**Mediu de dezvoltare:​** ​+**Mediu de dezvoltare:​**
 Firmware-ul a fost dezvoltat folosind Microchip Studio (Atmel Studio) / AVR-GCC, scriind cod exclusiv in C si manipuland direct registrii hardware. Firmware-ul a fost dezvoltat folosind Microchip Studio (Atmel Studio) / AVR-GCC, scriind cod exclusiv in C si manipuland direct registrii hardware.
  
Line 54: Line 61:
   * **Laboratorul 1 (GPIO - Intrare/​Iesire):​** A reprezentat baza intregului hardware. L-am aplicat pentru configurarea pinilor ca Iesire (aprinderea LED-urilor de pe Portul D, trimiterea semnalului catre Buzzer) si ca Intrare (citirea starii pinilor de RECEIVE pentru senzorii capacitivi). Am folosit intensiv manipularea la nivel de bit a registrilor DDR, PORT si PIN.   * **Laboratorul 1 (GPIO - Intrare/​Iesire):​** A reprezentat baza intregului hardware. L-am aplicat pentru configurarea pinilor ca Iesire (aprinderea LED-urilor de pe Portul D, trimiterea semnalului catre Buzzer) si ca Intrare (citirea starii pinilor de RECEIVE pentru senzorii capacitivi). Am folosit intensiv manipularea la nivel de bit a registrilor DDR, PORT si PIN.
   * **Laboratorul 3 (Timere si Intarzieri):​** Conceptele de temporizare au fost vitale pentru implementarea mecanismului de baza al jocului (masurarea timpului de raspuns al jucatorului,​ scaderea acestui timeout odata cu cresterea dificultatii,​ pauzele dintre runde). De asemenea, logica de timere a fost folosita pentru a genera frecventele necesare buzzer-ului pasiv (tonuri scurte si ascutite pentru succes, tonuri lungi si grave pentru Game Over).   * **Laboratorul 3 (Timere si Intarzieri):​** Conceptele de temporizare au fost vitale pentru implementarea mecanismului de baza al jocului (masurarea timpului de raspuns al jucatorului,​ scaderea acestui timeout odata cu cresterea dificultatii,​ pauzele dintre runde). De asemenea, logica de timere a fost folosita pentru a genera frecventele necesare buzzer-ului pasiv (tonuri scurte si ascutite pentru succes, tonuri lungi si grave pentru Game Over).
 +  * **Laboratorul 4 (Comunicatii Seriale - USART):** Desi feedback-ul vizual principal este gestionat prin ecranul LCD, am integrat perifericul USART pentru transmiterea asincrona de date catre PC, la un baud rate de 9600 bps. Acesta a fost utilizat ca instrument de depanare (debugging),​ trimitand in timp real catre un terminal serial ID-ul tintei active generat si scorul curent al jucatorului,​ validand astfel corectitudinea datelor procesate.
   * **Laboratorul 6 (Interfata I2C / TWI):** Acest laborator a fost aplicat direct pentru conectarea ecranului LCD 16x2. Folosind protocolul I2C am reusit sa afisez scorul, mesajele de start si starea jocului, utilizand doar 2 pini de date (SDA si SCL), economisind astfel pini pretiosi pe microcontroler.   * **Laboratorul 6 (Interfata I2C / TWI):** Acest laborator a fost aplicat direct pentru conectarea ecranului LCD 16x2. Folosind protocolul I2C am reusit sa afisez scorul, mesajele de start si starea jocului, utilizand doar 2 pini de date (SDA si SCL), economisind astfel pini pretiosi pe microcontroler.
  
Line 59: Line 67:
   * **Algoritmul senzorului capacitiv:​** Logica de baza presupune setarea pinului de ''​SEND''​ pe HIGH si numararea iteratiilor/​ciclurilor necesare pentru ca pinul de ''​RECEIVE''​ sa ajunga tot in starea HIGH. Din cauza rezistentei mari de 10 MΩ, corpul uman actioneaza ca un condensator cand atinge tinta, incetinind cresterea tensiunii. Daca numarul de cicluri depaseste o valoare calibrata (''​THRESHOLD''​),​ este inregistrata o atingere valida.   * **Algoritmul senzorului capacitiv:​** Logica de baza presupune setarea pinului de ''​SEND''​ pe HIGH si numararea iteratiilor/​ciclurilor necesare pentru ca pinul de ''​RECEIVE''​ sa ajunga tot in starea HIGH. Din cauza rezistentei mari de 10 MΩ, corpul uman actioneaza ca un condensator cand atinge tinta, incetinind cresterea tensiunii. Daca numarul de cicluri depaseste o valoare calibrata (''​THRESHOLD''​),​ este inregistrata o atingere valida.
   * **Masina de stare a jocului (State Machine):** Jocul opereaza intr-o bucla infinita cu stari distincte: Asteptare Start -> Generare Tinta Random -> Asteptare Input (cu Timeout) -> Evaluare (Lovit/​Ratat) -> Actualizare Dificultate.   * **Masina de stare a jocului (State Machine):** Jocul opereaza intr-o bucla infinita cu stari distincte: Asteptare Start -> Generare Tinta Random -> Asteptare Input (cu Timeout) -> Evaluare (Lovit/​Ratat) -> Actualizare Dificultate.
-  * **Dificultate Dinamica:** Timeout-ul initial este setat la 2000ms. La fiecare lovitura reusita, timpul limita scade, necesitand reflexe din ce in ce mai rapide din partea jucatorului.+  * **Dificultate Dinamica:** Timeout-ul initial este setat la 4000ms. La fiecare lovitura reusita, timpul limita scade, necesitand reflexe din ce in ce mai rapide din partea jucatorului.
   * **Randomizare:​** Pentru a asigura ca tintele sunt cu adevarat aleatoare la fiecare joc, functia ''​srand()''​ este initializata folosind o variabila ce numara iteratiile scurse pana cand utilizatorul apasa butonul de start.   * **Randomizare:​** Pentru a asigura ca tintele sunt cu adevarat aleatoare la fiecare joc, functia ''​srand()''​ este initializata folosind o variabila ce numara iteratiile scurse pana cand utilizatorul apasa butonul de start.
 +  * **Transmisie Date (USART):** Rutina de trimitere a caracterelor ruleaza in background la schimbarea starii jocului, incarcand datele in registrul ''​UDR0''​ fara a bloca bucla principala de gameplay.
  
 ===== Rezultate Obtinute ===== ===== Rezultate Obtinute =====
Line 68: Line 77:
   * LED-urile si Buzzer-ul ofera un feedback instantaneu,​ fara intarzieri.   * LED-urile si Buzzer-ul ofera un feedback instantaneu,​ fara intarzieri.
   * Scalarea dificultatii functioneaza perfect, facand jocul progresiv mai greu si testand eficient viteza de reactie a utilizatorului.   * Scalarea dificultatii functioneaza perfect, facand jocul progresiv mai greu si testand eficient viteza de reactie a utilizatorului.
 +  * Ecranul I2C ofera claritate in urmarirea scorului, in timp ce consola seriala asigura un mediu robust de testare.
  
 ===== Concluzii ===== ===== Concluzii =====
  
-Dezvoltarea acestui proiect a reprezentat o experienta practica excelenta in gestionarea comportamentelor de tip analogic intr-un sistem complet digital. Principala provocare a fost calibrarea pragului capacitiv (threshold),​ deoarece valorile citite fluctuau usor in functie de grosimea firelor si de suprafata de contact a tintelor. Per total, proiectul demonstreaza ca se pot construi interfete interactive robuste folosind un numar minim de componente si algoritmi inteligenti de cronometrare.+Dezvoltarea acestui proiect a reprezentat o experienta practica excelenta in gestionarea comportamentelor de tip analogic intr-un sistem complet digital. Principala provocare a fost calibrarea pragului capacitiv (threshold),​ deoarece valorile citite fluctuau usor in functie de grosimea firelor si de suprafata de contact a tintelor. Per total, proiectul demonstreaza ca se pot construi interfete interactive robuste folosind un numar minim de componente si algoritmi inteligenti de temporizare si comunicare seriala.
  
 ===== Bibliografie / Resurse ===== ===== Bibliografie / Resurse =====
  
-  * [1] Fisiere de laborator PM pentru conectarea unui LCD prin interfata I2C.+  * [1] Fisiere de laborator PM pentru conectarea unui LCD prin interfata I2C si comunicatie USART.
   * [2] Teoria senzorilor capacitivi: Documentatia Arduino CapSense Library - http://​playground.arduino.cc/​Main/​CapacitiveSensor   * [2] Teoria senzorilor capacitivi: Documentatia Arduino CapSense Library - http://​playground.arduino.cc/​Main/​CapacitiveSensor
   * [3] Datasheet ATmega328P (pentru maparea pinilor, configurarea registrilor si porturilor).   * [3] Datasheet ATmega328P (pentru maparea pinilor, configurarea registrilor si porturilor).
pm/prj2026/atoader/bogdan.raucescu.1778770386.txt.gz · Last modified: 2026/05/14 17:53 by bogdan.raucescu
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