This shows you the differences between two versions of the page.
pm:prj2023:drtranca:whack_a_mole [2023/05/07 14:46] miruna.voinea [Descriere generală] |
pm:prj2023:drtranca:whack_a_mole [2023/05/29 10:23] (current) miruna.voinea [Software Design] |
||
---|---|---|---|
Line 6: | Line 6: | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul are la bază faimosul joc Whack a mole: există mai găuri pe unde cârtițele pot scote capul, iar scopul jucătorului este de a le împiedica să iasă din ascunzătoare prin lovituri cu un ciocănel. | + | Proiectul are la bază faimosul joc Whack a mole: există mai multe găuri pe unde cârtițele pot scoate capul, iar obiectivul jucătorului este de a le împiedica să iasă din ascunzătoare prin lovituri cu un ciocănel. |
*Scopul proiectului este de a realiza un joc distractiv prin care să îmi pun în aplicare cunoștințele dobândite la PM. | *Scopul proiectului este de a realiza un joc distractiv prin care să îmi pun în aplicare cunoștințele dobândite la PM. | ||
Line 14: | Line 14: | ||
*Consider că acest proiect este util deoarece le oferă jucătorilor șansa de a-și testa abilitățile în timp ce se distrează. | *Consider că acest proiect este util deoarece le oferă jucătorilor șansa de a-și testa abilitățile în timp ce se distrează. | ||
- | <note tip> | ||
- | Prezentarea pe scurt a proiectului vostru: | ||
- | * ce face | ||
- | * care este scopul lui | ||
- | * 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ă ===== | ||
Line 32: | Line 25: | ||
- | <note tip> | ||
- | 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ă. | ||
- | |||
- | Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html | ||
- | </note> | ||
===== Hardware Design ===== | ===== Hardware Design ===== | ||
+ | |||
+ | Listă de piese: | ||
+ | *Arduino Uno + Cablu | ||
+ | *Display LCD cu interfață I2C | ||
+ | *Butoane | ||
+ | *Led-uri | ||
+ | *Rezistori | ||
+ | *Breadboard | ||
+ | *Fire de legătură | ||
+ | |||
+ | {{ :pm:prj2023:drtranca:schema_electrica_pm_voinea_miruna.png?600 }} | ||
<note tip> | <note tip> | ||
Line 50: | Line 49: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Mediul de dezvoltare folosit: Arduino IDE | ||
+ | |||
+ | Schemă electrică realizată cu Tinkercad | ||
+ | |||
+ | Bibliotecă externă: LiquidCrystal_I2C.h | ||
+ | |||
+ | Flow joc: | ||
+ | * La început, jucătorul are 3 vieți. | ||
+ | * Se aprinde unul dintre cele 4 LED-uri reprezentând cârtițele. | ||
+ | * Jucătorul poate lovi o cârtiță apăsând pe butonul din dreptul LED-ului. | ||
+ | * Dacă LED-ul se stinge înainte ca jucătoul să apese pe buton sau se apasă un buton greșit, jucătorul pierde o viață. | ||
+ | * Jocul se termină atunci când numărul de vieți ajunge să fie 0. | ||
+ | |||
+ | Am folosit timer1 pentru a controla intervalul de timp în care un LED este aprins, astfel încât atunci când timpul expiră, jucătorul să piardă o viață. | ||
+ | |||
+ | Atunci când se apasă un buton, se declanșează o întrerupere, butonul fiind identificat cu ajutorul funcției checkBit. Se verifică dacă butonul corespunde ultimului LED aprins: în caz afirmativ, scorul este incrementat, iar în caz contrar, jucătorul pierde o viață. | ||
+ | |||
+ | Pentru a afișa scorul și numărul de vieți rămase, se folosește LCD-ul cu modul I2C. | ||
<note tip> | <note tip> | ||
Line 60: | Line 77: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Proiectul este complet funcțional. | ||
+ | |||
+ | {{ :pm:prj2023:drtranca:hardware_whack_a_mole.jpg?600 }} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | {{ :pm:prj2023:drtranca:whack_a_mole_joc.png?600 }} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Link demo: https://youtu.be/IChtsEEhekQ | ||
<note tip> | <note tip> | ||
Line 66: | Line 97: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | |||
+ | Sunt foarte mulțumită de rezultatele obținute deoarece am reușit să implementez exact ce mi-am propus. | ||
+ | |||
+ | Întregul proiect a fost o experiență plăcută: m-a ajutat să înțeleg mai bine noțiunile explicate la laborator și chiar am descoperit că proiectele cu Arduino nu sunt atât de complicate pe cât credeam. | ||
===== Download ===== | ===== Download ===== | ||
+ | |||
+ | <note tip> | ||
+ | Codul sursă: | ||
+ | {{ :pm:prj2023:drtranca:code_whack_a_mole.zip }} | ||
+ | </note> | ||
<note warning> | <note warning> | ||
Line 82: | Line 122: | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | Pentru interacțiunea cu display-ul lcd, am folosit biblioteca LiquidCrystal_I2C.h preluată de pe | ||
+ | https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html?search_query=lcd+i2c&results=18 | ||
+ | |||
+ | Pentru utilizarea întreruperilor: | ||
+ | https://forum.arduino.cc/t/multiple-hardware-interrupts-for-arduino-uno/571974/14 | ||
+ | |||
+ | Datasheet: https://ocw.cs.pub.ro/courses/_media/pm/atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf | ||
<note> | <note> |