Table of Contents

AVR Slot Machine

Introducere

Proiectul consta in implementarea unui slot machine functional pe placa de dezvoltare ATmega328P Xplained Mini. Ideea a pornit de la dorinta de a crea un joc interactiv care sa semene cat mai mult cu aparatele de tip pacanea din viata reala, folosind componente hardware accesibile si microcontrollerul AVR pe 8 biti.

Proiectul afiseaza animatii de spinning cu simboluri colorate pe un ecran TFT color de 1.8 inch, reda sunete realiste prin un modul MP3 dedicat (DFPlayer Mini) si ofera feedback vizual prin butoane arcade iluminate. Jucatorul poate alege miza, poate roti rolele si poate participa la un mini-joc de tip “Red or Black” dupa fiecare castig, exact ca la aparatele reale.

Scopul proiectului este sa demonstreze utilizarea eficienta a perifericelor microcontrollerului ATmega328P (SPI, UART, GPIO, Timere, PWM, EEPROM) intr-un produs fizic interactiv si atractiv vizual.

Proiectul este util ca exemplu de integrare hardware-software pentru aplicatii embedded cu interfata grafica, sunet si interactiune cu utilizatorul.

Descriere generală

Proiectul este structurat in mai multe module hardware si software care interactioneaza intre ele:

Modulul de afisare - Display TFT color 1.8 inch (ST7735S) conectat prin interfata SPI. Afiseaza simbolurile rolelor, animatia de spinning, creditele curente, miza selectata si mesajele de castig/pierdere.

Modulul de sunet - Modul DFPlayer Mini conectat prin UART (TX/RX). Citeste fisiere MP3 de pe un card microSD si le reda printr-un difuzor de 8 ohmi. Produce sunete diferite pentru spinning, castig, pierdere si jackpot.

Modulul de control - 4 butoane arcade iluminate (2 galbene, 2 verzi) conectate pe pinii GPIO ai microcontrollerului. Butoanele SPIN si BET+ sunt folosite in jocul principal, iar butoanele RED si BLACK sunt folosite in mini-jocul “Double or Nothing”.

Modulul de logica a jocului - Implementat in software pe ATmega328P. Gestioneaza starea jocului, genereaza numere aleatoare pentru simboluri, calculeaza castigurile si coordoneaza toate celelalte module.

Modulul de stocare persistenta - Memoria EEPROM interna a ATmega328P salveaza creditele curente si statisticile jocului (total spinuri, cel mai mare castig) chiar si dupa deconectarea alimentarii.

Schema bloc a interactiunii dintre module:

Hardware Design

Lista de piese

Componenta Cantitate Rol in proiect
ATmega328P Xplained Mini 1 Microcontroller principal
Display TFT color 1.8” ST7735S 1 Afisarea jocului si animatiilor
Modul DFPlayer Mini (TF-16P) 1 Redare sunete MP3 realiste
Difuzor ultra-slim 40mm 8 ohm 0.5W 1 Iesire audio
Card microSD (8GB) 1 Stocare fisiere audio MP3
Buton arcade 24mm galben 2 Butoane RED si BLACK (mini-joc Double or Nothing)
Buton arcade 24mm verde 2 Butoane SPIN si BET+ (joc principal)
Breadboard 830 puncte + fire dupont 1 Conexiuni hardware prototip
Rezistenta 1K ohm 1 Protectie pin RX DFPlayer Mini

Nota: LED-urile integrate in butoanele arcade necesita DC 12V si nu sunt folosite in acest proiect.

Software Design

Mediu de dezvoltare

Proiectul a fost dezvoltat folosind:

Librarii si surse 3rd-party

Structura codului

Codul este organizat modular in 4 perechi de fisiere header/sursa:

Algoritmi implementati

Debounce non-blocant: Fiecare buton are o structura proprie cu timestamp-ul ultimei schimbari de stare. La fiecare apel buttons_update() se verifica daca au trecut 40ms de la ultima schimbare — daca da, starea e considerata stabila. Flagul de edge e setat o singura data per apasare si consumat de game_run().

Masina de stari FSM: Jocul trece prin stari definite in enum GameState. Fiecare stare raspunde doar la evenimentele relevante ei, eliminand comportamente nedorite. Tranzitiile sunt clare si loggate prin Serial pentru debug.

Generator de numere pseudo-aleatoare: Seed-ul este generat la pornire din zgomotul analogic al pinului A0 (flotant) XOR cu micros() XOR cu creditele din EEPROM, pentru a asigura secvente diferite la fiecare pornire.

Probabilitati simboluri (din 20):

Animatie spinning cu decelerare: Primele SPIN_FRAMES-5 cadre ruleaza la interval constant (55ms). Ultimele 5 cadre incetinesc progresiv cu +35ms per cadru, simuland decelerarea rolelor reale.

Persistenta EEPROM: Creditele, numarul total de spinuri si cel mai mare castig sunt salvate in EEPROM la fiecare spin. La pornire se verifica un magic number (0xABCD) pentru a detecta primul boot si a initializa valorile default.

Tabel de castiguri:

Combinatie Multiplicator Castig la miza 5
7 - 7 - 7 x20 (JACKPOT) 100 credite
BAR - BAR - BAR x10 50 credite
STAR - STAR - STAR x5 25 credite
3x acelasi simbol x3 15 credite
2x acelasi simbol x1 recuperezi miza
Nimic x0 pierzi miza

Periferice AVR utilizate

Periferic Utilizare
GPIO (PORTD) Citire butoane arcade cu pull-up intern
SPI hardware (PORTB) Comunicatie cu display TFT ST7735S
UART software (SoftwareSerial) Comunicatie cu DFPlayer Mini
EEPROM intern Salvare persistenta credite si statistici
ADC (A0) Generare seed aleator din zgomot analogic
Timer (millis) Debounce non-blocant si animatii

Rezultate Obtinute

Proiectul a fost realizat complet si functional. Au fost atinse urmatoarele rezultate:

Concluzii

Proiectul a demonstrat integrarea mai multor periferice AVR intr-un produs interactiv functional. Principalele provocari intalnite au fost:

Proiectul poate fi extins cu iluminarea butoanelor arcade (necesita sursa de 12V separata), un ecran mai mare sau un modul Bluetooth pentru control wireless.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF