This shows you the differences between two versions of the page.
|
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 și 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 și acasă, îmbinând distracția cu educația. |
| - | * care a fost ideea de la care aţi pornit | + | |
| - | * de ce credeţi că este util pentru alţii şi 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 |
| + | * Breadboard, Fire, 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> | ||