Table of Contents

Ruletă electronică

Introducere

Aceasta este o ruletă electronică menită să simuleze o ruletă de cazino. Are tot ce ar avea o ruletă normală de cazino, cu excepția roții care se rotește, și a bilei – motiv pentru care ruleta aceasta este electronică. Include o modalitate de a selecta pe ce pariezi, un acceptor și un dispensor de monezi, ”ruleta” și ”bila” (reprezentată printr-un strip circular de led-uri prin care se va simula traseul bilei cum se rotește), o modalitate de a vedea rezultatul pariului (LCD + difuzor), și o manetă minusculă pentru a lansa bila. Jocul este făcut pentru a fi jucat de maxim o persoană odată.

Scopul ruletei este de a putea juca acest joc și fără acțiunea mecanică în sine, și asta este și ideea de la care am pornit. Cred că este utilă deoarece acest set-up permite jucarea acestui joc fără să fie nevoie de un dealer care să se ocupe de el (pe scurt, se poate automatiza).

Descriere generală

Componente pentru functionalitatile principale: sursă de alimentare, acceptor de monezi, dispensor de monezi, difuzor, microcontroller, strip de Smart LEDs, senzor de îndoire, sticlă cu touch, LCD.

Acceptorul, dispensorul și microcontrollerul sunt conectate fiecare la sursa de alimentare.

Flow al interacțiunii componentelor: touch glass-ul (folosit pentru alegerea pariurilor) comunică prin UART cu microcontrollerul. Senzorul de îndoire (maneta de acțiune a “bilei”) transmite datele prin ADC. Microcontrollerul controlează ledurile folosind SPI (pentru a imita mișcarea bilei), și comunică cu difuzorul (PWM) și LCD-ul (I2C) pentru a arăta feedback-ul corespunzător (rezultatele jocului și pariului). Pentru tranzacțiile cu monezi, unitatea de control comunică cu acceptorul (UART) și dispensorul (GPIO) de monezi.

Schema bloc:

Hardware Design

Schema electrică:

Listă a pieselor:

Nr. Crt. Piesă Descriere
1 Alberici AL66S acceptor de monezi
2 Cube Hopper MKII dispensor de monezi
3 AT-1124-TWT-5V-2-R difuzor
4 Arduino Mega 2560 bazat pe ATmega2560
5 Strip de Smart LEDs RGB
6 FS-L-0055 senzor de îndoire
7 EETI eGalaxTouch sticlă cu touch
8 LCD -
9 Releu utilizat pentru Coin Hopper
10 Modul (MAX232) convertor de nivel TTL RS232 pentru sticla cu touch
11 Convertor DC-DC 12V → 5V/3A
12 Sursă de alimentare 12V

Conexiuni pini + detalii hardware:

Imagini cu hardware-ul:

Dovadă funcționare:

Se poate vedea că LCD-ul este pornit și afișează textul dorit, ceea ce arată că microcontrollerul comunică corect cu acesta.

Software Design

Mediul de dezvoltare: Proiectul a fost dezvoltat în mediul Visual Studio Code, folosind extensia PlatformIO și toolchain-ul avr-gcc.

Librării și surse third party:

Header Utilizare
<avr/io.h> accesul la regiștrii microcontrollerului ATmega2560
<util/delay.h> funcțiile delay_ms, delay_us
<avr/interrupt.h> sei(), cli(), macro-ul ISR()
<stdlib.h> rand(), srand(), strtol(), etc (funcții ajutătoare legate de logica ruletei)
<string.h> strlen(), strcpy(), etc (pentru procesarea comenzilor)
<ctype.h> isdigit(), isspace(), tolower(), etc (pentru procesarea comenzilor)
<stdio.h> snprintf() (formatarea mesajelor pe LCD)
<stdint.h> tipurile de date
”cctcom.h” pentru comunicarea cu acceptorul folosind protocolul cctalk. sursă: https://cctalktutorial.wordpress.com/
”ws2812.h” adaptat după librăria Adafruit Neopixel

Structura proiectului. Algoritmi și structuri folosite. Descrierea codului

Detalii suplimentare: Funcționalitatea proiectului a fost validată prin testări succesive pe parcursul implementării, și realizarea separată a codului pentru fiecare modul hardware în parte, urmată de testarea interacțiunii cu acesta înainte de integrarea codului în proiectul mare. Singurul senzor este cel de îndoire, și valorile între care operează acesta au fost detectate la începutul implementării printr-o bucată de cod separată (program individual) și apoi integrate în restul proiectului. Link video: https://drive.google.com/file/d/1YxeMvDDyLzt8izYvN4p_wdTzLu7mX2mg/view?usp=drive_link

Rezultate Obţinute

Rezultatele obținute: o ruletă funcțională, poate puțin instabilă structural (din cauza touch screen-ului care trebuie proptit vertical), ce poate fi folosită pentru a juca codul de acasă. Nu e nevoie să fie conectată la laptop pentru a juca jocul, are sursă de alimentare externă așa că poate fi pur și simplu băgată în priză și folosită.

Rezultat final:

Acceptor + dispensor:

Senzor de îndoire:

Concluzii

În concluzie, acest proiect a fost mult mai complicat decât mă așteptam să fie, în principal din punctul de vedere al codului (dar nici hardware-ul nu se lasă mult mai prejos). Altă concluzie ar fi că este o diferență foarte mare între ceva funcțional, ceva utilizabil și un joc care îți face plăcere să îl folosești. Aș spune că în momentul de față proiectul este funcțional, dar sunt multe alte feature-uri care mi-ar fi făcut plăcere să am timp să le adaug, precum mai multe sunete (melodie pentru lose, sunet de ping atunci cand se rotește luminița), o stare de idle în care să treacă aparatul atunci când nu e folosit mai mult timp la rând (cu o melodie de idle și eventual un dans pe care să îl facă ledurile), o modalitate de a forța norocul numerelor într-o direcție sau alta (cu mare părere de rău, nu am avut timp să fac asta, așa că aceasta este o ruletă onestă). Cu toate acestea, mi-a făcut plăcere să am în față un produs finit, funcțional.

Download

Codul: munteanu_andreea.zip

Bibliografie/Resurse

Resurse Hardware: datasheet-urile componentelor folosite

Resurse Software:

Export to PDF