Whack a mole

Proiect realizat de: Voinea Miruna-Georgiana

Grupa: 334CB

Introducere

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.
  • Ideea de la care am pornit a fost aceea de a face un joc care să testeze atenția și coordonarea mână-ochi, iar Whack a mole mi s-a părut cea mai bună variantă.
  • Consider că acest proiect este util deoarece le oferă jucătorilor șansa de a-și testa abilitățile în timp ce se distrează.

Descriere generală

  • Spre deosebire de jocul tradițional, în loc de cârtițe vom avea led-uri, iar în loc să folosim un ciocănel, vom apăsa pe butoane.
  • Apariția unei cârtițe va fi semnalată de aprinderea unui led, iar pentru a câștiga puncte, jucătorul trebuie să apese butonul din dreptul led-ului respectiv.
  • Intervalele la care se aprind led-urile vor fi controlate cu ajutorul unui timer.
  • Pe măsură ce jocul avansează, scorul se va modifica și va fi afișat pe un LCD.

Hardware Design

Listă de piese:

  • Arduino Uno + Cablu
  • Display LCD cu interfață I2C
  • Butoane
  • Led-uri
  • Rezistori
  • Breadboard
  • Fire de legătură

Aici puneţi tot ce ţine de hardware 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.

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

Rezultate Obţinute

Proiectul este complet funcțional.

Link demo: https://youtu.be/IChtsEEhekQ

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

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

Codul sursă: code_whack_a_mole.zip

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

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

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2023/drtranca/whack_a_mole.txt · Last modified: 2023/05/29 10:23 by miruna.voinea
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