Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:bogdanc:led-roulette [2022/05/23 13:14]
george.iancu1405 [Hardware Design]
pm:prj2022:bogdanc:led-roulette [2022/05/23 20:10] (current)
george.iancu1405 [Rezultate Obţinute]
Line 17: Line 17:
 ===== Descriere generală ===== ===== 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. Pentru randomness, folosesc un magnetometru,​ care va da seed-ul pentru random. 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.+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. 
 + 
 +{{ :​pm:​prj2022:​bogdanc:​schema_bloc_roulette_v2.png |}}
  
-{{ :​pm:​prj2022:​bogdanc:​schema_bloc_roulette.png |}} 
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 30: Line 31:
   * 1 x Buzzer   * 1 x Buzzer
   * 1 x Ecran LCD 1602   * 1 x Ecran LCD 1602
-  * 1 x Modul magnetometru GY-273 ​ 
   * 1 x Potențiometru 10kΩ   * 1 x Potențiometru 10kΩ
   * 1 x Potențiometru 100kΩ   * 1 x Potențiometru 100kΩ
   * 1 x Placă prototipare cablaj PCB 10x10cm   * 1 x Placă prototipare cablaj PCB 10x10cm
   * Header de pini tată   * Header de pini tată
 +  * Mini Breadboard
   * Fire Dupont mamă-tată,​ mamă-mamă,​ tată-tată   * Fire Dupont mamă-tată,​ mamă-mamă,​ tată-tată
   * Placaj acrylic 3mm (pentru cutie)   * 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.
 +
 +{{ :​pm:​prj2022:​bogdanc:​schema_hardware.png?​800 |}}
 +
  
 ===== Software Design ===== ===== 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.
  
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +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.
-Care au fost rezultatele obţinute în urma realizării proiectului ​vostru. +
-</​note>​+
  
 +Link demo: [[https://​youtu.be/​0EE8IKlkDEo]]
 +
 +=== Galerie Foto (1) ===
 +{{:​pm:​prj2022:​bogdanc:​shift_registers.jpeg?​200 |}}
 +{{:​pm:​prj2022:​bogdanc:​leduri_lipite.jpeg?​200 |}}
 +{{:​pm:​prj2022:​bogdanc:​multe_fire.jpeg?​253 |}}
 +
 +=== Galerie Foto (2) ===
 +{{:​pm:​prj2022:​bogdanc:​lcd.jpeg?​200 |}}
 +{{:​pm:​prj2022:​bogdanc:​lcd_cutie.jpeg?​200 |}}
 +{{ :​pm:​prj2022:​bogdanc:​proiect.jpeg?​700 |}}
 ===== Concluzii ===== ===== 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 ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2022:bogdanc:roulette.zip|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. +
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +**6 Mai 2022:** Crearea paginii 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul ​de proiect progresul proiectului. + 
-</​note>​+**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 ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  * [[https://​www.ti.com/​lit/​ds/​symlink/​sn74hc595.pdf?​HQS=TI-null-null-alldatasheets-df-pf-SEP-wwe&​ts=1653305802916&​ref_url=https%253A%252F%252Fwww.alldatasheet.com%252F|Datasheet Shift Register SN74HC595N]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * [[https://​docs.arduino.cc/​tutorials/​communication/​guide-to-shift-out|Tutorial folosire shift registers Arduino]] 
-</note>+  ​[[https://​create.arduino.cc/​projecthub/​najad/​interfacing-lcd1602-with-arduino-764ec4|Tutorial folosire display LCD 1602]] 
 +  * [[https://​www.festi.info/​boxes.py/​|Site folosit pentru design-ul cutiei]]
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2022/bogdanc/led-roulette.1653300865.txt.gz · Last modified: 2022/05/23 13:14 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