Table of Contents

Matrix Memory Game

Introducere

Ce face?


Antrenează mintea jucătorilor pe baza unui număr vast de dificultăți. Ideea jocului este sa ții minte toate punctele de pe matricea led 8×8 care s-au iluminat și de asemenea și ordinea lor. Jucătorul are la dispoziție o matrice de butoane 4×4 mapata 2×2 cu matricea de leduri.

Care este scopul lui?

Scopul este de a crea un joc rapid, care poate fi pentru toți oamenii care vor intr-o perioada scurta sa isi folosească creierul într-un mod interactiv.

Care a fost ideea de la care am pornit?

În ultimul timp mă joc destul de mult pe o platforma de jocuri unde sunt întrunite toate aceste fast-games (se numește WAM.app, are integrat și monetizare crypto) care au ca scop sa nu iti ocupe mult timp și sa te tina în priza. Am simțit însă lipsa fix acestui joc așa ca îmi doresc sa îl implementez eu.

De ce cred ca este util pentru altii si pentru mine?

Pentru mine ar fi util întrucât aș putea sa îmi customizez un joc care stimulează memoria exact așa cum vreau eu. De asemenea îmi doresc sa introduc și altora aceasta plăcere de a-și oferi un moment de divertisment într-un mod interactiv.

Descriere generală

Jocul începe prin a afișa pe LCD un meniu din care jucătorul poate selecta dificultatea, pe o scara de la 1 la 4. Alegerea nivelului este făcută prin butoanele aflate pe matricea 4×4 de butoane într-un mod cât mai interactiv, adică butoanele de jos ale matricii o sa fie în ordinea de la stânga la dreapta, dificultatea selectata. O sa înceapă un countdown pana sa înceapă runda și apoi pe baza unui algoritm de randomizare, în funcție de nivelul selectat, o sa se lumineze matricea într-un mod asincron.
Dacă jucătorul reușește sa se ia după modelul afișat, evenimentul va fi anuntat printr-o melodie de victorie generata de buzzer si un mesaj de felicitare pe ecranul LCD. Daca jucatorul greseste, runda este resetata, acest lucru fiind anuntat printr-o melodie “de fail” si un mesaj afisat pe ecranul LCD.
Jocul se poate reseta folosindu-se butonul de reset de pe placuta arduino.

Hardware Design

Lista de piese

- Arduino UNO CH340
- Breadboard
- Matrice LED 8×8 OKY3523
- Matrice de butoane 4×4
- Ecran LCD 16×2 IIC/I2C
- Fire de legatura
- Buzzer pasiv 5V

Schema electrica

Software Design

- Pentru programarea pe microcontroller, am folosit Visual Studio Code impreuna cu extensia PlatformIO.
- Pentru folosirea LCD-ului 16×2, am utilizat biblioteca externa LiquidCrystal_I2C, pentru matricea de LED-uri biblioteca LedControl iar pentru matricea de butoane, biblioteca Keypad.

Implementarea software a fost gandita in totalitate de mine fara sa ma inspir din alte resurse. In functia loop() am 2 cazuri, cea in care trebuie sa selectez nivelul jocului si cea in care nivelul a inceput si placuta Arduino fie trebuie sa afiseze modelul pentru jucator, fie trebuie sa astepte input de la jucatorul care trebuie sa reproduca pattern-ul care a fost afisat.
De mentionat faptul ca matricea de LED-uri este 8×8 in timp ce matricea de butoane este de 4×4, astfel facandu-se o mapare 2×2 pentru fiecare buton.
In setup() initializez pinii corespunzatori, pornesc ecranul LCD, pornesc matricea de LED-uri.
In loop() verific daca starea jocului este de a astepta input pentru selectarea nivelului sau daca sunt in timpul jocului. Daca sunt in timpul jocului prima data afisez secventa de LED-uri generata random, dupa aceea astept ca jucatorul sa apese butoanele. Daca greseste un buton, jocul se opreste si se arata prin toate mijloacele de output acest lucru, altfel, jucatorul daca introduce toata combinatia corecta, este felicitat la fel prin toate mijloacele de output posibile. Jocul se reia de la pasul principal.

Rezultate Obţinute


Un rezultat evident al acestui proiect, un joc home-made pe care o sa il tin pe birou mereu cand o sa doresc sa ma destresez de la temele de la facultate.
Am invatat sa fiu mai organizat, challenge-ul principal fiind wire management-ul proiectului.

Demo

Link demo YouTube

Concluzii

Am reusit sa realizez jocul pe care mi l-am propus, fiind o experienta interesanta imbinand hardware-ul cu software-ul. Daca as fi folosit o placuta Arduino mai mare, cu mai multi pini disponibili, as fi putut sa implementez acelasi joc doar ca in 2 persoane.
Dupa 4 ore de incercare de a monta tot proiectul intr-o carcasa si neajungand decat sa rup cateva fire, am ajuns la concluzia ca trebuie sa apreciez mai mult fiecare obiect care contine microprocesoare pentru ca e o munca infernala sa faci cablarea intr-un mod eficient.

Download

Arhivă cod sursă

Jurnal

19.04.2022 - Achizitionare pieselor necesare
21.04.2022 - Realizare pagina Wiki - Introducere, Descriere Generala
23.04.2022 - Implementare proiect fara buzzer intrucat nu am reusit sa il fac sa produca sunetele melodiilor pe care le-am ales
26.04.2022 - Am schimbat melodia de victorie si am mai adaugat informatii pe Wiki
01.05.2022 - Am incercat sa fac o cutie si am ajuns sa rup o mare parte din fire
05.05.2022 - Am cablat astfel incat sa fie in urmatoare ordine de jos in sus: matrice butoane, breadboard, matrice led, ecran lcd.
10.05.2022 - Retusuri wiki
24.05.2022 - Incarcare demo

Bibliografie/Resurse

Export to PDF
- https://www.youtube.com/watch?v=q9YC_GVHy5A&t=481s
- https://www.youtube.com/watch?v=AAiDwBKs9uE
- https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library