Differences

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

Link to this comparison view

pm:prj2025:mdinica:alin_ioan.alexandru [2025/05/08 12:52]
alin_ioan.alexandru
pm:prj2025:mdinica:alin_ioan.alexandru [2025/05/28 13:27] (current)
alin_ioan.alexandru [Software Design]
Line 1: Line 1:
-{{:​pm:​prj2025:​mdinica:​schema_bloc_sah.png?​200|}}====== ​Electrionc ​Chess ======+====== ​Electronic ​Chess ======
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul ​constă în realizarea unei table de șah electronice ​pentru înregistarea jocurilor de șah în format virtual, oferind mai apoi posibiltatea ​de a analiza ​în mod facil jocul. +Proiectul ​Electronic Chess își propune ​realizarea unei table de șah electronice ​capabile să detecteze ​și să înregistreze automat mutările efectuate ​de jucători ​în timpul unei partideScopul principal este digitalizarea jocului fizic de șah pentru ​a facilita analiza ulterioară a jocurilor, oferind astfel o unealtă utilă pentru pasionații de șah care vor să își îmbunătățească strategia și stilul de joc.
-Pe langa acestea va oferit și un mod de joc single-player vs AI, pentru ​antrenamentul abilităților de șah.+
  
-Proiectul va fi util pentru toțiubitorii de șah care vor să își perfecționeze jocul.+Această platformă vine în sprijinul jucătorilor amatori șprofesioniști care doresc ​să revadă ​și să analizeze partidele jucate și să identifice greșelile comise.
  
 ===== Descriere generală ===== ===== Descriere generală =====
 +Laboratoare folosite: GPIO, Întreruperi,​ Timere, I2C.
  
-{{:​pm:​prj2025:​mdinica:​schema_bloc_sah.png?​200|}} 
  
-<note tip> +===Schema ​bloc:===
-O schemă ​bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.+
  
-Exemplu ​de schemă blochttp://www.robs-projects.com/​mp3proj/​newplayer.html +{{:​pm:​prj2025:​mdinica:​alin_ioan.alexandru:​schema_bloc_sah_big.png?​400|}} 
-</​note>​+ 
 +===Module hardware:​=== 
 +  * Tabla de șah fizică: 64 de senzori Reed Switch (câte unul pentru fiecare pătrățel),​ care detectează prezența pieselor. 
 +  * Multiplexoareutilizate pentru a reduce numărul de pini necesari pe microcontroller pentru citirea celor 64 de senzori. 
 +  * ESP32: microcontroller central ce gestionează toate operațiunile (citirea mutărilor, afișarea pe ecran, comunicarea cu aplicția android). 
 +  * LCD și butoane: interfață de utilizator pentru afișarea informațiilor și controlul meniului
 + 
 +===Module Software:​=== 
 +  * ESP32: citirea senzorilor, detectarea mutărilor, comunicarea cu aplicația Android și afișarea informațiilor pe LCD. 
 +  * Android: afișarea tablei în format digital, transmiterea controlului jocului către ESP32, recepționarea stării tablei de la ESP32. 
 + 
 +===Interacțiune între module:​=== 
 +  * Când jucătorul mută o piesă, senzorii Reed detectează poziția inițială și finală a mutării. 
 +  * Jucătorul apasă pe buton pentru a confirma mutarea. Starea tablei este salvată de ESP32. 
 +  * ESP32 transimte starea tablei către aplicția Android. 
 +  * LCD-ul afișează timpul rămas pentru fiecare jucător.
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-Listă de piese:+===Listă de piese:===
   * ESP32   * ESP32
   * 64x Reed Switch   * 64x Reed Switch
-  * 4x Multiplexor 16:1 +  * 4x Multiplexor 16:1 cd74hc4067 
-  * LCD +  * LCD cu modul I2C 
-  * Butoane+  * Buton 
 +  * Sursă 3.3V 
 +  * Breadboard 
 +  * Fire de legatură
  
-<​note ​tip+===Schema electrică:​=== 
-Aici puneţi tot ce ţine de hardware design+ 
-  * listă de piese +{{:​pm:​prj2025:​mdinica:​alin_ioan.alexandru:​schema_electrica.png?​700|}} 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.ghttp://​www.captain.at/​electronic-atmega16-mmc-schematic.png) + 
-  diagrame de semnal ​ +<​note>​ 
-  * rezultatele simulării+**Multiplexor 16:1 cd74hc4067** 
 +  * Pentru a reduce drastic numărul de pini necesari la ESP32 pentru scanarea celor 64 de senzori. 
 +  * Multiplexoarele sunt conectate similarMai jos este un exemplu pentru unul dintre ele. 
 +  * Pinii I0 I15 (canalele multiplexorului) sunt conectati la switch-urile Reed
 + 
 +^ Pin ^ Pin ESP32 ^ Descriere ^ 
 +| VCC | 3V3 | Alimentare | 
 +| GND | GND | Ground | 
 +| EN | GND | Enambel mux | 
 +| SIG | GPIO4 | Outputul MUX-ului | 
 +| S0 | GPIO5 | Selectie | 
 +| S1 | GPIO8 | Selectie | 
 +| S2 | GPIO27 | Selectie | 
 +| S3 | GPIO28 | Selectie | 
 +</​note>​ 
 + 
 +<​note>​ 
 +**LCD Cu modul I2C*
 +  * Ecranul va fi folosit pentru afișarea timpului rămas pentru fiecare jucător. 
 + 
 +^ Pin ^ Pin ESP32 ^ Descriere ^ 
 +| VCC | 3V3 | Alimentare ecran | 
 +| GND | GND | GND pentru ecran | 
 +| SDA| GPIO7 | Linia de date | 
 +| SCL| GPIO14| Linia ceasului |
 </​note>​ </​note>​
  
 ===== Software Design ===== ===== Software Design =====
  
 +Mediu de dezvoltare: PlatformIO, Android Studio
 +
 +Biblioteci:
 +  * Arduino.h: Biblioteca de bază pentru programarea microcontroller-ului.
 +  * LiquidCrystal_I2C:​ pentru controlul LCD-ului
 +  * BluetoothSerial.h:​ pentru comunicarea cu aplicația Android.
 +  * Wire.h: pentru interfațarea I2C cu LCD-ul.
 +  * Ticker.h: pentru gestionarea temporizărilor.
 +
 +Funcționalități din laborator:
 +  * GPIO: Conectarea MUX-urilor.
 +  * Întreruperi:​ Pentru înregistrarea unei mutări odată cu apăsarea butonului.
 +  * Timere: pentru ceasul folosit în jocul de șah.
 +  * I2C: Pentru conectarea ecranului LCD.
 +
 +Funcționalități implementate pe ESP32:
 +
 +<​note>​
 +Inițializarea componentelor:​
 +  * LCD, multiplexoare,​ butoane, Bluetooth.
 +  * Configurarea întreruperii pentru butonul de confirmare mutare.
 +
 +Scanarea tablei:
 +  * Prin multiplexoare 16:1, se scanează în mod secvențial toți cei 64 de senzori Reed.
 +  * Se detectează pozițiile în care s-au făcut modificări (piese ridicate sau plasate).
 +
 +Detectarea mutărilor:
 +  * Se compară starea anterioară și cea curentă a tablei.
 +  * Se extrage perechea (poziție inițială, poziție finală) care corespunde mutării efectuate.
 +
 +Confirmarea mutării:
 +  * Mutarea este validată și înregistrată doar după apăsarea butonului fizic.
 +  * Se activează o întrerupere pe pinul butonului, care declanșează salvarea mutării.
 +
 +Comunicarea cu aplicația Android:
 +  * Starea actualizată a tablei este trimisă prin Bluetooth către aplicație.
 +  * ESP32 ascultă și comenzile primite (start, reset joc, schimbare mod, etc.).
 +
 +Afișarea informațiilor pe LCD:
 +  * Timpul rămas pentru fiecare jucător este afișat și actualizat la fiecare mutare.
 +  * Se pot adăuga mesaje de status sau indicații pentru jucători.
 +
 +Gestionarea timpului (timer digital):
 +  * Se folosește o funcție periodică pe bază de timer (Ticker) care scade timpul rămas la fiecare secundă.
 +  * Timerul se oprește și se pornește în funcție de mutarea jucătorului.
  
-<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>​ </​note>​
  
-===== Rezultate Obţinute =====+Funcționalități aplicație Android: 
 + 
 +<​note>​ 
 +Interfață grafică a tablei: 
 +  * Afișează în timp real poziția pieselor pe tabla virtuală. 
 +  *Simulează tabla fizică pe ecranul telefonului. 
 + 
 + 
 +Comunicare Bluetooth:​ 
 +  * Aplicația primește datele de la ESP32 (poziții piesă, mutări, ceas). 
 +  * Poate trimite comenzi precum: start, reset joc. 
 + 
 + 
 +Istoric mutări: 
 +  * Se salvează într-o listă vizibilă în aplicație toate mutările efectuate. 
 + 
 + 
 +Notificări și feedback: 
 +  * Notificare final joc (mat, remiză, abandon).
  
-<note tip> 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. 
 </​note>​ </​note>​
 +
 +Citire canal multiplexor:​
 +
 +<code cpp>
 +
 +int readMuxChannel(int channel) {
 +  // Set the address lines (S0 to S3)
 +  for (int i = 0; i < 4; i++) {
 +    digitalWrite(selectPins[i],​ (channel >> i) & 0x01);
 +  }
 +
 +  delayMicroseconds(10); ​ // Small delay to allow settling
 +
 +  // Read the value from the selected MUX channel
 +  return digitalRead(sigPin);​
 +}
 +
 +</​code>​
 +
 +Timer:
 +
 +<code cpp>
 +
 +volatile int timeRemaining = 0; // Init when game starts
 +volatile bool updateLCD = false;
 +
 +void tick() {
 +  if (timeRemaining > 0) {
 +    timeRemaining--;​
 +    updateLCD = true;
 +  }
 +}
 +
 +void startTimer(int secunde) {
 +  timeRemaining = secunde;
 +  timerTicker.attach(1.0,​ tick);
 +}
 +
 +void stopTimer() {
 +  timerTicker.detach();​
 +  timeRemaining = 0;
 +  updateLCD = true;
 +}
 +
 +</​code>​
 +
 +Comunicare prin bluetooth:
 +
 +<code cpp>
 +
 +if (SerialBT.available()) {
 +    String mesaj = SerialBT.readStringUntil('​\n'​);​
 +    mesaj.trim();​
 +    mesaj.toLowerCase();​
 +
 +    if (mesaj == "​start"​) {
 +      startTimer(5 * 60);  // 5 minute
 +      SerialBT.println("​Timer pornit"​);​
 +    } else if (mesaj == "​reset"​) {
 +      stopTimer();​
 +      SerialBT.println("​Timer oprit/​resetat"​);​
 +    } else {
 +      SerialBT.println("​Comanda necunoscuta"​);​
 +    }
 +  }
 +
 +</​code>​
 +
 +===== Rezultate Obţinute =====
 +
 +Funcționalități implementate cu succes:
 +  * Detectarea mutărilor pe tabla de șah
 +  * Interfață LCD funcțională pentru afișarea timpului
 +  * Mod de joc 1v1 complet operațional
 +  * Salvarea mutărilor în format digital
 +
 +Limitări:
 +  * Nu se detectează automat promovarea piesei – necesită intervenție de la utilizator
  
 ===== Concluzii ===== ===== Concluzii =====
pm/prj2025/mdinica/alin_ioan.alexandru.1746697942.txt.gz · Last modified: 2025/05/08 12:52 by alin_ioan.alexandru
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