Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul presupune un robot care joaca roulul de dealer de blackjack. Acesta va arunca carti in reprize, iar jucatorii vor interactiona cu acesta prin intermediul unui display si al unor butoane (ask for card, stop etc).
Scopul acestuia este de a oferi jucatorilor o modalitate de a practica jocul de blackjack, fara a fi nevoie sa isi mai bata capul cu impartirea cartilor si numararea punctelor.
Ideea mi-a venit in timpul unui joc de blackjack cu prietenii, cand am observat ca jocul ar putea fi mai interesant daca as avea un dealer personal, care sa faca treaba in locul nostru. Astfel, pe langa utilitatea proiectului in sine (invat cum sa construiesc un robot), acest proiect va avea si o utilitate personala, deoarece il voi putea folosi in timpul liber.
Robotul va cuprinde o platforma pe care vor fi asezate cartile, precum si un motor care le va arunca, prin rotirea unei suprafete cu coeficient de frecare mare. Motorul va fi actionat prin intermediul unui driver de motor. Ordinea cartilor din pachet va fi introdusa anterior, prin intermediul unui grup de butoane, pentru a permite placutei sa cunoasca starea in care se afla la un anumit moment din joc. Afisajul si butoanele vor fi programate similar cu cele din laborator.
Regulile jocului sunt destul de simple. Jucatorul primeste doua carti la inceput, iar apoi mai poate cere cate o carte, in functie de ce a primit. Scopul este de a face o suma cat mai mare cu cartile pe care le are in mana, fara a depasi insa suma 21. Cartile reprezinta numarul inscris pe ele, cu exceptia figurilor, care au toate valoarea 10. Asul este mai special, el poate fi atat 1, cat si 11, in functie de cum este mai bine pentru jucator.
La componenetele de mai jos se adauga si componentele de baza [0]
Componenta | Cantitate | Model |
---|---|---|
Motor DC | 1 | PPN13PB12C |
Tastatura | 1 | Matrice 4×4 |
Display | 1 | LCD 1602 |
Interfata | 1 | I2C |
Suport carti | 1 | - |
Roata abraziva | 1 | - |
Driver de motor | 1 | L298N |
Sursa de tensiune | 1 | - |
Cod dezvoltat in editorul Sublime.
Folosirea bibliotecii[1] pentru interfata I2C a LCD-ului.
Am urmarit aceste[2] instructiuni pentru folosirea unui modul de switch-uri in matrice 4×4.
Am folosit intreruperi pentru tratarea apasarilor butoanelor. Pentru a putea diferentia utilitatea apasarii unui anumit buton, am folosit un automat de stari, in functie de care se ia o anumita decizie. Feedback-ul programului este transimis catre utilizator prin intermediul display-ului. Utilizatorul este indrumat catre ceea ce trebuie sa faca pentru a putea folosi jocul.
In urma proiectului am reusit, prin mai multe incercari, sa gasesc o tensiune, o presiune ce trebuie aplicata asupra pachetului, precum si un numar optim de carti care pot fi asezate in suport in asa fel incat motorul sa poata arunca cu probabilitate cat mai mare o singura carte la un moment dat. De asemenea, am putut reduce o mare parte din erori in software, prin functia de interogare a utilizatorului cu privire la primirea cartii.
Sursa reglabila de tensiune a fost foarte utila in gasirea tensiunii optime ce trebuie aplicata motorului (15V).
Inainte de inceperea jocului, trebuie introduse cartile, in ordinea in care vor fi impartite, folosind tastatura. Fiecare buton are urmatoarea semnificatie, la acest nivel:
Buton | Semnificatie |
---|---|
1 | Invalid |
2 | 2 |
3 | 3 |
A | As |
4 | 4 |
5 | 5 |
6 | 6 |
B | Popa |
7 | 7 |
8 | 8 |
9 | 9 |
C | Dama |
* | Hitme |
0 | 10 |
# | Stop |
D | Juvet |
Dupa introducerea cartilor in memoria microcontroller-ului, trebuie selectat un numar de jucatori (2 sau 3), iar apoi jocul incepe.
Dealerul va impartii cate o carte, interogand mereu jucatorii cu privire la primirea acesteia. Jucatorul trebuie sa raspunda cu * sau # pentru a confirma sau cu 1 pentru a cere reimpartirea cartii, in cazul in care aceasta nu s-a desprins din pachet.
Dupa ce fiecare jucator a primit doua carti, acestia vor avea posibilitatea ca, pe rand, sa mai ceara carti (#) sau sa se opreasca (*). Daca suma cartilor lor depaseste 21, ei vor fi scosi din joc. La final, ecranul va afisa indicele jucatorului care a castigat, precum si valoarea cu care acesta a castigat, intre paranteze. Dupa 5 secunde, jucatorii vor fi intrebati daca vor sa continue jocul, cu cartile existente in continuare in pachet.
In urma realizarii acestui proiect am invatat sa construiesc un microcontroller, sa ii atasez diferite module, sa caut si sa inteleg modul in care aceste module pot fi folosite, sa actionez un motor in curent continuu, sa multiplexez switch-uri intr-o forma matriceala, dar si sa aranjez toate aceste module intr-un mod optim si placut vizual. Pe partea de software, am exersat intr-un mod practic folosirea intreruperilor.
In concluzie, sunt fericit ca am putut sa construiesc un dispozitiv final, functional, pe care il pot folosi ori de cate ori voi dori sa joc Blackjack. A fost o experienta placuta din care am avut multe de invatat.
In final, as vrea sa ii multumesc unchiului meu pentru ajutorul oferit in construirea suportului pentru carti si a suportului pentru module.
- Imi aleg acest proiect din pasiune pentru jocul de Blackjack, dar si pentru ca poate folosi ceea ce am invatat pe parcursul semestrului (butoane, LCD, controlarea unui motor). Ma inspir din acest videoclip[4]
- Construiesc placa de baza, cu diferite impedimente (am pus condensatorii in locul gresit, incerc sa ii scot, se infunda gaurile cu fludor, reusesc pana la urma sa le desfund si sa pun condesatoarele in mod corect)
- Cumpar componentele de care am nevoie (15 butoane, LCD si niste fire, dar si un driver de motor)
- Termin suportul de carti cu motorul atasat, folosind ideile din videoclip (motorul trebuie sa fie la marginea cartilor, cartile trebuie impinse de jos in sus)
- Imi dau seama ca driver-ul de motor achizitionat nu are documentatie pe internet, il schimb cu un L298N, mult mai bine documentat.
- Folosesc o sursa reglabila de tensiune, pentru a putea gasi mai usor tensiunea optima pentru aruncarea unei singure carti.
- Imi dau seama ca atat de multe butoane sunt greu de fixat pe o placa de test, fara a fi incomodat de firele emergente. La sugestia unui coleg, folosesc o matrice 4×4 de butoane, multiplexate prin doar 8 pini.
- Pentru a usura programarea LCD-ului, achizitionez un LCD cu interfata I2C, dupa ce primul LCD a fost stricat in urma testelor.
- Dupa testarea individuala cu succes a fiecarui modul, prind toate aceste module pe un singur suport, de unde jucatorii vor putea interactiona cu jocul.
- Incep implementarea software; folosesc intreruperi pentru tratarea apasarii butoanelor, stari pentru interpretarea acestora, si busy-waiting pentru revenirea la flow-ul programului.