Differences

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

Link to this comparison view

pm:prj2024:alucaci:alexandra.girnita [2024/05/04 21:44]
alexandra.girnita
pm:prj2024:alucaci:alexandra.girnita [2024/05/23 01:23] (current)
alexandra.girnita
Line 1: Line 1:
-====== ​Nume proiect ​======+====== ​Trivia Game ======
 ===== Introducere ===== ===== Introducere =====
  
-<note tip> +Proiectul constă într-un **joc de trivia interactiv** care testează cunoștințele jucătorilor cu **întrebări single-choice.** Jocul suportă până la **trei jucători simultan**, fiecare dintre aceștia având un **led asociat** pentru a indica cine va răspunde **primul la întrebări**. La final se va anunța câștigătorul printr-un sunet specific. 
-Prezentarea pe scurt a proiectului vostru: +  * Scopul: Oferă o modalitate **distractivă** și **educativă** ​de a învăța ștesta cunoștințele. 
-  ​ce face +  * Idea de bază: Crearea unei modalitate de învățare care integrează **tehnologia hardware în educație**. 
-  ​* care este scopul lui +  * Utilitate: Util pentru ​învățare în medii educaționale,​ evenimente șacasă, îmbinând distracția cu educația. ​ 
-  * care a fost ideea de la care aţpornit +
-  * de ce credeţi că este util pentru ​alţii şpentru voi +
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +**Schema ​bloc**: 
-O schemă ​bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.+{{ :​pm:​prj2024:​alucaci:​schema_bloc_trivia.png?700 |}}
  
-Exemplu de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html 
-</​note>​ 
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +**Componente ​hardware**
-Aici puneţi tot ce ţine de hardware ​design+  * Arduino UNO R3  
-  * listă de piese +  * LCD 16x2 I2C - afisarea întrebărilor 
-  * scheme electrice ​(se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/​electronic-atmega16-mmc-schematic.png+  * 3 butoane - a se răspunde la întrebări de cei 3 jucători 
-  * diagrame ​de semnal ​ +  * Buzzer - a anunța câștigătorul ​(la 5 puncte acumulate ​de un jucător) 
-  * rezultatele simulării +  * Led-uri - a evidenția cine va răspunde 
-</​note>​+  * Telecomandă + senzor IR - a trece prin întrebări 
 +  * BreadboardFire, Rezistente  
 + 
 +{{ :​pm:​prj2024:​alucaci:​pm_proiect_schema.png?700 |}} 
 + 
 + 
 +**Schema electrica** 
 +{{ :​pm:​prj2024:​alucaci:schema_electrica_trivia.png?700 |}} 
 + 
 +**Conexiuni componente hardware** 
 +  * Afișaje LCD: 
 +      * lcdLarge (LCD 20x4): 
 +        * Adresă I2C: 0x26 
 +        * Conexiuni:​ 
 +          * SDA (Serial Data) conectat la pinul SDA al microcontrolerului 
 +          * SCL (Serial Clock) ​conectat la pinul SCL al microcontrolerului 
 +          * VCC alimentat cu tensiunea de alimentare 
 +          * GND - legat la masă 
 +      * lcdSmall (LCD 16x2)
 +        * Adresă I2C: 0x27 
 +        * Conexiuni:​ 
 +          * SDA (Serial Data) - conectat la pinul SDA al microcontrolerului 
 +          * SCL (Serial Clock) - conectat la pinul SCL al microcontrolerului 
 +          * VCC - alimentat cu tensiunea de alimentare 
 +          * GND - legat la masă 
 + 
 +  * Receptorul IR: 
 +        * Pin utilizat: RECV_PIN = 8 
 +        * Conexiuni:​ 
 +          * Semnalul receptorului IR - conectat la pinul 8 al microcontrolerului 
 +          * VCC - alimentat cu tensiunea ​de alimentare 
 +          * GND - legat la masă 
 +  * LED-uri: 
 +      * Pini utilizați:​ 
 +        * ledRed = 1 
 +        * ledBlue = 2 
 +        * ledYellow = 3 
 +      * Conexiuni:​ 
 +        * Fiecare LED este conectat la câte un pin digital al microcontrolerului 
 +        * Anozi LED-urilor sunt conectați la pinii respectivi 
 +        * Catozi LED-urilor sunt conectați la masă prin rezistoare de limitare a curentului 
 + 
 +  * Butoane jucătorilor:​ 
 +      * Pini utilizați:​ 
 +        * playerButtonRed = 4 
 +        * playerButtonBlue = 5 
 +        * playerButtonYellow = 6 
 +      * Conexiuni:​ 
 +        * Fiecare buton este conectat la câte un pin digital al microcontrolerului 
 +        * Butoanele sunt configurate pentru a genera întreruperi la apăsare (FALLING) 
 +        * Butoanele sunt conectate la VCC prin rezistoare de pull-up 
 + 
 +  * Butoane de răspuns: 
 +      * Pini utilizați:​ 
 +        * buttonA = 10 
 +        * buttonB = 11 
 +        * buttonC = 12 
 +        * buttonD = 13 
 +      * Conexiuni:​ 
 +        * Fiecare buton este conectat la câte un pin digital al microcontrolerului 
 +        * Butoanele sunt conectate la VCC prin rezistoare de pull-up 
 + 
 +  * Buzzer: 
 +      * Pin utilizat: buzzer = 9 
 +      * Conexiuni:​ 
 +        * Pinul buzzerului este conectat la un pin digital al microcontrolerului 
 +        * Buzzerul este alimentat direct de la microcontroler 
 + 
 +**Componente conectate** 
 + 
 +Hardware 16.05.2024 
 +{{ :​pm:​prj2024:​alucaci:​comp_trivia.jpg?​700 |}} 
 + 
 +Hardware 22.05.2024 
 +{{ :​pm:​prj2024:​alucaci:​hard_final_trivia.jpg?​700 |}} 
  
 ===== Software Design ===== ===== Software Design =====
  
 +Mediu de dezvoltare: Arduino IDE. 
 +
 +Prezentul proiect implementează un joc de trivia cu 3 jucători, utilizând următoarele biblioteci:
 +  - Wire.h: Utilizată pentru comunicarea I2C cu afișajele LCD.
 +  - LiquidCrystal_I2C.h:​ Bibliotecă pentru controlul afișajelor LCD I2C.
 +  - IRremote.h: Utilizată pentru detecția și decodificarea semnalelor infraroșii de la telecomandă.
 +
 +Elementul de noutate al acestui proiect este integrarea unei funcționalități de răspuns la întrebări cu un mecanism de dezactivare temporară a butoanelor jucătorilor. Această caracteristică aduce o dinamică mai interesantă în cadrul jocului, impunând jucătorilor să fie atenți la momentul potrivit pentru a răspunde.
 +
 +Funcționalitățile din laborator, precum utilizarea LCD-urilor, a senzorilor infraroșii și a LED-urilor, sunt integrate în acest proiect pentru a crea o experiență interactivă și atractiv vizual pentru jucători.
 +
 +Scheletul proiectului constă din următoarele funcționalități principale:
 +  * Inițializarea și configurarea afișajelor LCD, receptorului IR și a pinilor de intrare/​ieșire.
 +  * Definirea întrebărilor,​ variantelor de răspuns și a răspunsurilor corecte.
 +  * Afișarea întrebărilor și a variantelor de răspuns pe ecranul LCD mare.
 +  * Gestionarea apăsării butoanelor jucătorilor și a butoanelor de răspuns.
 +  * Actualizarea punctajelor jucătorilor și afișarea acestora pe ecranul LCD mic.
 +  * Detectarea și anunțarea câștigătorului,​ urmată de resetarea jocului.
 +  * Optimizări,​ precum dezactivarea temporară a butoanelor jucătorilor pentru a evita apăsări multiple.
 +
 +Funcționalitățile proiectului au fost validate prin testare manuală, verificând comportamentul în diferite scenarii de joc, cum ar fi răspunsuri corecte/​incorecte,​ atingerea scorului de câștig, resetarea jocului etc.
 +
 +Optimizările realizate în cadrul acestui proiect sunt legate de dezactivarea temporară a butoanelor jucătorilor,​ pentru a evita apăsări multiple și a oferi o experiență de joc mai echitabilă. Această optimizare a fost implementată pentru a îmbunătăți interacțiunea cu jocul și a crește implicarea jucătorilor.
 +
 +Aplicarea cunoștințelor dobândite în cadrul laboratoarelor se poate observa prin intermediul unor elemente cheie integrate precum:
 +  * Întreruperi:​
 +      * Utilizarea întreruperilor asigură o reacție imediată a jocului la acțiunile jucătorilor,​ îmbunătățind semnificativ experiența de joc și reducând întârzierile.
 +      * Implementarea funcțiilor de gestionare a întreruperilor (handlePlayerButtonRed,​ handlePlayerButtonBlue,​ handlePlayerButtonYellow) demonstrează capacitatea de a configura și utiliza eficient mecanismele de întrerupere.
 +  * I2C:
 +      * Utilizarea I2C permite o conexiune eficientă și scalabilă între microcontroler și afișaje, fără a necesita un număr mare de pini.
 +  * Comunicație IR:
 +      *  Implementarea comunicației IR cu telecomanda adaugă o interacțiune intuitiva și familiară pentru jucători, îmbogățind semnificativ experiența de joc.
 +
 +
 +Funcțiilor principale din codul proiectului de trivia game:
 +  * setup():
 +     * Inițializarea și configurarea afișajelor LCD (lcdLarge și lcdSmall).
 +     * Configurarea modului pinilor pentru LED-uri, buzzer și butoane.
 +     * Inițializarea receptorului IR.
 +     * Pornirea jocului și afișarea primei întrebări.
 +
 +  * displayQuestionAndAnswers(int questionIndex):​
 +      * Afișează întrebarea curentă și variantele de răspuns pe ecranul LCD mare.
 +
 +  * checkAnswer(char selectedAnswer):​
 +      * Verifică dacă răspunsul selectat este corect.
 +      * Actualizează punctajul jucătorului și afișează rezultatul.
 +      * Trece la următoarea întrebare.
 +
 +  * updatePoints():​
 +      * Actualizează punctajul jucătorului corespunzător.
 +      * Aprinde LED-ul jucătorului timp de 3 secunde.
 +      * Afișează actualizarea punctajului pe ecranul LCD mic.
 +      * Verifică dacă un jucător a câștigat.
 +
 +  * checkWinner():​
 +      * Verifică dacă un jucător a atins 3 puncte (scorul de câștig).
 +      * Declanșează funcția announceWinner() dacă un jucător a câștigat.
 +
 +  * announceWinner():​
 +      * Afișează mesajul de câștig pe ecranul LCD mic și mare.
 +      * Redă o melodie pentru a anunța câștigătorul.
 +      * Apelează funcția resetGame() pentru a pregăti o nouă rundă.
 +
 +  * resetGame():​
 +      * Resetează punctajele jucătorilor la 0.
 +      * Afișează o numărătoare inversă pe ecranul LCD mare pentru a marca începutul unei noi runde.
 +      * Resetează variabilele și afișează prima întrebare.
 +
 +  * displayScores():​
 +      * Actualizează afișarea punctajelor jucătorilor pe ecranul LCD mic.
 +
 +  * handlePlayerButtonRed(),​ handlePlayerButtonBlue(),​ handlePlayerButtonYellow():​
 +      * Funcții de gestionare a întreruperilor generate de apăsarea butoanelor jucătorilor.
 +      * Activează LED-ul corespunzător jucătorului,​ dezactivează temporar butoanele și actualizează punctajul.
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +  * Funcționalitate completă a jocului 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+      * Implementarea cu succes a întregului joc, de la afișarea întrebărilor și gestionarea răspunsurilor,​ la actualizarea punctajelor și detectarea câștigătorului
-</​note>​+      * Integrarea armonioasă a interacțiunii jucătorilor prin butoane și senzori IR. 
 +  * Experiență de joc îmbunătățită 
 +      * Feedbackul vizual (LED-uri) și audio (buzzer) oferă o experiență de joc mai imersivă și plăcută. 
 +  * Atingerea obiectivelor de învățare 
 +      * Dezvoltarea cunoștințelor de programare în mediul de dezvoltare Arduino IDE. 
 +      * Conexiunea între software și hardware 
 +      * Testare manuală și vizuală
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Proiectul a fost o experiență interesantă,​ dificilă în prima parte neavând o experiență anterioară,​ dar totul s-a concluzionat în acumularea de foarte multe cunoștinte în câteva săptămâni. ​
  
-<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**. +===== Download ===== 
-</​note>​+ 
 +Arhiva proiectului{{:pm:prj2024:alucaci:332cc_girnita_alexandra_claudia_triviagame.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +  * 20 aprilie: alegerea temei  
-Puteți avea și o secțiune de jurnal ​în care să poată urmări asistentul ​de proiect progresul proiectului. +  * 22 aprilie: research piese  
-</​note>​+  * 1 mai : realizare documentație + schema ​în tinkercad 
 +  * 6 mai : comandat piese 
 +  * 14 mai: finalizare hardware 
 +  * 21 mai: finalizare software + adăugare de câteva componente hardware ​ 
 +  * 23 mai: prezentare proiect
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * [[https://​github.com/​hibit-dev/​buzzer/​blob/​master/​src/​other/​nokia/​nokia.ino]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * [[https://​www.hibit.dev/​posts/​62/​playing-popular-songs-with-arduino-and-a-buzzer]] 
-</note>+  ​[[https://​www.circuitbasics.com/​arduino-ir-remote-receiver-tutorial/​]] 
 +  ​[[https://​circuitdigest.com/​article/​16x2-lcd-display-module-pinout-datasheet]] 
 +  * [[https://​www.instructables.com/​1602-2004-LCD-Adapter-Addressing/]]
  
 <​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>​
  
pm/prj2024/alucaci/alexandra.girnita.1714848257.txt.gz · Last modified: 2024/05/04 21:44 by alexandra.girnita
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