This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:dice [2026/05/23 18:36] andrei.cotiga [Rezultate Obținute] |
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 139: | Line 140: | ||
| * 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). | * 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. | + | * 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ă. | + | * 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. | + | * 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ă. | + | * 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: | 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. | + | * 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. | + | * 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. |
| - | necesitatea folosirii unor zaruri cu un contrast clar (ex. puncte închise la culoare pe fundal deschis) pentru o detecție optimă. | ||
| ===== 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 barbut, rezultâ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** şi **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 și 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/) | ||