LED Roulette

Nume: Iancu George

Grupa: 332CC

Introducere

Ce face?

Proiectul constă în implementarea jocului de ruletă, folosind 37 de LED-uri.

Ideea de la care am pornit

Îmi place domeniul jocurilor de noroc și când a trebuit să aleg tema pentru proiect, mi-au trecut prin cap două idei, aș putea spune definitorii pentru români: păcănele și ruletă. M-am documentat despre cum ar trebui să implementez cele două idei de proiect și mi s-a părut interesantă folosirea și înlănțuirea shift registers 74HC595. Decizia de a implementa ruleta a fost determinată și de faptul că acest proiect pare mai complicat din punct de vedere hardware decât celălalt și mai ușor din punct de vedere software, căutând o provocare în realizarea montajului.

De ce este util?

Oferă o alternativă a jocului clasic de ruletă, putând juca oriunde și oricând, cu sau fără bani, fără să ai nevoie de un crupier. De asemenea, mă ajută să aplic ce am învățat la PM, dar să învăț și chestii noi, în special pe partea de hardware și realizare a montajului.

Descriere generală

La apăsarea unui buton, LED-urile se aprind pe rând, simulând mișcărea bilei de ruletă. Tranziția de la un LED la altul este din ce în ce mai lentă, până la oprire, având un buzzer care emite un sunet pentru aceste tranziții. Viteza unui spin poate fi modificată folosind un potențiometru. Există și un ecran LCD, folosit pentru a afișa mesaje de ghidare a pariorului, dar și numerele rezultate din ultimele spin-uri. Jucătorii sunt înștiințați de finalul unui spin printr-un mesaj afișat pe ecranul LCD, dar și prin aprinderea și stingerea succesivă a LED-ului corespunzător numărului câștigător. Folosirea unui număr ridicat de LED-uri legate la plăcuța Arduino Uno R3 este posibilă prin înlănțuirea shift registers 74HC595.

Hardware Design

Listă de piese:

  • 1 x Arduino Uno R3 ATmega328P
  • 5 x Shift Register 74HC595
  • 37 x LED
  • 1 x Buton
  • 1 x Buzzer
  • 1 x Ecran LCD 1602
  • 1 x Potențiometru 10kΩ
  • 1 x Potențiometru 100kΩ
  • 1 x Placă prototipare cablaj PCB 10x10cm
  • Header de pini tată
  • Mini Breadboard
  • Fire Dupont mamă-tată, mamă-mamă, tată-tată
  • Placaj acrylic 3mm (pentru cutie)

Am realizat în Tinkercad o schemă pentru o versiune a proiectului, ce utilizează 16 LED-uri, în plus fiind necesare înca 3 shift registere care trebuie înlănțuite similar cu cele 2 din schema următoare. În plus, în realizarea montajului fizic, am renunțat la rezistențe, curentul de ieșire de la un shift register fiind suficient de mic pentru a utiliza LED-urile fără rezistențe.

Software Design

Pentru a lucra cu display-ul LCD 1602, am folosit biblioteca LiquidCrystal.h, importată din Arduino IDE, prin Library Manager.


setup():

  • Se inițializează pinii;
  • Se generează seed-ul pentru random;
  • Se curăță conținutul shift registerelor;
  • Se aprinde primul LED;
  • Se afișează pe LCD mesajul “Place your bets!”.

loop():

  • Se citește butonul;
  • Dacă este apăsat, pornește un spin, apelând funcția spin().

spin():

  • Se curăță conținutul shift registerelor;
  • Se afișează pe prima linie a LCD-ului mesajul “Spinning…”;
  • Se afișează pe a doua linie a LCD-ului ultimele 5 rezultate (cel mult 5);
  • Se citește potențiometrul montat pe cutie;
  • Se calculează numărul minim de tranziții pentru spin, folosind o formulă, în funcție de valoarea citită de la potențiometru;
  • Se generează numărul de tranziții pentru spin, folosind funcția random, în intervalul [min_moves, min_moves + 38);
  • Pe rând, realizează câte o tranziție, aprinzând succesiv LED-urile, iar buzzer-ul emite un sunet pentru fiecare tranziție;
  • Când s-a realizat un cerc complet (37 de LED-uri), se reaprinde primul LED și se trece iar la tranziții;
  • Durata unei tranziții crește de la una la alta;
  • La final, LED-ul câștigător se stinge și aprinde succesiv, iar pe LCD este afișat rezultatul, dar și ultimele 5 rezultate;
  • Avem un delay de 5 secunde, până se reafișează mesajul “Place your bets!”, alături de ultimele 5 rezultate.

clear_shift_registers():

  • Curăță datele din shift registere, folosind pinii de MASTER RESET, LATCH, CLOCK și INPUT.

put_last_result(int result):

  • Adaugă rezultatul primit ca parametru la finalul vectorului ce conține ultimele rezultate.

show_last_results():

  • Afișează ultimele 5 rezultate (sau mai puține), pe al doilea rând al ecranului LCD.

Rezultate Obţinute

După ceva muncă, multe lipituri, multe fire, am reușit să fac proiectul să arate ok și să funcționeze cu 32 de LED-uri, ultimele 5 nefuncționând din cauza shift register-ului. Mai jos e un link către demo, dar și o serie de poze, care evidențiază mai multe faze ale proiectului.

Link demo: https://youtu.be/0EE8IKlkDEo

Galerie Foto (1)

Galerie Foto (2)

Concluzii

A fost interesant să lucrez la acest proiect, am învățat și am aplicat chestii noi, cum ar fi: lipitul folosind Letcon, verificarea montajului folosind multimetrul, reducerea numărului de fire realizând legături directe între fire (fără breadboard). Mi-a plăcut că am folosit ceva ce credeam că nu o să mai folosesc după anul 1 (AutoCAD), pentru construcția cutiei. Acest proiect a fost o mare provocare, dar sunt mulțumit de rezultatul final, fiind apropiat de cel dorit, având un shift register cu probleme (5 LED-uri).

Download

Jurnal

6 Mai 2022: Crearea paginii

11 Mai 2022: Adăugare Introducere, Descriere generală și Hardware Design

14 Mai 2022: Realizare schemă + cod pe Tinkercad

15-16 Mai 2022: Lipit shift registere pe placuță, lipit LED-uri (catod comun), lipit display LCD, lipit buton, prima încercare de testare a montajului (fail parțial), construcție cutie

21-23 Mai 2022: Redus numărul de fire, fără a mai folosi breadboard pentru a multiplexa semnalele comune ale shift registerelor (am lipit firele între ele), lipit potențiometru pentru setarea vitezei de spin, realizarea montajului (aproape perfect)

23 Mai 2022: Finalizare documentație pagină wiki

Bibliografie/Resurse

pm/prj2022/bogdanc/led-roulette.txt · Last modified: 2022/05/23 20:10 by george.iancu1405
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