Table of Contents

Micro Invaders

Introducere

Prezentarea pe scurt a proiectului:

Descriere generală

Jocul este implementat pe microcontroller-ul ATmega328P și include următoarele funcționalități:

Hardware Design

Bill of Materials

Nr. crt. Nume componentă Specificații Cantitate
1 Arduino Nano Placă de dezvoltare bazată pe microcontroller-ul ATmega328P 1
2 Modul ecran LCD Modul LCD de 1.44'' cu SPI și Controller ST7735 (128×128 px) 1
3 Joystick analogic Modul joystick cu 2 potențiometre (axa X, axa Y) 1
4 Buton (Push button) Microîntrerupător tactil 1
5 Breadboard Placă de test 830 de puncte 1
6 Fire de conexiune Fire cu izolație PVC (22AWG) 1 set
7 Cablu USB Pentru alimentare și programare 1

Descriere componente

Pinout

Componentă Pin Componentă Pin Arduino Nano Port / Registru ATmega328P Descriere
Display LCD VCC 5V Alimentare logică ecran.
GND GND Masă circuit.
SCL Pin 13 PORTB (PB5) Hardware SPI Clock: Sincronizează transferul rapid de date.
SDA Pin 11 PORTB (PB3) Hardware SPI MOSI: Linie master-to-slave pentru trimis pixeli.
RES Pin 9 PORTB (PB1) Reset hardware la inițializarea ecranului.
DC Pin 8 PORTB (PB0) Data/Command: Schimbă starea între comenzi (0) și pixeli (1).
CS Pin 10 PORTB (PB2) Chip Select: Activează/dezactivează magistrala SPI pentru ecran.
BLK 3.3V Alimentare LED Backlight (lumină fundal).
Joystick 5V 5V Alimentare potențiometre interne.
GND GND Referință masă (0V).
VRx Pin A0 ADC0 (Canal 0) Convertor Analog-Digital: Citește poziția X (valori 0-1023).
VRy Pin A1 ADC1 (Canal 1) Convertor Analog-Digital: Citește poziția Y (valori 0-1023).
Push Button Pin 1 Pin 3 PORTD (PD3) Citire rapidă stare buton. Are Pull-up intern activat.
Pin 2 GND Închide circuitul la masă când butonul este apăsat.

Schematic

Demo

Link video: https://youtu.be/86-g_5LCc6M?si=7hPv4MY68I2BOmY2

Software Design

Mediu de dezvoltare

Aplicația a fost dezvoltată pe VS Code cu extensia PlatformIO.

Librării şi surse 3rd-party

Pentru controlul ecranului TFT și randarea primitivelor grafice, au fost utilizate următoarele librării externe:

Structuri de date

Algoritmi implementaţi

$$y = baseY + \sin(x \times 0.15) \times 8$$

Funcții implementate

Logica jocului, controlul perifericelor și randarea grafică sunt gestionate prin intermediul următoarelor funcții:

Rezultate Obţinute

Rezultatul final este o mini-consolă handheld construită pe un breadboard, cu un design compact. Ecranul, butonul și placa Arduino Nano sunt perfect integrate, singurele elemente care “ies în afară” fiind cablul USB și joystick-ul. Pe această platformă rulează un joc arcade, interactiv și suficient de provocator.

Link video: https://youtu.be/wmc5tNVgK2Y?si=Ei97VLyqL2z5He_Q

Concluzii

Implementarea hardware m-a provocat să mă gândesc mult mai bine la organizarea componentelor pe placă. Cu această ocazie, am învățat să folosesc letconul, fiind necesar să lipesc un header de pini pentru ecranul LCD. De asemenea, am tăiat și am dezizolat firele la dimensiuni cât mai mici pentru a obține o lizibilitate mai mare a circuitului, lucru care a făcut consola mult mai ușor de utilizat.

Partea software mi-a plăcut în mod deosebit deoarece am văzut ce înseamnă să programezi un joc de la zero pe un microcontroler și pe un ecran mic, de 128×128 pixeli. Librăriile utilizate au fost de mare ajutor pentru definirea și redarea elementelor grafice, oferind multe funcționalități de bază. Pe parcursul proiectului s-a resimțit destul de tare memoria limitată a microcontrolerului ATmega328P, fiind necesar sa gestionez resursele cu atenție. Codul final ocupă ~47% din memoria FLASH și ~17% din memoria RAM.

În final, consider că am reușit să obțin un proiect complet, care mi-a dezvoltat atât abilitățile practice, cât și cele de programare.

Download

Link Github: https://github.com/AlexStoianACS/Micro-Invaders

Export to PDF