Trivia Game

Introducere

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.

  • Scopul: Oferă o modalitate distractivă și educativă de a învăța și testa cunoștințele.
  • Idea de bază: Crearea unei modalitate de învățare care integrează tehnologia hardware în educație.
  • Utilitate: Util pentru învățare în medii educaționale, evenimente și acasă, îmbinând distracția cu educația.

Descriere generală

Schema bloc:

Hardware Design

Componente hardware:

  • Arduino UNO R3
  • LCD 16×2 I2C - afisarea întrebărilor
  • 3 butoane - a se răspunde la întrebări de cei 3 jucători
  • Buzzer - a anunța câștigătorul (la 5 puncte acumulate de un jucător)
  • Led-uri - a evidenția cine va răspunde
  • Telecomandă + senzor IR - a trece prin întrebări
  • Breadboard, Fire, Rezistente

Schema electrica

Conexiuni componente hardware

  • Afișaje LCD:
    • lcdLarge (LCD 20×4):
      • 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 16×2):
      • 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

Hardware 22.05.2024

Software Design

Mediu de dezvoltare: Arduino IDE.

Prezentul proiect implementează un joc de trivia cu 3 jucători, utilizând următoarele biblioteci:

  1. Wire.h: Utilizată pentru comunicarea I2C cu afișajele LCD.
  2. LiquidCrystal_I2C.h: Bibliotecă pentru controlul afișajelor LCD I2C.
  3. 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.

Rezultate Obţinute

  • Funcționalitate completă a jocului
    • Implementarea cu succes a întregului joc, de la afișarea întrebărilor și gestionarea răspunsurilor, la actualizarea punctajelor și detectarea câștigătorului.
    • 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

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.

Download

Jurnal

  • 20 aprilie: alegerea temei
  • 22 aprilie: research piese
  • 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

pm/prj2024/alucaci/alexandra.girnita.txt · Last modified: 2024/05/23 01:23 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