Toma Mihai Dragos 332CB

Joc snake

Introducere

Ce face: Proiectul meu implică construirea unei plăci Arduino cu un display LCD și funcționalitatea de a juca jocul Snake, însoțit de efecte sonore/muzic fundal. Utilizatorul poate controla direcția șarpelui din joc folosind butoanele, iar difuzorul redă sunetele custom implementate de mine.

Scopul: Scopul proiectului meu este de a crea o experiență de divertisment interactivă și personalizată. Integrând jocul clasic Snake, îmi propun să combin pasiunea pentru tehnologie și programare cu o creativitatea.

Idea inițială: Ideea a pornit de la dorința mea de a explora posibilitățile Arduino și de a-mi pune abilitățile de programare la încercare într-un mod distractiv și creativ. Jocul Snake, fiind unul dintre primele jocuri pe care le-am jucat, a fost alegerea perfectă pentru acest proiect.

Utilitate personală: Consider că acest proiect este util pentru mine, deoarece îmi oferă o oportunitate de a învăța și de a experimenta cu tehnologia Arduino într-un mod practic și distractiv. În plus, finalizarea proiectului îmi va oferi o satisfacție personală și o realizare în domeniul hobby-ului meu.

Descriere generală

Ideea mea este in felul urmator: jucatorul are 4 buatone la dispozitie si apasa unul dintre ele pt a schimba directia sarpelui pe display. Vreau sa am o muzica de fundal care sa cicleze intre melodii, si poate chiar efecte sonore. MP3 player o sa aiba un sd card cu aceste sunete (muzica de fundal). O sa am si mai multe nivele in care sarpele se va misca cu viteze diferite. Un led RGB o sa zica la ce nivel esti prin 3 culori: albastru - 1, verde - 2, rosu - 3

Hardware Design

Piese:

  • 1 arduino uno
  • 1 LCD display (5110 Nokia)
  • 4 butoane
  • 1 breadboard
  • 1 difuzor
  • DFPlayer Mini MP3 Player
  • 1 LED RGB
  • fire
  • rezistente

Schema electrica

1. LCD 5110 Nokia

Acesta l-am conectat la niste pini digitali de pe arduinoul meu si am folosit libraria Adafruit_PCD8544 pt a citi informatia si a da diferite outputuri pe ecranul meu. Pini folositi de pe arduino sunt: D2-D6 5 pini digitali pt a initaliza LCD, unul pt alimentare VCC, unul pt ground si unul de lumina pe care l-am conectat la 3.3v impreuna cu cel de VCC (merge si la 5v, dar am pus la 3.3v)

2. Cele 4 butoane

Aici am 4 butoane cu cate 2 pini. Unul il conectez la pinul analog pe care il convertesc la digital si celalat in ground din breadboard (o sa se vada in poza). Pini folositi A0-A3

3. DFPlayer Mini MP3 Player

Am conectat 5 pini aici: TX si RX pe 10 si 11 si le-am configurat eu si speakerul in MP3 player. Am mai pus VCC si ground si inca un pin, BUSY, care ma ajuta sa vad cand s-a terminat o melodie

4. Difuzor

Acesta este conectat in MP3 player pt a putea pune muzica

5. LED RGB

Acest led se aprinde pentru fiecare nivel:

  • Nivel 1 - Albastru Pin 12
  • Nivel 2 - Verde Pin 13
  • Nivel 3 - Rosu Pin 2

Software Design

Mediu de Dezvoltare (IDE): Arduino IDE 2.3.2

Librării Utilizate:

  • DFRobotDFPlayerMini.h: Utilizată pentru controlul modulului DFPlayer Mini MP3.
  • SPI.h: Utilizată pentru comunicarea SPI cu diverse componente.
  • Adafruit_GFX.h: Oferă funcții grafice generale pentru afișaje.
  • Adafruit_PCD8544.h: Specifică pentru afișajul LCD Nokia 5110.
  • SoftwareSerial.h: Permite comunicarea serială pe alte pinii decât cei standard.

Structura pentru Snake:

  • Structura Point pentru a reprezenta coordonatele (x, y) ale șarpelui și ale mâncării.
  • Array snake pentru a stoca segmentele șarpelui.
  • Variabila snakeLength pentru a stoca lungimea actuală a șarpelui.
  • Variabila food pentru a stoca poziția mâncării.
  • Variabila direction pentru a stoca direcția de deplasare a șarpelui.

Algoritmi Implementați:

  • Plasarea Mâncării: Funcția placeFood() generează poziții aleatorii pentru mâncare și verifică dacă acestea nu se suprapun cu corpul șarpelui.
  • Gestionarea Intrării: Funcția handleInput() gestionează apăsările butoanelor pentru a schimba direcția șarpelui.
  • Mișcarea Șarpelui: Funcția moveSnake() actualizează pozițiile segmentelor șarpelui pe baza direcției.
  • Desenarea Jocului: Funcția drawGame() desenează șarpele și mâncarea pe afișaj.
  • Coliziuni: Funcția checkCollision() verifică coliziunile șarpelui cu pereții sau cu propriul corp și resetează jocul în caz de coliziune.
  • Niveluri și Muzică: Funcția checkMusicFinished() verifică starea de finalizare a melodiei și redă melodii specifice pentru fiecare nivel.

Funcții și Detalii Implementate

Funcția setup():

  • Inițializează comunicarea serială.
  • Inițializează modulul MP3 și afișajul LCD.
  • Configurează pinii pentru butoane și lumini RGB.
  • Apelează funcția start_game() pentru a inițializa jocul.

Funcția start_game():

  • Setează parametrii inițiali pentru joc (interval de mișcare, scor, upgrade).
  • Afișează mesajul “Start Game” pe ecran și redă o melodie de start.
  • Realizează un countdown de la 3 la 1.

Funcția placeFood():

  • Generează poziții aleatorii pentru mâncare, asigurându-se că nu se suprapun cu corpul șarpelui.

Funcția handleInput():

  • Detectează apăsările butoanelor și actualizează direcția șarpelui.

Funcția moveSnake():

  • Actualizează pozițiile segmentelor șarpelui în funcție de direcția curentă.

Funcția drawGame():

  • Desenează șarpele și mâncarea pe afișajul LCD.

Funcția checkCollision():

  • Verifică coliziunile șarpelui cu pereții și cu propriul corp, resetând jocul în caz de coliziune.

Funcția resetGame():

  • Resetează starea jocului și afișează mesajul “Game Over”.

Funcția checkMusicFinished():

  • Verifică dacă melodia curentă s-a terminat și redă melodiile corespunzătoare pentru fiecare nivel.

Funcția loop():

  • Gestionează intrările utilizatorului.
  • Actualizează starea jocului în funcție de scor și nivele.
  • Verifică coliziunile și mișcă șarpele la intervale de timp specifice.
  • Verifică și redă muzica adecvată pentru fiecare nivel.

Concepte folosite:

GPIO: (General Purpose Input/Output):

  • GPIO reprezinta o parte esentiala a interactiunii mele cu mediul exterior al placii Arduino. Am utilizat GPIO pentru a permite controlul butoanelor de directie si al LED-ului RGB, facilitand astfel interactiunea mea cu jocul. Prin intermediul pinilor GPIO, pot detecta apasarile butoanelor si pot controla luminozitatea si culoarea LED-ului in functie de evenimentele din

UART:

  • Comunicatia seriala este un aspect crucial al proiectului meu, iar UART este modalitatea prin care realizez aceasta comunicare intre Arduino si player-ul MP3 DFPlayer Mini. Folosind portul serial software si biblioteca dedicata, pot trimite si primi comenzi catre player-ul MP3, controland astfel redarea melodiilor si volumul.

Timere:

  • Pentru a gestiona miscarea sarpelui si actualizarea starii jocului, am utilizat timere pentru a programa actiuni periodice. Aceste timere imi permit sa controlez intervalul de timp in care se misca sarpele si sa actualizez ecranul jocului in mod regulat, oferind o experienta fluida si placuta.

SPI (Serial Peripheral Interface):

  • SPI este un alt concept esential in proiectul meu, folosit pentru a comunica cu afisajul LCD Nokia 5110. Aceasta interfata seriala permite transferul rapid de date intre Arduino si LCD, facilitand afisarea informatiilor pe ecranul jocului. Folosind biblioteca Adafruit_PCD8544, am gestionat comunicarea SPI pentru a desena grafica jocului si pentru a afisa diverse mesaje si informatii.

Github:

https://github.com/TomaDragos1/Snake-Game

Rezultate obtinute

Concluzii

Un proiect cu adevarat captivant, in care am reusit sa aplic tot ceea ce am invatat la curs si in laborator. Mi-a placut in mod deosebit partea de hardware, cu toate provocarile pe care a trebuit sa le rezolv.

Jurnal

Timeline:

  • 15.04.2024 - Alegere tema proiect
  • 17.04.2024 - Cumparare piese
  • 03.05.2024 - Finalizare M1 (documentatia initiala)
  • 15.05.2024 - Asamblare piese si testarea lor
  • 16.05.2024 - Documentatie hardware
  • 22.05.2024 - Finalizare parte Software
  • 24.05.2024 - Documentatie software

Bibliografie

pm/prj2024/ccontasel/mihai_dragos.toma.txt · Last modified: 2024/05/27 01:38 by mihai_dragos.toma
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