Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:dice [2026/05/23 18:20]
andrei.cotiga [Software Design]
pm:prj2026:ciprian.popescu0411:dice [2026/05/23 18:43] (current)
andrei.cotiga [Hardware Design]
Line 21: Line 21:
 * Servomotor SG90: Acționează mecanic paharul pentru a amesteca zarurile fizice prin mișcări scurte și agresive la comanda microcontroller-ului.  ​ * Servomotor SG90: Acționează mecanic paharul pentru a amesteca zarurile fizice prin mișcări scurte și agresive la comanda microcontroller-ului.  ​
 * Ecran LCD 2004 (sau 1602) cu modul I2C: Afișează meniurile, rândul jucătorilor,​ instrucțiunile defilante, punctajul și mesajul cu câștigătorul jocului.  ​ * Ecran LCD 2004 (sau 1602) cu modul I2C: Afișează meniurile, rândul jucătorilor,​ instrucțiunile defilante, punctajul și mesajul cu câștigătorul jocului.  ​
 +
 * 2 x Module Programator FTDI (CP2102/​CH340):​ * 2 x Module Programator FTDI (CP2102/​CH340):​
     * **Programatorul 1:** Folosit pentru a încărca codul, pentru comunicația serială și pentru a alimenta partea logică (ESP32-CAM și LCD).     * **Programatorul 1:** Folosit pentru a încărca codul, pentru comunicația serială și pentru a alimenta partea logică (ESP32-CAM și LCD).
Line 69: Line 70:
 | Camera OV2640 | Panglica FPC (24 pini) | Conector FPC dedicat pe placa ESP32-CAM | | Camera OV2640 | Panglica FPC (24 pini) | Conector FPC dedicat pe placa ESP32-CAM |
  
-Deoarece placa ESP32-CAM nu dispune de o mufă USB integrată pentru alimentare și programare, s-a optat inițial pentru utilizarea unui modul FTDI. Totuși, dinamica proiectului a impus o regândire a distribuției de curent. Servomotorul SG90, configurat să execute mișcări violente și bruște de 160 de grade pentru a amesteca eficient zarurile în paharul de plastic, generează vârfuri masive de consum de curent (aprox. 1 Amper la fiecare inversare de sens).+Deoarece placa ESP32-CAM nu dispune de o mufă USB integrată pentru alimentare și programare, s-a optat inițial pentru utilizarea unui modul FTDI. Totuși, dinamica proiectului a impus o regândire a distribuției de curent. Servomotorul SG90, configurat să execute mișcări violente și bruște de 120 de grade pentru a amesteca eficient zarurile în paharul de plastic, generează vârfuri masive de consum de curent (aprox. 1 Amper la fiecare inversare de sens).
  
 Pentru a preveni fenomenul de "​brownout"​ (resetarea plăcii din cauza lipsei de curent), arhitectura breadboard-ului a fost împărțită într-un sistem hibrid cu două circuite de 5V izolate, susținute de două porturi USB distincte, dar având masa (GND) comună: Pentru a preveni fenomenul de "​brownout"​ (resetarea plăcii din cauza lipsei de curent), arhitectura breadboard-ului a fost împărțită într-un sistem hibrid cu două circuite de 5V izolate, susținute de două porturi USB distincte, dar având masa (GND) comună:
Line 87: Line 88:
  
   * Demo joc: https://​www.youtube.com/​watch?​v=VLBmq61MyY0   * Demo joc: https://​www.youtube.com/​watch?​v=VLBmq61MyY0
-  * github: ​TODO+  * github: ​https://​github.com/​cotigamihnea/​diceandroll
  
 Proiectul este structurat într-o arhitectură de tip Client-Server și folosește două medii de dezvoltare distincte: PlatformIO (C++) pentru logica hardware și controlul microcontroller-ului ESP32-CAM, și Python pentru procesarea de imagine (Computer Vision) rulată pe PC. Proiectul este structurat într-o arhitectură de tip Client-Server și folosește două medii de dezvoltare distincte: PlatformIO (C++) pentru logica hardware și controlul microcontroller-ului ESP32-CAM, și Python pentru procesarea de imagine (Computer Vision) rulată pe PC.
Line 131: Line 132:
 | requests | Realizarea de cereri HTTP (GET) către serverul ESP32 pentru obținerea statusului, descărcarea fotografiilor JPEG și trimiterea scorurilor. | | requests | Realizarea de cereri HTTP (GET) către serverul ESP32 pentru obținerea statusului, descărcarea fotografiilor JPEG și trimiterea scorurilor. |
 | time | Gestionarea pauzelor (sleep) pentru a permite zarurilor fizice să se stabilizeze înainte de capturarea imaginii și pentru a preveni supraîncărcarea serverului Wi-Fi cu cereri. | | time | Gestionarea pauzelor (sleep) pentru a permite zarurilor fizice să se stabilizeze înainte de capturarea imaginii și pentru a preveni supraîncărcarea serverului Wi-Fi cu cereri. |
-===== Rezultate Obţinute =====+===== Rezultate Obținute ===== 
 + 
 +Sistemul propus îndeplinește obiectivul principal de a automatiza complet aruncarea și arbitrarea unui joc cu zaruri, integrând cu succes acționarea mecanică, comunicarea IoT și viziunea artificială (Computer Vision). 
 + 
 +Rezultatele principale:​ 
 + 
 +    * problema resetărilor bruște (brownouts) ale plăcuței ESP32-CAM a fost eliminată complet prin proiectarea unei arhitecturi hardware cu alimentare duală (izolarea circuitului de forță al motorului de cel logic). 
 + 
 +    * algoritmul de Blob Detection din Python recunoaște zarurile cu o precizie ridicată, fiind imun la zgomot vizual (umbre, praf) datorită filtrelor de preprocesare (Blur, Normalizare) și calibrării stricte a parametrilor de formă și arie. 
 + 
 +    * problema memoriei tampon hardware a camerei OV2640 (livrarea unui "stale frame" din trecut) a fost rezolvată elegant printr-o tehnică software de golire a buffer-ului înainte de captura finală. 
 + 
 +    * interfața LCD 20x4 este interactivă și curată, oferind navigare prin dublu-click,​ animații de text defilant (marquee) și actualizări în timp real ale scorului. 
 + 
 +    * logica de arbitraj funcționează perfect în ambele moduri de joc (Free Roll și Barbut), gestionând automat rândul jucătorilor și decizia finală fără intervenție umană. 
 + 
 +Limitări așteptate:​ 
 + 
 +    * sensibilitate la iluminarea ambientală extremă; deși algoritmul normalizează contrastul, o schimbare drastică a luminii din cameră poate necesita recalibrarea camerei sau a scriptului Python. 
 + 
 +    * latență inerentă a fluxului de joc (aprox. 4-5 secunde pe aruncare) cauzată de timpii necesari pentru scuturarea mecanică completă, stabilizarea fizică a zarurilor și transferul imaginii prin protocol HTTP.
  
-<note tip> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. 
-</​note>​ 
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Acest proiect demonstrează o soluție practică și creativă de îmbinare a sistemelor integrate (embedded) cu algoritmii de analiză a imaginilor rulați pe o arhitectură externă. Delegarea sarcinii complexe de procesare video către un PC (Python/​OpenCV) permite sistemului ESP32-CAM să ruleze rapid și fără blocaje, ocupându-se exclusiv de sarcinile de timp real: achiziția datelor, controlul motorului, citirea butoanelor și actualizarea display-ului.
  
-<note warning>​ +Dezvoltarea interfeței duale hardware-software a transformat un simplu cititor de puncte într-o consolă interactivă de barbutrezultând ​un sistem robust care poate constitui oricând baza pentru automatizarea altor board games sau proiecte ​de robotică vizuală.
-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 ===== 
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +=== Resurse Hardware === 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** ​ş**Resurse Hardware**. + 
-</note>+    * ESP32-CAM & AI-Thinker: Documentația oficială și pinout-ul modulului ESP32-CAM pentru maparea corectă a conexiunilor și a alimentării duale. (https://​docs.ai-thinker.com/​en/​esp32-cam) 
 + 
 +    ​Modul I2C PCF8574 (LCD): Datasheet-ul expander-ului I/O pentru a înțelege adresarea (ex. 0x27) și remaparea pinilor SDA/SCL pe microcontroller. 
 + 
 +=== Resurse Software ​=== 
 + 
 +Cod Arduino 
 + 
 +    ​Arduino Core for ESP32: Referința oficială Espressif pentru funcțiile de bază (WiFi, WebServer, GPIO, Timers). (https://​docs.espressif.com/​projects/​arduino-esp32/​) 
 + 
 +    ​Biblioteca LiquidCrystal_I2C:​ Documentația bibliotecii folosite pentru afișarea textului static șimplementarea funcției custom de defilare (marquee) pe LCD-ul 2004(https://​github.com/​johnrickman/​LiquidCrystal_I2C) 
 + 
 +Cod Python
  
 +    * OpenCV (Python): Documentația modulului cv2, în mod specific secțiunea despre preprocesarea imaginilor (cv2.medianBlur,​ cv2.normalize) și configurarea algoritmului cv2.SimpleBlobDetector_Params pentru recunoașterea punctelor zarurilor. (https://​docs.opencv.org/​)
  
 +    * Python Requests: Documentația pentru manipularea cererilor HTTP (GET) și gestionarea timeout-urilor în comunicarea Client-Server. (https://​requests.readthedocs.io/​)
pm/prj2026/ciprian.popescu0411/dice.1779549642.txt.gz · Last modified: 2026/05/23 18:20 by andrei.cotiga
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