This shows you the differences between two versions of the page.
pm:prj2025:czlatea:andrei.ignat [2025/05/18 10:15] andrei.ignat [Hardware Design] |
pm:prj2025:czlatea:andrei.ignat [2025/05/25 19:24] (current) andrei.ignat [Rezultate Obţinute] |
||
---|---|---|---|
Line 29: | Line 29: | ||
<note tip> | <note tip> | ||
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ă. | 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: https://app.cirkitdesigner.com/project/c9b9278d-fca2-4413-96c0-09f02bc888e8 | ||
- | </note> | ||
- | |||
- | ===== Hardware Design ===== | ||
- | |||
- | <note tip> | ||
- | Componentele pentru proiect: | ||
- | - placuta Arduino Uno | ||
- | - fire mama-mama | ||
- | - 2 rezistente de 10 ohm | ||
- | - 2 pushbutton | ||
- | - un breadboard | ||
Descrierea componentelor: | Descrierea componentelor: | ||
Line 55: | Line 42: | ||
3. 2 rezistențe de 10 ohm | 3. 2 rezistențe de 10 ohm | ||
- | Rol: Limitează curentul care trece printr-un circuit. La 10 ohmi sunt destul de mici și pot fi folosite în testări simple sau pentru protecție minimă. | + | Rol: Limitează curentul care trece printr-un circuit. La 10 ohmi sunt destul de mici și pot fi folosite în testări simple sau pentru protecție minimă. |
- | 4. 2 pushbutton-uri | + | 4. 2 pushbutton-uri |
- | Rol: Sunt folosite ca dispozitive de intrare. Când apeși pe ele, trimit un semnal digital (HIGH/LOW) către Arduino. | + | Rol: Sunt folosite ca dispozitive de intrare. Când apeși pe ele, trimit un semnal digital (HIGH/LOW) către Arduino. |
5. Breadboard (placă de test) | 5. Breadboard (placă de test) | ||
Rol: Permite realizarea de conexiuni temporare între componente fără a fi nevoie de lipire. | Rol: Permite realizarea de conexiuni temporare între componente fără a fi nevoie de lipire. | ||
+ | |||
+ | Exemplu de schemă bloc: | ||
+ | {{:pm:prj2025:czlatea:schema_bloc.png?200|}} | ||
+ | </note> | ||
+ | |||
+ | ===== Hardware Design ===== | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | Componentele pentru proiect: | ||
+ | - placuta Arduino Uno | ||
+ | - fire mama-mama | ||
+ | - 2 rezistente de 10 ohm | ||
+ | - 2 pushbutton | ||
+ | - un breadboard | ||
+ | |||
+ | Arduino UNO | ||
+ | |||
+ | 1) 5V: Alimentare pentru componente externe, cum ar fi Display-ul TFT. | ||
+ | 2) GND: Comun pentru toate componentele, asigurând un potențial de referință comun. | ||
+ | 3) D2: Utilizat pentru a citi semnalul de la primul buton (Pushbutton). | ||
+ | 4) D7: Utilizat pentru a citi semnalul de la al doilea buton (Pushbutton). | ||
+ | 5) D8: Conectat la pinul A0/DC al Display-ului TFT pentru a controla modul de date/comandă. | ||
+ | 6) D9: Conectat la pinul RESET al Display-ului TFT pentru a reseta display-ul. | ||
+ | 7) D10: Conectat la pinul CS al Display-ului TFT pentru a selecta dispozitivul în comunicația SPI. | ||
+ | 8) D11: Utilizat pentru a transmite date (MOSI) către Display-ul TFT. | ||
+ | 9) D13: Utilizat pentru a transmite semnale de ceas (SCK) către Display-ul TFT. | ||
+ | |||
+ | Display TFT LCD 1.44" 128x128 | ||
+ | |||
+ | 1) VCC: Alimentare de la Arduino (5V). | ||
+ | 2) GND: Conectat la GND-ul Arduino. | ||
+ | 3) CS: Conectat la D10 pe Arduino pentru a selecta display-ul în comunicația SPI. | ||
+ | 4) RESET: Conectat la D9 pe Arduino pentru a permite resetarea display-ului. | ||
+ | 5) A0/DC: Conectat la D8 pe Arduino pentru a comuta între modul de date și modul de comandă. | ||
+ | 6) SDA/MOSI: Conectat la D11 pe Arduino pentru a primi date. | ||
+ | 7) SCK/CLK: Conectat la D13 pe Arduino pentru a primi semnale de ceas. | ||
+ | |||
+ | Pushbutton | ||
+ | | ||
+ | 1) Pin 3 (out): Conectat la GND și la D2 pe Arduino pentru a citi starea butonului. | ||
+ | 2) Pin 1 (in): Conectat la D2 pe Arduino pentru a citi starea butonului. | ||
+ | |||
+ | Pushbutton | ||
+ | |||
+ | 1) Pin 3 (out): Conectat la GND și la D7 pe Arduino pentru a citi starea butonului. | ||
+ | 2) Pin 1 (in): Conectat la D7 pe Arduino pentru a citi starea butonului. | ||
+ | |||
Line 73: | Line 108: | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | |||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | Bibliotecile folosite: |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | 1. <SPI.h> |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Motivație: |
- | * (etapa 3) surse şi funcţii implementate | + | Biblioteca SPI.h este necesară deoarece ecranul TFT utilizează protocolul de comunicare SPI (Serial Peripheral Interface) pentru transmiterea datelor. |
+ | |||
+ | Rol: | ||
+ | Asigură comunicarea rapidă și eficientă între microcontroller (de exemplu, Arduino) și display. | ||
+ | |||
+ | 2. <Adafruit_GFX.h> | ||
+ | Motivație: | ||
+ | Biblioteca Adafruit_GFX oferă o interfață grafică generală pentru desene, texte, forme și linii, compatibilă cu o gamă largă de display-uri. | ||
+ | |||
+ | Rol: | ||
+ | Oferă funcții pentru desenarea de linii, dreptunghiuri, texte etc. | ||
+ | Abstractizează partea grafică, permițând o codare simplificată și portabilă. | ||
+ | |||
+ | Exemplu de utilizare: | ||
+ | drawRect, drawLine, setCursor, print, setTextColor, etc. | ||
+ | |||
+ | 3. <Adafruit_ST7735.h> | ||
+ | Motivație: | ||
+ | Această bibliotecă este specifică pentru controlul display-urilor TFT care folosesc driverul ST7735, foarte popular în proiectele cu Arduino. | ||
+ | |||
+ | Rol: | ||
+ | Inițializează ecranul TFT. | ||
+ | Controlează afișajul color și dimensiunile acestuia. | ||
+ | Se integrează perfect cu Adafruit_GFX pentru redarea conținutului grafic. | ||
+ | |||
+ | void drawStartScreen() | ||
+ | Ce face: | ||
+ | Afișează pe ecran meniul de start, unde utilizatorul poate alege între „Vs Bot” și „Vs Player”. | ||
+ | |||
+ | Detalii: | ||
+ | |||
+ | Evidențiază opțiunea selectată cu un chenar roșu. | ||
+ | Afișează instrucțiuni pentru butoane: Select = schimbă opțiunea, OK = start joc. | ||
+ | |||
+ | void drawWinnerScreen(int winner) | ||
+ | Ce face: | ||
+ | Afișează un ecran de final cu rezultatul jocului: „X câștigă”, „O câștigă” sau „Remiză”. | ||
+ | |||
+ | Detalii: | ||
+ | Schimbă culoarea textului în verde pentru câștigător. | ||
+ | Afișează instrucțiuni pentru a relua jocul. | ||
+ | |||
+ | void drawBoard() | ||
+ | Ce face: | ||
+ | Desenează tabla de joc (3x3) și plasează X sau O în funcție de mutările făcute. | ||
+ | |||
+ | Detalii: | ||
+ | Desenează liniile care împart ecranul în 9 pătrate. | ||
+ | Evidențiază pătratul selectat cu un chenar galben. | ||
+ | Desenează „X” cu roșu și „O” cu albastru în pătratele ocupate. | ||
+ | |||
+ | int checkWinner() | ||
+ | Ce face: | ||
+ | Verifică dacă există un câștigător sau remiză. | ||
+ | |||
+ | Returnează: | ||
+ | 1 → dacă X a câștigat | ||
+ | 2 → dacă O a câștigat | ||
+ | 3 → dacă e remiză (tabla e plină) | ||
+ | 0 → jocul continuă | ||
+ | |||
+ | void botMove() | ||
+ | Ce face: | ||
+ | Realizează o mutare automată pentru bot (jucătorul O). | ||
+ | |||
+ | Strategie: | ||
+ | Verifică dacă botul poate câștiga → joacă acolo. | ||
+ | Dacă nu, verifică dacă trebuie să blocheze X → blochează. | ||
+ | Dacă nu, joacă pe poziții preferate (mijloc, colțuri etc). | ||
+ | Include: feedback sonor și redesenarea tablei. | ||
+ | |||
+ | void resetGame() | ||
+ | Ce face: | ||
+ | Resetează toate variabilele pentru a începe un nou joc. | ||
+ | |||
+ | Detalii: | ||
+ | Șterge tabla (board[]), resetează jucătorul și indicatorii (gameOver, winner). | ||
+ | Apelează drawBoard() pentru a afișa o tablă goală. | ||
+ | |||
+ | void setup() | ||
+ | Ce face: | ||
+ | Este apelată o singură dată la pornirea plăcii Arduino. | ||
+ | |||
+ | Inițializează: | ||
+ | Pinurile pentru butoane și buzzere. | ||
+ | Ecranul TFT (rotire, modul de inițializare). | ||
+ | Afișează ecranul de start (drawStartScreen()). | ||
+ | |||
+ | void loop() | ||
+ | Ce face: | ||
+ | Este funcția care rulează în buclă continuu și gestionează logica principală a jocului. | ||
+ | |||
+ | Structură logică: | ||
+ | Dacă jocul nu a început: permite selectarea modului de joc. | ||
+ | Dacă jocul s-a terminat: permite revenirea la ecranul de start. | ||
+ | Dacă jocul e activ: | ||
+ | Citire buton SELECT → mută cursorul pe tablă. | ||
+ | Citire buton OK → plasează X sau O. | ||
+ | Verifică dacă există câștigător sau remiză. | ||
+ | Dacă e modul Vs Bot și e rândul lui → apelează botMove(). | ||
+ | |||
+ | |||
+ | În proiectul Tic-Tac-Toe cu ecran TFT și butoane, optimizările au fost realizate pentru a îmbunătăți: | ||
+ | -Viteza de reacție și claritatea interfeței | ||
+ | -Ușurința în utilizare | ||
+ | -Citirea clară a codului | ||
+ | -Reducerea resurselor folosite (memorie, sunete inutile etc. | ||
+ | |||
+ | |||
</note> | </note> | ||
Line 86: | Line 232: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Rezultate obținute in proiect. |
+ | https://youtube.com/shorts/mDymTbDc0fk?si=P2lqlXAzB6K4TqPN | ||
</note> | </note> | ||
- | ===== Concluzii ===== | ||
- | |||
- | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | 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ă ;-). | + | Schelet de cod |
- | + | {{:pm:prj2025:czlatea:pm1.zip|}} | |
- | 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> | </note> | ||