This shows you the differences between two versions of the page.
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 partide. Scopul 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ți iubitorii de șah care vor să își perfecționeze jocul. | + | Această platformă vine în sprijinul jucătorilor amatori și 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ă bloc: http://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. | ||
+ | * Multiplexoare: utilizate 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.g. http://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 similar. Mai 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 ===== |