Table of Contents

Flappy Bird

Introducere

Flappy Bird este un joc arcade simplu, dar captivant, în care jucătorul controlează o pasăre ce trebuie să zboare printre obstacole (de obicei, tuburi verticale). Jocul este cunoscut pentru mecanica sa simplă: pasărea se ridică atunci când utilizatorul apasă un buton și coboară automat din cauza gravitației simulate. Scopul este să se evite coliziunea cu obstacolele, în timp ce jucătorul adună puncte.

Acest proiect constă în dezvoltarea unei versiuni mai simplificate a preacunoscutului joc Flappy Bird folosind concepte învățate în cadrul cursurilor și laboratoarelor de Proiectare cu Microprocesoare (PM), având la bază o plăcuță de Arduino și diverse componente electronice care vor forma dispozitivul final.

Comparativ cu versiunea originală, varianta mea a jocului nu se va folosi de gravitație în cazul în care jucătorul nu va mai apăsa pentru a face pasărea să zboare, ci poziția acesteia va rămâne pe loc. Controlul păsării se va baza pe folosirea unui joystick unde, pentru a ridica pasărea, maneta se va da în sus, iar pentru a coborî pasărea, maneta se va da în jos. Mai mult, jucătorul va putea apăsa un buton pentru a opri și reporni jocul, iar în cazul în care jucătorul pierde și are un scor destul de mare, poate să îl păstreze prin introducerea de la tastatură a numelui său, care o să apară apoi în meniul de high score, pe care îl putem accesa prin apăsarea altui buton.

Acest proiect îmi oferă oportunitatea de a aplica ceea ce am învățat până acum, îmbinând concepte de hardware și noțiuni de software, creând astfel o experiență interesantă și educativă pentru mine și distractivă pentru ceilalți sau chiar un punct de plecare pentru amatorii din domeniul electronicii.

Descriere generală

Rolul componentelor și interacțiunile între acestea:

Schema bloc a dispozitivului:

Hardware Design

Lista de componente ale proiectului:

  • Arduino UNO cu ATMega328P
  • Modul LCD SPI de 2.8” (240×320) cu driver ILI9341
  • 1 speaker 4 ohm, 3 W
  • Modul amplificator audio PAM8403 cu potențiometru
  • Modul joystick cu două axe XY HW-504
  • breadboards, butoane, LED-uri, cabluri, rezistențe

Bill Of Materials (BOM)

Denumire componentăLinkNr. bucăți
Arduino UNO R3Link Set Arduino1
ButoaneLink Set Arduino2
Rezistență 220 ohmLink Set Arduino2
Rezistență 10K ohmLink Set Arduino5
LED roșuLink Set Arduino1
LED verdeLink Set Arduino1
JoystickLink Joystick1
Amplificator Audio PAM8403Link Amplificator1
Boxa 40mm 3WLink Boxă1
Modul LCD 2.8'' cu SPILink Ecran LCD1

(Plăcuța, butoanele, rezistențele și LED-urile provin din același set și au același link)

Schema electrică:

Funcționalitatea hardware și pinii folosiți:

Toate componentele sunt conectate la Arduino UNO:

LCD:

Joystick:

Butoane:

Amplificator + Speaker:

LED-uri:

Laptop:

Asamblarea întregului circuit + testare funcționare piese (LCD):

Software Design

Implementarea software a jocului se poate găsi în secțiunea de Download.

Biblioteci folosite:

Meniul principal

Pasărea

Elemente de noutate

Față de versiunea originală a jocului, proiectul meu are câteva elemente în plus:

Funcționalități laborator

Am configurat butoanele conectate la pinul PD2, respectiv PD4, ca intrări și le-am activat rezistențele de pull-up. În cazul butonului de pe pinul PD2, i-am activat întreruperea externă care va avea loc pe falling edge pentru a gestiona schimbările de stare în joc:

Am configurat pinii PD5 și PD6 ca ieșiri PWM pentru controlul LED-urilor, utilizând modul Fast PWM cu un prescaler de 64.

Funcția fade_leds:

Alte funcționalități:

În cod, folosesc UART pentru a primi un nume de la utilizator printr-o conexiune serială.

Procesul se desfășoară astfel:

Folosesc Convertorul Analog-Digital pentru a citi poziția joystick-ului, astfel modificând poziția păsării:

Am folosit funcția tone() pentru a genera semnale audio atunci când am trecut cu bine de turnuri (am generat un semnal cu o frecvență ridicată timp de 100ms), dar și atunci când m-am lovit de acestea (am generat un semnal cu o frecvență mai scăzută timp de 100ms).

Am folosit în majoritatea codului protocolul SPI fiind necesar în afișarea întregului joc pe ecranul LCD.

De la afișarea meniurilor și până la desenarea pieselor jocului, anume pasărea și turnurile, toate acestea le-am realizat utilizând funcții legate de acest protocol.

Prin utilizarea variabilei game_state, în funcție de valoarea acesteia, pot să determin ce stare din joc să afișez în acel moment.

Optimizări:

Rezultate Obţinute

Link YouTube: FlappyBird

Concluzii

Proiectul a reprezentat o oportunitate excelentă de a îmbina cunoștințele teoretice și practice dobândite în timpul orelor de curs și laboratoarelor, punându-mi în valoare atât abilitățile software, cât și cele hardware. Realizarea efectivă a jocului a fost o experiență unică și captivantă, care mi-a permis să explorez interacțiunea dintre componentele fizice și software, ducând la un rezultat funcțional de care m-am putut bucura.

Download

Link GitHub: FlappyBird

Bibliografie/Resurse

Optimus Digital

Sigmanortec

Clește

ATmega328P Datasheet