Raluca-Elena RADU - PACMAN

Autorul poate fi contactat la adresa:

Introducere

Proiectul realizat reprezinta o versiune personalizata a renumitului joc Pacman. Ideea proiectului a fost conturata in urma unuia dintre laboratoarele de PM, atunci cand am vazut un joc implementat pe LCD si mi-a placut foarte tare cum arata. Ca orice joc, proiectul meu are scopul de a amuza si relaxa utilizatorul, facand astfel parte din aria divertismentului.

Descriere generală

Utilizatorul va controla un joystick, dictand directia de deplasare a caracterului Pacman pe o harta prestabilita, redata cu ajutorul unui LCD. Va exista o singura fantoma ce se va plimba intr-o zona cruciala, punand monopol pe singurul punct de acces intre cele doua jumatati ale hartii.In cazul in care Pacman se intalneste cu fantoma, va pierde jocul. Daca Pacman se loveste de unul dintre pereti va fi notificat si pe cale sonoara, prin intermediul unui sunet specific realizat de un speaker. Scopul jocului este evadarea lui Pacman din camera, care se realizeaza prin colectarea tuturor pac-points-urilor existente. La fiecare cateva secunde, scorul obtinut prin adunarea pac-points-urilor va fi updatat pe un afisaj cu LED-uri pe 7 segmente.

Schema bloc cu componentele hardware ale proiectului include joystickul (controlat direct de utilizator) ca input pentru ATMEGA ce va oferi 3 outputuri diferite : imaginea de pe LCD cu starea hartii si pozitiile actualizate constant ale lui Pacman si ale fantomei, sunetele produse de speaker, pentru a indica o comanda invalida din partea jucatorului (sunetele se produc atunci cand se incearca intrarea intr-un perete sau iesirea din perimetrul hartii) si afisarea scorului. Mai mult decat atat, schema sta si la baza implementarii software, deoarece primii pasi in scrierea de cod a reprezentat-o testarea perifericelor, pentru a ne asigura ca sunt intr-o conexiune buna cu ATMEGA si ca pot fi controlate.

Hardware Design

Lista de piese :

  - Kit de baza :
	* ATMEGA324A-PU
	* USB-B ( conector USB)   
	* Quartz 16 MHz
	* Dioda Zener
	* LED rosu              
	* Butoane 
	* K1X10WSL040
	* K2X10
	* Rezistente ( 100R, 470R, 1K5, 10K)
	* Condensatori ceramic (100nF, 15pF)
	* Soclu Microcontroller
	* Jumper
	
- Adaugiri:
	* LCD ILI9163 Negru  
	* Joystick 
	* Difuzor de 1 W
	* LED dual cu 7 segmente si Shift Register pentru afisaj
	* Placa de test universala
	* Fire de legatura (conexiune mama-tata)
	* Cablu USB AM la BM
	* Header de pini (barete)

Pentru a conecta joystickul sunt necesari 3 pini de ADC (orice pini din PA) si inca doua legaturi la GND, respectiv la VCC. Spekerul se va lega cu doua fire, unul la GND, iar cel de-al doilea la orice PWM (OC0A, OC0B etc … PD4 sau PD5 de exemplu). Ledul pentru afisaj este modelul 74HC595, iar in final am hotarat ca are nevoie de orice pini de GPIO, deci l-am legat arbitrar. LCD-ul ILI9163 l-am achizitionat de pe optimusdigital.ro unde am gasit o schema, reprezentand conectarea la un arduino. Initial am echivalat pinii si am respectat conexiunile ( CS → PB4, RESET → VCC, AO → PB1, SDA → PB5 (MOSI), SCK > PB7(SDA), LED → VCC). Ulterior, in timpul implementarii software am gasit o biblioteca pentru acest LCD, care a necesitat modificarea catorva pini (CS → PB0, RESET → PB1, AO → PB2).

Schema electrica (realizata in EAGLE) este urmatoarea:

Software Design

Dupa ce am terminat de lipit piesele pe placuta, am descarcat bootloaderul in laborator si apoi am folosit interfata grafica din arhiva primita tot la laborator pentru a comunica cu placuta, pe Windows. Am instalat Atmel Studio si l-am folosit pentru dezvoltare deoarece imi placea asemanarea cu Visual Studio. Am cautat pe internet biblioteci pentru interfatarea LCD-ului si a afisajului cu LED-uri pe 7 segmente cu Shift Register (sursele folosite sunt atasate mai jos). Pentru Joystick m-am documentat cum functioneaza si am inteles ca acesta foloseste ADC pentru a comunica datele, o coordonata pe X si una pe Y, fiecare cuprinsa intre (0, 1023). Conversia ADC am preluat-o din laboratorul 5 de PM si am folosit-o in codul meu. De asemenea, pentru Speaker am folosit functia speaker_morse din laboratorul 1.

Pentru implementarea propriu zisa a jocului am folosit o matrice de numere intregi codificate pe biti. Bitul 4 = 1 semnifica posibilitatea lui Pacman de a se deplasa la dreapta din casuta in care se afla, Bitul 3 la stanga, Bitul 2 sus, Bitul 1 jos. Ultimul Bit este rezervat pentru a indica daca la coordonatele respective se gaseste o steluta, adica un Pac-Point si este singurul bit din numerele din matrice ce sufera transformari pe parcursul algoritmului, fiind modificat in 0, atunci cand Pacman obtine steluta. Harta este desenata pe LCD cu drepturnghiuri colorate si cu stringuri din stelute, atat Pacman cat si fantoma sunt redate prin niste patratele. Totul se desfasoara cadru cu cadru, intr-un while 1, in care se citesc coordonatele de la joystick, se updateaza coordonatele personajelor, se deseneaza harta si se afiseaza scorul.

Rezultate Obţinute

Am realizat in mare masura tot ce mi-am propus la acest proiect, nu exista buguri in logica implementata, iar perifericele raspund dupa cum am vrut la comenzi. A fost un proiect interesant si provocator, care mi-a dat o stare foarte buna si m-a amuzat mai mult decat orice alta tema de pana acum.

8bs3vSKz-N0 bfzsc4poAQM NPF208cnh4g CPfbfFM1IGw

Concluzii

Singura modificare pe care as fi facut-o la acest proiect se refera la time managementul personal. De frica ca o sa ard ceva, am lasat totul pe ultima suta de metrii, cand a venit vorba de implementare. Ar fi trebuit sa verifica ca perifericele raspund la comenzi simple, se aprind, LCDul printeaza un string, speakerul scoate cel mai simplu sunet, joystickul poate apasa pe buton, imediat ce le-am lipit la laborator, si nu in penultima saptamana din semestru. Un alt lucru de mentionat, firele de legatura pot fi cateodata de o calitate foarte proasta.

Download

Jurnal

Sapt 9 : am lipit la laborator majoritatea pieselor din kitul de baza

Sapt 10: am terminat de lipit kitul de baza si placuta a fost testata la laborator

Sapt 11: am cumparat piesele aditionale, am lipit joystickul si am realizat schema electrica, care m-a ajutat sa inteleg mai bine cum urmeaza sa lipesc si sa conectez celelalte componente

Sapt 12: am lipit la laborator LCD-ul

Sapt 13: am conectat speakerul si afisajul cu LED

Sapt 13 (weekend) : implementarea soft

Bibliografie/Resurse

Biblioteca LCD ILI9163 libtft144

Interfatare LED cu 7 segmente cu Shift Register interfacing-shift-register-with-avr

Cumparare Hardware comanda

  • Documentația în format PDF
pm/prj2018/astratulat/raduraluca331cc.txt · Last modified: 2021/04/14 17:07 (external edit)
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